summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.appveyor.yml9
-rw-r--r--.clang-format55
-rw-r--r--.gitignore3
-rw-r--r--.travis.yml45
-rw-r--r--AUTHORS.md12
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--DONORS.md42
-rw-r--r--SConstruct143
-rw-r--r--core/SCsub2
-rw-r--r--core/array.cpp2
-rw-r--r--core/bind/core_bind.cpp6
-rw-r--r--core/bind/core_bind.h2
-rw-r--r--core/class_db.cpp19
-rw-r--r--core/class_db.h10
-rw-r--r--core/color.h18
-rw-r--r--core/command_queue_mt.cpp24
-rw-r--r--core/command_queue_mt.h1507
-rw-r--r--core/compressed_translation.cpp2
-rw-r--r--core/core_string_names.cpp28
-rw-r--r--core/dictionary.cpp4
-rw-r--r--core/dvector.h2
-rw-r--r--core/engine.h6
-rw-r--r--core/error_list.h2
-rw-r--r--core/error_macros.cpp2
-rw-r--r--core/global_constants.cpp15
-rw-r--r--core/hash_map.h6
-rw-r--r--core/helper/math_fieldwise.cpp9
-rw-r--r--core/io/file_access_buffered_fa.h4
-rw-r--r--core/io/file_access_compressed.cpp24
-rw-r--r--core/io/file_access_encrypted.cpp12
-rw-r--r--core/io/file_access_network.cpp6
-rw-r--r--core/io/file_access_pack.cpp6
-rw-r--r--core/io/json.cpp53
-rw-r--r--core/io/json.h4
-rw-r--r--core/io/marshalls.cpp24
-rw-r--r--core/io/resource_format_binary.cpp17
-rw-r--r--core/io/resource_format_binary.h1
-rw-r--r--core/io/resource_import.h6
-rw-r--r--core/io/stream_peer.cpp6
-rw-r--r--core/list.h4
-rw-r--r--core/math/a_star.h4
-rw-r--r--core/math/aabb.h6
-rw-r--r--core/math/bsp_tree.cpp10
-rw-r--r--core/math/camera_matrix.cpp1
-rw-r--r--core/math/face3.cpp3
-rw-r--r--core/math/face3.h2
-rw-r--r--core/math/math_2d.cpp29
-rw-r--r--core/math/math_2d.h35
-rw-r--r--core/math/math_funcs.h2
-rw-r--r--core/math/plane.h18
-rw-r--r--core/math/transform.cpp6
-rw-r--r--core/node_path.cpp81
-rw-r--r--core/node_path.h13
-rw-r--r--core/object.cpp302
-rw-r--r--core/object.h44
-rw-r--r--core/ordered_hash_map.h26
-rw-r--r--core/os/dir_access.cpp3
-rw-r--r--core/os/file_access.cpp2
-rw-r--r--core/os/file_access.h2
-rw-r--r--core/os/input_event.cpp32
-rw-r--r--core/os/input_event.h9
-rw-r--r--core/os/keyboard.cpp43
-rw-r--r--core/os/keyboard.h1
-rw-r--r--core/os/os.cpp35
-rw-r--r--core/os/os.h11
-rw-r--r--core/pair.h6
-rw-r--r--core/project_settings.cpp5
-rw-r--r--core/project_settings.h22
-rw-r--r--core/register_core_types.cpp3
-rw-r--r--core/resource.cpp33
-rw-r--r--core/resource.h1
-rw-r--r--core/safe_refcount.cpp8
-rw-r--r--core/script_debugger_local.cpp4
-rw-r--r--core/script_debugger_remote.cpp40
-rw-r--r--core/script_language.cpp8
-rw-r--r--core/string_buffer.cpp2
-rw-r--r--core/string_buffer.h2
-rw-r--r--core/translation.cpp12
-rw-r--r--core/typedefs.h6
-rw-r--r--core/ustring.cpp6
-rw-r--r--core/variant.cpp19
-rw-r--r--core/variant_call.cpp26
-rw-r--r--core/vector.h4
-rw-r--r--doc/classes/@GDScript.xml10
-rw-r--r--doc/classes/@GlobalScope.xml902
-rw-r--r--doc/classes/@NativeScript.xml2
-rw-r--r--doc/classes/@VisualScript.xml2
-rw-r--r--doc/classes/AABB.xml2
-rw-r--r--doc/classes/ARVRAnchor.xml18
-rw-r--r--doc/classes/ARVRCamera.xml2
-rw-r--r--doc/classes/ARVRController.xml41
-rw-r--r--doc/classes/ARVRInterface.xml76
-rw-r--r--doc/classes/ARVROrigin.xml20
-rw-r--r--doc/classes/ARVRPositionalTracker.xml37
-rw-r--r--doc/classes/ARVRServer.xml30
-rw-r--r--doc/classes/AStar.xml21
-rw-r--r--doc/classes/AcceptDialog.xml34
-rw-r--r--doc/classes/AnimatedSprite.xml114
-rw-r--r--doc/classes/AnimatedSprite3D.xml50
-rw-r--r--doc/classes/Animation.xml50
-rw-r--r--doc/classes/AnimationPlayer.xml185
-rw-r--r--doc/classes/AnimationTreePlayer.xml132
-rw-r--r--doc/classes/Area.xml312
-rw-r--r--doc/classes/Area2D.xml244
-rw-r--r--doc/classes/Array.xml64
-rw-r--r--doc/classes/ArrayMesh.xml44
-rw-r--r--doc/classes/AtlasTexture.xml59
-rw-r--r--doc/classes/AudioBusLayout.xml2
-rw-r--r--doc/classes/AudioEffect.xml2
-rw-r--r--doc/classes/AudioEffectAmplify.xml16
-rw-r--r--doc/classes/AudioEffectBandLimitFilter.xml2
-rw-r--r--doc/classes/AudioEffectBandPassFilter.xml2
-rw-r--r--doc/classes/AudioEffectChorus.xml170
-rw-r--r--doc/classes/AudioEffectCompressor.xml100
-rw-r--r--doc/classes/AudioEffectDelay.xml184
-rw-r--r--doc/classes/AudioEffectDistortion.xml82
-rw-r--r--doc/classes/AudioEffectEQ.xml2
-rw-r--r--doc/classes/AudioEffectEQ10.xml2
-rw-r--r--doc/classes/AudioEffectEQ21.xml2
-rw-r--r--doc/classes/AudioEffectEQ6.xml2
-rw-r--r--doc/classes/AudioEffectFilter.xml66
-rw-r--r--doc/classes/AudioEffectHighPassFilter.xml2
-rw-r--r--doc/classes/AudioEffectHighShelfFilter.xml2
-rw-r--r--doc/classes/AudioEffectLimiter.xml58
-rw-r--r--doc/classes/AudioEffectLowPassFilter.xml2
-rw-r--r--doc/classes/AudioEffectLowShelfFilter.xml2
-rw-r--r--doc/classes/AudioEffectNotchFilter.xml2
-rw-r--r--doc/classes/AudioEffectPanner.xml16
-rw-r--r--doc/classes/AudioEffectPhaser.xml72
-rw-r--r--doc/classes/AudioEffectPitchShift.xml16
-rw-r--r--doc/classes/AudioEffectReverb.xml100
-rw-r--r--doc/classes/AudioEffectStereoEnhance.xml44
-rw-r--r--doc/classes/AudioServer.xml8
-rw-r--r--doc/classes/AudioStream.xml2
-rw-r--r--doc/classes/AudioStreamPlayback.xml2
-rw-r--r--doc/classes/AudioStreamPlayer.xml84
-rw-r--r--doc/classes/AudioStreamPlayer2D.xml106
-rw-r--r--doc/classes/AudioStreamPlayer3D.xml248
-rw-r--r--doc/classes/AudioStreamRandomPitch.xml30
-rw-r--r--doc/classes/AudioStreamSample.xml101
-rw-r--r--doc/classes/BackBufferCopy.xml40
-rw-r--r--doc/classes/BaseButton.xml122
-rw-r--r--doc/classes/Basis.xml7
-rw-r--r--doc/classes/BitMap.xml9
-rw-r--r--doc/classes/BitmapFont.xml54
-rw-r--r--doc/classes/BoneAttachment.xml2
-rw-r--r--doc/classes/BoxContainer.xml24
-rw-r--r--doc/classes/BoxShape.xml18
-rw-r--r--doc/classes/Button.xml78
-rw-r--r--doc/classes/ButtonGroup.xml2
-rw-r--r--doc/classes/Camera.xml16
-rw-r--r--doc/classes/Camera2D.xml235
-rw-r--r--doc/classes/CanvasItem.xml232
-rw-r--r--doc/classes/CanvasItemMaterial.xml58
-rw-r--r--doc/classes/CanvasLayer.xml68
-rw-r--r--doc/classes/CanvasModulate.xml18
-rw-r--r--doc/classes/CapsuleMesh.xml58
-rw-r--r--doc/classes/CapsuleShape.xml34
-rw-r--r--doc/classes/CapsuleShape2D.xml34
-rw-r--r--doc/classes/CenterContainer.xml19
-rw-r--r--doc/classes/CheckBox.xml2
-rw-r--r--doc/classes/CheckButton.xml2
-rw-r--r--doc/classes/CircleShape2D.xml18
-rw-r--r--doc/classes/ClassDB.xml3
-rw-r--r--doc/classes/CollisionObject.xml35
-rw-r--r--doc/classes/CollisionObject2D.xml24
-rw-r--r--doc/classes/CollisionPolygon.xml44
-rw-r--r--doc/classes/CollisionPolygon2D.xml67
-rw-r--r--doc/classes/CollisionShape.xml30
-rw-r--r--doc/classes/CollisionShape2D.xml44
-rw-r--r--doc/classes/Color.xml28
-rw-r--r--doc/classes/ColorPicker.xml2
-rw-r--r--doc/classes/ColorPickerButton.xml42
-rw-r--r--doc/classes/ColorRect.xml26
-rw-r--r--doc/classes/ConcavePolygonShape.xml2
-rw-r--r--doc/classes/ConcavePolygonShape2D.xml19
-rw-r--r--doc/classes/ConeTwistJoint.xml32
-rw-r--r--doc/classes/ConfigFile.xml2
-rw-r--r--doc/classes/ConfirmationDialog.xml2
-rw-r--r--doc/classes/Container.xml4
-rw-r--r--doc/classes/Control.xml426
-rw-r--r--doc/classes/ConvexPolygonShape.xml16
-rw-r--r--doc/classes/ConvexPolygonShape2D.xml18
-rw-r--r--doc/classes/CubeMap.xml87
-rw-r--r--doc/classes/CubeMesh.xml58
-rw-r--r--doc/classes/Curve.xml52
-rw-r--r--doc/classes/Curve2D.xml21
-rw-r--r--doc/classes/Curve3D.xml20
-rw-r--r--doc/classes/CurveTexture.xml28
-rw-r--r--doc/classes/CylinderMesh.xml72
-rw-r--r--doc/classes/DampedSpringJoint2D.xml66
-rw-r--r--doc/classes/Dictionary.xml2
-rw-r--r--doc/classes/DirectionalLight.xml54
-rw-r--r--doc/classes/Directory.xml2
-rw-r--r--doc/classes/DynamicFont.xml93
-rw-r--r--doc/classes/DynamicFontData.xml18
-rw-r--r--doc/classes/EditorExportPlugin.xml50
-rw-r--r--doc/classes/EditorFileDialog.xml178
-rw-r--r--doc/classes/EditorFileSystem.xml4
-rw-r--r--doc/classes/EditorFileSystemDirectory.xml15
-rw-r--r--doc/classes/EditorImportPlugin.xml2
-rw-r--r--doc/classes/EditorInterface.xml2
-rw-r--r--doc/classes/EditorPlugin.xml82
-rw-r--r--doc/classes/EditorResourceConversionPlugin.xml2
-rw-r--r--doc/classes/EditorResourcePreview.xml2
-rw-r--r--doc/classes/EditorResourcePreviewGenerator.xml2
-rw-r--r--doc/classes/EditorSceneImporter.xml95
-rw-r--r--doc/classes/EditorScenePostImport.xml23
-rw-r--r--doc/classes/EditorScript.xml6
-rw-r--r--doc/classes/EditorSelection.xml2
-rw-r--r--doc/classes/EditorSettings.xml2
-rw-r--r--doc/classes/EditorSpatialGizmo.xml2
-rw-r--r--doc/classes/EncodedObjectAsID.xml2
-rw-r--r--doc/classes/Engine.xml2
-rw-r--r--doc/classes/Environment.xml1050
-rw-r--r--doc/classes/File.xml18
-rw-r--r--doc/classes/FileDialog.xml83
-rw-r--r--doc/classes/Font.xml2
-rw-r--r--doc/classes/FuncRef.xml2
-rw-r--r--doc/classes/GIProbe.xml152
-rw-r--r--doc/classes/GIProbeData.xml26
-rw-r--r--doc/classes/Generic6DOFJoint.xml148
-rw-r--r--doc/classes/Geometry.xml2
-rw-r--r--doc/classes/GeometryInstance.xml150
-rw-r--r--doc/classes/Gradient.xml34
-rw-r--r--doc/classes/GradientTexture.xml24
-rw-r--r--doc/classes/GraphEdit.xml2
-rw-r--r--doc/classes/GraphNode.xml54
-rw-r--r--doc/classes/GridContainer.xml18
-rw-r--r--doc/classes/GrooveJoint2D.xml34
-rw-r--r--doc/classes/HBoxContainer.xml2
-rw-r--r--doc/classes/HScrollBar.xml2
-rw-r--r--doc/classes/HSeparator.xml2
-rw-r--r--doc/classes/HSlider.xml2
-rw-r--r--doc/classes/HSplitContainer.xml2
-rw-r--r--doc/classes/HTTPClient.xml138
-rw-r--r--doc/classes/HTTPRequest.xml74
-rw-r--r--doc/classes/HingeJoint.xml62
-rw-r--r--doc/classes/IP.xml22
-rw-r--r--doc/classes/IP_Unix.xml2
-rw-r--r--doc/classes/Image.xml116
-rw-r--r--doc/classes/ImageTexture.xml8
-rw-r--r--doc/classes/ImmediateGeometry.xml2
-rw-r--r--doc/classes/Input.xml10
-rw-r--r--doc/classes/InputDefault.xml2
-rw-r--r--doc/classes/InputEvent.xml17
-rw-r--r--doc/classes/InputEventAction.xml24
-rw-r--r--doc/classes/InputEventGesture.xml19
-rw-r--r--doc/classes/InputEventJoypadButton.xml38
-rw-r--r--doc/classes/InputEventJoypadMotion.xml30
-rw-r--r--doc/classes/InputEventKey.xml46
-rw-r--r--doc/classes/InputEventMagnifyGesture.xml19
-rw-r--r--doc/classes/InputEventMouse.xml44
-rw-r--r--doc/classes/InputEventMouseButton.xml52
-rw-r--r--doc/classes/InputEventMouseMotion.xml30
-rw-r--r--doc/classes/InputEventPanGesture.xml19
-rw-r--r--doc/classes/InputEventScreenDrag.xml58
-rw-r--r--doc/classes/InputEventScreenTouch.xml38
-rw-r--r--doc/classes/InputEventWithModifiers.xml72
-rw-r--r--doc/classes/InputMap.xml2
-rw-r--r--doc/classes/InstancePlaceholder.xml2
-rw-r--r--doc/classes/InterpolatedCamera.xml44
-rw-r--r--doc/classes/ItemList.xml158
-rw-r--r--doc/classes/JSON.xml6
-rw-r--r--doc/classes/JSONParseResult.xml58
-rw-r--r--doc/classes/JavaScript.xml2
-rw-r--r--doc/classes/Joint.xml58
-rw-r--r--doc/classes/Joint2D.xml62
-rw-r--r--doc/classes/KinematicBody.xml22
-rw-r--r--doc/classes/KinematicBody2D.xml16
-rw-r--r--doc/classes/KinematicCollision.xml70
-rw-r--r--doc/classes/KinematicCollision2D.xml68
-rw-r--r--doc/classes/Label.xml162
-rw-r--r--doc/classes/LargeTexture.xml10
-rw-r--r--doc/classes/Light.xml152
-rw-r--r--doc/classes/Light2D.xml348
-rw-r--r--doc/classes/LightOccluder2D.xml34
-rw-r--r--doc/classes/Line2D.xml172
-rw-r--r--doc/classes/LineEdit.xml202
-rw-r--r--doc/classes/LineShape2D.xml34
-rw-r--r--doc/classes/LinkButton.xml42
-rw-r--r--doc/classes/Listener.xml2
-rw-r--r--doc/classes/MainLoop.xml22
-rw-r--r--doc/classes/MarginContainer.xml2
-rw-r--r--doc/classes/Marshalls.xml2
-rw-r--r--doc/classes/Material.xml34
-rw-r--r--doc/classes/MenuButton.xml6
-rw-r--r--doc/classes/Mesh.xml88
-rw-r--r--doc/classes/MeshDataTool.xml2
-rw-r--r--doc/classes/MeshInstance.xml38
-rw-r--r--doc/classes/MeshLibrary.xml2
-rw-r--r--doc/classes/MultiMesh.xml76
-rw-r--r--doc/classes/MultiMeshInstance.xml18
-rw-r--r--doc/classes/Mutex.xml2
-rw-r--r--doc/classes/Navigation.xml16
-rw-r--r--doc/classes/Navigation2D.xml2
-rw-r--r--doc/classes/NavigationMesh.xml250
-rw-r--r--doc/classes/NavigationMeshInstance.xml30
-rw-r--r--doc/classes/NavigationPolygon.xml10
-rw-r--r--doc/classes/NavigationPolygonInstance.xml30
-rw-r--r--doc/classes/NetworkedMultiplayerPeer.xml48
-rw-r--r--doc/classes/Nil.xml2
-rw-r--r--doc/classes/NinePatchRect.xml96
-rw-r--r--doc/classes/Node.xml205
-rw-r--r--doc/classes/Node2D.xml178
-rw-r--r--doc/classes/NodePath.xml21
-rw-r--r--doc/classes/OS.xml94
-rw-r--r--doc/classes/Object.xml30
-rw-r--r--doc/classes/OccluderPolygon2D.xml50
-rw-r--r--doc/classes/OmniLight.xml38
-rw-r--r--doc/classes/OptionButton.xml11
-rw-r--r--doc/classes/PCKPacker.xml2
-rw-r--r--doc/classes/PHashTranslation.xml2
-rw-r--r--doc/classes/PackedDataContainer.xml2
-rw-r--r--doc/classes/PackedDataContainerRef.xml2
-rw-r--r--doc/classes/PackedScene.xml18
-rw-r--r--doc/classes/PacketPeer.xml2
-rw-r--r--doc/classes/PacketPeerStream.xml2
-rw-r--r--doc/classes/PacketPeerUDP.xml2
-rw-r--r--doc/classes/Panel.xml2
-rw-r--r--doc/classes/PanelContainer.xml2
-rw-r--r--doc/classes/PanoramaSky.xml16
-rw-r--r--doc/classes/ParallaxBackground.xml96
-rw-r--r--doc/classes/ParallaxLayer.xml48
-rw-r--r--doc/classes/Particles.xml238
-rw-r--r--doc/classes/Particles2D.xml265
-rw-r--r--doc/classes/ParticlesMaterial.xml326
-rw-r--r--doc/classes/Path.xml18
-rw-r--r--doc/classes/Path2D.xml18
-rw-r--r--doc/classes/PathFollow.xml10
-rw-r--r--doc/classes/PathFollow2D.xml2
-rw-r--r--doc/classes/Performance.xml58
-rw-r--r--doc/classes/Physics2DDirectBodyState.xml2
-rw-r--r--doc/classes/Physics2DDirectBodyStateSW.xml2
-rw-r--r--doc/classes/Physics2DDirectSpaceState.xml30
-rw-r--r--doc/classes/Physics2DServer.xml122
-rw-r--r--doc/classes/Physics2DServerSW.xml2
-rw-r--r--doc/classes/Physics2DShapeQueryParameters.xml18
-rw-r--r--doc/classes/Physics2DShapeQueryResult.xml2
-rw-r--r--doc/classes/Physics2DTestMotionResult.xml2
-rw-r--r--doc/classes/PhysicsBody.xml30
-rw-r--r--doc/classes/PhysicsBody2D.xml36
-rw-r--r--doc/classes/PhysicsDirectBodyState.xml2
-rw-r--r--doc/classes/PhysicsDirectSpaceState.xml16
-rw-r--r--doc/classes/PhysicsServer.xml251
-rw-r--r--doc/classes/PhysicsShapeQueryParameters.xml22
-rw-r--r--doc/classes/PhysicsShapeQueryResult.xml2
-rw-r--r--doc/classes/PinJoint.xml26
-rw-r--r--doc/classes/PinJoint2D.xml16
-rw-r--r--doc/classes/Plane.xml2
-rw-r--r--doc/classes/PlaneMesh.xml44
-rw-r--r--doc/classes/PlaneShape.xml16
-rw-r--r--doc/classes/Polygon2D.xml190
-rw-r--r--doc/classes/PolygonPathFinder.xml6
-rw-r--r--doc/classes/PoolByteArray.xml2
-rw-r--r--doc/classes/PoolColorArray.xml2
-rw-r--r--doc/classes/PoolIntArray.xml2
-rw-r--r--doc/classes/PoolRealArray.xml2
-rw-r--r--doc/classes/PoolStringArray.xml2
-rw-r--r--doc/classes/PoolVector2Array.xml2
-rw-r--r--doc/classes/PoolVector3Array.xml2
-rw-r--r--doc/classes/Popup.xml22
-rw-r--r--doc/classes/PopupDialog.xml2
-rw-r--r--doc/classes/PopupMenu.xml36
-rw-r--r--doc/classes/PopupPanel.xml2
-rw-r--r--doc/classes/Position2D.xml2
-rw-r--r--doc/classes/Position3D.xml2
-rw-r--r--doc/classes/PrimitiveMesh.xml16
-rw-r--r--doc/classes/PrismMesh.xml72
-rw-r--r--doc/classes/ProceduralSky.xml238
-rw-r--r--doc/classes/ProgressBar.xml16
-rw-r--r--doc/classes/ProjectSettings.xml2
-rw-r--r--doc/classes/ProximityGroup.xml16
-rw-r--r--doc/classes/ProxyTexture.xml19
-rw-r--r--doc/classes/QuadMesh.xml16
-rw-r--r--doc/classes/Quat.xml2
-rw-r--r--doc/classes/RID.xml2
-rw-r--r--doc/classes/Range.xml107
-rw-r--r--doc/classes/RayCast.xml78
-rw-r--r--doc/classes/RayCast2D.xml89
-rw-r--r--doc/classes/RayShape.xml16
-rw-r--r--doc/classes/RayShape2D.xml18
-rw-r--r--doc/classes/Rect2.xml8
-rw-r--r--doc/classes/RectangleShape2D.xml18
-rw-r--r--doc/classes/Reference.xml2
-rw-r--r--doc/classes/ReferenceRect.xml2
-rw-r--r--doc/classes/ReflectionProbe.xml174
-rw-r--r--doc/classes/RemoteTransform.xml86
-rw-r--r--doc/classes/RemoteTransform2D.xml86
-rw-r--r--doc/classes/Resource.xml48
-rw-r--r--doc/classes/ResourceImporter.xml2
-rw-r--r--doc/classes/ResourceInteractiveLoader.xml2
-rw-r--r--doc/classes/ResourceLoader.xml2
-rw-r--r--doc/classes/ResourcePreloader.xml6
-rw-r--r--doc/classes/ResourceSaver.xml14
-rw-r--r--doc/classes/RichTextLabel.xml122
-rw-r--r--doc/classes/RigidBody.xml299
-rw-r--r--doc/classes/RigidBody2D.xml274
-rw-r--r--doc/classes/SceneState.xml32
-rw-r--r--doc/classes/SceneTree.xml26
-rw-r--r--doc/classes/SceneTreeTimer.xml2
-rw-r--r--doc/classes/Script.xml2
-rw-r--r--doc/classes/ScriptEditor.xml2
-rw-r--r--doc/classes/ScrollBar.xml16
-rw-r--r--doc/classes/ScrollContainer.xml34
-rw-r--r--doc/classes/SegmentShape2D.xml34
-rw-r--r--doc/classes/Semaphore.xml2
-rw-r--r--doc/classes/Separator.xml2
-rw-r--r--doc/classes/Shader.xml12
-rw-r--r--doc/classes/ShaderMaterial.xml2
-rw-r--r--doc/classes/Shape.xml2
-rw-r--r--doc/classes/Shape2D.xml19
-rw-r--r--doc/classes/ShortCut.xml24
-rw-r--r--doc/classes/Skeleton.xml4
-rw-r--r--doc/classes/Sky.xml45
-rw-r--r--doc/classes/Slider.xml48
-rw-r--r--doc/classes/SliderJoint.xml66
-rw-r--r--doc/classes/Spatial.xml118
-rw-r--r--doc/classes/SpatialGizmo.xml2
-rw-r--r--doc/classes/SpatialMaterial.xml942
-rw-r--r--doc/classes/SpatialVelocityTracker.xml2
-rw-r--r--doc/classes/SphereMesh.xml72
-rw-r--r--doc/classes/SphereShape.xml16
-rw-r--r--doc/classes/SpinBox.xml49
-rw-r--r--doc/classes/SplitContainer.xml56
-rw-r--r--doc/classes/SpotLight.xml2
-rw-r--r--doc/classes/Sprite.xml190
-rw-r--r--doc/classes/Sprite3D.xml86
-rw-r--r--doc/classes/SpriteBase3D.xml160
-rw-r--r--doc/classes/SpriteFrames.xml5
-rw-r--r--doc/classes/StaticBody.xml66
-rw-r--r--doc/classes/StaticBody2D.xml66
-rw-r--r--doc/classes/StreamPeer.xml2
-rw-r--r--doc/classes/StreamPeerBuffer.xml2
-rw-r--r--doc/classes/StreamPeerSSL.xml10
-rw-r--r--doc/classes/StreamPeerTCP.xml10
-rw-r--r--doc/classes/StreamTexture.xml19
-rw-r--r--doc/classes/String.xml2
-rw-r--r--doc/classes/StyleBox.xml22
-rw-r--r--doc/classes/StyleBoxEmpty.xml2
-rw-r--r--doc/classes/StyleBoxFlat.xml182
-rw-r--r--doc/classes/StyleBoxLine.xml44
-rw-r--r--doc/classes/StyleBoxTexture.xml142
-rw-r--r--doc/classes/SurfaceTool.xml4
-rw-r--r--doc/classes/TCP_Server.xml2
-rw-r--r--doc/classes/TabContainer.xml56
-rw-r--r--doc/classes/Tabs.xml52
-rw-r--r--doc/classes/TextEdit.xml237
-rw-r--r--doc/classes/Texture.xml28
-rw-r--r--doc/classes/TextureButton.xml128
-rw-r--r--doc/classes/TextureProgress.xml148
-rw-r--r--doc/classes/TextureRect.xml60
-rw-r--r--doc/classes/Theme.xml55
-rw-r--r--doc/classes/Thread.xml8
-rw-r--r--doc/classes/TileMap.xml270
-rw-r--r--doc/classes/TileSet.xml66
-rw-r--r--doc/classes/Timer.xml70
-rw-r--r--doc/classes/ToolButton.xml2
-rw-r--r--doc/classes/TouchScreenButton.xml147
-rw-r--r--doc/classes/Transform.xml2
-rw-r--r--doc/classes/Transform2D.xml2
-rw-r--r--doc/classes/Translation.xml20
-rw-r--r--doc/classes/TranslationServer.xml2
-rw-r--r--doc/classes/Tree.xml18
-rw-r--r--doc/classes/TreeItem.xml20
-rw-r--r--doc/classes/TriangleMesh.xml2
-rw-r--r--doc/classes/Tween.xml62
-rw-r--r--doc/classes/UndoRedo.xml8
-rw-r--r--doc/classes/VBoxContainer.xml2
-rw-r--r--doc/classes/VScrollBar.xml2
-rw-r--r--doc/classes/VSeparator.xml2
-rw-r--r--doc/classes/VSlider.xml2
-rw-r--r--doc/classes/VSplitContainer.xml2
-rw-r--r--doc/classes/Variant.xml2
-rw-r--r--doc/classes/Vector2.xml2
-rw-r--r--doc/classes/Vector3.xml8
-rw-r--r--doc/classes/VehicleBody.xml74
-rw-r--r--doc/classes/VehicleWheel.xml156
-rw-r--r--doc/classes/VideoPlayer.xml112
-rw-r--r--doc/classes/VideoStream.xml2
-rw-r--r--doc/classes/Viewport.xml382
-rw-r--r--doc/classes/ViewportContainer.xml30
-rw-r--r--doc/classes/ViewportTexture.xml16
-rw-r--r--doc/classes/VisibilityEnabler.xml28
-rw-r--r--doc/classes/VisibilityEnabler2D.xml36
-rw-r--r--doc/classes/VisibilityNotifier.xml18
-rw-r--r--doc/classes/VisibilityNotifier2D.xml18
-rw-r--r--doc/classes/VisualInstance.xml23
-rw-r--r--doc/classes/VisualServer.xml600
-rw-r--r--doc/classes/WeakRef.xml2
-rw-r--r--doc/classes/WindowDialog.xml34
-rw-r--r--doc/classes/World.xml35
-rw-r--r--doc/classes/World2D.xml2
-rw-r--r--doc/classes/WorldEnvironment.xml18
-rw-r--r--doc/classes/XMLParser.xml16
-rw-r--r--doc/classes/YSort.xml18
-rw-r--r--doc/classes/bool.xml2
-rw-r--r--doc/classes/float.xml2
-rw-r--r--doc/classes/int.xml2
-rw-r--r--doc/tools/doc_status.py20
-rw-r--r--drivers/SCsub2
-rw-r--r--drivers/convex_decomp/b2d_decompose.cpp2
-rw-r--r--drivers/coreaudio/audio_driver_coreaudio.cpp2
-rw-r--r--drivers/gles3/rasterizer_canvas_gles3.cpp34
-rw-r--r--drivers/gles3/rasterizer_gles3.cpp10
-rw-r--r--drivers/gles3/rasterizer_gles3.h2
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.cpp70
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.h11
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.cpp44
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.h47
-rw-r--r--drivers/gles3/shader_compiler_gles3.cpp16
-rw-r--r--drivers/gles3/shader_gles3.cpp6
-rw-r--r--drivers/gles3/shaders/particles.glsl2
-rw-r--r--drivers/gles3/shaders/scene.glsl33
-rw-r--r--drivers/pulseaudio/audio_driver_pulseaudio.cpp2
-rw-r--r--drivers/unix/ip_unix.cpp5
-rw-r--r--drivers/unix/os_unix.cpp16
-rw-r--r--drivers/unix/os_unix.h2
-rw-r--r--drivers/unix/rw_lock_posix.cpp2
-rw-r--r--drivers/unix/stream_peer_tcp_posix.cpp4
-rw-r--r--drivers/wasapi/audio_driver_wasapi.cpp86
-rw-r--r--drivers/wasapi/audio_driver_wasapi.h2
-rw-r--r--drivers/xaudio2/audio_driver_xaudio2.h4
-rw-r--r--editor/SCsub2
-rw-r--r--editor/animation_editor.cpp65
-rw-r--r--editor/dependency_editor.h1
-rw-r--r--editor/doc/doc_data.cpp22
-rw-r--r--editor/editor_about.cpp48
-rw-r--r--editor/editor_about.h8
-rw-r--r--editor/editor_asset_installer.cpp2
-rw-r--r--editor/editor_audio_buses.cpp4
-rw-r--r--editor/editor_data.cpp4
-rw-r--r--editor/editor_export.cpp13
-rw-r--r--editor/editor_export.h5
-rw-r--r--editor/editor_file_dialog.cpp241
-rw-r--r--editor/editor_file_dialog.h23
-rw-r--r--editor/editor_file_system.cpp182
-rw-r--r--editor/editor_file_system.h4
-rw-r--r--editor/editor_fonts.cpp8
-rw-r--r--editor/editor_help.cpp158
-rw-r--r--editor/editor_help.h3
-rw-r--r--editor/editor_node.cpp124
-rw-r--r--editor/editor_node.h15
-rw-r--r--editor/editor_plugin.cpp69
-rw-r--r--editor/editor_plugin.h14
-rw-r--r--editor/editor_profiler.cpp8
-rw-r--r--editor/editor_settings.cpp28
-rw-r--r--editor/editor_settings.h5
-rw-r--r--editor/editor_themes.cpp3
-rw-r--r--editor/export_template_manager.cpp4
-rw-r--r--editor/fileserver/editor_file_server.cpp3
-rw-r--r--editor/filesystem_dock.cpp144
-rw-r--r--editor/filesystem_dock.h16
-rw-r--r--editor/icons/icon_editor_handle_add.svg5
-rw-r--r--editor/import/editor_import_collada.cpp4
-rw-r--r--editor/import/editor_import_collada.h2
-rw-r--r--editor/import/editor_scene_importer_gltf.cpp25
-rw-r--r--editor/import/editor_scene_importer_gltf.h2
-rw-r--r--editor/import/resource_importer_obj.cpp3
-rw-r--r--editor/import/resource_importer_obj.h2
-rw-r--r--editor/import/resource_importer_scene.cpp255
-rw-r--r--editor/import/resource_importer_scene.h30
-rw-r--r--editor/import_dock.cpp1
-rw-r--r--editor/node_dock.cpp3
-rw-r--r--editor/plugins/abstract_polygon_2d_editor.cpp41
-rw-r--r--editor/plugins/abstract_polygon_2d_editor.h4
-rw-r--r--editor/plugins/animation_player_editor_plugin.cpp452
-rw-r--r--editor/plugins/animation_player_editor_plugin.h66
-rw-r--r--editor/plugins/animation_tree_editor_plugin.cpp6
-rw-r--r--editor/plugins/asset_library_editor_plugin.cpp12
-rw-r--r--editor/plugins/asset_library_editor_plugin.h3
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp75
-rw-r--r--editor/plugins/canvas_item_editor_plugin.h1
-rw-r--r--editor/plugins/collision_polygon_2d_editor_plugin.cpp8
-rw-r--r--editor/plugins/collision_shape_2d_editor_plugin.cpp22
-rw-r--r--editor/plugins/collision_shape_2d_editor_plugin.h4
-rw-r--r--editor/plugins/curve_editor_plugin.cpp6
-rw-r--r--editor/plugins/editor_preview_plugins.cpp39
-rw-r--r--editor/plugins/light_occluder_2d_editor_plugin.cpp2
-rw-r--r--editor/plugins/light_occluder_2d_editor_plugin.h4
-rw-r--r--editor/plugins/line_2d_editor_plugin.cpp8
-rw-r--r--editor/plugins/mesh_instance_editor_plugin.cpp145
-rw-r--r--editor/plugins/mesh_instance_editor_plugin.h10
-rw-r--r--editor/plugins/navigation_mesh_generator.cpp4
-rw-r--r--editor/plugins/navigation_polygon_editor_plugin.cpp8
-rw-r--r--editor/plugins/path_2d_editor_plugin.cpp2
-rw-r--r--editor/plugins/path_2d_editor_plugin.h4
-rw-r--r--editor/plugins/polygon_2d_editor_plugin.cpp8
-rw-r--r--editor/plugins/script_editor_plugin.cpp12
-rw-r--r--editor/plugins/script_editor_plugin.h3
-rw-r--r--editor/plugins/script_text_editor.cpp59
-rw-r--r--editor/plugins/script_text_editor.h3
-rw-r--r--editor/plugins/shader_editor_plugin.cpp3
-rw-r--r--editor/plugins/spatial_editor_plugin.cpp37
-rw-r--r--editor/plugins/spatial_editor_plugin.h5
-rw-r--r--editor/plugins/sprite_frames_editor_plugin.cpp1
-rw-r--r--editor/plugins/tile_map_editor_plugin.cpp115
-rw-r--r--editor/plugins/tile_map_editor_plugin.h8
-rw-r--r--editor/plugins/tile_set_editor_plugin.cpp1166
-rw-r--r--editor/plugins/tile_set_editor_plugin.h119
-rw-r--r--editor/project_export.cpp1
-rw-r--r--editor/project_manager.cpp26
-rw-r--r--editor/project_manager.h3
-rw-r--r--editor/project_settings_editor.cpp24
-rw-r--r--editor/property_editor.cpp148
-rw-r--r--editor/property_editor.h8
-rw-r--r--editor/property_selector.cpp18
-rw-r--r--editor/scene_tree_dock.cpp22
-rw-r--r--editor/scene_tree_dock.h2
-rw-r--r--editor/scene_tree_editor.cpp8
-rw-r--r--editor/scene_tree_editor.h1
-rw-r--r--editor/script_editor_debugger.cpp51
-rw-r--r--editor/script_editor_debugger.h1
-rw-r--r--editor/settings_config_dialog.cpp8
-rw-r--r--editor/translations/README.md7
-rw-r--r--editor/translations/af.po7646
-rw-r--r--editor/translations/ar.po1609
-rw-r--r--editor/translations/bg.po665
-rw-r--r--editor/translations/bn.po1231
-rw-r--r--editor/translations/ca.po3501
-rw-r--r--editor/translations/cs.po775
-rw-r--r--editor/translations/da.po1790
-rw-r--r--editor/translations/de.po1176
-rw-r--r--editor/translations/de_CH.po644
-rw-r--r--editor/translations/editor.pot614
-rw-r--r--editor/translations/el.po1082
-rw-r--r--editor/translations/es.po1266
-rw-r--r--editor/translations/es_AR.po961
-rw-r--r--editor/translations/fa.po1248
-rw-r--r--editor/translations/fi.po1214
-rw-r--r--editor/translations/fr.po1140
-rw-r--r--editor/translations/he.po7620
-rw-r--r--editor/translations/hi.po7657
-rw-r--r--editor/translations/hu.po883
-rw-r--r--editor/translations/id.po1093
-rw-r--r--editor/translations/it.po881
-rw-r--r--editor/translations/ja.po828
-rw-r--r--editor/translations/ko.po1192
-rw-r--r--editor/translations/lt.po842
-rw-r--r--editor/translations/nb.po1105
-rw-r--r--editor/translations/nl.po1285
-rw-r--r--editor/translations/pl.po1894
-rw-r--r--editor/translations/pr.po667
-rw-r--r--editor/translations/pt_BR.po900
-rw-r--r--editor/translations/pt_PT.po1795
-rw-r--r--editor/translations/ru.po1044
-rw-r--r--editor/translations/sk.po633
-rw-r--r--editor/translations/sl.po687
-rw-r--r--editor/translations/sr_Cyrl.po7752
-rw-r--r--editor/translations/sv.po8270
-rw-r--r--editor/translations/th.po1034
-rw-r--r--editor/translations/tr.po2492
-rw-r--r--editor/translations/uk.po7637
-rw-r--r--editor/translations/ur_PK.po626
-rw-r--r--editor/translations/vi.po7623
-rw-r--r--editor/translations/zh_CN.po1166
-rw-r--r--editor/translations/zh_HK.po1015
-rw-r--r--editor/translations/zh_TW.po744
-rw-r--r--main/SCsub3
-rw-r--r--[-rwxr-xr-x]main/main.cpp14
-rw-r--r--main/splash_sponsors.pngbin0 -> 39571 bytes
-rw-r--r--main/tests/SCsub3
-rw-r--r--main/tests/test_gdscript.cpp4
-rw-r--r--main/tests/test_gdscript.h2
-rw-r--r--main/tests/test_image.cpp2
-rw-r--r--main/tests/test_io.cpp4
-rw-r--r--main/tests/test_math.cpp2
-rw-r--r--main/tests/test_physics.cpp2
-rw-r--r--main/tests/test_physics_2d.cpp2
-rw-r--r--main/tests/test_render.cpp2
-rw-r--r--main/tests/test_shader_lang.cpp2
-rw-r--r--main/tests/test_string.cpp2
-rw-r--r--methods.py24
-rwxr-xr-xmisc/hooks/pre-commit-clang-format2
-rwxr-xr-xmisc/travis/clang-format.sh4
-rw-r--r--modules/SCsub2
-rw-r--r--modules/bullet/area_bullet.cpp26
-rw-r--r--modules/bullet/area_bullet.h14
-rw-r--r--modules/bullet/btRayShape.cpp6
-rw-r--r--modules/bullet/bullet_physics_server.cpp18
-rw-r--r--modules/bullet/bullet_physics_server.h4
-rw-r--r--modules/bullet/collision_object_bullet.cpp21
-rw-r--r--modules/bullet/collision_object_bullet.h20
-rw-r--r--modules/bullet/cone_twist_joint_bullet.cpp4
-rw-r--r--modules/bullet/constraint_bullet.cpp5
-rw-r--r--modules/bullet/doc_classes/BulletPhysicsDirectBodyState.xml2
-rw-r--r--modules/bullet/doc_classes/BulletPhysicsServer.xml2
-rw-r--r--modules/bullet/generic_6dof_joint_bullet.cpp4
-rw-r--r--modules/bullet/godot_collision_configuration.cpp4
-rw-r--r--modules/bullet/godot_collision_dispatcher.cpp4
-rw-r--r--modules/bullet/godot_motion_state.h8
-rw-r--r--modules/bullet/godot_ray_world_algorithm.cpp24
-rw-r--r--modules/bullet/godot_result_callbacks.h67
-rw-r--r--modules/bullet/hinge_joint_bullet.cpp8
-rw-r--r--modules/bullet/joint_bullet.cpp4
-rw-r--r--modules/bullet/pin_joint_bullet.cpp4
-rw-r--r--modules/bullet/rigid_body_bullet.cpp83
-rw-r--r--modules/bullet/rigid_body_bullet.h10
-rw-r--r--modules/bullet/shape_bullet.cpp35
-rw-r--r--modules/bullet/slider_joint_bullet.cpp4
-rw-r--r--modules/bullet/soft_body_bullet.cpp14
-rw-r--r--modules/bullet/space_bullet.cpp92
-rw-r--r--modules/bullet/space_bullet.h16
-rw-r--r--modules/enet/doc_classes/NetworkedMultiplayerENet.xml12
-rw-r--r--modules/enet/networked_multiplayer_enet.cpp2
-rw-r--r--modules/freetype/SCsub2
-rw-r--r--modules/gdnative/SCsub34
-rw-r--r--modules/gdnative/arvr/arvr_interface_gdnative.cpp4
-rw-r--r--modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml2
-rw-r--r--modules/gdnative/doc_classes/GDNative.xml16
-rw-r--r--modules/gdnative/doc_classes/GDNativeLibrary.xml50
-rw-r--r--modules/gdnative/doc_classes/NativeScript.xml30
-rw-r--r--modules/gdnative/doc_classes/PluginScript.xml2
-rw-r--r--modules/gdnative/gdnative.cpp8
-rw-r--r--modules/gdnative/gdnative.h4
-rw-r--r--modules/gdnative/gdnative/basis.cpp2
-rw-r--r--modules/gdnative/gdnative/node_path.cpp4
-rw-r--r--modules/gdnative/gdnative/quat.cpp2
-rw-r--r--modules/gdnative/gdnative/vector2.cpp2
-rw-r--r--modules/gdnative/gdnative/vector3.cpp2
-rw-r--r--modules/gdnative/gdnative_api.json10
-rw-r--r--modules/gdnative/include/gdnative/basis.h2
-rw-r--r--modules/gdnative/include/gdnative/gdnative.h2
-rw-r--r--modules/gdnative/include/gdnative/node_path.h2
-rw-r--r--modules/gdnative/include/gdnative/quat.h2
-rw-r--r--modules/gdnative/include/gdnative/vector2.h2
-rw-r--r--modules/gdnative/include/gdnative/vector3.h2
-rw-r--r--modules/gdnative/nativescript/api_generator.cpp2
-rw-r--r--modules/gdnative/nativescript/nativescript.cpp10
-rw-r--r--modules/gdnative/nativescript/nativescript.h12
-rw-r--r--modules/gdnative/pluginscript/pluginscript_language.cpp4
-rw-r--r--modules/gdnative/pluginscript/pluginscript_script.cpp7
-rw-r--r--modules/gdnative/register_types.cpp25
-rw-r--r--modules/gdscript/doc_classes/GDScript.xml2
-rw-r--r--modules/gdscript/doc_classes/GDScriptFunctionState.xml2
-rw-r--r--modules/gdscript/doc_classes/GDScriptNativeClass.xml2
-rw-r--r--modules/gdscript/gdscript.cpp8
-rw-r--r--modules/gdscript/gdscript_compiler.cpp2
-rw-r--r--modules/gdscript/gdscript_editor.cpp6
-rw-r--r--modules/gdscript/gdscript_function.cpp10
-rw-r--r--modules/gdscript/gdscript_parser.cpp11
-rw-r--r--modules/gridmap/doc_classes/GridMap.xml4
-rw-r--r--modules/mobile_vr/doc_classes/MobileVRInterface.xml98
-rw-r--r--modules/mobile_vr/mobile_interface.cpp2
-rw-r--r--modules/mono/csharp_script.cpp8
-rw-r--r--modules/mono/doc_classes/@C#.xml2
-rw-r--r--modules/mono/doc_classes/CSharpScript.xml2
-rw-r--r--modules/mono/doc_classes/GodotSharp.xml2
-rw-r--r--modules/mono/editor/bindings_generator.cpp4
-rw-r--r--modules/mono/editor/csharp_project.cpp2
-rw-r--r--modules/mono/editor/csharp_project.h2
-rw-r--r--modules/mono/glue/cs_files/AABB.cs42
-rw-r--r--modules/mono/glue/cs_files/Basis.cs92
-rw-r--r--modules/mono/glue/cs_files/Color.cs44
-rw-r--r--modules/mono/glue/cs_files/Error.cs3
-rw-r--r--modules/mono/glue/cs_files/GD.cs56
-rw-r--r--modules/mono/glue/cs_files/Mathf.cs88
-rw-r--r--modules/mono/glue/cs_files/Plane.cs58
-rw-r--r--modules/mono/glue/cs_files/Quat.cs60
-rw-r--r--modules/mono/glue/cs_files/Rect2.cs44
-rw-r--r--modules/mono/glue/cs_files/StringExtensions.cs174
-rw-r--r--modules/mono/glue/cs_files/Transform.cs58
-rw-r--r--modules/mono/glue/cs_files/Transform2D.cs82
-rw-r--r--modules/mono/glue/cs_files/Vector2.cs82
-rw-r--r--modules/mono/glue/cs_files/Vector3.cs86
-rw-r--r--modules/mono/godotsharp_dirs.cpp2
-rw-r--r--modules/mono/godotsharp_dirs.h2
-rw-r--r--modules/mono/mono_gc_handle.cpp4
-rw-r--r--modules/mono/mono_gd/gd_mono_internals.cpp2
-rw-r--r--modules/mono/signal_awaiter_utils.cpp6
-rw-r--r--modules/mono/utils/mono_reg_utils.h2
-rw-r--r--modules/mono/utils/string_utils.cpp2
-rw-r--r--modules/opus/audio_stream_opus.cpp2
-rw-r--r--modules/pvr/texture_loader_pvr.cpp6
-rw-r--r--modules/recast/SCsub2
-rw-r--r--modules/regex/doc_classes/RegEx.xml2
-rw-r--r--modules/regex/doc_classes/RegExMatch.xml2
-rw-r--r--modules/squish/image_compress_squish.cpp2
-rw-r--r--modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml13
-rw-r--r--modules/stb_vorbis/doc_classes/ResourceImporterOGGVorbis.xml2
-rw-r--r--modules/svg/SCsub3
-rw-r--r--modules/thekla_unwrap/SCsub69
-rw-r--r--modules/thekla_unwrap/config.py7
-rw-r--r--modules/thekla_unwrap/register_types.cpp115
-rw-r--r--modules/thekla_unwrap/register_types.h31
-rw-r--r--modules/theora/doc_classes/ResourceImporterTheora.xml2
-rw-r--r--modules/theora/doc_classes/VideoStreamTheora.xml6
-rw-r--r--modules/tinyexr/image_loader_tinyexr.cpp25
-rw-r--r--modules/visual_script/doc_classes/VisualScript.xml6
-rw-r--r--modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml30
-rw-r--r--modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml144
-rw-r--r--modules/visual_script/doc_classes/VisualScriptClassConstant.xml30
-rw-r--r--modules/visual_script/doc_classes/VisualScriptComment.xml44
-rw-r--r--modules/visual_script/doc_classes/VisualScriptCondition.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptConstant.xml30
-rw-r--r--modules/visual_script/doc_classes/VisualScriptConstructor.xml26
-rw-r--r--modules/visual_script/doc_classes/VisualScriptCustomNode.xml18
-rw-r--r--modules/visual_script/doc_classes/VisualScriptDeconstruct.xml18
-rw-r--r--modules/visual_script/doc_classes/VisualScriptEditor.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptEmitSignal.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptExpression.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptFunction.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptFunctionCall.xml164
-rw-r--r--modules/visual_script/doc_classes/VisualScriptFunctionState.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptIndexGet.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptIndexSet.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptInputAction.xml38
-rw-r--r--modules/visual_script/doc_classes/VisualScriptIterator.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptLocalVar.xml30
-rw-r--r--modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml30
-rw-r--r--modules/visual_script/doc_classes/VisualScriptMathConstant.xml34
-rw-r--r--modules/visual_script/doc_classes/VisualScriptNode.xml6
-rw-r--r--modules/visual_script/doc_classes/VisualScriptOperator.xml30
-rw-r--r--modules/visual_script/doc_classes/VisualScriptPreload.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptPropertyGet.xml108
-rw-r--r--modules/visual_script/doc_classes/VisualScriptPropertySet.xml146
-rw-r--r--modules/visual_script/doc_classes/VisualScriptResourcePath.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptReturn.xml30
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSceneNode.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSceneTree.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSelect.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSelf.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSequence.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSubCall.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSwitch.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptTypeCast.xml30
-rw-r--r--modules/visual_script/doc_classes/VisualScriptVariableGet.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptVariableSet.xml16
-rw-r--r--modules/visual_script/doc_classes/VisualScriptWhile.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptYield.xml24
-rw-r--r--modules/visual_script/doc_classes/VisualScriptYieldSignal.xml64
-rw-r--r--modules/visual_script/register_types.cpp2
-rw-r--r--modules/visual_script/visual_script.cpp13
-rw-r--r--modules/visual_script/visual_script_editor.cpp8
-rw-r--r--modules/visual_script/visual_script_expression.cpp6
-rw-r--r--modules/visual_script/visual_script_flow_control.cpp6
-rw-r--r--modules/visual_script/visual_script_nodes.cpp12
-rw-r--r--modules/vorbis/audio_stream_ogg_vorbis.cpp2
-rw-r--r--modules/webm/doc_classes/ResourceImporterWebm.xml2
-rw-r--r--modules/webm/doc_classes/VideoStreamWebm.xml6
-rw-r--r--modules/webm/video_stream_webm.cpp40
-rw-r--r--platform/SCsub3
-rw-r--r--platform/android/SCsub3
-rw-r--r--platform/android/build.gradle.template2
-rw-r--r--platform/android/export/export.cpp214
-rw-r--r--platform/android/java/src/org/godotengine/godot/Dictionary.java7
-rw-r--r--platform/android/java/src/org/godotengine/godot/Godot.java812
-rw-r--r--platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java18
-rw-r--r--platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java55
-rw-r--r--platform/android/java/src/org/godotengine/godot/GodotIO.java273
-rw-r--r--platform/android/java/src/org/godotengine/godot/GodotLib.java56
-rw-r--r--platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java25
-rw-r--r--platform/android/java/src/org/godotengine/godot/GodotView.java261
-rw-r--r--platform/android/java/src/org/godotengine/godot/input/GodotEditText.java61
-rw-r--r--platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java3
-rw-r--r--platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java204
-rw-r--r--platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java144
-rw-r--r--platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java352
-rw-r--r--platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java38
-rw-r--r--platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java20
-rw-r--r--platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java30
-rw-r--r--platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java45
-rw-r--r--platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java87
-rw-r--r--platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java38
-rw-r--r--platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java46
-rw-r--r--platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java36
-rw-r--r--platform/android/java/src/org/godotengine/godot/utils/Crypt.java46
-rw-r--r--platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java31
-rw-r--r--platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java207
-rw-r--r--platform/android/java/src/org/godotengine/godot/utils/RequestParams.java34
-rw-r--r--platform/android/java_class_wrapper.cpp2
-rw-r--r--platform/android/power_android.cpp6
-rw-r--r--platform/haiku/SCsub2
-rw-r--r--platform/haiku/haiku_application.cpp4
-rw-r--r--platform/haiku/haiku_direct_window.cpp4
-rw-r--r--platform/haiku/haiku_gl_view.cpp4
-rw-r--r--platform/haiku/os_haiku.cpp1
-rw-r--r--platform/haiku/power_haiku.cpp6
-rw-r--r--platform/iphone/SCsub2
-rw-r--r--platform/iphone/app_delegate.mm3
-rw-r--r--platform/iphone/export/export.cpp19
-rw-r--r--platform/iphone/os_iphone.cpp16
-rw-r--r--platform/iphone/os_iphone.h2
-rw-r--r--platform/iphone/power_iphone.cpp6
-rw-r--r--platform/javascript/SCsub2
-rw-r--r--platform/javascript/dom_keys.h12
-rw-r--r--platform/javascript/export/export.cpp4
-rw-r--r--platform/javascript/javascript_eval.cpp48
-rw-r--r--platform/javascript/os_javascript.cpp4
-rw-r--r--platform/javascript/power_javascript.cpp6
-rw-r--r--platform/osx/SCsub5
-rw-r--r--platform/osx/export/export.cpp3
-rw-r--r--platform/osx/os_osx.h1
-rw-r--r--platform/osx/os_osx.mm6
-rw-r--r--platform/osx/power_osx.cpp6
-rw-r--r--platform/server/SCsub2
-rw-r--r--platform/server/os_server.h1
-rw-r--r--platform/uwp/SCsub2
-rw-r--r--platform/uwp/app.cpp18
-rw-r--r--platform/uwp/export/export.cpp24
-rw-r--r--platform/uwp/gl_context_egl.cpp14
-rw-r--r--platform/uwp/joypad_uwp.cpp6
-rw-r--r--platform/uwp/logo.pngbin1882 -> 1519 bytes
-rw-r--r--platform/uwp/os_uwp.cpp1
-rw-r--r--platform/uwp/power_uwp.cpp6
-rw-r--r--platform/windows/SCsub4
-rw-r--r--platform/windows/crash_handler_win.cpp8
-rw-r--r--platform/windows/detect.py13
-rw-r--r--platform/windows/export/export.cpp126
-rw-r--r--platform/windows/os_windows.cpp111
-rw-r--r--platform/windows/os_windows.h7
-rw-r--r--platform/windows/power_windows.cpp6
-rw-r--r--platform/windows/stream_peer_winsock.cpp4
-rw-r--r--platform/x11/SCsub5
-rw-r--r--platform/x11/context_gl_x11.cpp4
-rw-r--r--platform/x11/detect.py9
-rw-r--r--platform/x11/os_x11.cpp181
-rw-r--r--platform/x11/os_x11.h12
-rw-r--r--platform/x11/power_x11.cpp6
-rw-r--r--scene/2d/animated_sprite.cpp2
-rw-r--r--scene/2d/area_2d.cpp4
-rw-r--r--scene/2d/audio_stream_player_2d.cpp4
-rw-r--r--scene/2d/canvas_item.cpp38
-rw-r--r--scene/2d/canvas_item.h4
-rw-r--r--scene/2d/line_2d.cpp4
-rw-r--r--scene/2d/navigation2d.cpp2
-rw-r--r--scene/2d/navigation2d.h6
-rw-r--r--scene/2d/parallax_layer.cpp16
-rw-r--r--scene/2d/particles_2d.cpp2
-rw-r--r--scene/2d/path_2d.cpp79
-rw-r--r--scene/2d/path_2d.h5
-rw-r--r--scene/2d/physics_body_2d.cpp16
-rw-r--r--scene/2d/ray_cast_2d.cpp29
-rw-r--r--scene/2d/ray_cast_2d.h4
-rw-r--r--scene/2d/tile_map.cpp282
-rw-r--r--scene/2d/tile_map.h37
-rw-r--r--scene/3d/area.cpp4
-rw-r--r--scene/3d/audio_stream_player_3d.cpp4
-rw-r--r--scene/3d/camera.cpp11
-rw-r--r--scene/3d/gi_probe.cpp9
-rw-r--r--scene/3d/light.cpp8
-rw-r--r--scene/3d/light.h4
-rw-r--r--scene/3d/navigation.cpp2
-rw-r--r--scene/3d/navigation.h6
-rw-r--r--scene/3d/particles.cpp42
-rw-r--r--scene/3d/particles.h2
-rw-r--r--scene/3d/physics_body.cpp122
-rw-r--r--scene/3d/physics_body.h27
-rw-r--r--scene/3d/ray_cast.cpp50
-rw-r--r--scene/3d/ray_cast.h6
-rw-r--r--scene/3d/spatial.cpp4
-rw-r--r--scene/3d/vehicle_body.cpp20
-rw-r--r--scene/SCsub2
-rw-r--r--scene/animation/animation_cache.cpp95
-rw-r--r--scene/animation/animation_cache.h2
-rw-r--r--scene/animation/animation_player.cpp129
-rw-r--r--scene/animation/animation_player.h28
-rw-r--r--scene/animation/animation_tree_player.cpp26
-rw-r--r--scene/animation/animation_tree_player.h6
-rw-r--r--scene/animation/tween.cpp128
-rw-r--r--scene/animation/tween.h27
-rw-r--r--scene/animation/tween_interpolaters.cpp22
-rw-r--r--scene/audio/audio_player.cpp2
-rw-r--r--scene/gui/box_container.h8
-rw-r--r--scene/gui/check_box.cpp4
-rw-r--r--scene/gui/color_picker.cpp9
-rw-r--r--scene/gui/color_picker.h1
-rw-r--r--scene/gui/control.cpp11
-rw-r--r--scene/gui/control.h5
-rw-r--r--scene/gui/file_dialog.cpp121
-rw-r--r--scene/gui/file_dialog.h13
-rw-r--r--scene/gui/item_list.cpp27
-rw-r--r--scene/gui/item_list.h2
-rw-r--r--scene/gui/line_edit.cpp4
-rw-r--r--scene/gui/menu_button.cpp1
-rw-r--r--scene/gui/option_button.cpp1
-rw-r--r--scene/gui/popup_menu.cpp6
-rw-r--r--scene/gui/rich_text_label.cpp11
-rw-r--r--scene/gui/scroll_bar.h8
-rw-r--r--scene/gui/scroll_container.cpp2
-rw-r--r--scene/gui/slider.h8
-rw-r--r--scene/gui/split_container.h8
-rw-r--r--scene/gui/text_edit.cpp225
-rw-r--r--scene/gui/text_edit.h7
-rw-r--r--scene/gui/tree.cpp25
-rw-r--r--scene/gui/tree.h2
-rw-r--r--scene/gui/video_player.cpp3
-rw-r--r--[-rwxr-xr-x]scene/main/node.cpp109
-rw-r--r--scene/main/node.h2
-rw-r--r--scene/main/scene_tree.cpp24
-rw-r--r--scene/main/scene_tree.h7
-rw-r--r--scene/main/viewport.cpp37
-rw-r--r--scene/main/viewport.h2
-rw-r--r--scene/register_scene_types.cpp1
-rw-r--r--scene/resources/animation.cpp38
-rw-r--r--scene/resources/animation.h7
-rw-r--r--scene/resources/bit_mask.cpp6
-rw-r--r--scene/resources/box_shape.cpp4
-rw-r--r--scene/resources/capsule_shape.cpp4
-rw-r--r--scene/resources/capsule_shape_2d.cpp4
-rw-r--r--scene/resources/circle_shape_2d.cpp4
-rw-r--r--scene/resources/concave_polygon_shape.cpp4
-rw-r--r--scene/resources/concave_polygon_shape_2d.cpp4
-rw-r--r--scene/resources/convex_polygon_shape.cpp4
-rw-r--r--scene/resources/convex_polygon_shape_2d.cpp4
-rw-r--r--scene/resources/default_theme/default_theme.cpp11
-rw-r--r--scene/resources/default_theme/icon_parent_folder.pngbin0 -> 329 bytes
-rw-r--r--scene/resources/default_theme/theme_data.h8
-rw-r--r--scene/resources/default_theme/tree_bg_disabled.pngbin0 -> 406 bytes
-rw-r--r--scene/resources/dynamic_font.cpp2
-rw-r--r--scene/resources/material.cpp28
-rw-r--r--scene/resources/material.h9
-rw-r--r--scene/resources/mesh.cpp211
-rw-r--r--scene/resources/mesh.h7
-rw-r--r--scene/resources/packed_scene.cpp8
-rw-r--r--scene/resources/plane_shape.cpp4
-rw-r--r--scene/resources/primitive_meshes.cpp2
-rw-r--r--scene/resources/ray_shape.cpp4
-rw-r--r--scene/resources/rectangle_shape_2d.cpp4
-rw-r--r--scene/resources/segment_shape_2d.cpp8
-rw-r--r--scene/resources/shape_line_2d.cpp4
-rw-r--r--scene/resources/sphere_shape.cpp4
-rw-r--r--scene/resources/surface_tool.cpp114
-rw-r--r--scene/resources/surface_tool.h3
-rw-r--r--scene/resources/texture.cpp69
-rw-r--r--scene/resources/texture.h27
-rw-r--r--scene/resources/tile_set.cpp399
-rw-r--r--scene/resources/tile_set.h84
-rw-r--r--scene/resources/world.cpp4
-rw-r--r--servers/SCsub2
-rw-r--r--servers/audio/effects/audio_effect_chorus.cpp2
-rw-r--r--servers/audio/effects/audio_effect_delay.cpp4
-rw-r--r--servers/audio/effects/audio_effect_eq.cpp6
-rw-r--r--servers/audio/effects/audio_effect_eq.h12
-rw-r--r--servers/audio/effects/audio_effect_filter.h28
-rw-r--r--servers/audio/reverb_sw.cpp8
-rw-r--r--servers/audio_server.cpp10
-rw-r--r--servers/physics/area_sw.cpp6
-rw-r--r--servers/physics/body_pair_sw.cpp4
-rw-r--r--servers/physics/body_sw.cpp36
-rw-r--r--servers/physics/body_sw.h6
-rw-r--r--servers/physics/collision_object_sw.cpp4
-rw-r--r--servers/physics/collision_solver_sat.cpp3
-rw-r--r--servers/physics/joints/cone_twist_joint_sw.cpp4
-rw-r--r--servers/physics/joints/generic_6dof_joint_sw.cpp8
-rw-r--r--servers/physics/joints/hinge_joint_sw.cpp8
-rw-r--r--servers/physics/joints/jacobian_entry_sw.h18
-rw-r--r--servers/physics/joints/pin_joint_sw.cpp4
-rw-r--r--servers/physics/joints/slider_joint_sw.cpp6
-rw-r--r--servers/physics/joints_sw.h4
-rw-r--r--servers/physics/physics_server_sw.cpp8
-rw-r--r--servers/physics/physics_server_sw.h4
-rw-r--r--servers/physics/space_sw.cpp36
-rw-r--r--servers/physics/space_sw.h12
-rw-r--r--servers/physics_2d/area_2d_sw.cpp6
-rw-r--r--servers/physics_2d/body_2d_sw.cpp7
-rw-r--r--servers/physics_2d/body_pair_2d_sw.cpp6
-rw-r--r--servers/physics_2d/joints_2d_sw.cpp12
-rw-r--r--servers/physics_2d/joints_2d_sw.h4
-rw-r--r--servers/physics_2d/physics_2d_server_wrap_mt.cpp4
-rw-r--r--servers/physics_2d/space_2d_sw.cpp36
-rw-r--r--servers/physics_2d/space_2d_sw.h12
-rw-r--r--servers/physics_2d_server.cpp53
-rw-r--r--servers/physics_2d_server.h53
-rw-r--r--servers/physics_server.cpp54
-rw-r--r--servers/physics_server.h63
-rw-r--r--servers/server_wrap_mt_common.h26
-rw-r--r--servers/visual/rasterizer.h10
-rw-r--r--servers/visual/shader_language.cpp71
-rw-r--r--servers/visual/shader_language.h12
-rw-r--r--servers/visual/visual_server_canvas.cpp87
-rw-r--r--servers/visual/visual_server_canvas.h1
-rw-r--r--servers/visual/visual_server_raster.cpp4
-rw-r--r--servers/visual/visual_server_raster.h6
-rw-r--r--servers/visual/visual_server_scene.cpp50
-rw-r--r--servers/visual/visual_server_scene.h18
-rw-r--r--servers/visual/visual_server_wrap_mt.cpp49
-rw-r--r--servers/visual/visual_server_wrap_mt.h8
-rw-r--r--servers/visual_server.cpp8
-rw-r--r--servers/visual_server.h5
-rw-r--r--thirdparty/README.md35
-rw-r--r--thirdparty/glad/KHR/khrplatform.h3
-rw-r--r--thirdparty/glad/glad.c25
-rw-r--r--thirdparty/glad/glad/glad.h48
-rw-r--r--thirdparty/thekla_atlas/LICENSE8
-rw-r--r--thirdparty/thekla_atlas/nvconfig.h37
-rw-r--r--thirdparty/thekla_atlas/nvcore/Array.h182
-rw-r--r--thirdparty/thekla_atlas/nvcore/Array.inl452
-rw-r--r--thirdparty/thekla_atlas/nvcore/BitArray.h250
-rw-r--r--thirdparty/thekla_atlas/nvcore/Debug.cpp1347
-rw-r--r--thirdparty/thekla_atlas/nvcore/Debug.h246
-rw-r--r--thirdparty/thekla_atlas/nvcore/DefsGnucDarwin.h57
-rw-r--r--thirdparty/thekla_atlas/nvcore/DefsGnucLinux.h59
-rw-r--r--thirdparty/thekla_atlas/nvcore/DefsGnucWin32.h65
-rw-r--r--thirdparty/thekla_atlas/nvcore/DefsVcWin32.h94
-rw-r--r--thirdparty/thekla_atlas/nvcore/FileSystem.cpp75
-rw-r--r--thirdparty/thekla_atlas/nvcore/FileSystem.h24
-rw-r--r--thirdparty/thekla_atlas/nvcore/ForEach.h71
-rw-r--r--thirdparty/thekla_atlas/nvcore/Hash.h83
-rw-r--r--thirdparty/thekla_atlas/nvcore/HashMap.h174
-rw-r--r--thirdparty/thekla_atlas/nvcore/HashMap.inl550
-rw-r--r--thirdparty/thekla_atlas/nvcore/Memory.cpp153
-rw-r--r--thirdparty/thekla_atlas/nvcore/Memory.h72
-rw-r--r--thirdparty/thekla_atlas/nvcore/Ptr.h322
-rw-r--r--thirdparty/thekla_atlas/nvcore/RadixSort.cpp285
-rw-r--r--thirdparty/thekla_atlas/nvcore/RadixSort.h75
-rw-r--r--thirdparty/thekla_atlas/nvcore/RefCounted.h149
-rw-r--r--thirdparty/thekla_atlas/nvcore/StdStream.h474
-rw-r--r--thirdparty/thekla_atlas/nvcore/StrLib.cpp796
-rw-r--r--thirdparty/thekla_atlas/nvcore/StrLib.h433
-rw-r--r--thirdparty/thekla_atlas/nvcore/Stream.h164
-rw-r--r--thirdparty/thekla_atlas/nvcore/Utils.h315
-rw-r--r--thirdparty/thekla_atlas/nvcore/nvcore.h357
-rw-r--r--thirdparty/thekla_atlas/nvcore/scanf.c641
-rw-r--r--thirdparty/thekla_atlas/nvimage/BitMap.cpp27
-rw-r--r--thirdparty/thekla_atlas/nvimage/BitMap.h87
-rw-r--r--thirdparty/thekla_atlas/nvimage/Image.cpp210
-rw-r--r--thirdparty/thekla_atlas/nvimage/Image.h89
-rw-r--r--thirdparty/thekla_atlas/nvimage/nvimage.h48
-rw-r--r--thirdparty/thekla_atlas/nvmath/Basis.cpp270
-rw-r--r--thirdparty/thekla_atlas/nvmath/Basis.h82
-rw-r--r--thirdparty/thekla_atlas/nvmath/Box.cpp119
-rw-r--r--thirdparty/thekla_atlas/nvmath/Box.h103
-rw-r--r--thirdparty/thekla_atlas/nvmath/Box.inl154
-rw-r--r--thirdparty/thekla_atlas/nvmath/Color.h150
-rw-r--r--thirdparty/thekla_atlas/nvmath/ConvexHull.cpp120
-rw-r--r--thirdparty/thekla_atlas/nvmath/ConvexHull.h17
-rw-r--r--thirdparty/thekla_atlas/nvmath/Fitting.cpp1205
-rw-r--r--thirdparty/thekla_atlas/nvmath/Fitting.h50
-rw-r--r--thirdparty/thekla_atlas/nvmath/KahanSum.h39
-rw-r--r--thirdparty/thekla_atlas/nvmath/Matrix.cpp441
-rw-r--r--thirdparty/thekla_atlas/nvmath/Matrix.h113
-rw-r--r--thirdparty/thekla_atlas/nvmath/Matrix.inl1274
-rw-r--r--thirdparty/thekla_atlas/nvmath/Morton.h83
-rw-r--r--thirdparty/thekla_atlas/nvmath/Plane.cpp27
-rw-r--r--thirdparty/thekla_atlas/nvmath/Plane.h42
-rw-r--r--thirdparty/thekla_atlas/nvmath/Plane.inl50
-rw-r--r--thirdparty/thekla_atlas/nvmath/ProximityGrid.cpp158
-rw-r--r--thirdparty/thekla_atlas/nvmath/ProximityGrid.h99
-rw-r--r--thirdparty/thekla_atlas/nvmath/Quaternion.h213
-rw-r--r--thirdparty/thekla_atlas/nvmath/Random.cpp54
-rw-r--r--thirdparty/thekla_atlas/nvmath/Random.h376
-rw-r--r--thirdparty/thekla_atlas/nvmath/Solver.cpp744
-rw-r--r--thirdparty/thekla_atlas/nvmath/Solver.h24
-rw-r--r--thirdparty/thekla_atlas/nvmath/Sparse.cpp889
-rw-r--r--thirdparty/thekla_atlas/nvmath/Sparse.h204
-rw-r--r--thirdparty/thekla_atlas/nvmath/Sphere.cpp431
-rw-r--r--thirdparty/thekla_atlas/nvmath/Sphere.h43
-rw-r--r--thirdparty/thekla_atlas/nvmath/TypeSerialization.cpp54
-rw-r--r--thirdparty/thekla_atlas/nvmath/TypeSerialization.h35
-rw-r--r--thirdparty/thekla_atlas/nvmath/Vector.cpp4
-rw-r--r--thirdparty/thekla_atlas/nvmath/Vector.h149
-rw-r--r--thirdparty/thekla_atlas/nvmath/Vector.inl919
-rw-r--r--thirdparty/thekla_atlas/nvmath/ftoi.h258
-rw-r--r--thirdparty/thekla_atlas/nvmath/nvmath.h337
-rw-r--r--thirdparty/thekla_atlas/nvmesh/BaseMesh.cpp19
-rw-r--r--thirdparty/thekla_atlas/nvmesh/BaseMesh.h72
-rw-r--r--thirdparty/thekla_atlas/nvmesh/MeshBuilder.cpp1000
-rw-r--r--thirdparty/thekla_atlas/nvmesh/MeshBuilder.h119
-rw-r--r--thirdparty/thekla_atlas/nvmesh/MeshTopology.cpp122
-rw-r--r--thirdparty/thekla_atlas/nvmesh/MeshTopology.h66
-rw-r--r--thirdparty/thekla_atlas/nvmesh/QuadTriMesh.cpp36
-rw-r--r--thirdparty/thekla_atlas/nvmesh/QuadTriMesh.h60
-rw-r--r--thirdparty/thekla_atlas/nvmesh/TriMesh.cpp25
-rw-r--r--thirdparty/thekla_atlas/nvmesh/TriMesh.h51
-rw-r--r--thirdparty/thekla_atlas/nvmesh/geometry/Bounds.cpp54
-rw-r--r--thirdparty/thekla_atlas/nvmesh/geometry/Bounds.h28
-rw-r--r--thirdparty/thekla_atlas/nvmesh/geometry/Measurements.cpp36
-rw-r--r--thirdparty/thekla_atlas/nvmesh/geometry/Measurements.h18
-rw-r--r--thirdparty/thekla_atlas/nvmesh/halfedge/Edge.cpp57
-rw-r--r--thirdparty/thekla_atlas/nvmesh/halfedge/Edge.h70
-rw-r--r--thirdparty/thekla_atlas/nvmesh/halfedge/Face.cpp268
-rw-r--r--thirdparty/thekla_atlas/nvmesh/halfedge/Face.h106
-rw-r--r--thirdparty/thekla_atlas/nvmesh/halfedge/Mesh.cpp1284
-rw-r--r--thirdparty/thekla_atlas/nvmesh/halfedge/Mesh.h274
-rw-r--r--thirdparty/thekla_atlas/nvmesh/halfedge/Vertex.cpp94
-rw-r--r--thirdparty/thekla_atlas/nvmesh/halfedge/Vertex.h221
-rw-r--r--thirdparty/thekla_atlas/nvmesh/nvmesh.cpp2
-rw-r--r--thirdparty/thekla_atlas/nvmesh/nvmesh.h34
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/Atlas.cpp1519
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/Atlas.h186
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/AtlasBuilder.cpp1320
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/AtlasBuilder.h111
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/AtlasPacker.cpp1387
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/AtlasPacker.h63
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/LeastSquaresConformalMap.cpp483
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/LeastSquaresConformalMap.h15
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/OrthogonalProjectionMap.cpp99
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/OrthogonalProjectionMap.h15
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/ParameterizationQuality.cpp323
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/ParameterizationQuality.h56
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/SingleFaceMap.cpp53
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/SingleFaceMap.h18
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/Util.cpp326
-rw-r--r--thirdparty/thekla_atlas/nvmesh/param/Util.h18
-rw-r--r--thirdparty/thekla_atlas/nvmesh/raster/ClippedTriangle.h159
-rw-r--r--thirdparty/thekla_atlas/nvmesh/raster/Raster.cpp626
-rw-r--r--thirdparty/thekla_atlas/nvmesh/raster/Raster.h49
-rw-r--r--thirdparty/thekla_atlas/nvmesh/weld/Snap.cpp100
-rw-r--r--thirdparty/thekla_atlas/nvmesh/weld/Snap.h18
-rw-r--r--thirdparty/thekla_atlas/nvmesh/weld/VertexWeld.cpp205
-rw-r--r--thirdparty/thekla_atlas/nvmesh/weld/VertexWeld.h19
-rw-r--r--thirdparty/thekla_atlas/nvmesh/weld/Weld.h171
-rw-r--r--thirdparty/thekla_atlas/poshlib/posh.c1006
-rw-r--r--thirdparty/thekla_atlas/poshlib/posh.h1030
-rw-r--r--thirdparty/thekla_atlas/thekla/thekla_atlas.cpp271
-rw-r--r--thirdparty/thekla_atlas/thekla/thekla_atlas.h116
-rw-r--r--thirdparty/tinyexr/tinyexr.h482
1210 files changed, 127748 insertions, 42448 deletions
diff --git a/.appveyor.yml b/.appveyor.yml
index dbd56ab7e0..aeee15e652 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -1,7 +1,10 @@
os: Visual Studio 2015
environment:
+ HOME: "%HOMEDRIVE%%HOMEPATH%"
PYTHON: C:\Python27
+ SCONS_CACHE_ROOT: "%HOME%\\scons_cache"
+ SCONS_CACHE_LIMIT: 512
matrix:
- VS: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
GD_PLATFORM: windows
@@ -9,6 +12,9 @@ environment:
TARGET: release_debug
ARCH: amd64
+cache:
+ - "%SCONS_CACHE_ROOT%"
+
install:
- SET "PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
- pip install --egg scons # it will fail on AppVeyor without --egg flag
@@ -19,6 +25,7 @@ before_build:
- python --version
- scons --version
- cl.exe
+ - SET "SCONS_CACHE=%SCONS_CACHE_ROOT%\master"
build_script:
-- scons platform=%GD_PLATFORM% target=%TARGET% tools=%TOOLS% progress=no
+- scons platform=%GD_PLATFORM% target=%TARGET% tools=%TOOLS% verbose=yes progress=no
diff --git a/.clang-format b/.clang-format
index 0407a7aeb3..212bc25109 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,15 +1,14 @@
----
-BasedOnStyle: LLVM
# Commented out parameters are those with the same value as base LLVM style
# We can uncomment them if we want to change their value, or enforce the
-# chosen value in case the base style changes (initial sync: Clang 3.9.1).
-...
-Language: Cpp
+# chosen value in case the base style changes (last sync: Clang 5.0.0).
+---
+### General config, applies to all languages ###
+BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
# AlignConsecutiveAssignments: false
# AlignConsecutiveDeclarations: false
-# AlignEscapedNewlinesLeft: false
+# AlignEscapedNewlines: Right
# AlignOperands: true
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false
@@ -36,22 +35,31 @@ AllowShortIfStatementsOnASingleLine: true
# BeforeCatch: false
# BeforeElse: false
# IndentBraces: false
+# SplitEmptyFunction: true
+# SplitEmptyRecord: true
+# SplitEmptyNamespace: true
# BreakBeforeBinaryOperators: None
# BreakBeforeBraces: Attach
+# BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: false
# BreakConstructorInitializersBeforeComma: false
-# BreakAfterJavaFieldAnnotations: false
+BreakConstructorInitializers: AfterColon
# BreakStringLiterals: true
ColumnLimit: 0
# CommentPragmas: '^ IWYU pragma:'
-# ConstructorInitializerAllOnOneLineOrOnePerLine: false
-# ConstructorInitializerIndentWidth: 4
+# CompactNamespaces: false
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
Cpp11BracedListStyle: false
# DerivePointerAlignment: false
# DisableFormat: false
# ExperimentalAutoDetectBinPacking: false
-# ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
+# FixNamespaceComments: true
+# ForEachMacros:
+# - foreach
+# - Q_FOREACH
+# - BOOST_FOREACH
IncludeCategories:
- Regex: '".*"'
Priority: 1
@@ -59,7 +67,7 @@ IncludeCategories:
Priority: 2
- Regex: '^<.*'
Priority: 3
-# IncludeIsMainRegex: '$'
+# IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: true
IndentWidth: 4
# IndentWrappedFunctionNames: false
@@ -70,19 +78,19 @@ IndentWidth: 4
# MacroBlockEnd: ''
# MaxEmptyLinesToKeep: 1
# NamespaceIndentation: None
-ObjCBlockIndentWidth: 4
-# ObjCSpaceAfterProperty: false
-# ObjCSpaceBeforeProtocolList: true
+# PenaltyBreakAssignment: 2
# PenaltyBreakBeforeFirstCallParameter: 19
# PenaltyBreakComment: 300
# PenaltyBreakFirstLessLess: 120
# PenaltyBreakString: 1000
# PenaltyExcessCharacter: 1000000
# PenaltyReturnTypeOnItsOwnLine: 60
-PointerAlignment: Right
+# PointerAlignment: Right
# ReflowComments: true
-SortIncludes: true
+# SortIncludes: true
+# SortUsingDeclarations: true
# SpaceAfterCStyleCast: false
+# SpaceAfterTemplateKeyword: true
# SpaceBeforeAssignmentOperators: true
# SpaceBeforeParens: ControlStatements
# SpaceInEmptyParentheses: false
@@ -92,7 +100,20 @@ SortIncludes: true
# SpacesInCStyleCastParentheses: false
# SpacesInParentheses: false
# SpacesInSquareBrackets: false
-Standard: Cpp03
TabWidth: 4
UseTab: Always
+---
+### C++ specific config ###
+Language: Cpp
+Standard: Cpp03
+---
+### ObjC specific config ###
+Language: ObjC
+ObjCBlockIndentWidth: 4
+# ObjCSpaceAfterProperty: false
+# ObjCSpaceBeforeProtocolList: true
+---
+### Java specific config ###
+Language: Java
+# BreakAfterJavaFieldAnnotations: false
...
diff --git a/.gitignore b/.gitignore
index 0de1e682a0..cbb0b5b133 100644
--- a/.gitignore
+++ b/.gitignore
@@ -91,6 +91,9 @@ bld/
# Hints for improving IntelliSense, created together with VS project
cpp.hint
+# Visualizers for the VS debugger
+*.natvis
+
#NUNIT
*.VisualState.xml
TestResult.xml
diff --git a/.travis.yml b/.travis.yml
index 974ef93d3f..c11a21aeef 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,29 +4,36 @@ dist: trusty
sudo: false
-cache: ccache
+env:
+ global:
+ - SCONS_CACHE=$HOME/.scons_cache
+ - SCONS_CACHE_LIMIT=1024
+
+cache:
+ directories:
+ - $SCONS_CACHE
matrix:
include:
- env: STATIC_CHECKS=yes
os: linux
compiler: clang
- - env: GODOT_TARGET=x11 TOOLS=yes
+ - env: GODOT_TARGET=x11 TOOLS=yes CACHE_NAME=${GODOT_TARGET}-gcc-tools
os: linux
compiler: gcc
- - env: GODOT_TARGET=x11 TOOLS=no
+ - env: GODOT_TARGET=x11 TOOLS=no CACHE_NAME=${GODOT_TARGET}-clang
os: linux
compiler: clang
- #- env: GODOT_TARGET=windows TOOLS=yes
+ #- env: GODOT_TARGET=windows TOOLS=yes CACHE_NAME=${GODOT_TARGET}-gcc-tools
# os: linux
# compiler: gcc
- - env: GODOT_TARGET=android TOOLS=no
+ - env: GODOT_TARGET=android TOOLS=no CACHE_NAME=${GODOT_TARGET}-gcc
os: linux
compiler: gcc
- - env: GODOT_TARGET=osx TOOLS=yes
- os: osx
- compiler: clang
- #- env: GODOT_TARGET=iphone TOOLS=no
+ #- env: GODOT_TARGET=osx TOOLS=yes CACHE_NAME=${GODOT_TARGET}-clang-tools
+ # os: osx
+ # compiler: clang
+ #- env: GODOT_TARGET=iphone TOOLS=no CACHE_NAME=${GODOT_TARGET}-clang
# os: osx
# compiler: clang
@@ -34,7 +41,7 @@ addons:
apt:
sources:
- ubuntu-toolchain-r-test
- - llvm-toolchain-trusty-3.9
+ - llvm-toolchain-trusty-5.0
packages:
- build-essential
- scons
@@ -48,6 +55,7 @@ addons:
- libssl-dev
- libxinerama-dev
- libxrandr-dev
+ - libxi-dev
# For cross-compiling to Windows.
#- binutils-mingw-w64-i686
@@ -59,7 +67,7 @@ addons:
#- mingw-w64
# For style checks.
- - clang-format-3.9
+ - clang-format-5.0
install:
- if [ "$TRAVIS_OS_NAME" = "linux" ] && [ "$GODOT_TARGET" = "android" ]; then
@@ -67,20 +75,12 @@ install:
fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then
misc/travis/scons-local-osx.sh;
- misc/travis/ccache-osx.sh;
fi
- if [ "$TRAVIS_OS_NAME" = "osx" ] && [ "$GODOT_TARGET" = "android" ]; then
misc/travis/android-tools-osx.sh;
fi
before_script:
- - if [ "$TRAVIS_OS_NAME" = "linux" ]; then
- export CCACHE="/usr/bin/ccache";
- fi
- - if [ "$TRAVIS_OS_NAME" = "osx" ]; then
- export CCACHE="/usr/local/bin/ccache";
- export PATH="/usr/local/opt/ccache/libexec:$PATH";
- fi
- if [ "$GODOT_TARGET" = "android" ]; then
export ANDROID_HOME=$TRAVIS_BUILD_DIR/godot-dev/build-tools/android-sdk;
export ANDROID_NDK_ROOT=$TRAVIS_BUILD_DIR/godot-dev/build-tools/android-ndk;
@@ -92,10 +92,3 @@ script:
else
scons -j2 CC=$CC CXX=$CXX platform=$GODOT_TARGET TOOLS=$TOOLS verbose=yes progress=no;
fi
-
-after_success:
- - if [ "$STATIC_CHECKS" != "yes" ] && [ $(command -v ccache) ]; then
- which ccache;
- ccache --version | grep "ccache version";
- ccache -s;
- fi;
diff --git a/AUTHORS.md b/AUTHORS.md
index 588ce97322..9a373896f8 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -32,6 +32,7 @@ name is available.
Alket Rexhepi (alketii)
Andrea Catania (AndreaCatania)
Andreas Haas (Hinsbart)
+ Andy Moss (MillionOstrich)
Anton Yabchinskiy (a12n)
Aren Villanueva (kurikaesu)
Ariel Manzur (punto-)
@@ -43,6 +44,7 @@ name is available.
Carl Olsson (not-surt)
Dana Olson (adolson)
Daniel J. Ramirez (djrm)
+ Dmitry Koteroff (Krakean)
Дмитрий Сальников (DmitriySalnikov)
Emmanuel Leblond (touilleMan)
Fabio Alessandrelli (Faless)
@@ -53,7 +55,7 @@ name is available.
George Marques (vnen)
Gerrit Großkopf (Grosskopf)
Gilles Roudiere (groud)
- Guilherme Felipe (guilhermefelipecgs)
+ Guilherme Felipe de C. G. da Silva (guilhermefelipecgs)
Hein-Pieter van Braam (hpvb)
Hiroshi Ogawa (hi-ogawa)
Hubert Jarosz (Marqin)
@@ -68,7 +70,7 @@ name is available.
Juan Linietsky (reduz)
Julian Murgia (StraToN)
Kostadin Damyanov (Max-Might)
- L. Krause (eska014)
+ Leon Krause (eska014)
Marc Gilleron (Zylann)
Marcelo Fernandez (marcelofg55)
Mariano Javier Suligoy (MarianoGnu)
@@ -76,6 +78,7 @@ name is available.
Masoud BH (masoudbh3)
Matthias Hölzl (hoelzl)
Max Hilbrunner (mhilbrunner)
+ Michael Alexsander Silva Dias (YeldhamDev)
Nathan Warden (NathanWarden)
Nuno Donato (nunodonato)
Ovnuniarchos
@@ -97,13 +100,18 @@ name is available.
Timo (toger5)
V. Vamsi Krishna (vkbsb)
Vinzenz Feenstra (vinzenz)
+ Will Nations (willnationsdev)
Wilson E. Alvarez (Rubonnek)
+ Yuri Roubinski (Chaosus)
Zher Huei Lee (leezh)
ZuBsPaCe
박한얼 (volzhs)
bruvzg
est31
+ m4nu3lf
marynate
mrezai
+ rraallvv
romulox-x
+ sersoong
yg2f (SuperUserNameMan)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6cb52cf5ff..68ec20a525 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -83,7 +83,7 @@ history when coming from PRs.
Also try to make commits that bring the engine from one stable state to another
stable state, i.e. if your first commit has a bug that you fixed in the second
commit, try to merge them together before making your pull request (see ``git
-rebase -i`` and relevant help about rebasing or ammending commits on the
+rebase -i`` and relevant help about rebasing or amending commits on the
Internet).
This git style guide has some good practices to have in mind:
diff --git a/DONORS.md b/DONORS.md
index 3891a708ce..aea2ef5ae8 100644
--- a/DONORS.md
+++ b/DONORS.md
@@ -12,7 +12,7 @@ generous deed immortalized in the next stable release of Godot Engine.
## Platinum sponsors
-None so far, but your company could be the first! :)
+ Enjin Coin <https://enjincoin.io>
## Gold sponsors
@@ -22,15 +22,16 @@ None so far, but your company could be the first! :)
## Mini sponsors
Andreas
- Andreas Hirschauer
+ Brandon Lamb
Christian Uldall Pedersen
Christoph Woinke
E Hewert
Hein-Pieter van Braam
+ Jamal Alyafei
+ Jordan M Lucas
Matthieu Huvé
Nathan Warden
Neal Gompa (Conan Kudo)
- Olimpiu Metiu
Pascal Julien
Ruslan Mustakov
Slobodan Milnovic
@@ -48,15 +49,19 @@ None so far, but your company could be the first! :)
Officine Pixel S.n.c.
Rémi Verschelde
Stephan Lanfermann
+ Zaven Muradyan
Andreas Schüle
Austen McRae
Bernhard Liebl
+ Cody Brocious
Gerald E Butler
Jahn Johansen
- Jordan M Lucas
+ Johannes Wuensch
Kris Michael
+ Libre-Dépanne
Ranoller
+ Svenne Krap
BanjoNode2D
Chris Serino
@@ -80,40 +85,49 @@ None so far, but your company could be the first! :)
Amanda Haldy
Andreas Haas
- Andres Cuevas
Arnaud Verstuyf
- Bryanna M
Chris Brown
Cody Parker
D
+ Daniel Eliasinski
+ Daniel Langegger
+ Eric Monson
Ezra Theunissen
flesk
François Cantin
Giovanni Solimeno
- Hendrik Mans
Jeppe Zapp
Justin Arnold
Justo Delgado Baudí
Leandro Voltolino
Lucien Boudy
Noah
+ Patrick Schnorbus
+ Pete Goodwin
Ryan Estes
+ Ted
+ Travis Womack
Trent McPheron
## Silver donors
1D_Inc
+ Abe Pazos
+ Alder Stefano
Alessandro Senese
Alex Barsukov
+ Andres Cuevas
Anthony Bongiovanni
Avencherus
Bastian Böhm
Ben Vercammen
Blair Allen
Bryan Stevenson
+ Casey Foote
Christian Baune
Christian Winter
Collin Shooltz
+ Daniel Egger
Daniel Kaplan
David Cravens
David May
@@ -122,11 +136,13 @@ None so far, but your company could be the first! :)
Eric Martini
Fabian Becker
fengjiongmax
+ Francesco Lisi
Frank C. Simmons
+ Fredy Romero Sam
+ G3Dev sàrl
Geequlim
Gerrit Großkopf
Guldoman
- Gustav Dahlström
HardRound
hatniX
HeartBeast
@@ -134,6 +150,7 @@ None so far, but your company could be the first! :)
Hunter Jones
Jaime Ruiz-Borau Vizárraga
Jeff Hungerford
+ Jerry Chen
Jesse Liles
joe513
Jonathon
@@ -146,15 +163,15 @@ None so far, but your company could be the first! :)
Kevin Boyer
Kevin Kamper Meejach Petersen
Klavdij Voncina
- Kobi Malul
Linus Lind Lundgren
Lisandro Lorea
magodev
+ Markus Wiesner
Martin Novák
Matthew Fitzpatrick
- Matthew Valancy
Matthias Hölzl
Max R.R. Collada
+ memoryruins
mhilbrunner
Michael Gringauz
Michael Tintiuc
@@ -172,17 +189,18 @@ None so far, but your company could be the first! :)
Patrick Nafarrete
Paul Mason
Paweł Kowal
- Pete Goodwin
+ Pierre-Igor Berthet
Pietro Vertechi
rayos
Richman Stewart
+ Rodolfo Baeza
+ Roger Burgess
Roger Smith
Roman Tinkov
Sam Van Campenhout
Sasori Olkof
Scott D. Yelich
Sootstone
- TheHappieCat
Theo Cranmore
Thomas Norman
Tom Larrow
diff --git a/SConstruct b/SConstruct
index 856994ef15..b3e0672c94 100644
--- a/SConstruct
+++ b/SConstruct
@@ -121,6 +121,10 @@ env_base.__class__.add_source_files = methods.add_source_files
env_base.__class__.use_windows_spawn_fix = methods.use_windows_spawn_fix
env_base.__class__.split_lib = methods.split_lib
+env_base.__class__.add_shared_library = methods.add_shared_library
+env_base.__class__.add_library = methods.add_library
+env_base.__class__.add_program = methods.add_program
+
env_base["x86_libtheora_opt_gcc"] = False
env_base["x86_libtheora_opt_vc"] = False
@@ -179,6 +183,7 @@ opts.Add(BoolVariable('builtin_opus', "Use the builtin opus library", True))
opts.Add(BoolVariable('builtin_pcre2', "Use the builtin pcre2 library)", True))
opts.Add(BoolVariable('builtin_recast', "Use the builtin recast library", True))
opts.Add(BoolVariable('builtin_squish', "Use the builtin squish library", True))
+opts.Add(BoolVariable('builtin_thekla_atlas', "Use the builtin thekla_altas library", True))
opts.Add(BoolVariable('builtin_zlib', "Use the builtin zlib library", True))
opts.Add(BoolVariable('builtin_zstd', "Use the builtin zstd library", True))
@@ -326,6 +331,8 @@ if selected_platform in platform_list:
env.Append(CCFLAGS=['/W2'] + disable_nonessential_warnings)
else: # 'no'
env.Append(CCFLAGS=['/w'])
+ # Set exception handling model to avoid warnings caused by Windows system headers.
+ env.Append(CCFLAGS=['/EHsc'])
else: # Rest of the world
if (env["warnings"] == 'extra'):
env.Append(CCFLAGS=['-Wall', '-Wextra'])
@@ -432,6 +439,11 @@ if selected_platform in platform_list:
if (True): # FIXME: detect GLES3
env.Append( BUILDERS = { 'GLES3_GLSL' : env.Builder(action = methods.build_gles3_headers, suffix = 'glsl.gen.h',src_suffix = '.glsl') } )
+ scons_cache_path = os.environ.get("SCONS_CACHE")
+ if scons_cache_path != None:
+ CacheDir(scons_cache_path)
+ print("Scons cache enabled... (path: '" + scons_cache_path + "')")
+
Export('env')
# build subdirs, the build order is dependent on link order.
@@ -477,33 +489,118 @@ screen = sys.stdout
node_count = 0
node_count_max = 0
node_count_interval = 1
+node_pruning = 8 # Number of nodes to process before prunning the cache
if ('env' in locals()):
node_count_fname = str(env.Dir('#')) + '/.scons_node_count'
-
-def progress_function(node):
- global node_count, node_count_max, node_count_interval, node_count_fname
- node_count += node_count_interval
- if (node_count_max > 0 and node_count <= node_count_max):
- screen.write('\r[%3d%%] ' % (node_count * 100 / node_count_max))
- screen.flush()
- elif (node_count_max > 0 and node_count > node_count_max):
- screen.write('\r[100%] ')
- screen.flush()
- else:
- screen.write('\r[Initial build] ')
- screen.flush()
+show_progress = env['progress']
+
+import time, math
+
+class cache_progress:
+ # The default is 1 GB cache and 12 hours half life
+ def __init__(self, path = None, limit = 1073741824, half_life = 43200):
+ global node_pruning
+ self.path = path
+ self.limit = limit
+ self.exponent_scale = math.log(2) / half_life
+ if env['verbose'] and path != None:
+ screen.write('Current cache limit is ' + self.convert_size(limit) + ' (used: ' + self.convert_size(self.get_size(path)) + ')\n')
+ self.pruning = node_pruning
+ self.delete(self.file_list())
+
+ def __call__(self, node, *args, **kw):
+ global node_count, node_count_max, node_count_interval, node_count_fname, node_pruning, show_progress
+ if show_progress:
+ # Print the progress percentage
+ node_count += node_count_interval
+ if (node_count_max > 0 and node_count <= node_count_max):
+ screen.write('\r[%3d%%] ' % (node_count * 100 / node_count_max))
+ screen.flush()
+ elif (node_count_max > 0 and node_count > node_count_max):
+ screen.write('\r[100%] ')
+ screen.flush()
+ else:
+ screen.write('\r[Initial build] ')
+ screen.flush()
+ # Prune if the number of nodes processed is 'node_pruning' or bigger
+ self.pruning -= node_count_interval
+ if self.pruning <= 0:
+ self.pruning = node_pruning
+ self.delete(self.file_list())
+
+ def delete(self, files):
+ if len(files) == 0:
+ return
+ if env['verbose']:
+ # Utter something
+ screen.write('\rPurging %d %s from cache...\n' % (len(files), len(files) > 1 and 'files' or 'file'))
+ map(os.remove, files)
+
+ def file_list(self):
+ if self.path == None:
+ # Nothing to do
+ return []
+ # Gather a list of (filename, (size, atime)) within the
+ # cache directory
+ file_stat = [(x, os.stat(x)[6:8]) for x in glob.glob(os.path.join(self.path, '*', '*'))]
+ if file_stat == []:
+ # Nothing to do
+ return []
+ # Weight the cache files by size (assumed to be roughly
+ # proportional to the recompilation time) times an exponential
+ # decay since the ctime, and return a list with the entries
+ # (filename, size, weight).
+ current_time = time.time()
+ file_stat = [(x[0], x[1][0], x[1][0] * math.exp(self.exponent_scale * (x[1][1] - current_time))) for x in file_stat]
+ # Sort by highest weight (most sensible to keep) first
+ file_stat.sort(key=lambda x: x[2], reverse=True)
+ # Search for the first entry where the storage limit is
+ # reached
+ sum, mark = 0, None
+ for i,x in enumerate(file_stat):
+ sum += x[1]
+ if sum > self.limit:
+ mark = i
+ break
+ if mark == None:
+ return []
+ else:
+ return [x[0] for x in file_stat[mark:]]
+
+ def convert_size(self, size_bytes):
+ if size_bytes == 0:
+ return "0 bytes"
+ size_name = ("bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
+ i = int(math.floor(math.log(size_bytes, 1024)))
+ p = math.pow(1024, i)
+ s = round(size_bytes / p, 2)
+ return "%s %s" % (int(s) if i == 0 else s, size_name[i])
+
+ def get_size(self, start_path = '.'):
+ total_size = 0
+ for dirpath, dirnames, filenames in os.walk(start_path):
+ for f in filenames:
+ fp = os.path.join(dirpath, f)
+ total_size += os.path.getsize(fp)
+ return total_size
def progress_finish(target, source, env):
- global node_count
+ global node_count, progressor
with open(node_count_fname, 'w') as f:
f.write('%d\n' % node_count)
+ progressor.delete(progressor.file_list())
-if 'env' in locals() and env['progress']:
- try:
- with open(node_count_fname) as f:
- node_count_max = int(f.readline())
- except:
- pass
- Progress(progress_function, interval = node_count_interval)
- progress_finish_command = Command('progress_finish', [], progress_finish)
- AlwaysBuild(progress_finish_command)
+try:
+ with open(node_count_fname) as f:
+ node_count_max = int(f.readline())
+except:
+ pass
+cache_directory = os.environ.get("SCONS_CACHE")
+# Simple cache pruning, attached to SCons' progress callback. Trim the
+# cache directory to a size not larger than cache_limit.
+cache_limit = float(os.getenv("SCONS_CACHE_LIMIT", 1024)) * 1024 * 1024
+progressor = cache_progress(cache_directory, cache_limit)
+Progress(progressor, interval = node_count_interval)
+
+progress_finish_command = Command('progress_finish', [], progress_finish)
+AlwaysBuild(progress_finish_command)
diff --git a/core/SCsub b/core/SCsub
index e9b21bc71b..1545bc8aeb 100644
--- a/core/SCsub
+++ b/core/SCsub
@@ -105,6 +105,6 @@ SConscript('helper/SCsub')
# Build it all as a library
-lib = env.Library("core", env.core_sources)
+lib = env.add_library("core", env.core_sources)
env.Prepend(LIBS=[lib])
Export('env')
diff --git a/core/array.cpp b/core/array.cpp
index b7d4ae413a..1ccbbae147 100644
--- a/core/array.cpp
+++ b/core/array.cpp
@@ -261,7 +261,7 @@ Array &Array::sort_custom(Object *p_obj, const StringName &p_function) {
SortArray<Variant, _ArrayVariantSortCustom> avs;
avs.compare.obj = p_obj;
avs.compare.func = p_function;
- avs.sort(_p->array.ptr(), _p->array.size());
+ avs.sort(_p->array.ptrw(), _p->array.size());
return *this;
}
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp
index 999befaf67..f6011c3976 100644
--- a/core/bind/core_bind.cpp
+++ b/core/bind/core_bind.cpp
@@ -2694,12 +2694,12 @@ Variant JSONParseResult::get_result() const {
}
void _JSON::_bind_methods() {
- ClassDB::bind_method(D_METHOD("print", "value"), &_JSON::print);
+ ClassDB::bind_method(D_METHOD("print", "value", "indent", "sort_keys"), &_JSON::print, DEFVAL(String()), DEFVAL(false));
ClassDB::bind_method(D_METHOD("parse", "json"), &_JSON::parse);
}
-String _JSON::print(const Variant &p_value) {
- return JSON::print(p_value);
+String _JSON::print(const Variant &p_value, const String &p_indent, bool p_sort_keys) {
+ return JSON::print(p_value, p_indent, p_sort_keys);
}
Ref<JSONParseResult> _JSON::parse(const String &p_json) {
diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h
index 8163b08d76..b642a907fb 100644
--- a/core/bind/core_bind.h
+++ b/core/bind/core_bind.h
@@ -719,7 +719,7 @@ protected:
public:
static _JSON *get_singleton() { return singleton; }
- String print(const Variant &p_value);
+ String print(const Variant &p_value, const String &p_indent = "", bool p_sort_keys = false);
Ref<JSONParseResult> parse(const String &p_json);
_JSON();
diff --git a/core/class_db.cpp b/core/class_db.cpp
index 57e88044b5..edd49fe95f 100644
--- a/core/class_db.cpp
+++ b/core/class_db.cpp
@@ -1036,7 +1036,6 @@ bool ClassDB::get_property(Object *p_object, const StringName &p_property, Varia
r_value = *c;
return true;
}
- //if (check->constant_map.fin)
check = check->inherits_ptr;
}
@@ -1163,24 +1162,6 @@ bool ClassDB::has_method(StringName p_class, StringName p_method, bool p_no_inhe
return false;
}
-bool ClassDB::get_setter_and_type_for_property(const StringName &p_class, const StringName &p_prop, StringName &r_class, StringName &r_setter) {
-
- ClassInfo *type = classes.getptr(p_class);
- ClassInfo *check = type;
- while (check) {
-
- if (check->property_setget.has(p_prop)) {
- r_class = check->name;
- r_setter = check->property_setget[p_prop].setter;
- return true;
- }
-
- check = check->inherits_ptr;
- }
-
- return false;
-}
-
#ifdef DEBUG_METHODS_ENABLED
MethodBind *ClassDB::bind_methodfi(uint32_t p_flags, MethodBind *p_bind, const MethodDefinition &method_name, const Variant **p_defs, int p_defcount) {
StringName mdname = method_name.name;
diff --git a/core/class_db.h b/core/class_db.h
index 24db4c61bb..55fe01ec6d 100644
--- a/core/class_db.h
+++ b/core/class_db.h
@@ -49,10 +49,10 @@ struct MethodDefinition {
StringName name;
Vector<StringName> args;
MethodDefinition() {}
- MethodDefinition(const char *p_name)
- : name(p_name) {}
- MethodDefinition(const StringName &p_name)
- : name(p_name) {}
+ MethodDefinition(const char *p_name) :
+ name(p_name) {}
+ MethodDefinition(const StringName &p_name) :
+ name(p_name) {}
};
MethodDefinition D_METHOD(const char *p_name);
@@ -349,8 +349,6 @@ public:
static StringName get_category(const StringName &p_node);
- static bool get_setter_and_type_for_property(const StringName &p_class, const StringName &p_prop, StringName &r_class, StringName &r_setter);
-
static void set_class_enabled(StringName p_class, bool p_enable);
static bool is_class_enabled(StringName p_class);
diff --git a/core/color.h b/core/color.h
index 972b6a1b33..da2bfdcd98 100644
--- a/core/color.h
+++ b/core/color.h
@@ -101,6 +101,24 @@ struct Color {
return res;
}
+ _FORCE_INLINE_ Color darkened(float p_amount) const {
+
+ Color res = *this;
+ res.r = CLAMP(res.r * (1.0f - p_amount), 0.0, 1.0);
+ res.g = CLAMP(res.g * (1.0f - p_amount), 0.0, 1.0);
+ res.b = CLAMP(res.b * (1.0f - p_amount), 0.0, 1.0);
+ return res;
+ }
+
+ _FORCE_INLINE_ Color lightened(float p_amount) const {
+
+ Color res = *this;
+ res.r = CLAMP(res.r + (1.0f - res.r) * p_amount, 0.0, 1.0);
+ res.g = CLAMP(res.g + (1.0f - res.g) * p_amount, 0.0, 1.0);
+ res.b = CLAMP(res.b + (1.0f - res.b) * p_amount, 0.0, 1.0);
+ return res;
+ }
+
_FORCE_INLINE_ uint32_t to_rgbe9995() const {
const float pow2to9 = 512.0f;
diff --git a/core/command_queue_mt.cpp b/core/command_queue_mt.cpp
index 8e2aa24c22..2028a18a06 100644
--- a/core/command_queue_mt.cpp
+++ b/core/command_queue_mt.cpp
@@ -76,6 +76,30 @@ CommandQueueMT::SyncSemaphore *CommandQueueMT::_alloc_sync_sem() {
return &sync_sems[idx];
}
+bool CommandQueueMT::dealloc_one() {
+tryagain:
+ if (dealloc_ptr == write_ptr) {
+ // The queue is empty
+ return false;
+ }
+
+ uint32_t size = *(uint32_t *)&command_mem[dealloc_ptr];
+
+ if (size == 0) {
+ // End of command buffer wrap down
+ dealloc_ptr = 0;
+ goto tryagain;
+ }
+
+ if (size & 1) {
+ // Still used, nothing can be deallocated
+ return false;
+ }
+
+ dealloc_ptr += (size >> 1) + sizeof(uint32_t);
+ return true;
+}
+
CommandQueueMT::CommandQueueMT(bool p_sync) {
read_ptr = 0;
diff --git a/core/command_queue_mt.h b/core/command_queue_mt.h
index e37d593f9f..af91ee0cd9 100644
--- a/core/command_queue_mt.h
+++ b/core/command_queue_mt.h
@@ -39,6 +39,230 @@
@author Juan Linietsky <reduzio@gmail.com>
*/
+#define COMMA(N) _COMMA_##N
+#define _COMMA_0
+#define _COMMA_1 ,
+#define _COMMA_2 ,
+#define _COMMA_3 ,
+#define _COMMA_4 ,
+#define _COMMA_5 ,
+#define _COMMA_6 ,
+#define _COMMA_7 ,
+#define _COMMA_8 ,
+#define _COMMA_9 ,
+#define _COMMA_10 ,
+#define _COMMA_11 ,
+#define _COMMA_12 ,
+
+// 1-based comma separed list of ITEMs
+#define COMMA_SEP_LIST(ITEM, LENGTH) _COMMA_SEP_LIST_##LENGTH(ITEM)
+#define _COMMA_SEP_LIST_12(ITEM) \
+ _COMMA_SEP_LIST_11(ITEM) \
+ , ITEM(12)
+#define _COMMA_SEP_LIST_11(ITEM) \
+ _COMMA_SEP_LIST_10(ITEM) \
+ , ITEM(11)
+#define _COMMA_SEP_LIST_10(ITEM) \
+ _COMMA_SEP_LIST_9(ITEM) \
+ , ITEM(10)
+#define _COMMA_SEP_LIST_9(ITEM) \
+ _COMMA_SEP_LIST_8(ITEM) \
+ , ITEM(9)
+#define _COMMA_SEP_LIST_8(ITEM) \
+ _COMMA_SEP_LIST_7(ITEM) \
+ , ITEM(8)
+#define _COMMA_SEP_LIST_7(ITEM) \
+ _COMMA_SEP_LIST_6(ITEM) \
+ , ITEM(7)
+#define _COMMA_SEP_LIST_6(ITEM) \
+ _COMMA_SEP_LIST_5(ITEM) \
+ , ITEM(6)
+#define _COMMA_SEP_LIST_5(ITEM) \
+ _COMMA_SEP_LIST_4(ITEM) \
+ , ITEM(5)
+#define _COMMA_SEP_LIST_4(ITEM) \
+ _COMMA_SEP_LIST_3(ITEM) \
+ , ITEM(4)
+#define _COMMA_SEP_LIST_3(ITEM) \
+ _COMMA_SEP_LIST_2(ITEM) \
+ , ITEM(3)
+#define _COMMA_SEP_LIST_2(ITEM) \
+ _COMMA_SEP_LIST_1(ITEM) \
+ , ITEM(2)
+#define _COMMA_SEP_LIST_1(ITEM) \
+ _COMMA_SEP_LIST_0(ITEM) \
+ ITEM(1)
+#define _COMMA_SEP_LIST_0(ITEM)
+
+// 1-based semicolon separed list of ITEMs
+#define SEMIC_SEP_LIST(ITEM, LENGTH) _SEMIC_SEP_LIST_##LENGTH(ITEM)
+#define _SEMIC_SEP_LIST_12(ITEM) \
+ _SEMIC_SEP_LIST_11(ITEM); \
+ ITEM(12)
+#define _SEMIC_SEP_LIST_11(ITEM) \
+ _SEMIC_SEP_LIST_10(ITEM); \
+ ITEM(11)
+#define _SEMIC_SEP_LIST_10(ITEM) \
+ _SEMIC_SEP_LIST_9(ITEM); \
+ ITEM(10)
+#define _SEMIC_SEP_LIST_9(ITEM) \
+ _SEMIC_SEP_LIST_8(ITEM); \
+ ITEM(9)
+#define _SEMIC_SEP_LIST_8(ITEM) \
+ _SEMIC_SEP_LIST_7(ITEM); \
+ ITEM(8)
+#define _SEMIC_SEP_LIST_7(ITEM) \
+ _SEMIC_SEP_LIST_6(ITEM); \
+ ITEM(7)
+#define _SEMIC_SEP_LIST_6(ITEM) \
+ _SEMIC_SEP_LIST_5(ITEM); \
+ ITEM(6)
+#define _SEMIC_SEP_LIST_5(ITEM) \
+ _SEMIC_SEP_LIST_4(ITEM); \
+ ITEM(5)
+#define _SEMIC_SEP_LIST_4(ITEM) \
+ _SEMIC_SEP_LIST_3(ITEM); \
+ ITEM(4)
+#define _SEMIC_SEP_LIST_3(ITEM) \
+ _SEMIC_SEP_LIST_2(ITEM); \
+ ITEM(3)
+#define _SEMIC_SEP_LIST_2(ITEM) \
+ _SEMIC_SEP_LIST_1(ITEM); \
+ ITEM(2)
+#define _SEMIC_SEP_LIST_1(ITEM) \
+ _SEMIC_SEP_LIST_0(ITEM) \
+ ITEM(1)
+#define _SEMIC_SEP_LIST_0(ITEM)
+
+// 1-based space separed list of ITEMs
+#define SPACE_SEP_LIST(ITEM, LENGTH) _SPACE_SEP_LIST_##LENGTH(ITEM)
+#define _SPACE_SEP_LIST_12(ITEM) \
+ _SPACE_SEP_LIST_11(ITEM) \
+ ITEM(12)
+#define _SPACE_SEP_LIST_11(ITEM) \
+ _SPACE_SEP_LIST_10(ITEM) \
+ ITEM(11)
+#define _SPACE_SEP_LIST_10(ITEM) \
+ _SPACE_SEP_LIST_9(ITEM) \
+ ITEM(10)
+#define _SPACE_SEP_LIST_9(ITEM) \
+ _SPACE_SEP_LIST_8(ITEM) \
+ ITEM(9)
+#define _SPACE_SEP_LIST_8(ITEM) \
+ _SPACE_SEP_LIST_7(ITEM) \
+ ITEM(8)
+#define _SPACE_SEP_LIST_7(ITEM) \
+ _SPACE_SEP_LIST_6(ITEM) \
+ ITEM(7)
+#define _SPACE_SEP_LIST_6(ITEM) \
+ _SPACE_SEP_LIST_5(ITEM) \
+ ITEM(6)
+#define _SPACE_SEP_LIST_5(ITEM) \
+ _SPACE_SEP_LIST_4(ITEM) \
+ ITEM(5)
+#define _SPACE_SEP_LIST_4(ITEM) \
+ _SPACE_SEP_LIST_3(ITEM) \
+ ITEM(4)
+#define _SPACE_SEP_LIST_3(ITEM) \
+ _SPACE_SEP_LIST_2(ITEM) \
+ ITEM(3)
+#define _SPACE_SEP_LIST_2(ITEM) \
+ _SPACE_SEP_LIST_1(ITEM) \
+ ITEM(2)
+#define _SPACE_SEP_LIST_1(ITEM) \
+ _SPACE_SEP_LIST_0(ITEM) \
+ ITEM(1)
+#define _SPACE_SEP_LIST_0(ITEM)
+
+#define ARG(N) p##N
+#define PARAM(N) P##N p##N
+#define TYPE_PARAM(N) class P##N
+#define PARAM_DECL(N) typename GetSimpleTypeT<P##N>::type_t p##N
+
+#define DECL_CMD(N) \
+ template <class T, class M COMMA(N) COMMA_SEP_LIST(TYPE_PARAM, N)> \
+ struct Command##N : public CommandBase { \
+ T *instance; \
+ M method; \
+ SEMIC_SEP_LIST(PARAM_DECL, N); \
+ virtual void call() { \
+ (instance->*method)(COMMA_SEP_LIST(ARG, N)); \
+ } \
+ };
+
+#define DECL_CMD_RET(N) \
+ template <class T, class M, COMMA_SEP_LIST(TYPE_PARAM, N) COMMA(N) class R> \
+ struct CommandRet##N : public SyncCommand { \
+ R *ret; \
+ T *instance; \
+ M method; \
+ SEMIC_SEP_LIST(PARAM_DECL, N); \
+ virtual void call() { \
+ *ret = (instance->*method)(COMMA_SEP_LIST(ARG, N)); \
+ } \
+ };
+
+#define DECL_CMD_SYNC(N) \
+ template <class T, class M COMMA(N) COMMA_SEP_LIST(TYPE_PARAM, N)> \
+ struct CommandSync##N : public SyncCommand { \
+ T *instance; \
+ M method; \
+ SEMIC_SEP_LIST(PARAM_DECL, N); \
+ virtual void call() { \
+ (instance->*method)(COMMA_SEP_LIST(ARG, N)); \
+ } \
+ };
+
+#define TYPE_ARG(N) P##N
+#define CMD_TYPE(N) Command##N<T, M COMMA(N) COMMA_SEP_LIST(TYPE_ARG, N)>
+#define CMD_ASSIGN_PARAM(N) cmd->p##N = p##N
+
+#define DECL_PUSH(N) \
+ template <class T, class M COMMA(N) COMMA_SEP_LIST(TYPE_PARAM, N)> \
+ void push(T *p_instance, M p_method COMMA(N) COMMA_SEP_LIST(PARAM, N)) { \
+ CMD_TYPE(N) *cmd = allocate_and_lock<CMD_TYPE(N)>(); \
+ cmd->instance = p_instance; \
+ cmd->method = p_method; \
+ SEMIC_SEP_LIST(CMD_ASSIGN_PARAM, N); \
+ unlock(); \
+ if (sync) sync->post(); \
+ }
+
+#define CMD_RET_TYPE(N) CommandRet##N<T, M, COMMA_SEP_LIST(TYPE_ARG, N) COMMA(N) R>
+
+#define DECL_PUSH_AND_RET(N) \
+ template <class T, class M, COMMA_SEP_LIST(TYPE_PARAM, N) COMMA(N) class R> \
+ void push_and_ret(T *p_instance, M p_method, COMMA_SEP_LIST(PARAM, N) COMMA(N) R *r_ret) { \
+ SyncSemaphore *ss = _alloc_sync_sem(); \
+ CMD_RET_TYPE(N) *cmd = allocate_and_lock<CMD_RET_TYPE(N)>(); \
+ cmd->instance = p_instance; \
+ cmd->method = p_method; \
+ SEMIC_SEP_LIST(CMD_ASSIGN_PARAM, N); \
+ cmd->ret = r_ret; \
+ cmd->sync_sem = ss; \
+ unlock(); \
+ if (sync) sync->post(); \
+ ss->sem->wait(); \
+ }
+
+#define CMD_SYNC_TYPE(N) CommandSync##N<T, M COMMA(N) COMMA_SEP_LIST(TYPE_ARG, N)>
+
+#define DECL_PUSH_AND_SYNC(N) \
+ template <class T, class M COMMA(N) COMMA_SEP_LIST(TYPE_PARAM, N)> \
+ void push_and_sync(T *p_instance, M p_method COMMA(N) COMMA_SEP_LIST(PARAM, N)) { \
+ SyncSemaphore *ss = _alloc_sync_sem(); \
+ CMD_SYNC_TYPE(N) *cmd = allocate_and_lock<CMD_SYNC_TYPE(N)>(); \
+ cmd->instance = p_instance; \
+ cmd->method = p_method; \
+ SEMIC_SEP_LIST(CMD_ASSIGN_PARAM, N); \
+ cmd->sync_sem = ss; \
+ unlock(); \
+ if (sync) sync->post(); \
+ ss->sem->wait(); \
+ }
+
+#define MAX_CMD_PARAMS 12
+
class CommandQueueMT {
struct SyncSemaphore {
@@ -50,551 +274,30 @@ class CommandQueueMT {
struct CommandBase {
virtual void call() = 0;
+ virtual void post(){};
virtual ~CommandBase(){};
};
- template <class T, class M>
- struct Command0 : public CommandBase {
-
- T *instance;
- M method;
-
- virtual void call() { (instance->*method)(); }
- };
-
- template <class T, class M, class P1>
- struct Command1 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
-
- virtual void call() { (instance->*method)(p1); }
- };
-
- template <class T, class M, class P1, class P2>
- struct Command2 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
-
- virtual void call() { (instance->*method)(p1, p2); }
- };
-
- template <class T, class M, class P1, class P2, class P3>
- struct Command3 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
-
- virtual void call() { (instance->*method)(p1, p2, p3); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4>
- struct Command4 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5>
- struct Command5 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4, p5); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6>
- struct Command6 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4, p5, p6); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
- struct Command7 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4, p5, p6, p7); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
- struct Command8 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
- typename GetSimpleTypeT<P8>::type_t p8;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4, p5, p6, p7, p8); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9>
- struct Command9 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
- typename GetSimpleTypeT<P8>::type_t p8;
- typename GetSimpleTypeT<P9>::type_t p9;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4, p5, p6, p7, p8, p9); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10>
- struct Command10 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
- typename GetSimpleTypeT<P8>::type_t p8;
- typename GetSimpleTypeT<P9>::type_t p9;
- typename GetSimpleTypeT<P10>::type_t p10;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11>
- struct Command11 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
- typename GetSimpleTypeT<P8>::type_t p8;
- typename GetSimpleTypeT<P9>::type_t p9;
- typename GetSimpleTypeT<P10>::type_t p10;
- typename GetSimpleTypeT<P11>::type_t p11;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12>
- struct Command12 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
- typename GetSimpleTypeT<P8>::type_t p8;
- typename GetSimpleTypeT<P9>::type_t p9;
- typename GetSimpleTypeT<P10>::type_t p10;
- typename GetSimpleTypeT<P11>::type_t p11;
- typename GetSimpleTypeT<P12>::type_t p12;
-
- virtual void call() { (instance->*method)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); }
- };
-
- /* comands that return */
-
- template <class T, class M, class R>
- struct CommandRet0 : public CommandBase {
-
- T *instance;
- M method;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)();
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class R>
- struct CommandRet1 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)(p1);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class R>
- struct CommandRet2 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)(p1, p2);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class R>
- struct CommandRet3 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)(p1, p2, p3);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class R>
- struct CommandRet4 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)(p1, p2, p3, p4);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class R>
- struct CommandRet5 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)(p1, p2, p3, p4, p5);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class R>
- struct CommandRet6 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)(p1, p2, p3, p4, p5, p6);
- sync->sem->post();
- sync->in_use = false;
- }
- };
+ struct SyncCommand : public CommandBase {
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class R>
- struct CommandRet7 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)(p1, p2, p3, p4, p5, p6, p7);
- sync->sem->post();
- sync->in_use = false;
- }
- };
+ SyncSemaphore *sync_sem;
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class R>
- struct CommandRet8 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
- typename GetSimpleTypeT<P8>::type_t p8;
- R *ret;
- SyncSemaphore *sync;
-
- virtual void call() {
- *ret = (instance->*method)(p1, p2, p3, p4, p5, p6, p7, p8);
- sync->sem->post();
- sync->in_use = false;
+ virtual void post() {
+ sync_sem->sem->post();
+ sync_sem->in_use = false;
}
};
- /** commands that don't return but sync */
+ DECL_CMD(0)
+ SPACE_SEP_LIST(DECL_CMD, 12)
/* comands that return */
+ DECL_CMD_RET(0)
+ SPACE_SEP_LIST(DECL_CMD_RET, 12)
- template <class T, class M>
- struct CommandSync0 : public CommandBase {
-
- T *instance;
- M method;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)();
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1>
- struct CommandSync1 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)(p1);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2>
- struct CommandSync2 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)(p1, p2);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3>
- struct CommandSync3 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)(p1, p2, p3);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4>
- struct CommandSync4 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)(p1, p2, p3, p4);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5>
- struct CommandSync5 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)(p1, p2, p3, p4, p5);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6>
- struct CommandSync6 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)(p1, p2, p3, p4, p5, p6);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
- struct CommandSync7 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)(p1, p2, p3, p4, p5, p6, p7);
- sync->sem->post();
- sync->in_use = false;
- }
- };
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
- struct CommandSync8 : public CommandBase {
-
- T *instance;
- M method;
- typename GetSimpleTypeT<P1>::type_t p1;
- typename GetSimpleTypeT<P2>::type_t p2;
- typename GetSimpleTypeT<P3>::type_t p3;
- typename GetSimpleTypeT<P4>::type_t p4;
- typename GetSimpleTypeT<P5>::type_t p5;
- typename GetSimpleTypeT<P6>::type_t p6;
- typename GetSimpleTypeT<P7>::type_t p7;
- typename GetSimpleTypeT<P8>::type_t p8;
-
- SyncSemaphore *sync;
-
- virtual void call() {
- (instance->*method)(p1, p2, p3, p4, p5, p6, p7, p8);
- sync->sem->post();
- sync->in_use = false;
- }
- };
+ /* commands that don't return but sync */
+ DECL_CMD_SYNC(0)
+ SPACE_SEP_LIST(DECL_CMD_SYNC, 12)
/***** BASE *******/
@@ -607,6 +310,7 @@ class CommandQueueMT {
uint8_t command_mem[COMMAND_MEM_SIZE];
uint32_t read_ptr;
uint32_t write_ptr;
+ uint32_t dealloc_ptr;
SyncSemaphore sync_sems[SYNC_SEMAPHORES];
Mutex *mutex;
Semaphore *sync;
@@ -619,18 +323,30 @@ class CommandQueueMT {
tryagain:
- if (write_ptr < read_ptr) {
- // behind read_ptr, check that there is room
- if ((read_ptr - write_ptr) <= alloc_size)
+ if (write_ptr < dealloc_ptr) {
+ // behind dealloc_ptr, check that there is room
+ if ((dealloc_ptr - write_ptr) <= alloc_size) {
+
+ // There is no more room, try to deallocate something
+ if (dealloc_one()) {
+ goto tryagain;
+ }
return NULL;
- } else if (write_ptr >= read_ptr) {
- // ahead of read_ptr, check that there is room
+ }
+ } else if (write_ptr >= dealloc_ptr) {
+ // ahead of dealloc_ptr, check that there is room
- if ((COMMAND_MEM_SIZE - write_ptr) < alloc_size + 4) {
+ if ((COMMAND_MEM_SIZE - write_ptr) < alloc_size + sizeof(uint32_t)) {
// no room at the end, wrap down;
- if (read_ptr == 0) // don't want write_ptr to become read_ptr
+ if (dealloc_ptr == 0) { // don't want write_ptr to become dealloc_ptr
+
+ // There is no more room, try to deallocate something
+ if (dealloc_one()) {
+ goto tryagain;
+ }
return NULL;
+ }
// if this happens, it's a bug
ERR_FAIL_COND_V((COMMAND_MEM_SIZE - write_ptr) < sizeof(uint32_t), NULL);
@@ -642,9 +358,11 @@ class CommandQueueMT {
goto tryagain;
}
}
- // allocate the size
+ // Allocate the size and the 'in use' bit.
+ // First bit used to mark if command is still in use (1)
+ // or if it has been destroyed and can be deallocated (0).
uint32_t *p = (uint32_t *)&command_mem[write_ptr];
- *p = sizeof(T);
+ *p = (sizeof(T) << 1) | 1;
write_ptr += sizeof(uint32_t);
// allocate the command
T *cmd = memnew_placement(&command_mem[write_ptr], T);
@@ -669,15 +387,16 @@ class CommandQueueMT {
return ret;
}
- bool flush_one() {
-
+ bool flush_one(bool p_lock = true) {
+ if (p_lock) lock();
tryagain:
// tried to read an empty queue
if (read_ptr == write_ptr)
return false;
- uint32_t size = *(uint32_t *)(&command_mem[read_ptr]);
+ uint32_t size_ptr = read_ptr;
+ uint32_t size = *(uint32_t *)&command_mem[read_ptr] >> 1;
if (size == 0) {
//end of ringbuffer, wrap
@@ -689,11 +408,17 @@ class CommandQueueMT {
CommandBase *cmd = reinterpret_cast<CommandBase *>(&command_mem[read_ptr]);
+ read_ptr += size;
+
+ if (p_lock) unlock();
cmd->call();
- cmd->~CommandBase();
+ if (p_lock) lock();
- read_ptr += size;
+ cmd->post();
+ cmd->~CommandBase();
+ *(uint32_t *)&command_mem[size_ptr] &= ~1;
+ if (p_lock) unlock();
return true;
}
@@ -701,681 +426,33 @@ class CommandQueueMT {
void unlock();
void wait_for_flush();
SyncSemaphore *_alloc_sync_sem();
+ bool dealloc_one();
public:
/* NORMAL PUSH COMMANDS */
+ DECL_PUSH(0)
+ SPACE_SEP_LIST(DECL_PUSH, 12)
- template <class T, class M>
- void push(T *p_instance, M p_method) {
-
- Command0<T, M> *cmd = allocate_and_lock<Command0<T, M> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1>
- void push(T *p_instance, M p_method, P1 p1) {
-
- Command1<T, M, P1> *cmd = allocate_and_lock<Command1<T, M, P1> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2>
- void push(T *p_instance, M p_method, P1 p1, P2 p2) {
-
- Command2<T, M, P1, P2> *cmd = allocate_and_lock<Command2<T, M, P1, P2> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3) {
-
- Command3<T, M, P1, P2, P3> *cmd = allocate_and_lock<Command3<T, M, P1, P2, P3> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4) {
-
- Command4<T, M, P1, P2, P3, P4> *cmd = allocate_and_lock<Command4<T, M, P1, P2, P3, P4> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) {
-
- Command5<T, M, P1, P2, P3, P4, P5> *cmd = allocate_and_lock<Command5<T, M, P1, P2, P3, P4, P5> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) {
-
- Command6<T, M, P1, P2, P3, P4, P5, P6> *cmd = allocate_and_lock<Command6<T, M, P1, P2, P3, P4, P5, P6> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) {
-
- Command7<T, M, P1, P2, P3, P4, P5, P6, P7> *cmd = allocate_and_lock<Command7<T, M, P1, P2, P3, P4, P5, P6, P7> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8) {
-
- Command8<T, M, P1, P2, P3, P4, P5, P6, P7, P8> *cmd = allocate_and_lock<Command8<T, M, P1, P2, P3, P4, P5, P6, P7, P8> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
- cmd->p8 = p8;
-
- unlock();
-
- if (sync) sync->post();
- }
+ /* PUSH AND RET COMMANDS */
+ DECL_PUSH_AND_RET(0)
+ SPACE_SEP_LIST(DECL_PUSH_AND_RET, 12)
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9) {
-
- Command9<T, M, P1, P2, P3, P4, P5, P6, P7, P8, P9> *cmd = allocate_and_lock<Command9<T, M, P1, P2, P3, P4, P5, P6, P7, P8, P9> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
- cmd->p8 = p8;
- cmd->p9 = p9;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10) {
-
- Command10<T, M, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> *cmd = allocate_and_lock<Command10<T, M, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
- cmd->p8 = p8;
- cmd->p9 = p9;
- cmd->p10 = p10;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11) {
-
- Command11<T, M, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> *cmd = allocate_and_lock<Command11<T, M, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
- cmd->p8 = p8;
- cmd->p9 = p9;
- cmd->p10 = p10;
- cmd->p11 = p11;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12>
- void push(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12) {
-
- Command12<T, M, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> *cmd = allocate_and_lock<Command12<T, M, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
- cmd->p8 = p8;
- cmd->p9 = p9;
- cmd->p10 = p10;
- cmd->p11 = p11;
- cmd->p12 = p12;
-
- unlock();
-
- if (sync) sync->post();
- }
-
- /*** PUSH AND RET COMMANDS ***/
-
- template <class T, class M, class R>
- void push_and_ret(T *p_instance, M p_method, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet0<T, M, R> *cmd = allocate_and_lock<CommandRet0<T, M, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class R>
- void push_and_ret(T *p_instance, M p_method, P1 p1, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet1<T, M, P1, R> *cmd = allocate_and_lock<CommandRet1<T, M, P1, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class R>
- void push_and_ret(T *p_instance, M p_method, P1 p1, P2 p2, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet2<T, M, P1, P2, R> *cmd = allocate_and_lock<CommandRet2<T, M, P1, P2, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class R>
- void push_and_ret(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet3<T, M, P1, P2, P3, R> *cmd = allocate_and_lock<CommandRet3<T, M, P1, P2, P3, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class R>
- void push_and_ret(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet4<T, M, P1, P2, P3, P4, R> *cmd = allocate_and_lock<CommandRet4<T, M, P1, P2, P3, P4, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class R>
- void push_and_ret(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet5<T, M, P1, P2, P3, P4, P5, R> *cmd = allocate_and_lock<CommandRet5<T, M, P1, P2, P3, P4, P5, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class R>
- void push_and_ret(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet6<T, M, P1, P2, P3, P4, P5, P6, R> *cmd = allocate_and_lock<CommandRet6<T, M, P1, P2, P3, P4, P5, P6, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class R>
- void push_and_ret(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet7<T, M, P1, P2, P3, P4, P5, P6, P7, R> *cmd = allocate_and_lock<CommandRet7<T, M, P1, P2, P3, P4, P5, P6, P7, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class R>
- void push_and_ret(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, R *r_ret) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandRet8<T, M, P1, P2, P3, P4, P5, P6, P7, P8, R> *cmd = allocate_and_lock<CommandRet8<T, M, P1, P2, P3, P4, P5, P6, P7, P8, R> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
- cmd->p8 = p8;
- cmd->ret = r_ret;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M>
- void push_and_sync(T *p_instance, M p_method) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync0<T, M> *cmd = allocate_and_lock<CommandSync0<T, M> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1>
- void push_and_sync(T *p_instance, M p_method, P1 p1) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync1<T, M, P1> *cmd = allocate_and_lock<CommandSync1<T, M, P1> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2>
- void push_and_sync(T *p_instance, M p_method, P1 p1, P2 p2) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync2<T, M, P1, P2> *cmd = allocate_and_lock<CommandSync2<T, M, P1, P2> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3>
- void push_and_sync(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync3<T, M, P1, P2, P3> *cmd = allocate_and_lock<CommandSync3<T, M, P1, P2, P3> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4>
- void push_and_sync(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync4<T, M, P1, P2, P3, P4> *cmd = allocate_and_lock<CommandSync4<T, M, P1, P2, P3, P4> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5>
- void push_and_sync(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync5<T, M, P1, P2, P3, P4, P5> *cmd = allocate_and_lock<CommandSync5<T, M, P1, P2, P3, P4, P5> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6>
- void push_and_sync(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync6<T, M, P1, P2, P3, P4, P5, P6> *cmd = allocate_and_lock<CommandSync6<T, M, P1, P2, P3, P4, P5, P6> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
- void push_and_sync(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync7<T, M, P1, P2, P3, P4, P5, P6, P7> *cmd = allocate_and_lock<CommandSync7<T, M, P1, P2, P3, P4, P5, P6, P7> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
-
- template <class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
- void push_and_sync(T *p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8) {
-
- SyncSemaphore *ss = _alloc_sync_sem();
-
- CommandSync8<T, M, P1, P2, P3, P4, P5, P6, P7, P8> *cmd = allocate_and_lock<CommandSync8<T, M, P1, P2, P3, P4, P5, P6, P7, P8> >();
-
- cmd->instance = p_instance;
- cmd->method = p_method;
- cmd->p1 = p1;
- cmd->p2 = p2;
- cmd->p3 = p3;
- cmd->p4 = p4;
- cmd->p5 = p5;
- cmd->p6 = p6;
- cmd->p7 = p7;
- cmd->p8 = p8;
-
- cmd->sync = ss;
-
- unlock();
-
- if (sync) sync->post();
- ss->sem->wait();
- }
+ /* PUSH AND RET SYNC COMMANDS*/
+ DECL_PUSH_AND_SYNC(0)
+ SPACE_SEP_LIST(DECL_PUSH_AND_SYNC, 12)
void wait_and_flush_one() {
ERR_FAIL_COND(!sync);
sync->wait();
- lock();
flush_one();
- unlock();
}
void flush_all() {
//ERR_FAIL_COND(sync);
lock();
- while (true) {
- bool exit = !flush_one();
- if (exit)
- break;
- }
+ while (flush_one(false))
+ ;
unlock();
}
@@ -1383,4 +460,20 @@ public:
~CommandQueueMT();
};
+#undef ARG
+#undef PARAM
+#undef TYPE_PARAM
+#undef PARAM_DECL
+#undef DECL_CMD
+#undef DECL_CMD_RET
+#undef DECL_CMD_SYNC
+#undef TYPE_ARG
+#undef CMD_TYPE
+#undef CMD_ASSIGN_PARAM
+#undef DECL_PUSH
+#undef CMD_RET_TYPE
+#undef DECL_PUSH_AND_RET
+#undef CMD_SYNC_TYPE
+#undef DECL_CMD_SYNC
+
#endif
diff --git a/core/compressed_translation.cpp b/core/compressed_translation.cpp
index 74565d2e32..5c7b793590 100644
--- a/core/compressed_translation.cpp
+++ b/core/compressed_translation.cpp
@@ -288,7 +288,7 @@ StringName PHashTranslation::get_message(const StringName &p_src_text) const {
CharString uncomp;
uncomp.resize(bucket.elem[idx].uncomp_size + 1);
- smaz_decompress(&sptr[bucket.elem[idx].str_offset], bucket.elem[idx].comp_size, uncomp.ptr(), bucket.elem[idx].uncomp_size);
+ smaz_decompress(&sptr[bucket.elem[idx].str_offset], bucket.elem[idx].comp_size, uncomp.ptrw(), bucket.elem[idx].uncomp_size);
String rstr;
rstr.parse_utf8(uncomp.get_data());
//print_line("Compressed, size: "+itos(bucket.elem[idx].comp_size));
diff --git a/core/core_string_names.cpp b/core/core_string_names.cpp
index feee39225f..3091c80607 100644
--- a/core/core_string_names.cpp
+++ b/core/core_string_names.cpp
@@ -31,22 +31,22 @@
CoreStringNames *CoreStringNames::singleton = NULL;
-CoreStringNames::CoreStringNames()
- : _free(StaticCString::create("free")),
- changed(StaticCString::create("changed")),
- _meta(StaticCString::create("__meta__")),
- _script(StaticCString::create("script")),
- script_changed(StaticCString::create("script_changed")),
- ___pdcdata(StaticCString::create("___pdcdata")),
- __getvar(StaticCString::create("__getvar")),
- _iter_init(StaticCString::create("_iter_init")),
- _iter_next(StaticCString::create("_iter_next")),
- _iter_get(StaticCString::create("_iter_get")),
- get_rid(StaticCString::create("get_rid")),
+CoreStringNames::CoreStringNames() :
+ _free(StaticCString::create("free")),
+ changed(StaticCString::create("changed")),
+ _meta(StaticCString::create("__meta__")),
+ _script(StaticCString::create("script")),
+ script_changed(StaticCString::create("script_changed")),
+ ___pdcdata(StaticCString::create("___pdcdata")),
+ __getvar(StaticCString::create("__getvar")),
+ _iter_init(StaticCString::create("_iter_init")),
+ _iter_next(StaticCString::create("_iter_next")),
+ _iter_get(StaticCString::create("_iter_get")),
+ get_rid(StaticCString::create("get_rid")),
#ifdef TOOLS_ENABLED
- _sections_unfolded(StaticCString::create("_sections_unfolded")),
+ _sections_unfolded(StaticCString::create("_sections_unfolded")),
#endif
- _custom_features(StaticCString::create("_custom_features")) {
+ _custom_features(StaticCString::create("_custom_features")) {
x = StaticCString::create("x");
y = StaticCString::create("y");
diff --git a/core/dictionary.cpp b/core/dictionary.cpp
index 48e65c734f..44fce2474f 100644
--- a/core/dictionary.cpp
+++ b/core/dictionary.cpp
@@ -204,7 +204,9 @@ const Variant *Dictionary::next(const Variant *p_key) const {
if (p_key == NULL) {
// caller wants to get the first element
- return &_p->variant_map.front().key();
+ if (_p->variant_map.front())
+ return &_p->variant_map.front().key();
+ return NULL;
}
OrderedHashMap<Variant, Variant, _DictionaryVariantHash>::Element E = _p->variant_map.find(*p_key);
diff --git a/core/dvector.h b/core/dvector.h
index 1b81ceec5e..66bf0e7862 100644
--- a/core/dvector.h
+++ b/core/dvector.h
@@ -149,7 +149,7 @@ class PoolVector {
}
if (old_alloc->refcount.unref() == true) {
-//this should never happen but..
+ //this should never happen but..
#ifdef DEBUG_ENABLED
MemoryPool::alloc_mutex->lock();
diff --git a/core/engine.h b/core/engine.h
index 4a573c1539..1becebe34a 100644
--- a/core/engine.h
+++ b/core/engine.h
@@ -41,9 +41,9 @@ public:
struct Singleton {
StringName name;
Object *ptr;
- Singleton(const StringName &p_name = StringName(), Object *p_ptr = NULL)
- : name(p_name),
- ptr(p_ptr) {
+ Singleton(const StringName &p_name = StringName(), Object *p_ptr = NULL) :
+ name(p_name),
+ ptr(p_ptr) {
}
};
diff --git a/core/error_list.h b/core/error_list.h
index 50d248b3d0..9a36b27aab 100644
--- a/core/error_list.h
+++ b/core/error_list.h
@@ -87,8 +87,6 @@ enum Error {
ERR_HELP, ///< user requested help!!
ERR_BUG, ///< a bug in the software certainly happened, due to a double check failing or unexpected behavior.
ERR_PRINTER_ON_FIRE, /// the parallel port printer is engulfed in flames
- ERR_OMFG_THIS_IS_VERY_VERY_BAD, ///< shit happens, has never been used, though
- ERR_WTF = ERR_OMFG_THIS_IS_VERY_VERY_BAD ///< short version of the above
};
#endif
diff --git a/core/error_macros.cpp b/core/error_macros.cpp
index 7d85aa9001..a942b1dd2d 100644
--- a/core/error_macros.cpp
+++ b/core/error_macros.cpp
@@ -101,6 +101,6 @@ void _err_print_error(const char *p_function, const char *p_file, int p_line, co
void _err_print_index_error(const char *p_function, const char *p_file, int p_line, int64_t p_index, int64_t p_size, const char *p_index_str, const char *p_size_str, bool fatal) {
String fstr(fatal ? "FATAL: " : "");
- String err(fstr + "Index" + p_index_str + "=" + itos(p_index) + " out of size (" + p_size_str + "=" + itos(p_size) + ")");
+ String err(fstr + "Index " + p_index_str + "=" + itos(p_index) + " out of size (" + p_size_str + "=" + itos(p_size) + ")");
_err_print_error(p_function, p_file, p_line, err.utf8().get_data());
}
diff --git a/core/global_constants.cpp b/core/global_constants.cpp
index 48101c8cf1..a8f6e4da6c 100644
--- a/core/global_constants.cpp
+++ b/core/global_constants.cpp
@@ -45,15 +45,15 @@ struct _GlobalConstant {
_GlobalConstant() {}
#ifdef DEBUG_METHODS_ENABLED
- _GlobalConstant(const StringName &p_enum_name, const char *p_name, int p_value)
- : enum_name(p_enum_name),
- name(p_name),
- value(p_value) {
+ _GlobalConstant(const StringName &p_enum_name, const char *p_name, int p_value) :
+ enum_name(p_enum_name),
+ name(p_name),
+ value(p_value) {
}
#else
- _GlobalConstant(const char *p_name, int p_value)
- : name(p_name),
- value(p_value) {
+ _GlobalConstant(const char *p_name, int p_value) :
+ name(p_name),
+ value(p_value) {
}
#endif
};
@@ -491,7 +491,6 @@ void register_global_constants() {
BIND_GLOBAL_ENUM_CONSTANT(ERR_BUSY);
BIND_GLOBAL_ENUM_CONSTANT(ERR_HELP); ///< user requested help!!
BIND_GLOBAL_ENUM_CONSTANT(ERR_BUG); ///< a bug in the software certainly happened ), due to a double check failing or unexpected behavior.
- BIND_GLOBAL_ENUM_CONSTANT(ERR_WTF);
BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_HINT_NONE);
BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_HINT_RANGE);
diff --git a/core/hash_map.h b/core/hash_map.h
index e100d7a904..a53cb53c84 100644
--- a/core/hash_map.h
+++ b/core/hash_map.h
@@ -63,9 +63,9 @@ public:
TData data;
Pair() {}
- Pair(const TKey &p_key, const TData &p_data)
- : key(p_key),
- data(p_data) {
+ Pair(const TKey &p_key, const TData &p_data) :
+ key(p_key),
+ data(p_data) {
}
};
diff --git a/core/helper/math_fieldwise.cpp b/core/helper/math_fieldwise.cpp
index 2cd8a4f392..9e5eab2ee8 100644
--- a/core/helper/math_fieldwise.cpp
+++ b/core/helper/math_fieldwise.cpp
@@ -44,10 +44,10 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
ERR_FAIL_COND_V(p_target.get_type() != p_source.get_type(), p_target);
- switch (p_source.get_type()) {
+ /* clang-format makes a mess of this macro usage */
+ /* clang-format off */
- /* clang-format makes a mess of this macro usage */
- /* clang-format off */
+ switch (p_source.get_type()) {
case Variant::VECTOR2: {
@@ -174,9 +174,8 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
default: {
ERR_FAIL_V(p_target);
}
-
- /* clang-format on */
}
+ /* clang-format on */
}
#endif // TOOLS_ENABLED
diff --git a/core/io/file_access_buffered_fa.h b/core/io/file_access_buffered_fa.h
index 309fc16d09..67751e840f 100644
--- a/core/io/file_access_buffered_fa.h
+++ b/core/io/file_access_buffered_fa.h
@@ -55,10 +55,10 @@ class FileAccessBufferedFA : public FileAccessBuffered {
// on dvector
//PoolVector<uint8_t>::Write write = cache.buffer.write();
- //f.get_buffer(write.ptr(), p_size);
+ //f.get_buffer(write.ptrw(), p_size);
// on vector
- f.get_buffer(cache.buffer.ptr(), p_size);
+ f.get_buffer(cache.buffer.ptrw(), p_size);
return p_size;
};
diff --git a/core/io/file_access_compressed.cpp b/core/io/file_access_compressed.cpp
index 514e3c65f0..c6f31dc8f0 100644
--- a/core/io/file_access_compressed.cpp
+++ b/core/io/file_access_compressed.cpp
@@ -51,7 +51,7 @@ void FileAccessCompressed::configure(const String &p_magic, Compression::Mode p_
if (write_max > write_buffer_size) { \
write_buffer_size = next_power_of_2(write_max); \
buffer.resize(write_buffer_size); \
- write_ptr = buffer.ptr(); \
+ write_ptr = buffer.ptrw(); \
} \
}
@@ -76,14 +76,14 @@ Error FileAccessCompressed::open_after_magic(FileAccess *p_base) {
comp_buffer.resize(max_bs);
buffer.resize(block_size);
- read_ptr = buffer.ptr();
- f->get_buffer(comp_buffer.ptr(), read_blocks[0].csize);
+ read_ptr = buffer.ptrw();
+ f->get_buffer(comp_buffer.ptrw(), read_blocks[0].csize);
at_end = false;
read_eof = false;
read_block_count = bc;
read_block_size = read_blocks.size() == 1 ? read_total : block_size;
- Compression::decompress(buffer.ptr(), read_block_size, comp_buffer.ptr(), read_blocks[0].csize, cmode);
+ Compression::decompress(buffer.ptrw(), read_block_size, comp_buffer.ptr(), read_blocks[0].csize, cmode);
read_block = 0;
read_pos = 0;
@@ -114,7 +114,7 @@ Error FileAccessCompressed::_open(const String &p_path, int p_mode_flags) {
write_buffer_size = 256;
buffer.resize(256);
write_max = 0;
- write_ptr = buffer.ptr();
+ write_ptr = buffer.ptrw();
//don't store anything else unless it's done saving!
} else {
@@ -160,7 +160,7 @@ void FileAccessCompressed::close() {
Vector<uint8_t> cblock;
cblock.resize(Compression::get_max_compressed_buffer_size(bl, cmode));
- int s = Compression::compress(cblock.ptr(), bp, bl, cmode);
+ int s = Compression::compress(cblock.ptrw(), bp, bl, cmode);
f->store_buffer(cblock.ptr(), s);
block_sizes.push_back(s);
@@ -211,8 +211,8 @@ void FileAccessCompressed::seek(size_t p_position) {
read_block = block_idx;
f->seek(read_blocks[read_block].offset);
- f->get_buffer(comp_buffer.ptr(), read_blocks[read_block].csize);
- Compression::decompress(buffer.ptr(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ f->get_buffer(comp_buffer.ptrw(), read_blocks[read_block].csize);
+ Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
read_block_size = read_block == read_block_count - 1 ? read_total % block_size : block_size;
}
@@ -282,8 +282,8 @@ uint8_t FileAccessCompressed::get_8() const {
if (read_block < read_block_count) {
//read another block of compressed data
- f->get_buffer(comp_buffer.ptr(), read_blocks[read_block].csize);
- Compression::decompress(buffer.ptr(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ f->get_buffer(comp_buffer.ptrw(), read_blocks[read_block].csize);
+ Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
read_block_size = read_block == read_block_count - 1 ? read_total % block_size : block_size;
read_pos = 0;
@@ -315,8 +315,8 @@ int FileAccessCompressed::get_buffer(uint8_t *p_dst, int p_length) const {
if (read_block < read_block_count) {
//read another block of compressed data
- f->get_buffer(comp_buffer.ptr(), read_blocks[read_block].csize);
- Compression::decompress(buffer.ptr(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ f->get_buffer(comp_buffer.ptrw(), read_blocks[read_block].csize);
+ Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
read_block_size = read_block == read_block_count - 1 ? read_total % block_size : block_size;
read_pos = 0;
diff --git a/core/io/file_access_encrypted.cpp b/core/io/file_access_encrypted.cpp
index e5da307153..71ebf57508 100644
--- a/core/io/file_access_encrypted.cpp
+++ b/core/io/file_access_encrypted.cpp
@@ -80,11 +80,11 @@ Error FileAccessEncrypted::open_and_parse(FileAccess *p_base, const Vector<uint8
data.resize(ds);
- uint32_t blen = p_base->get_buffer(data.ptr(), ds);
+ uint32_t blen = p_base->get_buffer(data.ptrw(), ds);
ERR_FAIL_COND_V(blen != ds, ERR_FILE_CORRUPT);
aes256_context ctx;
- aes256_init(&ctx, key.ptr());
+ aes256_init(&ctx, key.ptrw());
for (size_t i = 0; i < ds; i += 16) {
@@ -97,7 +97,7 @@ Error FileAccessEncrypted::open_and_parse(FileAccess *p_base, const Vector<uint8
MD5_CTX md5;
MD5Init(&md5);
- MD5Update(&md5, data.ptr(), data.size());
+ MD5Update(&md5, (uint8_t *)data.ptr(), data.size());
MD5Final(&md5);
ERR_FAIL_COND_V(String::md5(md5.digest) != String::md5(md5d), ERR_FILE_CORRUPT);
@@ -141,17 +141,17 @@ void FileAccessEncrypted::close() {
MD5_CTX md5;
MD5Init(&md5);
- MD5Update(&md5, data.ptr(), data.size());
+ MD5Update(&md5, (uint8_t *)data.ptr(), data.size());
MD5Final(&md5);
compressed.resize(len);
- zeromem(compressed.ptr(), len);
+ zeromem(compressed.ptrw(), len);
for (int i = 0; i < data.size(); i++) {
compressed[i] = data[i];
}
aes256_context ctx;
- aes256_init(&ctx, key.ptr());
+ aes256_init(&ctx, key.ptrw());
for (size_t i = 0; i < len; i += 16) {
diff --git a/core/io/file_access_network.cpp b/core/io/file_access_network.cpp
index a224abd9e7..61a0521cae 100644
--- a/core/io/file_access_network.cpp
+++ b/core/io/file_access_network.cpp
@@ -147,7 +147,7 @@ void FileAccessNetworkClient::_thread_func() {
Vector<uint8_t> block;
block.resize(len);
- client->get_data(block.ptr(), len);
+ client->get_data(block.ptrw(), len);
if (fa) //may have been queued
fa->_set_block(offset, block);
@@ -434,12 +434,12 @@ int FileAccessNetwork::get_buffer(uint8_t *p_dst, int p_length) const {
_queue_page(page + j);
}
- buff = pages[page].buffer.ptr();
+ buff = pages[page].buffer.ptrw();
//queue pages
buffer_mutex->unlock();
}
- buff = pages[page].buffer.ptr();
+ buff = pages[page].buffer.ptrw();
last_page_buff = buff;
last_page = page;
}
diff --git a/core/io/file_access_pack.cpp b/core/io/file_access_pack.cpp
index a7eb8ce6a9..c46e645ed8 100644
--- a/core/io/file_access_pack.cpp
+++ b/core/io/file_access_pack.cpp
@@ -313,9 +313,9 @@ bool FileAccessPack::file_exists(const String &p_name) {
return false;
}
-FileAccessPack::FileAccessPack(const String &p_path, const PackedData::PackedFile &p_file)
- : pf(p_file),
- f(FileAccess::open(pf.pack, FileAccess::READ)) {
+FileAccessPack::FileAccessPack(const String &p_path, const PackedData::PackedFile &p_file) :
+ pf(p_file),
+ f(FileAccess::open(pf.pack, FileAccess::READ)) {
if (!f) {
ERR_EXPLAIN("Can't open pack-referenced file: " + String(pf.pack));
ERR_FAIL_COND(!f);
diff --git a/core/io/json.cpp b/core/io/json.cpp
index 2e9170bc34..82e938d2db 100644
--- a/core/io/json.cpp
+++ b/core/io/json.cpp
@@ -43,7 +43,25 @@ const char *JSON::tk_name[TK_MAX] = {
"EOF",
};
-String JSON::_print_var(const Variant &p_var) {
+static String _make_indent(const String &p_indent, int p_size) {
+
+ String indent_text = "";
+ if (!p_indent.empty()) {
+ for (int i = 0; i < p_size; i++)
+ indent_text += p_indent;
+ }
+ return indent_text;
+}
+
+String JSON::_print_var(const Variant &p_var, const String &p_indent, int p_cur_indent, bool p_sort_keys) {
+
+ String colon = ":";
+ String end_statement = "";
+
+ if (!p_indent.empty()) {
+ colon += " ";
+ end_statement += "\n";
+ }
switch (p_var.get_type()) {
@@ -57,41 +75,50 @@ String JSON::_print_var(const Variant &p_var) {
case Variant::ARRAY: {
String s = "[";
+ s += end_statement;
Array a = p_var;
for (int i = 0; i < a.size(); i++) {
- if (i > 0)
- s += ", ";
- s += _print_var(a[i]);
+ if (i > 0) {
+ s += ",";
+ s += end_statement;
+ }
+ s += _make_indent(p_indent, p_cur_indent + 1) + _print_var(a[i], p_indent, p_cur_indent + 1, p_sort_keys);
}
- s += "]";
+ s += end_statement + _make_indent(p_indent, p_cur_indent) + "]";
return s;
};
case Variant::DICTIONARY: {
String s = "{";
+ s += end_statement;
Dictionary d = p_var;
List<Variant> keys;
d.get_key_list(&keys);
+ if (p_sort_keys)
+ keys.sort();
+
for (List<Variant>::Element *E = keys.front(); E; E = E->next()) {
- if (E != keys.front())
- s += ", ";
- s += _print_var(String(E->get()));
- s += ":";
- s += _print_var(d[E->get()]);
+ if (E != keys.front()) {
+ s += ",";
+ s += end_statement;
+ }
+ s += _make_indent(p_indent, p_cur_indent + 1) + _print_var(String(E->get()), p_indent, p_cur_indent + 1, p_sort_keys);
+ s += colon;
+ s += _print_var(d[E->get()], p_indent, p_cur_indent + 1, p_sort_keys);
}
- s += "}";
+ s += end_statement + _make_indent(p_indent, p_cur_indent) + "}";
return s;
};
default: return "\"" + String(p_var).json_escape() + "\"";
}
}
-String JSON::print(const Variant &p_var) {
+String JSON::print(const Variant &p_var, const String &p_indent, bool p_sort_keys) {
- return _print_var(p_var);
+ return _print_var(p_var, p_indent, 0, p_sort_keys);
}
Error JSON::_get_token(const CharType *p_str, int &index, int p_len, Token &r_token, int &line, String &r_err_str) {
diff --git a/core/io/json.h b/core/io/json.h
index 893a88e264..fbb7875c7c 100644
--- a/core/io/json.h
+++ b/core/io/json.h
@@ -64,7 +64,7 @@ class JSON {
static const char *tk_name[TK_MAX];
- static String _print_var(const Variant &p_var);
+ static String _print_var(const Variant &p_var, const String &p_indent, int p_cur_indent, bool p_sort_keys);
static Error _get_token(const CharType *p_str, int &index, int p_len, Token &r_token, int &line, String &r_err_str);
static Error _parse_value(Variant &value, Token &token, const CharType *p_str, int &index, int p_len, int &line, String &r_err_str);
@@ -72,7 +72,7 @@ class JSON {
static Error _parse_object(Dictionary &object, const CharType *p_str, int &index, int p_len, int &line, String &r_err_str);
public:
- static String print(const Variant &p_var);
+ static String print(const Variant &p_var, const String &p_indent = "", bool p_sort_keys = true);
static Error parse(const String &p_json, Variant &r_ret, String &r_err_str, int &r_err_line);
};
diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp
index 1d9d2dd959..7dd3468c48 100644
--- a/core/io/marshalls.cpp
+++ b/core/io/marshalls.cpp
@@ -159,8 +159,8 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
r_variant = str;
} break;
- // math types
+ // math types
case Variant::VECTOR2: {
ERR_FAIL_COND_V(len < (int)4 * 2, ERR_INVALID_DATA);
@@ -324,7 +324,6 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
ERR_FAIL_COND_V(len < 12, ERR_INVALID_DATA);
Vector<StringName> names;
Vector<StringName> subnames;
- StringName prop;
uint32_t namecount = strlen &= 0x7FFFFFFF;
uint32_t subnamecount = decode_uint32(buf + 4);
@@ -333,9 +332,10 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
len -= 12;
buf += 12;
+ if (flags & 2) // Obsolete format with property seperate from subpath
+ subnamecount++;
+
uint32_t total = namecount + subnamecount;
- if (flags & 2)
- total++;
if (r_len)
(*r_len) += 12;
@@ -359,10 +359,8 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
if (i < namecount)
names.push_back(str);
- else if (i < namecount + subnamecount)
- subnames.push_back(str);
else
- prop = str;
+ subnames.push_back(str);
buf += strlen + pad;
len -= strlen + pad;
@@ -371,7 +369,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
(*r_len) += 4 + strlen + pad;
}
- r_variant = NodePath(names, subnames, flags & 1, prop);
+ r_variant = NodePath(names, subnames, flags & 1);
} else {
//old format, just a string
@@ -919,8 +917,6 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
uint32_t flags = 0;
if (np.is_absolute())
flags |= 1;
- if (np.get_property() != StringName())
- flags |= 2;
encode_uint32(flags, buf + 8);
@@ -930,8 +926,6 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
r_len += 12;
int total = np.get_name_count() + np.get_subname_count();
- if (np.get_property() != StringName())
- total++;
for (int i = 0; i < total; i++) {
@@ -939,10 +933,8 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
if (i < np.get_name_count())
str = np.get_name(i);
- else if (i < np.get_name_count() + np.get_subname_count())
- str = np.get_subname(i - np.get_subname_count());
else
- str = np.get_property();
+ str = np.get_subname(i - np.get_name_count());
CharString utf8 = str.utf8();
@@ -967,8 +959,8 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
_encode_string(p_variant, buf, r_len);
} break;
- // math types
+ // math types
case Variant::VECTOR2: {
if (buf) {
diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp
index 8dc396c362..df0d41ea9d 100644
--- a/core/io/resource_format_binary.cpp
+++ b/core/io/resource_format_binary.cpp
@@ -84,8 +84,10 @@ enum {
OBJECT_INTERNAL_RESOURCE = 2,
OBJECT_EXTERNAL_RESOURCE_INDEX = 3,
//version 2: added 64 bits support for float and int
- FORMAT_VERSION = 2,
- FORMAT_VERSION_CAN_RENAME_DEPS = 1
+ //version 3: changed nodepath encoding
+ FORMAT_VERSION = 3,
+ FORMAT_VERSION_CAN_RENAME_DEPS = 1,
+ FORMAT_VERSION_NO_NODEPATH_PROPERTY = 3,
};
@@ -267,21 +269,22 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) {
Vector<StringName> names;
Vector<StringName> subnames;
- StringName property;
bool absolute;
int name_count = f->get_16();
uint32_t subname_count = f->get_16();
absolute = subname_count & 0x8000;
subname_count &= 0x7FFF;
+ if (ver_format < FORMAT_VERSION_NO_NODEPATH_PROPERTY) {
+ subname_count += 1; // has a property field, so we should count it as well
+ }
for (int i = 0; i < name_count; i++)
names.push_back(_get_string());
for (uint32_t i = 0; i < subname_count; i++)
subnames.push_back(_get_string());
- property = _get_string();
- NodePath np = NodePath(names, subnames, absolute, property);
+ NodePath np = NodePath(names, subnames, absolute);
r_v = np;
@@ -856,7 +859,7 @@ void ResourceInteractiveLoaderBinary::open(FileAccess *p_f) {
uint32_t ver_major = f->get_32();
uint32_t ver_minor = f->get_32();
- uint32_t ver_format = f->get_32();
+ ver_format = f->get_32();
print_bl("big endian: " + itos(big_endian));
#ifdef BIG_ENDIAN_ENABLED
@@ -1454,7 +1457,6 @@ void ResourceFormatSaverBinaryInstance::write_variant(const Variant &p_property,
f->store_32(get_string_index(np.get_name(i)));
for (int i = 0; i < np.get_subname_count(); i++)
f->store_32(get_string_index(np.get_subname(i)));
- f->store_32(get_string_index(np.get_property()));
} break;
case Variant::_RID: {
@@ -1685,7 +1687,6 @@ void ResourceFormatSaverBinaryInstance::_find_resources(const Variant &p_variant
get_string_index(np.get_name(i));
for (int i = 0; i < np.get_subname_count(); i++)
get_string_index(np.get_subname(i));
- get_string_index(np.get_property());
} break;
default: {}
diff --git a/core/io/resource_format_binary.h b/core/io/resource_format_binary.h
index 2316f05b3c..687da0a9b4 100644
--- a/core/io/resource_format_binary.h
+++ b/core/io/resource_format_binary.h
@@ -41,6 +41,7 @@ class ResourceInteractiveLoaderBinary : public ResourceInteractiveLoader {
String res_path;
String type;
Ref<Resource> resource;
+ uint32_t ver_format;
FileAccess *f;
diff --git a/core/io/resource_import.h b/core/io/resource_import.h
index 28489b5d34..166fff85cf 100644
--- a/core/io/resource_import.h
+++ b/core/io/resource_import.h
@@ -90,9 +90,9 @@ public:
PropertyInfo option;
Variant default_value;
- ImportOption(const PropertyInfo &p_info, const Variant &p_default)
- : option(p_info),
- default_value(p_default) {
+ ImportOption(const PropertyInfo &p_info, const Variant &p_default) :
+ option(p_info),
+ default_value(p_default) {
}
ImportOption() {}
};
diff --git a/core/io/stream_peer.cpp b/core/io/stream_peer.cpp
index 2583eb369d..42a258a10d 100644
--- a/core/io/stream_peer.cpp
+++ b/core/io/stream_peer.cpp
@@ -220,7 +220,7 @@ void StreamPeer::put_var(const Variant &p_variant) {
encode_variant(p_variant, NULL, len);
buf.resize(len);
put_32(len);
- encode_variant(p_variant, buf.ptr(), len);
+ encode_variant(p_variant, buf.ptrw(), len);
put_data(buf.ptr(), buf.size());
}
@@ -340,7 +340,7 @@ String StreamPeer::get_utf8_string(int p_bytes) {
Vector<uint8_t> buf;
Error err = buf.resize(p_bytes);
ERR_FAIL_COND_V(err != OK, String());
- err = get_data(buf.ptr(), p_bytes);
+ err = get_data(buf.ptrw(), p_bytes);
ERR_FAIL_COND_V(err != OK, String());
String ret;
@@ -353,7 +353,7 @@ Variant StreamPeer::get_var() {
Vector<uint8_t> var;
Error err = var.resize(len);
ERR_FAIL_COND_V(err != OK, Variant());
- err = get_data(var.ptr(), len);
+ err = get_data(var.ptrw(), len);
ERR_FAIL_COND_V(err != OK, Variant());
Variant ret;
diff --git a/core/list.h b/core/list.h
index da201e9868..448be4a5ab 100644
--- a/core/list.h
+++ b/core/list.h
@@ -306,6 +306,8 @@ public:
if (!p_element->next_ptr) {
_data->last = n;
+ } else {
+ p_element->next_ptr->prev_ptr = n;
}
p_element->next_ptr = n;
@@ -330,6 +332,8 @@ public:
if (!p_element->prev_ptr) {
_data->first = n;
+ } else {
+ p_element->prev_ptr->next_ptr = n;
}
p_element->prev_ptr = n;
diff --git a/core/math/a_star.h b/core/math/a_star.h
index b7b7e54125..1f13f4fae8 100644
--- a/core/math/a_star.h
+++ b/core/math/a_star.h
@@ -59,8 +59,8 @@ class AStar : public Reference {
Point *prev_point;
real_t distance;
- Point()
- : list(this) {}
+ Point() :
+ list(this) {}
};
Map<int, Point *> points;
diff --git a/core/math/aabb.h b/core/math/aabb.h
index c60213496a..c5ba79e172 100644
--- a/core/math/aabb.h
+++ b/core/math/aabb.h
@@ -101,9 +101,9 @@ public:
operator String() const;
_FORCE_INLINE_ AABB() {}
- inline AABB(const Vector3 &p_pos, const Vector3 &p_size)
- : position(p_pos),
- size(p_size) {
+ inline AABB(const Vector3 &p_pos, const Vector3 &p_size) :
+ position(p_pos),
+ size(p_size) {
}
};
diff --git a/core/math/bsp_tree.cpp b/core/math/bsp_tree.cpp
index bdc040160f..ecda777583 100644
--- a/core/math/bsp_tree.cpp
+++ b/core/math/bsp_tree.cpp
@@ -577,11 +577,11 @@ BSP_Tree::BSP_Tree(const PoolVector<Face3> &p_faces, real_t p_error_radius) {
error_radius = p_error_radius;
}
-BSP_Tree::BSP_Tree(const Vector<Node> &p_nodes, const Vector<Plane> &p_planes, const AABB &p_aabb, real_t p_error_radius)
- : nodes(p_nodes),
- planes(p_planes),
- aabb(p_aabb),
- error_radius(p_error_radius) {
+BSP_Tree::BSP_Tree(const Vector<Node> &p_nodes, const Vector<Plane> &p_planes, const AABB &p_aabb, real_t p_error_radius) :
+ nodes(p_nodes),
+ planes(p_planes),
+ aabb(p_aabb),
+ error_radius(p_error_radius) {
}
BSP_Tree::~BSP_Tree() {
diff --git a/core/math/camera_matrix.cpp b/core/math/camera_matrix.cpp
index c5f1d57441..42d2d0373a 100644
--- a/core/math/camera_matrix.cpp
+++ b/core/math/camera_matrix.cpp
@@ -140,6 +140,7 @@ void CameraMatrix::set_for_hmd(int p_eye, real_t p_aspect, real_t p_intraocular_
real_t add = ((f1 + f2) * (p_oversample - 1.0)) / 2.0;
f1 += add;
f2 += add;
+ f3 *= p_oversample;
// always apply KEEP_WIDTH aspect ratio
f3 *= p_aspect;
diff --git a/core/math/face3.cpp b/core/math/face3.cpp
index 070ce77db4..7e586a1fd2 100644
--- a/core/math/face3.cpp
+++ b/core/math/face3.cpp
@@ -195,9 +195,8 @@ bool Face3::intersects_aabb(const AABB &p_aabb) const {
if (!p_aabb.intersects_plane(get_plane()))
return false;
- /** TEST FACE AXIS */
-
#define TEST_AXIS(m_ax) \
+ /** TEST FACE AXIS */ \
{ \
real_t aabb_min = p_aabb.position.m_ax; \
real_t aabb_max = p_aabb.position.m_ax + p_aabb.size.m_ax; \
diff --git a/core/math/face3.h b/core/math/face3.h
index 561fa31238..9a1f6b2c2e 100644
--- a/core/math/face3.h
+++ b/core/math/face3.h
@@ -256,6 +256,4 @@ bool Face3::intersects_aabb2(const AABB &p_aabb) const {
return true;
}
- //this sucks...
-
#endif // FACE3_H
diff --git a/core/math/math_2d.cpp b/core/math/math_2d.cpp
index c77fe96ff2..11003c1cd5 100644
--- a/core/math/math_2d.cpp
+++ b/core/math/math_2d.cpp
@@ -222,35 +222,6 @@ Vector2 Vector2::cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, c
(2.0 * p0 - 5.0 * p1 + 4 * p2 - p3) * t2 +
(-p0 + 3.0 * p1 - 3.0 * p2 + p3) * t3);
return out;
-
- /*
- real_t mu = p_t;
- real_t mu2 = mu*mu;
-
- Vector2 a0 = p_post_b - p_b - p_pre_a + *this;
- Vector2 a1 = p_pre_a - *this - a0;
- Vector2 a2 = p_b - p_pre_a;
- Vector2 a3 = *this;
-
- return ( a0*mu*mu2 + a1*mu2 + a2*mu + a3 );
-*/
- /*
- real_t t = p_t;
- real_t t2 = t*t;
- real_t t3 = t2*t;
-
- real_t a = 2.0*t3- 3.0*t2 + 1;
- real_t b = -2.0*t3+ 3.0*t2;
- real_t c = t3- 2.0*t2 + t;
- real_t d = t3- t2;
-
- Vector2 p_a=*this;
-
- return Vector2(
- (a * p_a.x) + (b *p_b.x) + (c * p_pre_a.x) + (d * p_post_b.x),
- (a * p_a.y) + (b *p_b.y) + (c * p_pre_a.y) + (d * p_post_b.y)
- );
-*/
}
// slide returns the component of the vector along the given plane, specified by its normal vector.
diff --git a/core/math/math_2d.h b/core/math/math_2d.h
index d215df8a43..60351445c0 100644
--- a/core/math/math_2d.h
+++ b/core/math/math_2d.h
@@ -382,16 +382,21 @@ struct Rect2 {
size = end - begin;
}
+ inline Rect2 abs() const {
+
+ return Rect2(Point2(position.x + MIN(size.x, 0), position.y + MIN(size.y, 0)), size.abs());
+ }
+
operator String() const { return String(position) + ", " + String(size); }
Rect2() {}
- Rect2(real_t p_x, real_t p_y, real_t p_width, real_t p_height)
- : position(Point2(p_x, p_y)),
- size(Size2(p_width, p_height)) {
+ Rect2(real_t p_x, real_t p_y, real_t p_width, real_t p_height) :
+ position(Point2(p_x, p_y)),
+ size(Size2(p_width, p_height)) {
}
- Rect2(const Point2 &p_pos, const Size2 &p_size)
- : position(p_pos),
- size(p_size) {
+ Rect2(const Point2 &p_pos, const Size2 &p_size) :
+ position(p_pos),
+ size(p_size) {
}
};
@@ -578,18 +583,18 @@ struct Rect2i {
operator String() const { return String(position) + ", " + String(size); }
operator Rect2() const { return Rect2(position, size); }
- Rect2i(const Rect2 &p_r2)
- : position(p_r2.position),
- size(p_r2.size) {
+ Rect2i(const Rect2 &p_r2) :
+ position(p_r2.position),
+ size(p_r2.size) {
}
Rect2i() {}
- Rect2i(int p_x, int p_y, int p_width, int p_height)
- : position(Point2(p_x, p_y)),
- size(Size2(p_width, p_height)) {
+ Rect2i(int p_x, int p_y, int p_width, int p_height) :
+ position(Point2(p_x, p_y)),
+ size(Size2(p_width, p_height)) {
}
- Rect2i(const Point2 &p_pos, const Size2 &p_size)
- : position(p_pos),
- size(p_size) {
+ Rect2i(const Point2 &p_pos, const Size2 &p_size) :
+ position(p_pos),
+ size(p_size) {
}
};
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h
index bc0b3717ed..80e5805451 100644
--- a/core/math/math_funcs.h
+++ b/core/math/math_funcs.h
@@ -272,7 +272,7 @@ public:
#elif defined(_MSC_VER) && _MSC_VER < 1800
__asm fld a __asm fistp b
-/*#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) )
+ /*#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) )
// use AT&T inline assembly style, document that
// we use memory as output (=m) and input (m)
__asm__ __volatile__ (
diff --git a/core/math/plane.h b/core/math/plane.h
index 559a735817..1d02b5d523 100644
--- a/core/math/plane.h
+++ b/core/math/plane.h
@@ -74,9 +74,9 @@ public:
operator String() const;
_FORCE_INLINE_ Plane() { d = 0; }
- _FORCE_INLINE_ Plane(real_t p_a, real_t p_b, real_t p_c, real_t p_d)
- : normal(p_a, p_b, p_c),
- d(p_d){};
+ _FORCE_INLINE_ Plane(real_t p_a, real_t p_b, real_t p_c, real_t p_d) :
+ normal(p_a, p_b, p_c),
+ d(p_d){};
_FORCE_INLINE_ Plane(const Vector3 &p_normal, real_t p_d);
_FORCE_INLINE_ Plane(const Vector3 &p_point, const Vector3 &p_normal);
@@ -100,14 +100,14 @@ bool Plane::has_point(const Vector3 &p_point, real_t _epsilon) const {
return (dist <= _epsilon);
}
-Plane::Plane(const Vector3 &p_normal, real_t p_d)
- : normal(p_normal),
- d(p_d) {
+Plane::Plane(const Vector3 &p_normal, real_t p_d) :
+ normal(p_normal),
+ d(p_d) {
}
-Plane::Plane(const Vector3 &p_point, const Vector3 &p_normal)
- : normal(p_normal),
- d(p_normal.dot(p_point)) {
+Plane::Plane(const Vector3 &p_point, const Vector3 &p_normal) :
+ normal(p_normal),
+ d(p_normal.dot(p_point)) {
}
Plane::Plane(const Vector3 &p_point1, const Vector3 &p_point2, const Vector3 &p_point3, ClockDirection p_dir) {
diff --git a/core/math/transform.cpp b/core/math/transform.cpp
index 638a39ab73..fb4ca16565 100644
--- a/core/math/transform.cpp
+++ b/core/math/transform.cpp
@@ -208,7 +208,7 @@ Transform::operator String() const {
return basis.operator String() + " - " + origin.operator String();
}
-Transform::Transform(const Basis &p_basis, const Vector3 &p_origin)
- : basis(p_basis),
- origin(p_origin) {
+Transform::Transform(const Basis &p_basis, const Vector3 &p_origin) :
+ basis(p_basis),
+ origin(p_origin) {
}
diff --git a/core/node_path.cpp b/core/node_path.cpp
index 15f950f605..a12152aca6 100644
--- a/core/node_path.cpp
+++ b/core/node_path.cpp
@@ -48,8 +48,6 @@ uint32_t NodePath::hash() const {
h = h ^ ssn[i].hash();
}
- h = h ^ data->property.hash();
-
return h;
}
@@ -81,13 +79,6 @@ StringName NodePath::get_name(int p_idx) const {
return data->path[p_idx];
}
-StringName NodePath::get_property() const {
-
- if (!data)
- return StringName();
- return data->property;
-}
-
int NodePath::get_subname_count() const {
if (!data)
@@ -128,9 +119,6 @@ bool NodePath::operator==(const NodePath &p_path) const {
if (data->subpath.size() != p_path.data->subpath.size())
return false;
- if (data->property != p_path.data->property)
- return false;
-
for (int i = 0; i < data->path.size(); i++) {
if (data->path[i] != p_path.data->path[i])
@@ -184,8 +172,6 @@ NodePath::operator String() const {
ret += ":" + data->subpath[i].operator String();
}
- if (data->property.operator String() != "")
- ret += ":" + String(data->property);
return ret;
}
@@ -205,6 +191,7 @@ Vector<StringName> NodePath::get_names() const {
return data->path;
return Vector<StringName>();
}
+
Vector<StringName> NodePath::get_subnames() const {
if (data)
@@ -212,6 +199,21 @@ Vector<StringName> NodePath::get_subnames() const {
return Vector<StringName>();
}
+StringName NodePath::get_concatenated_subnames() const {
+ ERR_FAIL_COND_V(!data, StringName());
+
+ if (!data->concatenated_subpath) {
+ int spc = data->subpath.size();
+ String concatenated;
+ const StringName *ssn = data->subpath.ptr();
+ for (int i = 0; i < spc; i++) {
+ concatenated += i == 0 ? ssn[i].operator String() : ":" + ssn[i];
+ }
+ data->concatenated_subpath = concatenated;
+ }
+ return data->concatenated_subpath;
+}
+
NodePath NodePath::rel_path_to(const NodePath &p_np) const {
ERR_FAIL_COND_V(!is_absolute(), NodePath());
@@ -250,10 +252,27 @@ NodePath NodePath::rel_path_to(const NodePath &p_np) const {
if (relpath.size() == 0)
relpath.push_back(".");
- return NodePath(relpath, p_np.get_subnames(), false, p_np.get_property());
+ return NodePath(relpath, p_np.get_subnames(), false);
}
-NodePath::NodePath(const Vector<StringName> &p_path, bool p_absolute, const String &p_property) {
+NodePath NodePath::get_as_property_path() const {
+
+ if (!data->path.size()) {
+ return *this;
+ } else {
+ Vector<StringName> new_path = data->subpath;
+
+ String initial_subname = data->path[0];
+ for (size_t i = 1; i < data->path.size(); i++) {
+ initial_subname += i == 0 ? data->path[i].operator String() : "/" + data->path[i];
+ }
+ new_path.insert(0, initial_subname);
+
+ return NodePath(Vector<StringName>(), new_path, false);
+ }
+}
+
+NodePath::NodePath(const Vector<StringName> &p_path, bool p_absolute) {
data = NULL;
@@ -264,14 +283,14 @@ NodePath::NodePath(const Vector<StringName> &p_path, bool p_absolute, const Stri
data->refcount.init();
data->absolute = p_absolute;
data->path = p_path;
- data->property = p_property;
+ data->has_slashes = true;
}
-NodePath::NodePath(const Vector<StringName> &p_path, const Vector<StringName> &p_subpath, bool p_absolute, const String &p_property) {
+NodePath::NodePath(const Vector<StringName> &p_path, const Vector<StringName> &p_subpath, bool p_absolute) {
data = NULL;
- if (p_path.size() == 0)
+ if (p_path.size() == 0 && p_subpath.size() == 0)
return;
data = memnew(Data);
@@ -279,7 +298,7 @@ NodePath::NodePath(const Vector<StringName> &p_path, const Vector<StringName> &p
data->absolute = p_absolute;
data->path = p_path;
data->subpath = p_subpath;
- data->property = p_property;
+ data->has_slashes = true;
}
void NodePath::simplify() {
@@ -320,11 +339,11 @@ NodePath::NodePath(const String &p_path) {
return;
String path = p_path;
- StringName property;
Vector<StringName> subpath;
int absolute = (path[0] == '/') ? 1 : 0;
bool last_is_slash = true;
+ bool has_slashes = false;
int slices = 0;
int subpath_pos = path.find(":");
@@ -337,16 +356,13 @@ NodePath::NodePath(const String &p_path) {
if (path[i] == ':' || path[i] == 0) {
String str = path.substr(from, i - from);
- if (path[i] == ':') {
- if (str == "") {
- ERR_EXPLAIN("Invalid NodePath: " + p_path);
- ERR_FAIL();
- }
- subpath.push_back(str);
- } else {
- //property can be empty
- property = str;
+ if (str == "") {
+ if (path[i] == 0) continue; // Allow end-of-path :
+
+ ERR_EXPLAIN("Invalid NodePath: " + p_path);
+ ERR_FAIL();
}
+ subpath.push_back(str);
from = i + 1;
}
@@ -360,6 +376,7 @@ NodePath::NodePath(const String &p_path) {
if (path[i] == '/') {
last_is_slash = true;
+ has_slashes = true;
} else {
if (last_is_slash)
@@ -369,13 +386,13 @@ NodePath::NodePath(const String &p_path) {
}
}
- if (slices == 0 && !absolute && !property)
+ if (slices == 0 && !absolute && !subpath.size())
return;
data = memnew(Data);
data->refcount.init();
data->absolute = absolute ? true : false;
- data->property = property;
+ data->has_slashes = has_slashes;
data->subpath = subpath;
if (slices == 0)
diff --git a/core/node_path.h b/core/node_path.h
index eb5b9eb6cf..063c4f62db 100644
--- a/core/node_path.h
+++ b/core/node_path.h
@@ -41,10 +41,11 @@ class NodePath {
struct Data {
SafeRefCount refcount;
- StringName property;
Vector<StringName> path;
Vector<StringName> subpath;
+ StringName concatenated_subpath;
bool absolute;
+ bool has_slashes;
};
Data *data;
@@ -53,7 +54,7 @@ class NodePath {
public:
_FORCE_INLINE_ StringName get_sname() const {
- if (data && data->path.size() == 1 && data->subpath.empty() && !data->property) {
+ if (data && data->path.size() == 1 && data->subpath.empty()) {
return data->path[0];
} else {
return operator String();
@@ -67,13 +68,13 @@ public:
StringName get_subname(int p_idx) const;
Vector<StringName> get_names() const;
Vector<StringName> get_subnames() const;
+ StringName get_concatenated_subnames() const;
NodePath rel_path_to(const NodePath &p_np) const;
+ NodePath get_as_property_path() const;
void prepend_period();
- StringName get_property() const;
-
NodePath get_parent() const;
uint32_t hash() const;
@@ -88,8 +89,8 @@ public:
void simplify();
NodePath simplified() const;
- NodePath(const Vector<StringName> &p_path, bool p_absolute, const String &p_property = "");
- NodePath(const Vector<StringName> &p_path, const Vector<StringName> &p_subpath, bool p_absolute, const String &p_property = "");
+ NodePath(const Vector<StringName> &p_path, bool p_absolute);
+ NodePath(const Vector<StringName> &p_path, const Vector<StringName> &p_subpath, bool p_absolute);
NodePath(const NodePath &p_path);
NodePath(const String &p_path);
NodePath();
diff --git a/core/object.cpp b/core/object.cpp
index 823cbe14d4..cf1472243b 100644
--- a/core/object.cpp
+++ b/core/object.cpp
@@ -126,9 +126,9 @@ MethodInfo::operator Dictionary() const {
return d;
}
-MethodInfo::MethodInfo()
- : flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo() :
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
}
MethodInfo MethodInfo::from_dict(const Dictionary &p_dict) {
@@ -164,48 +164,48 @@ MethodInfo MethodInfo::from_dict(const Dictionary &p_dict) {
return mi;
}
-MethodInfo::MethodInfo(const String &p_name)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const String &p_name) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
}
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
}
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
arguments.push_back(p_param2);
}
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
arguments.push_back(p_param2);
arguments.push_back(p_param3);
}
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
arguments.push_back(p_param2);
arguments.push_back(p_param3);
arguments.push_back(p_param4);
}
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
arguments.push_back(p_param2);
arguments.push_back(p_param3);
@@ -213,48 +213,48 @@ MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const
arguments.push_back(p_param5);
}
-MethodInfo::MethodInfo(Variant::Type ret)
- : flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(Variant::Type ret) :
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
return_val.type = ret;
}
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(Variant::Type ret, const String &p_name) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
return_val.type = ret;
}
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
return_val.type = ret;
arguments.push_back(p_param1);
}
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
return_val.type = ret;
arguments.push_back(p_param1);
arguments.push_back(p_param2);
}
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
return_val.type = ret;
arguments.push_back(p_param1);
arguments.push_back(p_param2);
arguments.push_back(p_param3);
}
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
return_val.type = ret;
arguments.push_back(p_param1);
arguments.push_back(p_param2);
@@ -262,10 +262,10 @@ MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyIn
arguments.push_back(p_param4);
}
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
return_val.type = ret;
arguments.push_back(p_param1);
arguments.push_back(p_param2);
@@ -274,56 +274,56 @@ MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyIn
arguments.push_back(p_param5);
}
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name)
- : name(p_name),
- flags(METHOD_FLAG_NORMAL),
- return_val(p_ret),
- id(0) {
+MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name) :
+ name(p_name),
+ flags(METHOD_FLAG_NORMAL),
+ return_val(p_ret),
+ id(0) {
}
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1)
- : name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1) :
+ name(p_name),
+ return_val(p_ret),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
}
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2)
- : name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2) :
+ name(p_name),
+ return_val(p_ret),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
arguments.push_back(p_param2);
}
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3)
- : name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3) :
+ name(p_name),
+ return_val(p_ret),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
arguments.push_back(p_param2);
arguments.push_back(p_param3);
}
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4)
- : name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4) :
+ name(p_name),
+ return_val(p_ret),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
arguments.push_back(p_param2);
arguments.push_back(p_param3);
arguments.push_back(p_param4);
}
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5)
- : name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL),
- id(0) {
+MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5) :
+ name(p_name),
+ return_val(p_ret),
+ flags(METHOD_FLAG_NORMAL),
+ id(0) {
arguments.push_back(p_param1);
arguments.push_back(p_param2);
arguments.push_back(p_param3);
@@ -517,6 +517,80 @@ Variant Object::get(const StringName &p_name, bool *r_valid) const {
}
}
+void Object::set_indexed(const Vector<StringName> &p_names, const Variant &p_value, bool *r_valid) {
+ if (p_names.empty()) {
+ if (r_valid)
+ *r_valid = false;
+ return;
+ }
+ if (p_names.size() == 1) {
+ set(p_names[0], p_value, r_valid);
+ return;
+ }
+
+ bool valid = false;
+ if (!r_valid) r_valid = &valid;
+
+ List<Variant> value_stack;
+
+ value_stack.push_back(get(p_names[0], r_valid));
+
+ if (!*r_valid) {
+ value_stack.clear();
+ return;
+ }
+
+ for (int i = 1; i < p_names.size() - 1; i++) {
+ value_stack.push_back(value_stack.back()->get().get_named(p_names[i], r_valid));
+
+ if (!*r_valid) {
+ value_stack.clear();
+ return;
+ }
+ }
+
+ value_stack.push_back(p_value); // p_names[p_names.size() - 1]
+
+ for (int i = p_names.size() - 1; i > 0; i--) {
+
+ value_stack.back()->prev()->get().set_named(p_names[i], value_stack.back()->get(), r_valid);
+ value_stack.pop_back();
+
+ if (!*r_valid) {
+ value_stack.clear();
+ return;
+ }
+ }
+
+ set(p_names[0], value_stack.back()->get(), r_valid);
+ value_stack.pop_back();
+
+ ERR_FAIL_COND(!value_stack.empty());
+}
+
+Variant Object::get_indexed(const Vector<StringName> &p_names, bool *r_valid) const {
+ if (p_names.empty()) {
+ if (r_valid)
+ *r_valid = false;
+ return Variant();
+ }
+ bool valid = false;
+
+ Variant current_value = get(p_names[0]);
+ for (int i = 1; i < p_names.size(); i++) {
+ current_value = current_value.get_named(p_names[i], &valid);
+
+ if (!valid) {
+ if (r_valid)
+ *r_valid = false;
+ return Variant();
+ }
+ }
+ if (r_valid)
+ *r_valid = true;
+ return current_value;
+}
+
void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) const {
if (script_instance && p_reversed) {
@@ -744,7 +818,7 @@ Variant Object::callv(const StringName &p_method, const Array &p_args) {
}
Variant::CallError ce;
- return call(p_method, argptrs.ptr(), p_args.size(), ce);
+ return call(p_method, (const Variant **)argptrs.ptr(), p_args.size(), ce);
}
Variant Object::call(const StringName &p_name, VARIANT_ARG_DECLARE) {
@@ -1109,7 +1183,7 @@ Error Object::emit_signal(const StringName &p_name, const Variant **p_args, int
bind_mem[p_argcount + j] = &c.binds[j];
}
- args = bind_mem.ptr();
+ args = (const Variant **)bind_mem.ptr();
argc = bind_mem.size();
}
@@ -1416,6 +1490,16 @@ Variant Object::_get_bind(const String &p_name) const {
return get(p_name);
}
+void Object::_set_indexed_bind(const NodePath &p_name, const Variant &p_value) {
+
+ set_indexed(p_name.get_as_property_path().get_subnames(), p_value);
+}
+
+Variant Object::_get_indexed_bind(const NodePath &p_name) const {
+
+ return get_indexed(p_name.get_as_property_path().get_subnames());
+}
+
void Object::initialize_class() {
static bool initialized = false;
@@ -1513,6 +1597,8 @@ void Object::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_class", "type"), &Object::is_class);
ClassDB::bind_method(D_METHOD("set", "property", "value"), &Object::_set_bind);
ClassDB::bind_method(D_METHOD("get", "property"), &Object::_get_bind);
+ ClassDB::bind_method(D_METHOD("set_indexed", "property", "value"), &Object::_set_indexed_bind);
+ ClassDB::bind_method(D_METHOD("get_indexed", "property"), &Object::_get_indexed_bind);
ClassDB::bind_method(D_METHOD("get_property_list"), &Object::_get_property_list_bind);
ClassDB::bind_method(D_METHOD("get_method_list"), &Object::_get_method_list_bind);
ClassDB::bind_method(D_METHOD("notification", "what", "reversed"), &Object::notification, DEFVAL(false));
@@ -1661,6 +1747,50 @@ Variant::Type Object::get_static_property_type(const StringName &p_property, boo
return Variant::NIL;
}
+Variant::Type Object::get_static_property_type_indexed(const Vector<StringName> &p_path, bool *r_valid) const {
+
+ if (p_path.size() == 0) {
+ if (r_valid)
+ *r_valid = false;
+
+ return Variant::NIL;
+ }
+
+ bool valid = false;
+ Variant::Type t = get_static_property_type(p_path[0], &valid);
+ if (!valid) {
+ if (r_valid)
+ *r_valid = false;
+
+ return Variant::NIL;
+ }
+
+ Variant::CallError ce;
+ Variant check = Variant::construct(t, NULL, 0, ce);
+
+ for (int i = 1; i < p_path.size(); i++) {
+ if (check.get_type() == Variant::OBJECT || check.get_type() == Variant::DICTIONARY || check.get_type() == Variant::ARRAY) {
+ // We cannot be sure about the type of properties this types can have
+ if (r_valid)
+ *r_valid = false;
+ return Variant::NIL;
+ }
+
+ check = check.get_named(p_path[i], &valid);
+
+ if (!valid) {
+ if (r_valid)
+ *r_valid = false;
+ return Variant::NIL;
+ }
+ }
+
+ if (r_valid)
+ *r_valid = true;
+
+ return check.get_type();
+}
+
bool Object::is_queued_for_deletion() const {
return _is_queued_for_deletion;
}
diff --git a/core/object.h b/core/object.h
index 7af2c78fc3..3d93953227 100644
--- a/core/object.h
+++ b/core/object.h
@@ -109,10 +109,11 @@ enum PropertyUsageFlags {
PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE = 1 << 17,
PROPERTY_USAGE_CLASS_IS_ENUM = 1 << 18,
PROPERTY_USAGE_NIL_IS_VARIANT = 1 << 19,
+ PROPERTY_USAGE_INTERNAL = 1 << 20,
PROPERTY_USAGE_DEFAULT = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_NETWORK,
PROPERTY_USAGE_DEFAULT_INTL = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_NETWORK | PROPERTY_USAGE_INTERNATIONALIZED,
- PROPERTY_USAGE_NOEDITOR = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_NETWORK,
+ PROPERTY_USAGE_NOEDITOR = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_NETWORK | PROPERTY_USAGE_INTERNAL,
};
#define ADD_SIGNAL(m_signal) ClassDB::add_signal(get_class_static(), m_signal)
@@ -143,18 +144,18 @@ struct PropertyInfo {
static PropertyInfo from_dict(const Dictionary &p_dict);
- PropertyInfo()
- : type(Variant::NIL),
- hint(PROPERTY_HINT_NONE),
- usage(PROPERTY_USAGE_DEFAULT) {
+ PropertyInfo() :
+ type(Variant::NIL),
+ hint(PROPERTY_HINT_NONE),
+ usage(PROPERTY_USAGE_DEFAULT) {
}
- PropertyInfo(Variant::Type p_type, const String p_name, PropertyHint p_hint = PROPERTY_HINT_NONE, const String &p_hint_string = "", uint32_t p_usage = PROPERTY_USAGE_DEFAULT, const StringName &p_class_name = StringName())
- : type(p_type),
- name(p_name),
- hint(p_hint),
- hint_string(p_hint_string),
- usage(p_usage) {
+ PropertyInfo(Variant::Type p_type, const String p_name, PropertyHint p_hint = PROPERTY_HINT_NONE, const String &p_hint_string = "", uint32_t p_usage = PROPERTY_USAGE_DEFAULT, const StringName &p_class_name = StringName()) :
+ type(p_type),
+ name(p_name),
+ hint(p_hint),
+ hint_string(p_hint_string),
+ usage(p_usage) {
if (hint == PROPERTY_HINT_RESOURCE_TYPE) {
class_name = hint_string;
@@ -163,11 +164,11 @@ struct PropertyInfo {
}
}
- PropertyInfo(const StringName &p_class_name)
- : type(Variant::OBJECT),
- class_name(p_class_name),
- hint(PROPERTY_HINT_NONE),
- usage(PROPERTY_USAGE_DEFAULT) {
+ PropertyInfo(const StringName &p_class_name) :
+ type(Variant::OBJECT),
+ class_name(p_class_name),
+ hint(PROPERTY_HINT_NONE),
+ usage(PROPERTY_USAGE_DEFAULT) {
}
bool operator<(const PropertyInfo &p_info) const {
@@ -427,9 +428,9 @@ private:
_FORCE_INLINE_ bool operator<(const Target &p_target) const { return (_id == p_target._id) ? (method < p_target.method) : (_id < p_target._id); }
- Target(const ObjectID &p_id, const StringName &p_method)
- : _id(p_id),
- method(p_method) {
+ Target(const ObjectID &p_id, const StringName &p_method) :
+ _id(p_id),
+ method(p_method) {
}
Target() { _id = 0; }
};
@@ -477,6 +478,8 @@ private:
Array _get_incoming_connections() const;
void _set_bind(const String &p_set, const Variant &p_value);
Variant _get_bind(const String &p_name) const;
+ void _set_indexed_bind(const NodePath &p_name, const Variant &p_value);
+ Variant _get_indexed_bind(const NodePath &p_name) const;
void *_script_instance_bindings[MAX_SCRIPT_INSTANCE_BINDINGS];
@@ -627,6 +630,8 @@ public:
void set(const StringName &p_name, const Variant &p_value, bool *r_valid = NULL);
Variant get(const StringName &p_name, bool *r_valid = NULL) const;
+ void set_indexed(const Vector<StringName> &p_names, const Variant &p_value, bool *r_valid = NULL);
+ Variant get_indexed(const Vector<StringName> &p_names, bool *r_valid = NULL) const;
void get_property_list(List<PropertyInfo> *p_list, bool p_reversed = false) const;
@@ -687,6 +692,7 @@ public:
bool is_blocking_signals() const;
Variant::Type get_static_property_type(const StringName &p_property, bool *r_valid = NULL) const;
+ Variant::Type get_static_property_type_indexed(const Vector<StringName> &p_path, bool *r_valid = NULL) const;
virtual void get_translatable_strings(List<String> *p_strings) const;
diff --git a/core/ordered_hash_map.h b/core/ordered_hash_map.h
index 1ed5a5d369..fed16809e6 100644
--- a/core/ordered_hash_map.h
+++ b/core/ordered_hash_map.h
@@ -68,8 +68,10 @@ public:
}
public:
- _FORCE_INLINE_ Element()
- : list_element(NULL), prev_element(NULL), next_element(NULL) {
+ _FORCE_INLINE_ Element() :
+ list_element(NULL),
+ prev_element(NULL),
+ next_element(NULL) {
}
Element next() const {
@@ -80,10 +82,10 @@ public:
return Element(prev_element);
}
- Element(const Element &other)
- : list_element(other.list_element),
- prev_element(other.prev_element),
- next_element(other.next_element) {
+ Element(const Element &other) :
+ list_element(other.list_element),
+ prev_element(other.prev_element),
+ next_element(other.next_element) {
}
Element &operator=(const Element &other) {
@@ -135,17 +137,17 @@ public:
const typename InternalList::Element *list_element;
- ConstElement(const typename InternalList::Element *p_element)
- : list_element(p_element) {
+ ConstElement(const typename InternalList::Element *p_element) :
+ list_element(p_element) {
}
public:
- _FORCE_INLINE_ ConstElement()
- : list_element(NULL) {
+ _FORCE_INLINE_ ConstElement() :
+ list_element(NULL) {
}
- ConstElement(const ConstElement &other)
- : list_element(other.list_element) {
+ ConstElement(const ConstElement &other) :
+ list_element(other.list_element) {
}
ConstElement &operator=(const ConstElement &other) {
diff --git a/core/os/dir_access.cpp b/core/os/dir_access.cpp
index 6d4b46f4da..e19c8e8ea5 100644
--- a/core/os/dir_access.cpp
+++ b/core/os/dir_access.cpp
@@ -333,6 +333,9 @@ Error DirAccess::copy(String p_from, String p_to, int chmod_flags) {
if (err == OK && chmod_flags != -1) {
fdst->close();
err = fdst->_chmod(p_to, chmod_flags);
+ // If running on a platform with no chmod support (i.e., Windows), don't fail
+ if (err == ERR_UNAVAILABLE)
+ err = OK;
}
memdelete(fsrc);
diff --git a/core/os/file_access.cpp b/core/os/file_access.cpp
index 5fdd2b9135..7b2062936b 100644
--- a/core/os/file_access.cpp
+++ b/core/os/file_access.cpp
@@ -481,7 +481,7 @@ Vector<uint8_t> FileAccess::get_file_as_array(const String &p_path) {
ERR_FAIL_COND_V(!f, Vector<uint8_t>());
Vector<uint8_t> data;
data.resize(f->get_len());
- f->get_buffer(data.ptr(), data.size());
+ f->get_buffer(data.ptrw(), data.size());
memdelete(f);
return data;
}
diff --git a/core/os/file_access.h b/core/os/file_access.h
index 455dd1ea99..6fda3d9668 100644
--- a/core/os/file_access.h
+++ b/core/os/file_access.h
@@ -141,7 +141,7 @@ public:
virtual Error reopen(const String &p_path, int p_mode_flags); ///< does not change the AccessType
- virtual Error _chmod(const String &p_path, int p_mod) { return FAILED; }
+ virtual Error _chmod(const String &p_path, int p_mod) { return ERR_UNAVAILABLE; }
static FileAccess *create(AccessType p_access); /// Create a file access (for the current platform) this is the only portable way of accessing files.
static FileAccess *create_for_path(const String &p_path);
diff --git a/core/os/input_event.cpp b/core/os/input_event.cpp
index 103a8e82c2..9b2bd30868 100644
--- a/core/os/input_event.cpp
+++ b/core/os/input_event.cpp
@@ -278,16 +278,16 @@ String InputEventKey::as_text() const {
return kc;
if (get_metakey()) {
- kc = "Meta+" + kc;
+ kc = find_keycode_name(KEY_META) + ("+" + kc);
}
if (get_alt()) {
- kc = "Alt+" + kc;
+ kc = find_keycode_name(KEY_ALT) + ("+" + kc);
}
if (get_shift()) {
- kc = "Shift+" + kc;
+ kc = find_keycode_name(KEY_SHIFT) + ("+" + kc);
}
if (get_control()) {
- kc = "Ctrl+" + kc;
+ kc = find_keycode_name(KEY_CONTROL) + ("+" + kc);
}
return kc;
}
@@ -939,6 +939,14 @@ void InputEventGesture::set_position(const Vector2 &p_pos) {
pos = p_pos;
}
+void InputEventGesture::_bind_methods() {
+
+ ClassDB::bind_method(D_METHOD("set_position", "position"), &InputEventGesture::set_position);
+ ClassDB::bind_method(D_METHOD("get_position"), &InputEventGesture::get_position);
+
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position");
+}
+
Vector2 InputEventGesture::get_position() const {
return pos;
@@ -970,6 +978,14 @@ Ref<InputEvent> InputEventMagnifyGesture::xformed_by(const Transform2D &p_xform,
return ev;
}
+void InputEventMagnifyGesture::_bind_methods() {
+
+ ClassDB::bind_method(D_METHOD("set_factor", "factor"), &InputEventMagnifyGesture::set_factor);
+ ClassDB::bind_method(D_METHOD("get_factor"), &InputEventMagnifyGesture::get_factor);
+
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "factor"), "set_factor", "get_factor");
+}
+
InputEventMagnifyGesture::InputEventMagnifyGesture() {
factor = 1.0;
@@ -1000,6 +1016,14 @@ Ref<InputEvent> InputEventPanGesture::xformed_by(const Transform2D &p_xform, con
return ev;
}
+void InputEventPanGesture::_bind_methods() {
+
+ ClassDB::bind_method(D_METHOD("set_delta", "delta"), &InputEventPanGesture::set_delta);
+ ClassDB::bind_method(D_METHOD("get_delta"), &InputEventPanGesture::get_delta);
+
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "delta"), "set_delta", "get_delta");
+}
+
InputEventPanGesture::InputEventPanGesture() {
delta = Vector2(0, 0);
diff --git a/core/os/input_event.h b/core/os/input_event.h
index 2cba60bede..614a3289ba 100644
--- a/core/os/input_event.h
+++ b/core/os/input_event.h
@@ -476,6 +476,9 @@ class InputEventGesture : public InputEventWithModifiers {
Vector2 pos;
+protected:
+ static void _bind_methods();
+
public:
void set_position(const Vector2 &p_pos);
Vector2 get_position() const;
@@ -486,6 +489,9 @@ class InputEventMagnifyGesture : public InputEventGesture {
GDCLASS(InputEventMagnifyGesture, InputEventGesture)
real_t factor;
+protected:
+ static void _bind_methods();
+
public:
void set_factor(real_t p_factor);
real_t get_factor() const;
@@ -500,6 +506,9 @@ class InputEventPanGesture : public InputEventGesture {
GDCLASS(InputEventPanGesture, InputEventGesture)
Vector2 delta;
+protected:
+ static void _bind_methods();
+
public:
void set_delta(const Vector2 &p_delta);
Vector2 get_delta() const;
diff --git a/core/os/keyboard.cpp b/core/os/keyboard.cpp
index edf4f3e2f9..dead3b6ac0 100644
--- a/core/os/keyboard.cpp
+++ b/core/os/keyboard.cpp
@@ -60,7 +60,11 @@ static const _KeyCodeText _keycodes[] = {
{KEY_PAGEDOWN ,"PageDown"},
{KEY_SHIFT ,"Shift"},
{KEY_CONTROL ,"Control"},
+#ifdef OSX_ENABLED
+ {KEY_META ,"Command"},
+#else
{KEY_META ,"Meta"},
+#endif
{KEY_ALT ,"Alt"},
{KEY_CAPSLOCK ,"CapsLock"},
{KEY_NUMLOCK ,"NumLock"},
@@ -390,14 +394,22 @@ bool keycode_has_unicode(uint32_t p_keycode) {
String keycode_get_string(uint32_t p_code) {
String codestr;
- if (p_code & KEY_MASK_SHIFT)
- codestr += "Shift+";
- if (p_code & KEY_MASK_ALT)
- codestr += "Alt+";
- if (p_code & KEY_MASK_CTRL)
- codestr += "Ctrl+";
- if (p_code & KEY_MASK_META)
- codestr += "Meta+";
+ if (p_code & KEY_MASK_SHIFT) {
+ codestr += find_keycode_name(KEY_SHIFT);
+ codestr += "+";
+ }
+ if (p_code & KEY_MASK_ALT) {
+ codestr += find_keycode_name(KEY_ALT);
+ codestr += "+";
+ }
+ if (p_code & KEY_MASK_CTRL) {
+ codestr += find_keycode_name(KEY_CONTROL);
+ codestr += "+";
+ }
+ if (p_code & KEY_MASK_META) {
+ codestr += find_keycode_name(KEY_META);
+ codestr += "+";
+ }
p_code &= KEY_CODE_MASK;
@@ -433,6 +445,21 @@ int find_keycode(const String &p_code) {
return 0;
}
+const char *find_keycode_name(int p_keycode) {
+
+ const _KeyCodeText *kct = &_keycodes[0];
+
+ while (kct->text) {
+
+ if (kct->code == p_keycode) {
+ return kct->text;
+ }
+ kct++;
+ }
+
+ return "";
+}
+
struct _KeyCodeReplace {
int from;
int to;
diff --git a/core/os/keyboard.h b/core/os/keyboard.h
index 509ff23a93..f49cbc6b18 100644
--- a/core/os/keyboard.h
+++ b/core/os/keyboard.h
@@ -326,6 +326,7 @@ enum KeyModifierMask {
String keycode_get_string(uint32_t p_code);
bool keycode_has_unicode(uint32_t p_keycode);
int find_keycode(const String &p_code);
+const char *find_keycode_name(int p_keycode);
int keycode_get_count();
int keycode_get_value_by_index(int p_index);
const char *keycode_get_name_by_index(int p_index);
diff --git a/core/os/os.cpp b/core/os/os.cpp
index 0e7e26df73..8088a6fa74 100644
--- a/core/os/os.cpp
+++ b/core/os/os.cpp
@@ -122,6 +122,16 @@ bool OS::is_in_low_processor_usage_mode() const {
return low_processor_usage_mode;
}
+void OS::set_low_processor_usage_mode_sleep_usec(int p_usec) {
+
+ low_processor_usage_mode_sleep_usec = p_usec;
+}
+
+int OS::get_low_processor_usage_mode_sleep_usec() const {
+
+ return low_processor_usage_mode_sleep_usec;
+}
+
void OS::set_clipboard(const String &p_text) {
_local_clipboard = p_text;
@@ -269,14 +279,22 @@ String OS::get_locale() const {
return "en";
}
-// Helper function used by OS_Unix and OS_Windows
-String OS::get_safe_application_name() const {
- String an = ProjectSettings::get_singleton()->get("application/config/name");
- Vector<String> invalid_char = String("\\ / : * ? \" < > |").split(" ");
- for (int i = 0; i < invalid_char.size(); i++) {
- an = an.replace(invalid_char[i], "-");
+// Helper function to ensure that a dir name/path will be valid on the OS
+String OS::get_safe_dir_name(const String &p_dir_name, bool p_allow_dir_separator) const {
+
+ Vector<String> invalid_chars = String(": * ? \" < > |").split(" ");
+ if (p_allow_dir_separator) {
+ // Dir separators are allowed, but disallow ".." to avoid going up the filesystem
+ invalid_chars.push_back("..");
+ } else {
+ invalid_chars.push_back("/");
+ }
+
+ String safe_dir_name = p_dir_name.replace("\\", "/").strip_edges();
+ for (int i = 0; i < invalid_chars.size(); i++) {
+ safe_dir_name = safe_dir_name.replace(invalid_chars[i], "-");
}
- return an;
+ return safe_dir_name;
}
// Path to data, config, cache, etc. OS-specific folders
@@ -554,7 +572,7 @@ bool OS::has_feature(const String &p_feature) {
if (sizeof(void *) == 4 && p_feature == "32") {
return true;
}
-#if defined(__x86_64) || defined(__x86_64__)
+#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__)
if (p_feature == "x86_64") {
return true;
}
@@ -599,6 +617,7 @@ OS::OS() {
singleton = this;
_keep_screen_on = true; // set default value to true, because this had been true before godot 2.0.
low_processor_usage_mode = false;
+ low_processor_usage_mode_sleep_usec = 10000;
_verbose_stdout = false;
_no_window = false;
_exit_code = 0;
diff --git a/core/os/os.h b/core/os/os.h
index fe4ffb2922..979ad7e92a 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -50,6 +50,7 @@ class OS {
List<String> _cmdline;
bool _keep_screen_on;
bool low_processor_usage_mode;
+ int low_processor_usage_mode_sleep_usec;
bool _verbose_stdout;
String _local_clipboard;
uint64_t _msec_splash;
@@ -91,14 +92,16 @@ public:
bool resizable;
bool borderless_window;
bool maximized;
+ bool use_vsync;
float get_aspect() const { return (float)width / (float)height; }
- VideoMode(int p_width = 1024, int p_height = 600, bool p_fullscreen = false, bool p_resizable = true, bool p_borderless_window = false, bool p_maximized = false) {
+ VideoMode(int p_width = 1024, int p_height = 600, bool p_fullscreen = false, bool p_resizable = true, bool p_borderless_window = false, bool p_maximized = false, bool p_use_vsync = false) {
width = p_width;
height = p_height;
fullscreen = p_fullscreen;
resizable = p_resizable;
borderless_window = p_borderless_window;
maximized = p_maximized;
+ use_vsync = p_use_vsync;
}
};
@@ -194,7 +197,7 @@ public:
virtual void set_ime_position(const Point2 &p_pos) {}
virtual void set_ime_intermediate_text_callback(ImeCallback p_callback, void *p_inp) {}
- virtual Error open_dynamic_library(const String p_path, void *&p_library_handle) { return ERR_UNAVAILABLE; }
+ virtual Error open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path = false) { return ERR_UNAVAILABLE; }
virtual Error close_dynamic_library(void *p_library_handle) { return ERR_UNAVAILABLE; }
virtual Error get_dynamic_library_symbol_handle(void *p_library_handle, const String p_name, void *&p_symbol_handle, bool p_optional = false) { return ERR_UNAVAILABLE; }
@@ -202,6 +205,8 @@ public:
virtual bool is_keep_screen_on() const;
virtual void set_low_processor_usage_mode(bool p_enabled);
virtual bool is_in_low_processor_usage_mode() const;
+ virtual void set_low_processor_usage_mode_sleep_usec(int p_usec);
+ virtual int get_low_processor_usage_mode_sleep_usec() const;
virtual String get_executable_path() const;
virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false) = 0;
@@ -335,7 +340,7 @@ public:
virtual String get_locale() const;
- String get_safe_application_name() const;
+ String get_safe_dir_name(const String &p_dir_name, bool p_allow_dir_separator = false) const;
virtual String get_godot_dir_name() const;
virtual String get_data_path() const;
diff --git a/core/pair.h b/core/pair.h
index 535c3355b6..aa51b77a4f 100644
--- a/core/pair.h
+++ b/core/pair.h
@@ -37,9 +37,9 @@ struct Pair {
S second;
Pair() {}
- Pair(F p_first, const S &p_second)
- : first(p_first),
- second(p_second) {
+ Pair(F p_first, const S &p_second) :
+ first(p_first),
+ second(p_second) {
}
};
diff --git a/core/project_settings.cpp b/core/project_settings.cpp
index 361464ee1f..67b081de34 100644
--- a/core/project_settings.cpp
+++ b/core/project_settings.cpp
@@ -429,7 +429,7 @@ Error ProjectSettings::_load_settings_binary(const String p_path) {
uint32_t vlen = f->get_32();
Vector<uint8_t> d;
d.resize(vlen);
- f->get_buffer(d.ptr(), vlen);
+ f->get_buffer(d.ptrw(), vlen);
Variant value;
Error err = decode_variant(value, d.ptr(), d.size());
ERR_EXPLAIN("Error decoding property: " + key);
@@ -891,7 +891,8 @@ ProjectSettings::ProjectSettings() {
custom_prop_info["application/run/main_scene"] = PropertyInfo(Variant::STRING, "application/run/main_scene", PROPERTY_HINT_FILE, "tscn,scn,res");
GLOBAL_DEF("application/run/disable_stdout", false);
GLOBAL_DEF("application/run/disable_stderr", false);
- GLOBAL_DEF("application/config/use_shared_user_dir", true);
+ GLOBAL_DEF("application/config/use_custom_user_dir", false);
+ GLOBAL_DEF("application/config/custom_user_dir_name", "");
key.instance();
key->set_scancode(KEY_ENTER);
diff --git a/core/project_settings.h b/core/project_settings.h
index 1c4078cebb..d8a1ea1f7a 100644
--- a/core/project_settings.h
+++ b/core/project_settings.h
@@ -58,18 +58,18 @@ protected:
Variant initial;
bool hide_from_editor;
bool overrided;
- VariantContainer()
- : order(0),
- persist(false),
- hide_from_editor(false),
- overrided(false) {
+ VariantContainer() :
+ order(0),
+ persist(false),
+ hide_from_editor(false),
+ overrided(false) {
}
- VariantContainer(const Variant &p_variant, int p_order, bool p_persist = false)
- : order(p_order),
- persist(p_persist),
- variant(p_variant),
- hide_from_editor(false),
- overrided(false) {
+ VariantContainer(const Variant &p_variant, int p_order, bool p_persist = false) :
+ order(p_order),
+ persist(p_persist),
+ variant(p_variant),
+ hide_from_editor(false),
+ overrided(false) {
}
};
diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp
index baaf738b42..17f951e4f4 100644
--- a/core/register_core_types.cpp
+++ b/core/register_core_types.cpp
@@ -129,6 +129,9 @@ void register_core_types() {
ClassDB::register_class<InputEventScreenDrag>();
ClassDB::register_class<InputEventScreenTouch>();
ClassDB::register_class<InputEventAction>();
+ ClassDB::register_virtual_class<InputEventGesture>();
+ ClassDB::register_class<InputEventMagnifyGesture>();
+ ClassDB::register_class<InputEventPanGesture>();
ClassDB::register_class<FuncRef>();
ClassDB::register_virtual_class<StreamPeer>();
diff --git a/core/resource.cpp b/core/resource.cpp
index 78e20bada4..be6da792ad 100644
--- a/core/resource.cpp
+++ b/core/resource.cpp
@@ -184,6 +184,35 @@ Ref<Resource> Resource::duplicate_for_local_scene(Node *p_for_scene, Map<Ref<Res
return Ref<Resource>(r);
}
+void Resource::configure_for_local_scene(Node *p_for_scene, Map<Ref<Resource>, Ref<Resource> > &remap_cache) {
+
+ print_line("configure for local: " + get_class());
+ List<PropertyInfo> plist;
+ get_property_list(&plist);
+
+ local_scene = p_for_scene;
+
+ for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) {
+
+ if (!(E->get().usage & PROPERTY_USAGE_STORAGE))
+ continue;
+ Variant p = get(E->get().name);
+ if (p.get_type() == Variant::OBJECT) {
+
+ RES sr = p;
+ if (sr.is_valid()) {
+
+ if (sr->is_local_to_scene()) {
+ if (!remap_cache.has(sr)) {
+ sr->configure_for_local_scene(p_for_scene, remap_cache);
+ remap_cache[sr] = sr;
+ }
+ }
+ }
+ }
+ }
+}
+
Ref<Resource> Resource::duplicate(bool p_subresources) const {
List<PropertyInfo> plist;
@@ -349,8 +378,8 @@ void Resource::_bind_methods() {
BIND_VMETHOD(MethodInfo("_setup_local_to_scene"));
}
-Resource::Resource()
- : remapped_list(this) {
+Resource::Resource() :
+ remapped_list(this) {
#ifdef TOOLS_ENABLED
last_modified_time = 0;
diff --git a/core/resource.h b/core/resource.h
index 7dc3b67291..19714a68d1 100644
--- a/core/resource.h
+++ b/core/resource.h
@@ -108,6 +108,7 @@ public:
virtual Ref<Resource> duplicate(bool p_subresources = false) const;
Ref<Resource> duplicate_for_local_scene(Node *p_for_scene, Map<Ref<Resource>, Ref<Resource> > &remap_cache);
+ void configure_for_local_scene(Node *p_for_scene, Map<Ref<Resource>, Ref<Resource> > &remap_cache);
void set_local_to_scene(bool p_enable);
bool is_local_to_scene() const;
diff --git a/core/safe_refcount.cpp b/core/safe_refcount.cpp
index c9acdb7970..908c8a34b5 100644
--- a/core/safe_refcount.cpp
+++ b/core/safe_refcount.cpp
@@ -57,7 +57,7 @@
return m_val; \
}
-_ALWAYS_INLINE_ uint32_t _atomic_conditional_increment_impl(register uint32_t *pw) {
+_ALWAYS_INLINE_ uint32_t _atomic_conditional_increment_impl(register uint32_t *pw){
ATOMIC_CONDITIONAL_INCREMENT_BODY(pw, LONG, InterlockedCompareExchange, uint32_t)
}
@@ -82,12 +82,12 @@ _ALWAYS_INLINE_ uint32_t _atomic_add_impl(register uint32_t *pw, register uint32
return InterlockedAdd((LONG volatile *)pw, val);
}
-_ALWAYS_INLINE_ uint32_t _atomic_exchange_if_greater_impl(register uint32_t *pw, register uint32_t val) {
+_ALWAYS_INLINE_ uint32_t _atomic_exchange_if_greater_impl(register uint32_t *pw, register uint32_t val){
ATOMIC_EXCHANGE_IF_GREATER_BODY(pw, val, LONG, InterlockedCompareExchange, uint32_t)
}
-_ALWAYS_INLINE_ uint64_t _atomic_conditional_increment_impl(register uint64_t *pw) {
+_ALWAYS_INLINE_ uint64_t _atomic_conditional_increment_impl(register uint64_t *pw){
ATOMIC_CONDITIONAL_INCREMENT_BODY(pw, LONGLONG, InterlockedCompareExchange64, uint64_t)
}
@@ -112,7 +112,7 @@ _ALWAYS_INLINE_ uint64_t _atomic_add_impl(register uint64_t *pw, register uint64
return InterlockedAdd64((LONGLONG volatile *)pw, val);
}
-_ALWAYS_INLINE_ uint64_t _atomic_exchange_if_greater_impl(register uint64_t *pw, register uint64_t val) {
+_ALWAYS_INLINE_ uint64_t _atomic_exchange_if_greater_impl(register uint64_t *pw, register uint64_t val){
ATOMIC_EXCHANGE_IF_GREATER_BODY(pw, val, LONGLONG, InterlockedCompareExchange64, uint64_t)
}
diff --git a/core/script_debugger_local.cpp b/core/script_debugger_local.cpp
index 8d2600e52d..94c48f1c8f 100644
--- a/core/script_debugger_local.cpp
+++ b/core/script_debugger_local.cpp
@@ -212,7 +212,7 @@ void ScriptDebuggerLocal::idle_poll() {
}
SortArray<ScriptLanguage::ProfilingInfo, _ScriptDebuggerLocalProfileInfoSort> sort;
- sort.sort(pinfo.ptr(), ofs);
+ sort.sort(pinfo.ptrw(), ofs);
//falta el frame time
@@ -264,7 +264,7 @@ void ScriptDebuggerLocal::profiling_end() {
}
SortArray<ScriptLanguage::ProfilingInfo, _ScriptDebuggerLocalProfileInfoSort> sort;
- sort.sort(pinfo.ptr(), ofs);
+ sort.sort(pinfo.ptrw(), ofs);
uint64_t total_us = 0;
for (int i = 0; i < ofs; i++) {
diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp
index 5e06339b9e..658b72b47a 100644
--- a/core/script_debugger_remote.cpp
+++ b/core/script_debugger_remote.cpp
@@ -749,7 +749,7 @@ void ScriptDebuggerRemote::_send_profiling_data(bool p_for_frame) {
}
SortArray<ScriptLanguage::ProfilingInfo *, ProfileInfoSort> sa;
- sa.sort(profile_info_ptrs.ptr(), ofs);
+ sa.sort(profile_info_ptrs.ptrw(), ofs);
int to_send = MIN(ofs, max_frame_functions);
@@ -989,25 +989,25 @@ void ScriptDebuggerRemote::profiling_set_frame_times(float p_frame_time, float p
ScriptDebuggerRemote::ResourceUsageFunc ScriptDebuggerRemote::resource_usage_func = NULL;
-ScriptDebuggerRemote::ScriptDebuggerRemote()
- : profiling(false),
- max_frame_functions(16),
- skip_profile_frame(false),
- reload_all_scripts(false),
- tcp_client(StreamPeerTCP::create_ref()),
- packet_peer_stream(Ref<PacketPeerStream>(memnew(PacketPeerStream))),
- last_perf_time(0),
- performance(Engine::get_singleton()->get_singleton_object("Performance")),
- requested_quit(false),
- mutex(Mutex::create()),
- max_cps(GLOBAL_GET("network/limits/debugger_stdout/max_chars_per_second")),
- char_count(0),
- last_msec(0),
- msec_count(0),
- locking(false),
- poll_every(0),
- request_scene_tree(NULL),
- live_edit_funcs(NULL) {
+ScriptDebuggerRemote::ScriptDebuggerRemote() :
+ profiling(false),
+ max_frame_functions(16),
+ skip_profile_frame(false),
+ reload_all_scripts(false),
+ tcp_client(StreamPeerTCP::create_ref()),
+ packet_peer_stream(Ref<PacketPeerStream>(memnew(PacketPeerStream))),
+ last_perf_time(0),
+ performance(Engine::get_singleton()->get_singleton_object("Performance")),
+ requested_quit(false),
+ mutex(Mutex::create()),
+ max_cps(GLOBAL_GET("network/limits/debugger_stdout/max_chars_per_second")),
+ char_count(0),
+ last_msec(0),
+ msec_count(0),
+ locking(false),
+ poll_every(0),
+ request_scene_tree(NULL),
+ live_edit_funcs(NULL) {
packet_peer_stream->set_stream_peer(tcp_client);
packet_peer_stream->set_output_buffer_max_size(1024 * 1024 * 8); //8mb should be way more than enough
diff --git a/core/script_language.cpp b/core/script_language.cpp
index 384e41e4bd..c1e9d55872 100644
--- a/core/script_language.cpp
+++ b/core/script_language.cpp
@@ -387,10 +387,10 @@ void PlaceHolderScriptInstance::update(const List<PropertyInfo> &p_properties, c
//change notify
}
-PlaceHolderScriptInstance::PlaceHolderScriptInstance(ScriptLanguage *p_language, Ref<Script> p_script, Object *p_owner)
- : owner(p_owner),
- language(p_language),
- script(p_script) {
+PlaceHolderScriptInstance::PlaceHolderScriptInstance(ScriptLanguage *p_language, Ref<Script> p_script, Object *p_owner) :
+ owner(p_owner),
+ language(p_language),
+ script(p_script) {
}
PlaceHolderScriptInstance::~PlaceHolderScriptInstance() {
diff --git a/core/string_buffer.cpp b/core/string_buffer.cpp
index 195068f887..8489df2599 100644
--- a/core/string_buffer.cpp
+++ b/core/string_buffer.cpp
@@ -71,7 +71,7 @@ StringBuffer &StringBuffer::reserve(int p_size) {
bool need_copy = string_length > 0 && buffer.empty();
buffer.resize(next_power_of_2(p_size));
if (need_copy) {
- memcpy(buffer.ptr(), short_buffer, string_length * sizeof(CharType));
+ memcpy(buffer.ptrw(), short_buffer, string_length * sizeof(CharType));
}
return *this;
diff --git a/core/string_buffer.h b/core/string_buffer.h
index 3f36249148..b6ccd4af20 100644
--- a/core/string_buffer.h
+++ b/core/string_buffer.h
@@ -40,7 +40,7 @@ class StringBuffer {
int string_length = 0;
_FORCE_INLINE_ CharType *current_buffer_ptr() {
- return static_cast<Vector<CharType> &>(buffer).empty() ? short_buffer : buffer.ptr();
+ return static_cast<Vector<CharType> &>(buffer).empty() ? short_buffer : buffer.ptrw();
}
public:
diff --git a/core/translation.cpp b/core/translation.cpp
index 7e4d4feb89..515b5f1134 100644
--- a/core/translation.cpp
+++ b/core/translation.cpp
@@ -333,6 +333,7 @@ static const char *locale_list[] = {
"sq_KV", // Albanian (Kosovo)
"sq_MK", // Albanian (Macedonia)
"sr", // Serbian
+ "sr_Cyrl", // Serbian (Cyrillic)
"sr_ME", // Serbian (Montenegro)
"sr_RS", // Serbian (Serbia)
"ss_ZA", // Swati (South Africa)
@@ -693,6 +694,7 @@ static const char *locale_names[] = {
"Albanian (Kosovo)",
"Albanian (Macedonia)",
"Serbian",
+ "Serbian (Cyrillic)",
"Serbian (Montenegro)",
"Serbian (Serbia)",
"Swati (South Africa)",
@@ -874,8 +876,8 @@ void Translation::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::STRING, "locale"), "set_locale", "get_locale");
}
-Translation::Translation()
- : locale("en") {
+Translation::Translation() :
+ locale("en") {
}
///////////////////////////////////////////////
@@ -1161,9 +1163,9 @@ void TranslationServer::load_translations() {
}
}
-TranslationServer::TranslationServer()
- : locale("en"),
- enabled(true) {
+TranslationServer::TranslationServer() :
+ locale("en"),
+ enabled(true) {
singleton = this;
for (int i = 0; locale_list[i]; ++i) {
diff --git a/core/typedefs.h b/core/typedefs.h
index c509edf9fe..889513ddc9 100644
--- a/core/typedefs.h
+++ b/core/typedefs.h
@@ -73,7 +73,7 @@ T *_nullptr() {
#define OFFSET_OF(st, m) \
((size_t)((char *)&(_nullptr<st>()->m) - (char *)0))
-/**
+ /**
* Some platforms (devices) not define NULL
*/
@@ -81,7 +81,7 @@ T *_nullptr() {
#define NULL 0
#endif
-/**
+ /**
* Windows defines a lot of badly stuff we'll never ever use. undefine it.
*/
@@ -103,7 +103,7 @@ T *_nullptr() {
#include "error_list.h"
#include "error_macros.h"
-/** Generic ABS function, for math uses please use Math::abs */
+ /** Generic ABS function, for math uses please use Math::abs */
#ifndef ABS
#define ABS(m_v) ((m_v < 0) ? (-(m_v)) : (m_v))
diff --git a/core/ustring.cpp b/core/ustring.cpp
index 8d40f56386..3a0708851e 100644
--- a/core/ustring.cpp
+++ b/core/ustring.cpp
@@ -115,7 +115,7 @@ void String::copy_from(const char *p_cstr) {
resize(len + 1); // include 0
- CharType *dst = this->ptr();
+ CharType *dst = this->ptrw();
for (int i = 0; i < len + 1; i++) {
@@ -1119,7 +1119,7 @@ String String::num_int64(int64_t p_num, int base, bool capitalize_hex) {
chars++;
String s;
s.resize(chars + 1);
- CharType *c = s.ptr();
+ CharType *c = s.ptrw();
c[chars] = 0;
n = num;
do {
@@ -3380,8 +3380,6 @@ bool String::is_valid_float() const {
from++;
}
- //this was pulled out of my ass, i wonder if it's correct...
-
bool exponent_found = false;
bool period_found = false;
bool sign_found = false;
diff --git a/core/variant.cpp b/core/variant.cpp
index d4143b8d84..7f0cabbce4 100644
--- a/core/variant.cpp
+++ b/core/variant.cpp
@@ -66,8 +66,7 @@ String Variant::get_type_name(Variant::Type p_type) {
return "String";
} break;
- // math types
-
+ // math types
case VECTOR2: {
return "Vector2";
@@ -513,6 +512,7 @@ bool Variant::can_convert_strict(Variant::Type p_type_from, Variant::Type p_type
static const Type valid[] = {
QUAT,
+ VECTOR3,
NIL
};
@@ -723,8 +723,7 @@ bool Variant::is_zero() const {
} break;
- // math types
-
+ // math types
case VECTOR2: {
return *reinterpret_cast<const Vector2 *>(_data._mem) == Vector2();
@@ -932,8 +931,7 @@ void Variant::reference(const Variant &p_variant) {
memnew_placement(_data._mem, String(*reinterpret_cast<const String *>(p_variant._data._mem)));
} break;
- // math types
-
+ // math types
case VECTOR2: {
memnew_placement(_data._mem, Vector2(*reinterpret_cast<const Vector2 *>(p_variant._data._mem)));
@@ -1632,7 +1630,9 @@ Variant::operator Basis() const {
return *_data._basis;
else if (type == QUAT)
return *reinterpret_cast<const Quat *>(_data._mem);
- else if (type == TRANSFORM)
+ else if (type == VECTOR3) {
+ return Basis(*reinterpret_cast<const Vector3 *>(_data._mem));
+ } else if (type == TRANSFORM) // unexposed in Variant::can_convert?
return _data._transform->basis;
else
return Basis();
@@ -2502,8 +2502,7 @@ void Variant::operator=(const Variant &p_variant) {
*reinterpret_cast<String *>(_data._mem) = *reinterpret_cast<const String *>(p_variant._data._mem);
} break;
- // math types
-
+ // math types
case VECTOR2: {
*reinterpret_cast<Vector2 *>(_data._mem) = *reinterpret_cast<const Vector2 *>(p_variant._data._mem);
@@ -2642,8 +2641,8 @@ uint32_t Variant::hash() const {
return reinterpret_cast<const String *>(_data._mem)->hash();
} break;
- // math types
+ // math types
case VECTOR2: {
uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Vector2 *>(_data._mem)->x);
diff --git a/core/variant_call.cpp b/core/variant_call.cpp
index da6e602ccb..f66cce85c9 100644
--- a/core/variant_call.cpp
+++ b/core/variant_call.cpp
@@ -130,9 +130,9 @@ struct _VariantCall {
StringName name;
Variant::Type type;
Arg() { type = Variant::NIL; }
- Arg(Variant::Type p_type, const StringName &p_name)
- : name(p_name),
- type(p_type) {
+ Arg(Variant::Type p_type, const StringName &p_name) :
+ name(p_name),
+ type(p_type) {
}
};
@@ -360,6 +360,7 @@ struct _VariantCall {
VCALL_LOCALMEM2R(Rect2, grow_margin);
VCALL_LOCALMEM4R(Rect2, grow_individual);
VCALL_LOCALMEM1R(Rect2, expand);
+ VCALL_LOCALMEM0R(Rect2, abs);
VCALL_LOCALMEM0R(Vector3, min_axis);
VCALL_LOCALMEM0R(Vector3, max_axis);
@@ -437,6 +438,8 @@ struct _VariantCall {
VCALL_LOCALMEM0R(Color, contrasted);
VCALL_LOCALMEM2R(Color, linear_interpolate);
VCALL_LOCALMEM1R(Color, blend);
+ VCALL_LOCALMEM1R(Color, lightened);
+ VCALL_LOCALMEM1R(Color, darkened);
VCALL_LOCALMEM1R(Color, to_html);
VCALL_LOCALMEM0R(RID, get_id);
@@ -446,7 +449,8 @@ struct _VariantCall {
VCALL_LOCALMEM1R(NodePath, get_name);
VCALL_LOCALMEM0R(NodePath, get_subname_count);
VCALL_LOCALMEM1R(NodePath, get_subname);
- VCALL_LOCALMEM0R(NodePath, get_property);
+ VCALL_LOCALMEM0R(NodePath, get_concatenated_subnames);
+ VCALL_LOCALMEM0R(NodePath, get_as_property_path);
VCALL_LOCALMEM0R(NodePath, is_empty);
VCALL_LOCALMEM0R(Dictionary, size);
@@ -496,7 +500,7 @@ struct _VariantCall {
PoolByteArray::Read r = ba->read();
CharString cs;
cs.resize(ba->size() + 1);
- copymem(cs.ptr(), r.ptr(), ba->size());
+ copymem(cs.ptrw(), r.ptr(), ba->size());
cs[ba->size()] = 0;
s = cs.get_data();
@@ -899,11 +903,6 @@ struct _VariantCall {
r_ret = Basis(p_args[0]->operator Vector3(), p_args[1]->operator real_t());
}
- static void Basis_init3(Variant &r_ret, const Variant **p_args) {
-
- r_ret = Basis(p_args[0]->operator Vector3());
- }
-
static void Transform_init1(Variant &r_ret, const Variant **p_args) {
Transform t;
@@ -1528,6 +1527,7 @@ void register_variant_methods() {
ADDFUNC2R(RECT2, RECT2, Rect2, grow_margin, INT, "margin", REAL, "by", varray());
ADDFUNC4R(RECT2, RECT2, Rect2, grow_individual, REAL, "left", REAL, "top", REAL, "right", REAL, " bottom", varray());
ADDFUNC1R(RECT2, RECT2, Rect2, expand, VECTOR2, "to", varray());
+ ADDFUNC0R(RECT2, RECT2, Rect2, abs, varray());
ADDFUNC0R(VECTOR3, INT, Vector3, min_axis, varray());
ADDFUNC0R(VECTOR3, INT, Vector3, max_axis, varray());
@@ -1583,6 +1583,8 @@ void register_variant_methods() {
ADDFUNC0R(COLOR, COLOR, Color, contrasted, varray());
ADDFUNC2R(COLOR, COLOR, Color, linear_interpolate, COLOR, "b", REAL, "t", varray());
ADDFUNC1R(COLOR, COLOR, Color, blend, COLOR, "over", varray());
+ ADDFUNC1R(COLOR, COLOR, Color, lightened, REAL, "amount", varray());
+ ADDFUNC1R(COLOR, COLOR, Color, darkened, REAL, "amount", varray());
ADDFUNC1R(COLOR, STRING, Color, to_html, BOOL, "with_alpha", varray(true));
ADDFUNC0R(_RID, INT, RID, get_id, varray());
@@ -1592,7 +1594,8 @@ void register_variant_methods() {
ADDFUNC1R(NODE_PATH, STRING, NodePath, get_name, INT, "idx", varray());
ADDFUNC0R(NODE_PATH, INT, NodePath, get_subname_count, varray());
ADDFUNC1R(NODE_PATH, STRING, NodePath, get_subname, INT, "idx", varray());
- ADDFUNC0R(NODE_PATH, STRING, NodePath, get_property, varray());
+ ADDFUNC0R(NODE_PATH, STRING, NodePath, get_concatenated_subnames, varray());
+ ADDFUNC0R(NODE_PATH, NODE_PATH, NodePath, get_as_property_path, varray());
ADDFUNC0R(NODE_PATH, BOOL, NodePath, is_empty, varray());
ADDFUNC0R(DICTIONARY, INT, Dictionary, size, varray());
@@ -1799,7 +1802,6 @@ void register_variant_methods() {
_VariantCall::add_constructor(_VariantCall::Basis_init1, Variant::BASIS, "x_axis", Variant::VECTOR3, "y_axis", Variant::VECTOR3, "z_axis", Variant::VECTOR3);
_VariantCall::add_constructor(_VariantCall::Basis_init2, Variant::BASIS, "axis", Variant::VECTOR3, "phi", Variant::REAL);
- _VariantCall::add_constructor(_VariantCall::Basis_init3, Variant::BASIS, "euler", Variant::VECTOR3);
_VariantCall::add_constructor(_VariantCall::Transform_init1, Variant::TRANSFORM, "x_axis", Variant::VECTOR3, "y_axis", Variant::VECTOR3, "z_axis", Variant::VECTOR3, "origin", Variant::VECTOR3);
_VariantCall::add_constructor(_VariantCall::Transform_init2, Variant::TRANSFORM, "basis", Variant::BASIS, "origin", Variant::VECTOR3);
diff --git a/core/vector.h b/core/vector.h
index 03eaf65099..a5c4b3b155 100644
--- a/core/vector.h
+++ b/core/vector.h
@@ -96,7 +96,7 @@ class Vector {
void _copy_on_write();
public:
- _FORCE_INLINE_ T *ptr() {
+ _FORCE_INLINE_ T *ptrw() {
if (!_ptr) return NULL;
_copy_on_write();
return (T *)_get_data();
@@ -361,7 +361,7 @@ template <class T>
void Vector<T>::remove(int p_index) {
ERR_FAIL_INDEX(p_index, size());
- T *p = ptr();
+ T *p = ptrw();
int len = size();
for (int i = p_index; i < len - 1; i++) {
diff --git a/doc/classes/@GDScript.xml b/doc/classes/@GDScript.xml
index 15ada7fdfa..bee2cdf387 100644
--- a/doc/classes/@GDScript.xml
+++ b/doc/classes/@GDScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="@GDScript" category="Core" version="3.0-alpha">
+<class name="@GDScript" category="Core" version="3.0-beta">
<brief_description>
Built-in GDScript functions.
</brief_description>
@@ -1138,16 +1138,16 @@
</method>
</methods>
<constants>
- <constant name="PI" value="3.141593" enum="">
+ <constant name="PI" value="3.141593">
Constant that represents how many times the diameter of a circle fits around its perimeter.
</constant>
- <constant name="TAU" value="6.283185" enum="">
+ <constant name="TAU" value="6.283185">
The circle constant, the circumference of the unit circle.
</constant>
- <constant name="INF" value="inf" enum="">
+ <constant name="INF" value="inf">
A positive infinity. (For negative infinity, use -INF).
</constant>
- <constant name="NAN" value="nan" enum="">
+ <constant name="NAN" value="nan">
Macro constant that expands to an expression of type float that represents a NaN.
The NaN values are used to identify undefined or non-representable values for floating-point elements, such as the square root of negative numbers or the result of 0/0.
</constant>
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml
index d9bdf0e3cf..de5dc18702 100644
--- a/doc/classes/@GlobalScope.xml
+++ b/doc/classes/@GlobalScope.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="@GlobalScope" category="Core" version="3.0-alpha">
+<class name="@GlobalScope" category="Core" version="3.0-beta">
<brief_description>
Global scope constants and variables.
</brief_description>
@@ -73,1316 +73,1316 @@
<member name="TranslationServer" type="TranslationServer" setter="" getter="">
[TranslationServer] singleton
</member>
+ <member name="VisualScriptEditor" type="VisualScriptEditor" setter="" getter="">
+ [VisualScriptEditor] singleton
+ </member>
<member name="VisualServer" type="VisualServer" setter="" getter="">
[VisualServer] singleton
</member>
</members>
<constants>
- <constant name="MARGIN_LEFT" value="0">
+ <constant name="MARGIN_LEFT" value="0" enum="Margin">
Left margin, used usually for [Control] or [StyleBox] derived classes.
</constant>
- <constant name="MARGIN_TOP" value="1">
+ <constant name="MARGIN_TOP" value="1" enum="Margin">
Top margin, used usually for [Control] or [StyleBox] derived classes.
</constant>
- <constant name="MARGIN_RIGHT" value="2">
+ <constant name="MARGIN_RIGHT" value="2" enum="Margin">
Right margin, used usually for [Control] or [StyleBox] derived classes.
</constant>
- <constant name="MARGIN_BOTTOM" value="3">
+ <constant name="MARGIN_BOTTOM" value="3" enum="Margin">
Bottom margin, used usually for [Control] or [StyleBox] derived classes.
</constant>
- <constant name="VERTICAL" value="1">
+ <constant name="VERTICAL" value="1" enum="Orientation">
General vertical alignment, used usually for [Separator], [ScrollBar], [Slider], etc.
</constant>
- <constant name="HORIZONTAL" value="0">
+ <constant name="HORIZONTAL" value="0" enum="Orientation">
General horizontal alignment, used usually for [Separator], [ScrollBar], [Slider], etc.
</constant>
- <constant name="HALIGN_LEFT" value="0">
+ <constant name="HALIGN_LEFT" value="0" enum="HAlign">
Horizontal left alignment, usually for text-derived classes.
</constant>
- <constant name="HALIGN_CENTER" value="1">
+ <constant name="HALIGN_CENTER" value="1" enum="HAlign">
Horizontal center alignment, usually for text-derived classes.
</constant>
- <constant name="HALIGN_RIGHT" value="2">
+ <constant name="HALIGN_RIGHT" value="2" enum="HAlign">
Horizontal right alignment, usually for text-derived classes.
</constant>
- <constant name="VALIGN_TOP" value="0">
+ <constant name="VALIGN_TOP" value="0" enum="VAlign">
Vertical top alignment, usually for text-derived classes.
</constant>
- <constant name="VALIGN_CENTER" value="1">
+ <constant name="VALIGN_CENTER" value="1" enum="VAlign">
Vertical center alignment, usually for text-derived classes.
</constant>
- <constant name="VALIGN_BOTTOM" value="2">
+ <constant name="VALIGN_BOTTOM" value="2" enum="VAlign">
Vertical bottom alignment, usually for text-derived classes.
</constant>
- <constant name="SPKEY" value="16777216" enum="">
+ <constant name="SPKEY" value="16777216">
Scancodes with this bit applied are non printable.
</constant>
- <constant name="KEY_ESCAPE" value="16777217">
+ <constant name="KEY_ESCAPE" value="16777217" enum="KeyList">
Escape Key
</constant>
- <constant name="KEY_TAB" value="16777218">
+ <constant name="KEY_TAB" value="16777218" enum="KeyList">
Tab Key
</constant>
- <constant name="KEY_BACKTAB" value="16777219">
+ <constant name="KEY_BACKTAB" value="16777219" enum="KeyList">
Shift-Tab Key
</constant>
- <constant name="KEY_BACKSPACE" value="16777220">
+ <constant name="KEY_BACKSPACE" value="16777220" enum="KeyList">
Backspace Key
</constant>
- <constant name="KEY_ENTER" value="16777221">
+ <constant name="KEY_ENTER" value="16777221" enum="KeyList">
Return Key (On Main Keyboard)
</constant>
- <constant name="KEY_KP_ENTER" value="16777222">
+ <constant name="KEY_KP_ENTER" value="16777222" enum="KeyList">
Enter Key (On Numpad)
</constant>
- <constant name="KEY_INSERT" value="16777223">
+ <constant name="KEY_INSERT" value="16777223" enum="KeyList">
Insert Key
</constant>
- <constant name="KEY_DELETE" value="16777224">
+ <constant name="KEY_DELETE" value="16777224" enum="KeyList">
Delete Key
</constant>
- <constant name="KEY_PAUSE" value="16777225">
+ <constant name="KEY_PAUSE" value="16777225" enum="KeyList">
Pause Key
</constant>
- <constant name="KEY_PRINT" value="16777226">
+ <constant name="KEY_PRINT" value="16777226" enum="KeyList">
Printscreen Key
</constant>
- <constant name="KEY_SYSREQ" value="16777227">
+ <constant name="KEY_SYSREQ" value="16777227" enum="KeyList">
System Request Key
</constant>
- <constant name="KEY_CLEAR" value="16777228">
+ <constant name="KEY_CLEAR" value="16777228" enum="KeyList">
Clear Key
</constant>
- <constant name="KEY_HOME" value="16777229">
+ <constant name="KEY_HOME" value="16777229" enum="KeyList">
Home Key
</constant>
- <constant name="KEY_END" value="16777230">
+ <constant name="KEY_END" value="16777230" enum="KeyList">
End Key
</constant>
- <constant name="KEY_LEFT" value="16777231">
+ <constant name="KEY_LEFT" value="16777231" enum="KeyList">
Left Arrow Key
</constant>
- <constant name="KEY_UP" value="16777232">
+ <constant name="KEY_UP" value="16777232" enum="KeyList">
Up Arrow Key
</constant>
- <constant name="KEY_RIGHT" value="16777233">
+ <constant name="KEY_RIGHT" value="16777233" enum="KeyList">
Right Arrow Key
</constant>
- <constant name="KEY_DOWN" value="16777234">
+ <constant name="KEY_DOWN" value="16777234" enum="KeyList">
Down Arrow Key
</constant>
- <constant name="KEY_PAGEUP" value="16777235">
+ <constant name="KEY_PAGEUP" value="16777235" enum="KeyList">
Pageup Key
</constant>
- <constant name="KEY_PAGEDOWN" value="16777236">
+ <constant name="KEY_PAGEDOWN" value="16777236" enum="KeyList">
Pagedown Key
</constant>
- <constant name="KEY_SHIFT" value="16777237">
+ <constant name="KEY_SHIFT" value="16777237" enum="KeyList">
Shift Key
</constant>
- <constant name="KEY_CONTROL" value="16777238">
+ <constant name="KEY_CONTROL" value="16777238" enum="KeyList">
Control Key
</constant>
- <constant name="KEY_META" value="16777239">
+ <constant name="KEY_META" value="16777239" enum="KeyList">
Meta Key
</constant>
- <constant name="KEY_ALT" value="16777240">
+ <constant name="KEY_ALT" value="16777240" enum="KeyList">
Alt Key
</constant>
- <constant name="KEY_CAPSLOCK" value="16777241">
+ <constant name="KEY_CAPSLOCK" value="16777241" enum="KeyList">
Capslock Key
</constant>
- <constant name="KEY_NUMLOCK" value="16777242">
+ <constant name="KEY_NUMLOCK" value="16777242" enum="KeyList">
Numlock Key
</constant>
- <constant name="KEY_SCROLLLOCK" value="16777243">
+ <constant name="KEY_SCROLLLOCK" value="16777243" enum="KeyList">
Scrolllock Key
</constant>
- <constant name="KEY_F1" value="16777244">
+ <constant name="KEY_F1" value="16777244" enum="KeyList">
F1 Key
</constant>
- <constant name="KEY_F2" value="16777245">
+ <constant name="KEY_F2" value="16777245" enum="KeyList">
F2 Key
</constant>
- <constant name="KEY_F3" value="16777246">
+ <constant name="KEY_F3" value="16777246" enum="KeyList">
F3 Key
</constant>
- <constant name="KEY_F4" value="16777247">
+ <constant name="KEY_F4" value="16777247" enum="KeyList">
F4 Key
</constant>
- <constant name="KEY_F5" value="16777248">
+ <constant name="KEY_F5" value="16777248" enum="KeyList">
F5 Key
</constant>
- <constant name="KEY_F6" value="16777249">
+ <constant name="KEY_F6" value="16777249" enum="KeyList">
F6 Key
</constant>
- <constant name="KEY_F7" value="16777250">
+ <constant name="KEY_F7" value="16777250" enum="KeyList">
F7 Key
</constant>
- <constant name="KEY_F8" value="16777251">
+ <constant name="KEY_F8" value="16777251" enum="KeyList">
F8 Key
</constant>
- <constant name="KEY_F9" value="16777252">
+ <constant name="KEY_F9" value="16777252" enum="KeyList">
F9 Key
</constant>
- <constant name="KEY_F10" value="16777253">
+ <constant name="KEY_F10" value="16777253" enum="KeyList">
F10 Key
</constant>
- <constant name="KEY_F11" value="16777254">
+ <constant name="KEY_F11" value="16777254" enum="KeyList">
F11 Key
</constant>
- <constant name="KEY_F12" value="16777255">
+ <constant name="KEY_F12" value="16777255" enum="KeyList">
F12 Key
</constant>
- <constant name="KEY_F13" value="16777256">
+ <constant name="KEY_F13" value="16777256" enum="KeyList">
F13 Key
</constant>
- <constant name="KEY_F14" value="16777257">
+ <constant name="KEY_F14" value="16777257" enum="KeyList">
F14 Key
</constant>
- <constant name="KEY_F15" value="16777258">
+ <constant name="KEY_F15" value="16777258" enum="KeyList">
F15 Key
</constant>
- <constant name="KEY_F16" value="16777259">
+ <constant name="KEY_F16" value="16777259" enum="KeyList">
F16 Key
</constant>
- <constant name="KEY_KP_MULTIPLY" value="16777345">
+ <constant name="KEY_KP_MULTIPLY" value="16777345" enum="KeyList">
Multiply Key on Numpad
</constant>
- <constant name="KEY_KP_DIVIDE" value="16777346">
+ <constant name="KEY_KP_DIVIDE" value="16777346" enum="KeyList">
Divide Key on Numpad
</constant>
- <constant name="KEY_KP_SUBTRACT" value="16777347">
+ <constant name="KEY_KP_SUBTRACT" value="16777347" enum="KeyList">
Subtract Key on Numpad
</constant>
- <constant name="KEY_KP_PERIOD" value="16777348">
+ <constant name="KEY_KP_PERIOD" value="16777348" enum="KeyList">
Period Key on Numpad
</constant>
- <constant name="KEY_KP_ADD" value="16777349">
+ <constant name="KEY_KP_ADD" value="16777349" enum="KeyList">
Add Key on Numpad
</constant>
- <constant name="KEY_KP_0" value="16777350">
+ <constant name="KEY_KP_0" value="16777350" enum="KeyList">
Number 0 on Numpad
</constant>
- <constant name="KEY_KP_1" value="16777351">
+ <constant name="KEY_KP_1" value="16777351" enum="KeyList">
Number 1 on Numpad
</constant>
- <constant name="KEY_KP_2" value="16777352">
+ <constant name="KEY_KP_2" value="16777352" enum="KeyList">
Number 2 on Numpad
</constant>
- <constant name="KEY_KP_3" value="16777353">
+ <constant name="KEY_KP_3" value="16777353" enum="KeyList">
Number 3 on Numpad
</constant>
- <constant name="KEY_KP_4" value="16777354">
+ <constant name="KEY_KP_4" value="16777354" enum="KeyList">
Number 4 on Numpad
</constant>
- <constant name="KEY_KP_5" value="16777355">
+ <constant name="KEY_KP_5" value="16777355" enum="KeyList">
Number 5 on Numpad
</constant>
- <constant name="KEY_KP_6" value="16777356">
+ <constant name="KEY_KP_6" value="16777356" enum="KeyList">
Number 6 on Numpad
</constant>
- <constant name="KEY_KP_7" value="16777357">
+ <constant name="KEY_KP_7" value="16777357" enum="KeyList">
Number 7 on Numpad
</constant>
- <constant name="KEY_KP_8" value="16777358">
+ <constant name="KEY_KP_8" value="16777358" enum="KeyList">
Number 8 on Numpad
</constant>
- <constant name="KEY_KP_9" value="16777359">
+ <constant name="KEY_KP_9" value="16777359" enum="KeyList">
Number 9 on Numpad
</constant>
- <constant name="KEY_SUPER_L" value="16777260">
+ <constant name="KEY_SUPER_L" value="16777260" enum="KeyList">
Left Super Key (Windows Key)
</constant>
- <constant name="KEY_SUPER_R" value="16777261">
+ <constant name="KEY_SUPER_R" value="16777261" enum="KeyList">
Right Super Key (Windows Key)
</constant>
- <constant name="KEY_MENU" value="16777262">
+ <constant name="KEY_MENU" value="16777262" enum="KeyList">
Context menu key
</constant>
- <constant name="KEY_HYPER_L" value="16777263">
+ <constant name="KEY_HYPER_L" value="16777263" enum="KeyList">
Left Hyper Key
</constant>
- <constant name="KEY_HYPER_R" value="16777264">
+ <constant name="KEY_HYPER_R" value="16777264" enum="KeyList">
Right Hyper Key
</constant>
- <constant name="KEY_HELP" value="16777265">
+ <constant name="KEY_HELP" value="16777265" enum="KeyList">
Help key
</constant>
- <constant name="KEY_DIRECTION_L" value="16777266">
+ <constant name="KEY_DIRECTION_L" value="16777266" enum="KeyList">
Left Direction Key
</constant>
- <constant name="KEY_DIRECTION_R" value="16777267">
+ <constant name="KEY_DIRECTION_R" value="16777267" enum="KeyList">
Right Direction Key
</constant>
- <constant name="KEY_BACK" value="16777280">
+ <constant name="KEY_BACK" value="16777280" enum="KeyList">
Back key
</constant>
- <constant name="KEY_FORWARD" value="16777281">
+ <constant name="KEY_FORWARD" value="16777281" enum="KeyList">
Forward key
</constant>
- <constant name="KEY_STOP" value="16777282">
+ <constant name="KEY_STOP" value="16777282" enum="KeyList">
Stop key
</constant>
- <constant name="KEY_REFRESH" value="16777283">
+ <constant name="KEY_REFRESH" value="16777283" enum="KeyList">
Refresh key
</constant>
- <constant name="KEY_VOLUMEDOWN" value="16777284">
+ <constant name="KEY_VOLUMEDOWN" value="16777284" enum="KeyList">
Volume down key
</constant>
- <constant name="KEY_VOLUMEMUTE" value="16777285">
+ <constant name="KEY_VOLUMEMUTE" value="16777285" enum="KeyList">
Mute volume key
</constant>
- <constant name="KEY_VOLUMEUP" value="16777286">
+ <constant name="KEY_VOLUMEUP" value="16777286" enum="KeyList">
Volume up key
</constant>
- <constant name="KEY_BASSBOOST" value="16777287">
+ <constant name="KEY_BASSBOOST" value="16777287" enum="KeyList">
Bass Boost Key
</constant>
- <constant name="KEY_BASSUP" value="16777288">
+ <constant name="KEY_BASSUP" value="16777288" enum="KeyList">
Bass Up Key
</constant>
- <constant name="KEY_BASSDOWN" value="16777289">
+ <constant name="KEY_BASSDOWN" value="16777289" enum="KeyList">
Bass Down Key
</constant>
- <constant name="KEY_TREBLEUP" value="16777290">
+ <constant name="KEY_TREBLEUP" value="16777290" enum="KeyList">
Treble Up Key
</constant>
- <constant name="KEY_TREBLEDOWN" value="16777291">
+ <constant name="KEY_TREBLEDOWN" value="16777291" enum="KeyList">
Treble Down Key
</constant>
- <constant name="KEY_MEDIAPLAY" value="16777292">
+ <constant name="KEY_MEDIAPLAY" value="16777292" enum="KeyList">
Media play key
</constant>
- <constant name="KEY_MEDIASTOP" value="16777293">
+ <constant name="KEY_MEDIASTOP" value="16777293" enum="KeyList">
Media stop key
</constant>
- <constant name="KEY_MEDIAPREVIOUS" value="16777294">
+ <constant name="KEY_MEDIAPREVIOUS" value="16777294" enum="KeyList">
Previous song key
</constant>
- <constant name="KEY_MEDIANEXT" value="16777295">
+ <constant name="KEY_MEDIANEXT" value="16777295" enum="KeyList">
Next song key
</constant>
- <constant name="KEY_MEDIARECORD" value="16777296">
+ <constant name="KEY_MEDIARECORD" value="16777296" enum="KeyList">
Media record key
</constant>
- <constant name="KEY_HOMEPAGE" value="16777297">
+ <constant name="KEY_HOMEPAGE" value="16777297" enum="KeyList">
Home page key
</constant>
- <constant name="KEY_FAVORITES" value="16777298">
+ <constant name="KEY_FAVORITES" value="16777298" enum="KeyList">
Favorites key
</constant>
- <constant name="KEY_SEARCH" value="16777299">
+ <constant name="KEY_SEARCH" value="16777299" enum="KeyList">
Search key
</constant>
- <constant name="KEY_STANDBY" value="16777300">
+ <constant name="KEY_STANDBY" value="16777300" enum="KeyList">
Standby Key
</constant>
- <constant name="KEY_OPENURL" value="16777301">
+ <constant name="KEY_OPENURL" value="16777301" enum="KeyList">
Open URL / Launch Browser Key
</constant>
- <constant name="KEY_LAUNCHMAIL" value="16777302">
+ <constant name="KEY_LAUNCHMAIL" value="16777302" enum="KeyList">
Launch Mail Key
</constant>
- <constant name="KEY_LAUNCHMEDIA" value="16777303">
+ <constant name="KEY_LAUNCHMEDIA" value="16777303" enum="KeyList">
Launch Media Key
</constant>
- <constant name="KEY_LAUNCH0" value="16777304">
+ <constant name="KEY_LAUNCH0" value="16777304" enum="KeyList">
Launch Shortcut 0 Key
</constant>
- <constant name="KEY_LAUNCH1" value="16777305">
+ <constant name="KEY_LAUNCH1" value="16777305" enum="KeyList">
Launch Shortcut 1 Key
</constant>
- <constant name="KEY_LAUNCH2" value="16777306">
+ <constant name="KEY_LAUNCH2" value="16777306" enum="KeyList">
Launch Shortcut 2 Key
</constant>
- <constant name="KEY_LAUNCH3" value="16777307">
+ <constant name="KEY_LAUNCH3" value="16777307" enum="KeyList">
Launch Shortcut 3 Key
</constant>
- <constant name="KEY_LAUNCH4" value="16777308">
+ <constant name="KEY_LAUNCH4" value="16777308" enum="KeyList">
Launch Shortcut 4 Key
</constant>
- <constant name="KEY_LAUNCH5" value="16777309">
+ <constant name="KEY_LAUNCH5" value="16777309" enum="KeyList">
Launch Shortcut 5 Key
</constant>
- <constant name="KEY_LAUNCH6" value="16777310">
+ <constant name="KEY_LAUNCH6" value="16777310" enum="KeyList">
Launch Shortcut 6 Key
</constant>
- <constant name="KEY_LAUNCH7" value="16777311">
+ <constant name="KEY_LAUNCH7" value="16777311" enum="KeyList">
Launch Shortcut 7 Key
</constant>
- <constant name="KEY_LAUNCH8" value="16777312">
+ <constant name="KEY_LAUNCH8" value="16777312" enum="KeyList">
Launch Shortcut 8 Key
</constant>
- <constant name="KEY_LAUNCH9" value="16777313">
+ <constant name="KEY_LAUNCH9" value="16777313" enum="KeyList">
Launch Shortcut 9 Key
</constant>
- <constant name="KEY_LAUNCHA" value="16777314">
+ <constant name="KEY_LAUNCHA" value="16777314" enum="KeyList">
Launch Shortcut A Key
</constant>
- <constant name="KEY_LAUNCHB" value="16777315">
+ <constant name="KEY_LAUNCHB" value="16777315" enum="KeyList">
Launch Shortcut B Key
</constant>
- <constant name="KEY_LAUNCHC" value="16777316">
+ <constant name="KEY_LAUNCHC" value="16777316" enum="KeyList">
Launch Shortcut C Key
</constant>
- <constant name="KEY_LAUNCHD" value="16777317">
+ <constant name="KEY_LAUNCHD" value="16777317" enum="KeyList">
Launch Shortcut D Key
</constant>
- <constant name="KEY_LAUNCHE" value="16777318">
+ <constant name="KEY_LAUNCHE" value="16777318" enum="KeyList">
Launch Shortcut E Key
</constant>
- <constant name="KEY_LAUNCHF" value="16777319">
+ <constant name="KEY_LAUNCHF" value="16777319" enum="KeyList">
Launch Shortcut F Key
</constant>
- <constant name="KEY_UNKNOWN" value="33554431">
+ <constant name="KEY_UNKNOWN" value="33554431" enum="KeyList">
Unknown Key
</constant>
- <constant name="KEY_SPACE" value="32">
+ <constant name="KEY_SPACE" value="32" enum="KeyList">
Space Key
</constant>
- <constant name="KEY_EXCLAM" value="33">
+ <constant name="KEY_EXCLAM" value="33" enum="KeyList">
! key
</constant>
- <constant name="KEY_QUOTEDBL" value="34">
+ <constant name="KEY_QUOTEDBL" value="34" enum="KeyList">
" key
</constant>
- <constant name="KEY_NUMBERSIGN" value="35">
+ <constant name="KEY_NUMBERSIGN" value="35" enum="KeyList">
# key
</constant>
- <constant name="KEY_DOLLAR" value="36">
+ <constant name="KEY_DOLLAR" value="36" enum="KeyList">
$ key
</constant>
- <constant name="KEY_PERCENT" value="37">
+ <constant name="KEY_PERCENT" value="37" enum="KeyList">
% key
</constant>
- <constant name="KEY_AMPERSAND" value="38">
+ <constant name="KEY_AMPERSAND" value="38" enum="KeyList">
&amp; key
</constant>
- <constant name="KEY_APOSTROPHE" value="39">
+ <constant name="KEY_APOSTROPHE" value="39" enum="KeyList">
' key
</constant>
- <constant name="KEY_PARENLEFT" value="40">
+ <constant name="KEY_PARENLEFT" value="40" enum="KeyList">
( key
</constant>
- <constant name="KEY_PARENRIGHT" value="41">
+ <constant name="KEY_PARENRIGHT" value="41" enum="KeyList">
) key
</constant>
- <constant name="KEY_ASTERISK" value="42">
+ <constant name="KEY_ASTERISK" value="42" enum="KeyList">
* key
</constant>
- <constant name="KEY_PLUS" value="43">
+ <constant name="KEY_PLUS" value="43" enum="KeyList">
+ key
</constant>
- <constant name="KEY_COMMA" value="44">
+ <constant name="KEY_COMMA" value="44" enum="KeyList">
, key
</constant>
- <constant name="KEY_MINUS" value="45">
+ <constant name="KEY_MINUS" value="45" enum="KeyList">
- key
</constant>
- <constant name="KEY_PERIOD" value="46">
+ <constant name="KEY_PERIOD" value="46" enum="KeyList">
. key
</constant>
- <constant name="KEY_SLASH" value="47">
+ <constant name="KEY_SLASH" value="47" enum="KeyList">
/ key
</constant>
- <constant name="KEY_0" value="48">
+ <constant name="KEY_0" value="48" enum="KeyList">
Number 0
</constant>
- <constant name="KEY_1" value="49">
+ <constant name="KEY_1" value="49" enum="KeyList">
Number 1
</constant>
- <constant name="KEY_2" value="50">
+ <constant name="KEY_2" value="50" enum="KeyList">
Number 2
</constant>
- <constant name="KEY_3" value="51">
+ <constant name="KEY_3" value="51" enum="KeyList">
Number 3
</constant>
- <constant name="KEY_4" value="52">
+ <constant name="KEY_4" value="52" enum="KeyList">
Number 4
</constant>
- <constant name="KEY_5" value="53">
+ <constant name="KEY_5" value="53" enum="KeyList">
Number 5
</constant>
- <constant name="KEY_6" value="54">
+ <constant name="KEY_6" value="54" enum="KeyList">
Number 6
</constant>
- <constant name="KEY_7" value="55">
+ <constant name="KEY_7" value="55" enum="KeyList">
Number 7
</constant>
- <constant name="KEY_8" value="56">
+ <constant name="KEY_8" value="56" enum="KeyList">
Number 8
</constant>
- <constant name="KEY_9" value="57">
+ <constant name="KEY_9" value="57" enum="KeyList">
Number 9
</constant>
- <constant name="KEY_COLON" value="58">
+ <constant name="KEY_COLON" value="58" enum="KeyList">
: key
</constant>
- <constant name="KEY_SEMICOLON" value="59">
+ <constant name="KEY_SEMICOLON" value="59" enum="KeyList">
; key
</constant>
- <constant name="KEY_LESS" value="60">
+ <constant name="KEY_LESS" value="60" enum="KeyList">
Lower than key
</constant>
- <constant name="KEY_EQUAL" value="61">
+ <constant name="KEY_EQUAL" value="61" enum="KeyList">
= key
</constant>
- <constant name="KEY_GREATER" value="62">
+ <constant name="KEY_GREATER" value="62" enum="KeyList">
Greater than key
</constant>
- <constant name="KEY_QUESTION" value="63">
+ <constant name="KEY_QUESTION" value="63" enum="KeyList">
? key
</constant>
- <constant name="KEY_AT" value="64">
+ <constant name="KEY_AT" value="64" enum="KeyList">
@ key
</constant>
- <constant name="KEY_A" value="65">
+ <constant name="KEY_A" value="65" enum="KeyList">
A Key
</constant>
- <constant name="KEY_B" value="66">
+ <constant name="KEY_B" value="66" enum="KeyList">
B Key
</constant>
- <constant name="KEY_C" value="67">
+ <constant name="KEY_C" value="67" enum="KeyList">
C Key
</constant>
- <constant name="KEY_D" value="68">
+ <constant name="KEY_D" value="68" enum="KeyList">
D Key
</constant>
- <constant name="KEY_E" value="69">
+ <constant name="KEY_E" value="69" enum="KeyList">
E Key
</constant>
- <constant name="KEY_F" value="70">
+ <constant name="KEY_F" value="70" enum="KeyList">
F Key
</constant>
- <constant name="KEY_G" value="71">
+ <constant name="KEY_G" value="71" enum="KeyList">
G Key
</constant>
- <constant name="KEY_H" value="72">
+ <constant name="KEY_H" value="72" enum="KeyList">
H Key
</constant>
- <constant name="KEY_I" value="73">
+ <constant name="KEY_I" value="73" enum="KeyList">
I Key
</constant>
- <constant name="KEY_J" value="74">
+ <constant name="KEY_J" value="74" enum="KeyList">
J Key
</constant>
- <constant name="KEY_K" value="75">
+ <constant name="KEY_K" value="75" enum="KeyList">
K Key
</constant>
- <constant name="KEY_L" value="76">
+ <constant name="KEY_L" value="76" enum="KeyList">
L Key
</constant>
- <constant name="KEY_M" value="77">
+ <constant name="KEY_M" value="77" enum="KeyList">
M Key
</constant>
- <constant name="KEY_N" value="78">
+ <constant name="KEY_N" value="78" enum="KeyList">
N Key
</constant>
- <constant name="KEY_O" value="79">
+ <constant name="KEY_O" value="79" enum="KeyList">
O Key
</constant>
- <constant name="KEY_P" value="80">
+ <constant name="KEY_P" value="80" enum="KeyList">
P Key
</constant>
- <constant name="KEY_Q" value="81">
+ <constant name="KEY_Q" value="81" enum="KeyList">
Q Key
</constant>
- <constant name="KEY_R" value="82">
+ <constant name="KEY_R" value="82" enum="KeyList">
R Key
</constant>
- <constant name="KEY_S" value="83">
+ <constant name="KEY_S" value="83" enum="KeyList">
S Key
</constant>
- <constant name="KEY_T" value="84">
+ <constant name="KEY_T" value="84" enum="KeyList">
T Key
</constant>
- <constant name="KEY_U" value="85">
+ <constant name="KEY_U" value="85" enum="KeyList">
U Key
</constant>
- <constant name="KEY_V" value="86">
+ <constant name="KEY_V" value="86" enum="KeyList">
V Key
</constant>
- <constant name="KEY_W" value="87">
+ <constant name="KEY_W" value="87" enum="KeyList">
W Key
</constant>
- <constant name="KEY_X" value="88">
+ <constant name="KEY_X" value="88" enum="KeyList">
X Key
</constant>
- <constant name="KEY_Y" value="89">
+ <constant name="KEY_Y" value="89" enum="KeyList">
Y Key
</constant>
- <constant name="KEY_Z" value="90">
+ <constant name="KEY_Z" value="90" enum="KeyList">
Z Key
</constant>
- <constant name="KEY_BRACKETLEFT" value="91">
+ <constant name="KEY_BRACKETLEFT" value="91" enum="KeyList">
[ key
</constant>
- <constant name="KEY_BACKSLASH" value="92">
+ <constant name="KEY_BACKSLASH" value="92" enum="KeyList">
\ key
</constant>
- <constant name="KEY_BRACKETRIGHT" value="93">
+ <constant name="KEY_BRACKETRIGHT" value="93" enum="KeyList">
] key
</constant>
- <constant name="KEY_ASCIICIRCUM" value="94">
+ <constant name="KEY_ASCIICIRCUM" value="94" enum="KeyList">
^ key
</constant>
- <constant name="KEY_UNDERSCORE" value="95">
+ <constant name="KEY_UNDERSCORE" value="95" enum="KeyList">
_ key
</constant>
- <constant name="KEY_QUOTELEFT" value="96">
+ <constant name="KEY_QUOTELEFT" value="96" enum="KeyList">
Left Quote Key
</constant>
- <constant name="KEY_BRACELEFT" value="123">
+ <constant name="KEY_BRACELEFT" value="123" enum="KeyList">
{ key
</constant>
- <constant name="KEY_BAR" value="124">
+ <constant name="KEY_BAR" value="124" enum="KeyList">
| key
</constant>
- <constant name="KEY_BRACERIGHT" value="125">
+ <constant name="KEY_BRACERIGHT" value="125" enum="KeyList">
} key
</constant>
- <constant name="KEY_ASCIITILDE" value="126">
+ <constant name="KEY_ASCIITILDE" value="126" enum="KeyList">
~ key
</constant>
- <constant name="KEY_NOBREAKSPACE" value="160">
+ <constant name="KEY_NOBREAKSPACE" value="160" enum="KeyList">
</constant>
- <constant name="KEY_EXCLAMDOWN" value="161">
+ <constant name="KEY_EXCLAMDOWN" value="161" enum="KeyList">
</constant>
- <constant name="KEY_CENT" value="162">
+ <constant name="KEY_CENT" value="162" enum="KeyList">
¢ key
</constant>
- <constant name="KEY_STERLING" value="163">
+ <constant name="KEY_STERLING" value="163" enum="KeyList">
</constant>
- <constant name="KEY_CURRENCY" value="164">
+ <constant name="KEY_CURRENCY" value="164" enum="KeyList">
</constant>
- <constant name="KEY_YEN" value="165">
+ <constant name="KEY_YEN" value="165" enum="KeyList">
Yen Key
</constant>
- <constant name="KEY_BROKENBAR" value="166">
+ <constant name="KEY_BROKENBAR" value="166" enum="KeyList">
¦ key
</constant>
- <constant name="KEY_SECTION" value="167">
+ <constant name="KEY_SECTION" value="167" enum="KeyList">
§ key
</constant>
- <constant name="KEY_DIAERESIS" value="168">
+ <constant name="KEY_DIAERESIS" value="168" enum="KeyList">
¨ key
</constant>
- <constant name="KEY_COPYRIGHT" value="169">
+ <constant name="KEY_COPYRIGHT" value="169" enum="KeyList">
© key
</constant>
- <constant name="KEY_ORDFEMININE" value="170">
+ <constant name="KEY_ORDFEMININE" value="170" enum="KeyList">
</constant>
- <constant name="KEY_GUILLEMOTLEFT" value="171">
+ <constant name="KEY_GUILLEMOTLEFT" value="171" enum="KeyList">
« key
</constant>
- <constant name="KEY_NOTSIGN" value="172">
+ <constant name="KEY_NOTSIGN" value="172" enum="KeyList">
» key
</constant>
- <constant name="KEY_HYPHEN" value="173">
+ <constant name="KEY_HYPHEN" value="173" enum="KeyList">
†key
</constant>
- <constant name="KEY_REGISTERED" value="174">
+ <constant name="KEY_REGISTERED" value="174" enum="KeyList">
® key
</constant>
- <constant name="KEY_MACRON" value="175">
+ <constant name="KEY_MACRON" value="175" enum="KeyList">
Macron Key
</constant>
- <constant name="KEY_DEGREE" value="176">
+ <constant name="KEY_DEGREE" value="176" enum="KeyList">
° key
</constant>
- <constant name="KEY_PLUSMINUS" value="177">
+ <constant name="KEY_PLUSMINUS" value="177" enum="KeyList">
± key
</constant>
- <constant name="KEY_TWOSUPERIOR" value="178">
+ <constant name="KEY_TWOSUPERIOR" value="178" enum="KeyList">
² key
</constant>
- <constant name="KEY_THREESUPERIOR" value="179">
+ <constant name="KEY_THREESUPERIOR" value="179" enum="KeyList">
³ key
</constant>
- <constant name="KEY_ACUTE" value="180">
+ <constant name="KEY_ACUTE" value="180" enum="KeyList">
´ key
</constant>
- <constant name="KEY_MU" value="181">
+ <constant name="KEY_MU" value="181" enum="KeyList">
µ key
</constant>
- <constant name="KEY_PARAGRAPH" value="182">
+ <constant name="KEY_PARAGRAPH" value="182" enum="KeyList">
Paragraph Key
</constant>
- <constant name="KEY_PERIODCENTERED" value="183">
+ <constant name="KEY_PERIODCENTERED" value="183" enum="KeyList">
· key
</constant>
- <constant name="KEY_CEDILLA" value="184">
+ <constant name="KEY_CEDILLA" value="184" enum="KeyList">
¬ key
</constant>
- <constant name="KEY_ONESUPERIOR" value="185">
+ <constant name="KEY_ONESUPERIOR" value="185" enum="KeyList">
¹ key
</constant>
- <constant name="KEY_MASCULINE" value="186">
+ <constant name="KEY_MASCULINE" value="186" enum="KeyList">
♂ key
</constant>
- <constant name="KEY_GUILLEMOTRIGHT" value="187">
+ <constant name="KEY_GUILLEMOTRIGHT" value="187" enum="KeyList">
» key
</constant>
- <constant name="KEY_ONEQUARTER" value="188">
+ <constant name="KEY_ONEQUARTER" value="188" enum="KeyList">
¼ key
</constant>
- <constant name="KEY_ONEHALF" value="189">
+ <constant name="KEY_ONEHALF" value="189" enum="KeyList">
½ key
</constant>
- <constant name="KEY_THREEQUARTERS" value="190">
+ <constant name="KEY_THREEQUARTERS" value="190" enum="KeyList">
¾ key
</constant>
- <constant name="KEY_QUESTIONDOWN" value="191">
+ <constant name="KEY_QUESTIONDOWN" value="191" enum="KeyList">
¿ key
</constant>
- <constant name="KEY_AGRAVE" value="192">
+ <constant name="KEY_AGRAVE" value="192" enum="KeyList">
à key
</constant>
- <constant name="KEY_AACUTE" value="193">
+ <constant name="KEY_AACUTE" value="193" enum="KeyList">
á key
</constant>
- <constant name="KEY_ACIRCUMFLEX" value="194">
+ <constant name="KEY_ACIRCUMFLEX" value="194" enum="KeyList">
â key
</constant>
- <constant name="KEY_ATILDE" value="195">
+ <constant name="KEY_ATILDE" value="195" enum="KeyList">
ã key
</constant>
- <constant name="KEY_ADIAERESIS" value="196">
+ <constant name="KEY_ADIAERESIS" value="196" enum="KeyList">
ä key
</constant>
- <constant name="KEY_ARING" value="197">
+ <constant name="KEY_ARING" value="197" enum="KeyList">
Ã¥ key
</constant>
- <constant name="KEY_AE" value="198">
+ <constant name="KEY_AE" value="198" enum="KeyList">
æ key
</constant>
- <constant name="KEY_CCEDILLA" value="199">
+ <constant name="KEY_CCEDILLA" value="199" enum="KeyList">
ç key
</constant>
- <constant name="KEY_EGRAVE" value="200">
+ <constant name="KEY_EGRAVE" value="200" enum="KeyList">
è key
</constant>
- <constant name="KEY_EACUTE" value="201">
+ <constant name="KEY_EACUTE" value="201" enum="KeyList">
é key
</constant>
- <constant name="KEY_ECIRCUMFLEX" value="202">
+ <constant name="KEY_ECIRCUMFLEX" value="202" enum="KeyList">
ê key
</constant>
- <constant name="KEY_EDIAERESIS" value="203">
+ <constant name="KEY_EDIAERESIS" value="203" enum="KeyList">
ë key
</constant>
- <constant name="KEY_IGRAVE" value="204">
+ <constant name="KEY_IGRAVE" value="204" enum="KeyList">
ì key
</constant>
- <constant name="KEY_IACUTE" value="205">
+ <constant name="KEY_IACUTE" value="205" enum="KeyList">
í key
</constant>
- <constant name="KEY_ICIRCUMFLEX" value="206">
+ <constant name="KEY_ICIRCUMFLEX" value="206" enum="KeyList">
î key
</constant>
- <constant name="KEY_IDIAERESIS" value="207">
+ <constant name="KEY_IDIAERESIS" value="207" enum="KeyList">
ë key
</constant>
- <constant name="KEY_ETH" value="208">
+ <constant name="KEY_ETH" value="208" enum="KeyList">
ð key
</constant>
- <constant name="KEY_NTILDE" value="209">
+ <constant name="KEY_NTILDE" value="209" enum="KeyList">
ñ key
</constant>
- <constant name="KEY_OGRAVE" value="210">
+ <constant name="KEY_OGRAVE" value="210" enum="KeyList">
ò key
</constant>
- <constant name="KEY_OACUTE" value="211">
+ <constant name="KEY_OACUTE" value="211" enum="KeyList">
ó key
</constant>
- <constant name="KEY_OCIRCUMFLEX" value="212">
+ <constant name="KEY_OCIRCUMFLEX" value="212" enum="KeyList">
ô key
</constant>
- <constant name="KEY_OTILDE" value="213">
+ <constant name="KEY_OTILDE" value="213" enum="KeyList">
õ key
</constant>
- <constant name="KEY_ODIAERESIS" value="214">
+ <constant name="KEY_ODIAERESIS" value="214" enum="KeyList">
ö key
</constant>
- <constant name="KEY_MULTIPLY" value="215">
+ <constant name="KEY_MULTIPLY" value="215" enum="KeyList">
× key
</constant>
- <constant name="KEY_OOBLIQUE" value="216">
+ <constant name="KEY_OOBLIQUE" value="216" enum="KeyList">
ø key
</constant>
- <constant name="KEY_UGRAVE" value="217">
+ <constant name="KEY_UGRAVE" value="217" enum="KeyList">
ù key
</constant>
- <constant name="KEY_UACUTE" value="218">
+ <constant name="KEY_UACUTE" value="218" enum="KeyList">
ú key
</constant>
- <constant name="KEY_UCIRCUMFLEX" value="219">
+ <constant name="KEY_UCIRCUMFLEX" value="219" enum="KeyList">
û key
</constant>
- <constant name="KEY_UDIAERESIS" value="220">
+ <constant name="KEY_UDIAERESIS" value="220" enum="KeyList">
ü key
</constant>
- <constant name="KEY_YACUTE" value="221">
+ <constant name="KEY_YACUTE" value="221" enum="KeyList">
ý key
</constant>
- <constant name="KEY_THORN" value="222">
+ <constant name="KEY_THORN" value="222" enum="KeyList">
þ key
</constant>
- <constant name="KEY_SSHARP" value="223">
+ <constant name="KEY_SSHARP" value="223" enum="KeyList">
ß key
</constant>
- <constant name="KEY_DIVISION" value="247">
+ <constant name="KEY_DIVISION" value="247" enum="KeyList">
÷ key
</constant>
- <constant name="KEY_YDIAERESIS" value="255">
+ <constant name="KEY_YDIAERESIS" value="255" enum="KeyList">
ÿ key
</constant>
- <constant name="KEY_CODE_MASK" value="33554431">
+ <constant name="KEY_CODE_MASK" value="33554431" enum="KeyModifierMask">
Key Code Mask
</constant>
- <constant name="KEY_MODIFIER_MASK" value="-16777216">
+ <constant name="KEY_MODIFIER_MASK" value="-16777216" enum="KeyModifierMask">
Modifier Key Mask
</constant>
- <constant name="KEY_MASK_SHIFT" value="33554432">
+ <constant name="KEY_MASK_SHIFT" value="33554432" enum="KeyModifierMask">
Shift Key Mask
</constant>
- <constant name="KEY_MASK_ALT" value="67108864">
+ <constant name="KEY_MASK_ALT" value="67108864" enum="KeyModifierMask">
Alt Key Mask
</constant>
- <constant name="KEY_MASK_META" value="134217728">
+ <constant name="KEY_MASK_META" value="134217728" enum="KeyModifierMask">
Meta Key Mask
</constant>
- <constant name="KEY_MASK_CTRL" value="268435456">
+ <constant name="KEY_MASK_CTRL" value="268435456" enum="KeyModifierMask">
CTRL Key Mask
</constant>
- <constant name="KEY_MASK_CMD" value="268435456">
+ <constant name="KEY_MASK_CMD" value="268435456" enum="KeyModifierMask">
CMD Key Mask
</constant>
- <constant name="KEY_MASK_KPAD" value="536870912">
+ <constant name="KEY_MASK_KPAD" value="536870912" enum="KeyModifierMask">
Keypad Key Mask
</constant>
- <constant name="KEY_MASK_GROUP_SWITCH" value="1073741824">
+ <constant name="KEY_MASK_GROUP_SWITCH" value="1073741824" enum="KeyModifierMask">
Group Switch Key Mask
</constant>
- <constant name="BUTTON_LEFT" value="1">
+ <constant name="BUTTON_LEFT" value="1" enum="ButtonList">
Left Mouse Button
</constant>
- <constant name="BUTTON_RIGHT" value="2">
+ <constant name="BUTTON_RIGHT" value="2" enum="ButtonList">
Right Mouse Button
</constant>
- <constant name="BUTTON_MIDDLE" value="3">
+ <constant name="BUTTON_MIDDLE" value="3" enum="ButtonList">
Middle Mouse Button
</constant>
- <constant name="BUTTON_WHEEL_UP" value="4">
+ <constant name="BUTTON_WHEEL_UP" value="4" enum="ButtonList">
Mouse wheel up
</constant>
- <constant name="BUTTON_WHEEL_DOWN" value="5">
+ <constant name="BUTTON_WHEEL_DOWN" value="5" enum="ButtonList">
Mouse wheel down
</constant>
- <constant name="BUTTON_WHEEL_LEFT" value="6">
+ <constant name="BUTTON_WHEEL_LEFT" value="6" enum="ButtonList">
Mouse wheel left button
</constant>
- <constant name="BUTTON_WHEEL_RIGHT" value="7">
+ <constant name="BUTTON_WHEEL_RIGHT" value="7" enum="ButtonList">
Mouse wheel right button
</constant>
- <constant name="BUTTON_MASK_LEFT" value="1">
+ <constant name="BUTTON_MASK_LEFT" value="1" enum="ButtonList">
Left Mouse Button Mask
</constant>
- <constant name="BUTTON_MASK_RIGHT" value="2">
+ <constant name="BUTTON_MASK_RIGHT" value="2" enum="ButtonList">
Right Mouse Button Mask
</constant>
- <constant name="BUTTON_MASK_MIDDLE" value="4">
+ <constant name="BUTTON_MASK_MIDDLE" value="4" enum="ButtonList">
Middle Mouse Button Mask
</constant>
- <constant name="JOY_BUTTON_0" value="0">
+ <constant name="JOY_BUTTON_0" value="0" enum="JoystickList">
Joypad Button 0
</constant>
- <constant name="JOY_BUTTON_1" value="1">
+ <constant name="JOY_BUTTON_1" value="1" enum="JoystickList">
Joypad Button 1
</constant>
- <constant name="JOY_BUTTON_2" value="2">
+ <constant name="JOY_BUTTON_2" value="2" enum="JoystickList">
Joypad Button 2
</constant>
- <constant name="JOY_BUTTON_3" value="3">
+ <constant name="JOY_BUTTON_3" value="3" enum="JoystickList">
Joypad Button 3
</constant>
- <constant name="JOY_BUTTON_4" value="4">
+ <constant name="JOY_BUTTON_4" value="4" enum="JoystickList">
Joypad Button 4
</constant>
- <constant name="JOY_BUTTON_5" value="5">
+ <constant name="JOY_BUTTON_5" value="5" enum="JoystickList">
Joypad Button 5
</constant>
- <constant name="JOY_BUTTON_6" value="6">
+ <constant name="JOY_BUTTON_6" value="6" enum="JoystickList">
Joypad Button 6
</constant>
- <constant name="JOY_BUTTON_7" value="7">
+ <constant name="JOY_BUTTON_7" value="7" enum="JoystickList">
Joypad Button 7
</constant>
- <constant name="JOY_BUTTON_8" value="8">
+ <constant name="JOY_BUTTON_8" value="8" enum="JoystickList">
Joypad Button 8
</constant>
- <constant name="JOY_BUTTON_9" value="9">
+ <constant name="JOY_BUTTON_9" value="9" enum="JoystickList">
Joypad Button 9
</constant>
- <constant name="JOY_BUTTON_10" value="10">
+ <constant name="JOY_BUTTON_10" value="10" enum="JoystickList">
Joypad Button 10
</constant>
- <constant name="JOY_BUTTON_11" value="11">
+ <constant name="JOY_BUTTON_11" value="11" enum="JoystickList">
Joypad Button 11
</constant>
- <constant name="JOY_BUTTON_12" value="12">
+ <constant name="JOY_BUTTON_12" value="12" enum="JoystickList">
Joypad Button 12
</constant>
- <constant name="JOY_BUTTON_13" value="13">
+ <constant name="JOY_BUTTON_13" value="13" enum="JoystickList">
Joypad Button 13
</constant>
- <constant name="JOY_BUTTON_14" value="14">
+ <constant name="JOY_BUTTON_14" value="14" enum="JoystickList">
Joypad Button 14
</constant>
- <constant name="JOY_BUTTON_15" value="15">
+ <constant name="JOY_BUTTON_15" value="15" enum="JoystickList">
Joypad Button 15
</constant>
- <constant name="JOY_BUTTON_MAX" value="16">
+ <constant name="JOY_BUTTON_MAX" value="16" enum="JoystickList">
Joypad Button 16
</constant>
- <constant name="JOY_SONY_CIRCLE" value="1">
+ <constant name="JOY_SONY_CIRCLE" value="1" enum="JoystickList">
DUALSHOCK circle button
</constant>
- <constant name="JOY_SONY_X" value="0">
+ <constant name="JOY_SONY_X" value="0" enum="JoystickList">
DUALSHOCK X button
</constant>
- <constant name="JOY_SONY_SQUARE" value="2">
+ <constant name="JOY_SONY_SQUARE" value="2" enum="JoystickList">
DUALSHOCK square button
</constant>
- <constant name="JOY_SONY_TRIANGLE" value="3">
+ <constant name="JOY_SONY_TRIANGLE" value="3" enum="JoystickList">
DUALSHOCK triangle button
</constant>
- <constant name="JOY_XBOX_B" value="1">
+ <constant name="JOY_XBOX_B" value="1" enum="JoystickList">
XBOX controller B button
</constant>
- <constant name="JOY_XBOX_A" value="0">
+ <constant name="JOY_XBOX_A" value="0" enum="JoystickList">
XBOX controller A button
</constant>
- <constant name="JOY_XBOX_X" value="2">
+ <constant name="JOY_XBOX_X" value="2" enum="JoystickList">
XBOX controller X button
</constant>
- <constant name="JOY_XBOX_Y" value="3">
+ <constant name="JOY_XBOX_Y" value="3" enum="JoystickList">
XBOX controller Y button
</constant>
- <constant name="JOY_DS_A" value="1">
+ <constant name="JOY_DS_A" value="1" enum="JoystickList">
DualShock controller A button
</constant>
- <constant name="JOY_DS_B" value="0">
+ <constant name="JOY_DS_B" value="0" enum="JoystickList">
DualShock controller B button
</constant>
- <constant name="JOY_DS_X" value="3">
+ <constant name="JOY_DS_X" value="3" enum="JoystickList">
DualShock controller X button
</constant>
- <constant name="JOY_DS_Y" value="2">
+ <constant name="JOY_DS_Y" value="2" enum="JoystickList">
DualShock controller Y button
</constant>
- <constant name="JOY_SELECT" value="10">
+ <constant name="JOY_SELECT" value="10" enum="JoystickList">
Joypad Button Select
</constant>
- <constant name="JOY_START" value="11">
+ <constant name="JOY_START" value="11" enum="JoystickList">
Joypad Button Start
</constant>
- <constant name="JOY_DPAD_UP" value="12">
+ <constant name="JOY_DPAD_UP" value="12" enum="JoystickList">
Joypad DPad Up
</constant>
- <constant name="JOY_DPAD_DOWN" value="13">
+ <constant name="JOY_DPAD_DOWN" value="13" enum="JoystickList">
Joypad DPad Down
</constant>
- <constant name="JOY_DPAD_LEFT" value="14">
+ <constant name="JOY_DPAD_LEFT" value="14" enum="JoystickList">
Joypad DPad Left
</constant>
- <constant name="JOY_DPAD_RIGHT" value="15">
+ <constant name="JOY_DPAD_RIGHT" value="15" enum="JoystickList">
Joypad DPad Right
</constant>
- <constant name="JOY_L" value="4">
+ <constant name="JOY_L" value="4" enum="JoystickList">
Joypad Left Shoulder Button
</constant>
- <constant name="JOY_L2" value="6">
+ <constant name="JOY_L2" value="6" enum="JoystickList">
Joypad Left Trigger
</constant>
- <constant name="JOY_L3" value="8">
+ <constant name="JOY_L3" value="8" enum="JoystickList">
Joypad Left Stick Click
</constant>
- <constant name="JOY_R" value="5">
+ <constant name="JOY_R" value="5" enum="JoystickList">
Joypad Right Shoulder Button
</constant>
- <constant name="JOY_R2" value="7">
+ <constant name="JOY_R2" value="7" enum="JoystickList">
Joypad Right Trigger
</constant>
- <constant name="JOY_R3" value="9">
+ <constant name="JOY_R3" value="9" enum="JoystickList">
Joypad Right Stick Click
</constant>
- <constant name="JOY_AXIS_0" value="0">
+ <constant name="JOY_AXIS_0" value="0" enum="JoystickList">
Joypad Left Stick Horizontal Axis
</constant>
- <constant name="JOY_AXIS_1" value="1">
+ <constant name="JOY_AXIS_1" value="1" enum="JoystickList">
Joypad Left Stick Vertical Axis
</constant>
- <constant name="JOY_AXIS_2" value="2">
+ <constant name="JOY_AXIS_2" value="2" enum="JoystickList">
Joypad Right Stick Horizontal Axis
</constant>
- <constant name="JOY_AXIS_3" value="3">
+ <constant name="JOY_AXIS_3" value="3" enum="JoystickList">
Joypad Right Stick Vertical Axis
</constant>
- <constant name="JOY_AXIS_4" value="4">
+ <constant name="JOY_AXIS_4" value="4" enum="JoystickList">
</constant>
- <constant name="JOY_AXIS_5" value="5">
+ <constant name="JOY_AXIS_5" value="5" enum="JoystickList">
</constant>
- <constant name="JOY_AXIS_6" value="6">
+ <constant name="JOY_AXIS_6" value="6" enum="JoystickList">
Joypad Left Trigger Analog Axis
</constant>
- <constant name="JOY_AXIS_7" value="7">
+ <constant name="JOY_AXIS_7" value="7" enum="JoystickList">
Joypad Right Trigger Analog Axis
</constant>
- <constant name="JOY_AXIS_8" value="8">
+ <constant name="JOY_AXIS_8" value="8" enum="JoystickList">
</constant>
- <constant name="JOY_AXIS_9" value="9">
+ <constant name="JOY_AXIS_9" value="9" enum="JoystickList">
</constant>
- <constant name="JOY_AXIS_MAX" value="10">
+ <constant name="JOY_AXIS_MAX" value="10" enum="JoystickList">
</constant>
- <constant name="JOY_ANALOG_LX" value="0">
+ <constant name="JOY_ANALOG_LX" value="0" enum="JoystickList">
Joypad Left Stick Horizontal Axis
</constant>
- <constant name="JOY_ANALOG_LY" value="1">
+ <constant name="JOY_ANALOG_LY" value="1" enum="JoystickList">
Joypad Left Stick Vertical Axis
</constant>
- <constant name="JOY_ANALOG_RX" value="2">
+ <constant name="JOY_ANALOG_RX" value="2" enum="JoystickList">
Joypad Right Stick Horizontal Axis
</constant>
- <constant name="JOY_ANALOG_RY" value="3">
+ <constant name="JOY_ANALOG_RY" value="3" enum="JoystickList">
Joypad Right Stick Vertical Axis
</constant>
- <constant name="JOY_ANALOG_L2" value="6">
+ <constant name="JOY_ANALOG_L2" value="6" enum="JoystickList">
Joypad Left Analog Trigger
</constant>
- <constant name="JOY_ANALOG_R2" value="7">
+ <constant name="JOY_ANALOG_R2" value="7" enum="JoystickList">
Joypad Right Analog Trigger
</constant>
- <constant name="OK" value="0">
+ <constant name="OK" value="0" enum="Error">
Functions that return Error return OK when no error occured. Most functions don't return errors and/or just print errors to STDOUT.
</constant>
- <constant name="FAILED" value="1">
+ <constant name="FAILED" value="1" enum="Error">
Generic error.
</constant>
- <constant name="ERR_UNAVAILABLE" value="2">
+ <constant name="ERR_UNAVAILABLE" value="2" enum="Error">
Unavailable error
</constant>
- <constant name="ERR_UNCONFIGURED" value="3">
+ <constant name="ERR_UNCONFIGURED" value="3" enum="Error">
Unconfigured error
</constant>
- <constant name="ERR_UNAUTHORIZED" value="4">
+ <constant name="ERR_UNAUTHORIZED" value="4" enum="Error">
Unauthorized error
</constant>
- <constant name="ERR_PARAMETER_RANGE_ERROR" value="5">
+ <constant name="ERR_PARAMETER_RANGE_ERROR" value="5" enum="Error">
Parameter range error
</constant>
- <constant name="ERR_OUT_OF_MEMORY" value="6">
+ <constant name="ERR_OUT_OF_MEMORY" value="6" enum="Error">
Out of memory (OOM) error
</constant>
- <constant name="ERR_FILE_NOT_FOUND" value="7">
+ <constant name="ERR_FILE_NOT_FOUND" value="7" enum="Error">
File: Not found error
</constant>
- <constant name="ERR_FILE_BAD_DRIVE" value="8">
+ <constant name="ERR_FILE_BAD_DRIVE" value="8" enum="Error">
File: Bad drive error
</constant>
- <constant name="ERR_FILE_BAD_PATH" value="9">
+ <constant name="ERR_FILE_BAD_PATH" value="9" enum="Error">
File: Bad path error
</constant>
- <constant name="ERR_FILE_NO_PERMISSION" value="10">
+ <constant name="ERR_FILE_NO_PERMISSION" value="10" enum="Error">
File: No permission error
</constant>
- <constant name="ERR_FILE_ALREADY_IN_USE" value="11">
+ <constant name="ERR_FILE_ALREADY_IN_USE" value="11" enum="Error">
File: Already in use error
</constant>
- <constant name="ERR_FILE_CANT_OPEN" value="12">
+ <constant name="ERR_FILE_CANT_OPEN" value="12" enum="Error">
File: Can't open error
</constant>
- <constant name="ERR_FILE_CANT_WRITE" value="13">
+ <constant name="ERR_FILE_CANT_WRITE" value="13" enum="Error">
File: Can't write error
</constant>
- <constant name="ERR_FILE_CANT_READ" value="14">
+ <constant name="ERR_FILE_CANT_READ" value="14" enum="Error">
File: Can't read error
</constant>
- <constant name="ERR_FILE_UNRECOGNIZED" value="15">
+ <constant name="ERR_FILE_UNRECOGNIZED" value="15" enum="Error">
File: Unrecognized error
</constant>
- <constant name="ERR_FILE_CORRUPT" value="16">
+ <constant name="ERR_FILE_CORRUPT" value="16" enum="Error">
File: Corrupt error
</constant>
- <constant name="ERR_FILE_MISSING_DEPENDENCIES" value="17">
+ <constant name="ERR_FILE_MISSING_DEPENDENCIES" value="17" enum="Error">
File: Missing dependencies error
</constant>
- <constant name="ERR_FILE_EOF" value="18">
+ <constant name="ERR_FILE_EOF" value="18" enum="Error">
File: End of file (EOF) error
</constant>
- <constant name="ERR_CANT_OPEN" value="19">
+ <constant name="ERR_CANT_OPEN" value="19" enum="Error">
Can't open error
</constant>
- <constant name="ERR_CANT_CREATE" value="20">
+ <constant name="ERR_CANT_CREATE" value="20" enum="Error">
Can't create error
</constant>
- <constant name="ERR_PARSE_ERROR" value="43">
+ <constant name="ERR_PARSE_ERROR" value="43" enum="Error">
Parse error
</constant>
- <constant name="ERR_QUERY_FAILED" value="21">
+ <constant name="ERR_QUERY_FAILED" value="21" enum="Error">
Query failed error
</constant>
- <constant name="ERR_ALREADY_IN_USE" value="22">
+ <constant name="ERR_ALREADY_IN_USE" value="22" enum="Error">
Already in use error
</constant>
- <constant name="ERR_LOCKED" value="23">
+ <constant name="ERR_LOCKED" value="23" enum="Error">
Locked error
</constant>
- <constant name="ERR_TIMEOUT" value="24">
+ <constant name="ERR_TIMEOUT" value="24" enum="Error">
Timeout error
</constant>
- <constant name="ERR_CANT_ACQUIRE_RESOURCE" value="28">
+ <constant name="ERR_CANT_ACQUIRE_RESOURCE" value="28" enum="Error">
Can't acquire resource error
</constant>
- <constant name="ERR_INVALID_DATA" value="30">
+ <constant name="ERR_INVALID_DATA" value="30" enum="Error">
Invalid data error
</constant>
- <constant name="ERR_INVALID_PARAMETER" value="31">
+ <constant name="ERR_INVALID_PARAMETER" value="31" enum="Error">
Invalid parameter error
</constant>
- <constant name="ERR_ALREADY_EXISTS" value="32">
+ <constant name="ERR_ALREADY_EXISTS" value="32" enum="Error">
Already exists error
</constant>
- <constant name="ERR_DOES_NOT_EXIST" value="33">
+ <constant name="ERR_DOES_NOT_EXIST" value="33" enum="Error">
Does not exist error
</constant>
- <constant name="ERR_DATABASE_CANT_READ" value="34">
+ <constant name="ERR_DATABASE_CANT_READ" value="34" enum="Error">
Database: Read error
</constant>
- <constant name="ERR_DATABASE_CANT_WRITE" value="35">
+ <constant name="ERR_DATABASE_CANT_WRITE" value="35" enum="Error">
Database: Write error
</constant>
- <constant name="ERR_COMPILATION_FAILED" value="36">
+ <constant name="ERR_COMPILATION_FAILED" value="36" enum="Error">
Compilation failed error
</constant>
- <constant name="ERR_METHOD_NOT_FOUND" value="37">
+ <constant name="ERR_METHOD_NOT_FOUND" value="37" enum="Error">
Method not found error
</constant>
- <constant name="ERR_LINK_FAILED" value="38">
+ <constant name="ERR_LINK_FAILED" value="38" enum="Error">
Linking failed error
</constant>
- <constant name="ERR_SCRIPT_FAILED" value="39">
+ <constant name="ERR_SCRIPT_FAILED" value="39" enum="Error">
Script failed error
</constant>
- <constant name="ERR_CYCLIC_LINK" value="40">
+ <constant name="ERR_CYCLIC_LINK" value="40" enum="Error">
Cycling link (import cycle) error
</constant>
- <constant name="ERR_BUSY" value="44">
+ <constant name="ERR_BUSY" value="44" enum="Error">
Busy error
</constant>
- <constant name="ERR_HELP" value="46">
+ <constant name="ERR_HELP" value="46" enum="Error">
Help error
</constant>
- <constant name="ERR_BUG" value="47">
+ <constant name="ERR_BUG" value="47" enum="Error">
Bug error
</constant>
- <constant name="ERR_WTF" value="49">
- WTF error (something probably went really wrong)
- </constant>
- <constant name="PROPERTY_HINT_NONE" value="0">
+ <constant name="PROPERTY_HINT_NONE" value="0" enum="PropertyHint">
No hint for edited property.
</constant>
- <constant name="PROPERTY_HINT_RANGE" value="1">
+ <constant name="PROPERTY_HINT_RANGE" value="1" enum="PropertyHint">
Hints that the string is a range, defined as "min,max" or "min,max,step". This is valid for integers and floats.
</constant>
- <constant name="PROPERTY_HINT_EXP_RANGE" value="2">
+ <constant name="PROPERTY_HINT_EXP_RANGE" value="2" enum="PropertyHint">
Hints that the string is an exponential range, defined as "min,max" or "min,max,step". This is valid for integers and floats.
</constant>
- <constant name="PROPERTY_HINT_ENUM" value="3">
+ <constant name="PROPERTY_HINT_ENUM" value="3" enum="PropertyHint">
Property hint for an enumerated value, like "Hello,Something,Else". This is valid for integer, float and string properties.
</constant>
- <constant name="PROPERTY_HINT_EXP_EASING" value="4">
+ <constant name="PROPERTY_HINT_EXP_EASING" value="4" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_LENGTH" value="5">
+ <constant name="PROPERTY_HINT_LENGTH" value="5" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_KEY_ACCEL" value="7">
+ <constant name="PROPERTY_HINT_KEY_ACCEL" value="7" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_FLAGS" value="8">
+ <constant name="PROPERTY_HINT_FLAGS" value="8" enum="PropertyHint">
Property hint for a bitmask description, for bits 0,1,2,3 and 5 the hint would be like "Bit0,Bit1,Bit2,Bit3,,Bit5". Valid only for integers.
</constant>
- <constant name="PROPERTY_HINT_LAYERS_2D_RENDER" value="9">
+ <constant name="PROPERTY_HINT_LAYERS_2D_RENDER" value="9" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_LAYERS_2D_PHYSICS" value="10">
+ <constant name="PROPERTY_HINT_LAYERS_2D_PHYSICS" value="10" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_LAYERS_3D_RENDER" value="11">
+ <constant name="PROPERTY_HINT_LAYERS_3D_RENDER" value="11" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_LAYERS_3D_PHYSICS" value="12">
+ <constant name="PROPERTY_HINT_LAYERS_3D_PHYSICS" value="12" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_FILE" value="13">
+ <constant name="PROPERTY_HINT_FILE" value="13" enum="PropertyHint">
String property is a file (so pop up a file dialog when edited). Hint string can be a set of wildcards like "*.doc".
</constant>
- <constant name="PROPERTY_HINT_DIR" value="14">
+ <constant name="PROPERTY_HINT_DIR" value="14" enum="PropertyHint">
String property is a directory (so pop up a file dialog when edited).
</constant>
- <constant name="PROPERTY_HINT_GLOBAL_FILE" value="15">
+ <constant name="PROPERTY_HINT_GLOBAL_FILE" value="15" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_GLOBAL_DIR" value="16">
+ <constant name="PROPERTY_HINT_GLOBAL_DIR" value="16" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_RESOURCE_TYPE" value="17">
+ <constant name="PROPERTY_HINT_RESOURCE_TYPE" value="17" enum="PropertyHint">
String property is a resource, so open the resource popup menu when edited.
</constant>
- <constant name="PROPERTY_HINT_MULTILINE_TEXT" value="18">
+ <constant name="PROPERTY_HINT_MULTILINE_TEXT" value="18" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_COLOR_NO_ALPHA" value="19">
+ <constant name="PROPERTY_HINT_COLOR_NO_ALPHA" value="19" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSY" value="20">
+ <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSY" value="20" enum="PropertyHint">
Hints that the image is compressed using lossy compression.
</constant>
- <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS" value="21">
+ <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS" value="21" enum="PropertyHint">
Hints that the image is compressed using lossless compression.
</constant>
- <constant name="PROPERTY_USAGE_STORAGE" value="1">
+ <constant name="PROPERTY_USAGE_STORAGE" value="1" enum="PropertyUsageFlags">
Property will be used as storage (default).
</constant>
- <constant name="PROPERTY_USAGE_EDITOR" value="2">
+ <constant name="PROPERTY_USAGE_EDITOR" value="2" enum="PropertyUsageFlags">
Property will be visible in editor (default).
</constant>
- <constant name="PROPERTY_USAGE_NETWORK" value="4">
+ <constant name="PROPERTY_USAGE_NETWORK" value="4" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_EDITOR_HELPER" value="8">
+ <constant name="PROPERTY_USAGE_EDITOR_HELPER" value="8" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_CHECKABLE" value="16">
+ <constant name="PROPERTY_USAGE_CHECKABLE" value="16" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_CHECKED" value="32">
+ <constant name="PROPERTY_USAGE_CHECKED" value="32" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_INTERNATIONALIZED" value="64">
+ <constant name="PROPERTY_USAGE_INTERNATIONALIZED" value="64" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_GROUP" value="128">
+ <constant name="PROPERTY_USAGE_GROUP" value="128" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_CATEGORY" value="256">
+ <constant name="PROPERTY_USAGE_CATEGORY" value="256" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_STORE_IF_NONZERO" value="512">
+ <constant name="PROPERTY_USAGE_STORE_IF_NONZERO" value="512" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_STORE_IF_NONONE" value="1024">
+ <constant name="PROPERTY_USAGE_STORE_IF_NONONE" value="1024" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_NO_INSTANCE_STATE" value="2048">
+ <constant name="PROPERTY_USAGE_NO_INSTANCE_STATE" value="2048" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_RESTART_IF_CHANGED" value="4096">
+ <constant name="PROPERTY_USAGE_RESTART_IF_CHANGED" value="4096" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_SCRIPT_VARIABLE" value="8192">
+ <constant name="PROPERTY_USAGE_SCRIPT_VARIABLE" value="8192" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_DEFAULT" value="7">
+ <constant name="PROPERTY_USAGE_DEFAULT" value="7" enum="PropertyUsageFlags">
Default usage (storage and editor).
</constant>
- <constant name="PROPERTY_USAGE_DEFAULT_INTL" value="71">
+ <constant name="PROPERTY_USAGE_DEFAULT_INTL" value="71" enum="PropertyUsageFlags">
</constant>
- <constant name="PROPERTY_USAGE_NOEDITOR" value="5">
+ <constant name="PROPERTY_USAGE_NOEDITOR" value="1048581" enum="PropertyUsageFlags">
</constant>
- <constant name="METHOD_FLAG_NORMAL" value="1">
+ <constant name="METHOD_FLAG_NORMAL" value="1" enum="MethodFlags">
Flag for normal method
</constant>
- <constant name="METHOD_FLAG_EDITOR" value="2">
+ <constant name="METHOD_FLAG_EDITOR" value="2" enum="MethodFlags">
Flag for editor method
</constant>
- <constant name="METHOD_FLAG_NOSCRIPT" value="4">
+ <constant name="METHOD_FLAG_NOSCRIPT" value="4" enum="MethodFlags">
</constant>
- <constant name="METHOD_FLAG_CONST" value="8">
+ <constant name="METHOD_FLAG_CONST" value="8" enum="MethodFlags">
Flag for constant method
</constant>
- <constant name="METHOD_FLAG_REVERSE" value="16">
+ <constant name="METHOD_FLAG_REVERSE" value="16" enum="MethodFlags">
</constant>
- <constant name="METHOD_FLAG_VIRTUAL" value="32">
+ <constant name="METHOD_FLAG_VIRTUAL" value="32" enum="MethodFlags">
Flag for virtual method
</constant>
- <constant name="METHOD_FLAG_FROM_SCRIPT" value="64">
+ <constant name="METHOD_FLAG_FROM_SCRIPT" value="64" enum="MethodFlags">
Flag for method from script
</constant>
- <constant name="METHOD_FLAGS_DEFAULT" value="1">
+ <constant name="METHOD_FLAGS_DEFAULT" value="1" enum="MethodFlags">
Default method flags
</constant>
- <constant name="TYPE_NIL" value="0">
+ <constant name="TYPE_NIL" value="0" enum="Variant.Type">
Variable is of type nil (only applied for null).
</constant>
- <constant name="TYPE_BOOL" value="1">
+ <constant name="TYPE_BOOL" value="1" enum="Variant.Type">
Variable is of type [bool].
</constant>
- <constant name="TYPE_INT" value="2">
+ <constant name="TYPE_INT" value="2" enum="Variant.Type">
Variable is of type [int].
</constant>
- <constant name="TYPE_REAL" value="3">
+ <constant name="TYPE_REAL" value="3" enum="Variant.Type">
Variable is of type [float]/real.
</constant>
- <constant name="TYPE_STRING" value="4">
+ <constant name="TYPE_STRING" value="4" enum="Variant.Type">
Variable is of type [String].
</constant>
- <constant name="TYPE_VECTOR2" value="5">
+ <constant name="TYPE_VECTOR2" value="5" enum="Variant.Type">
Variable is of type [Vector2].
</constant>
- <constant name="TYPE_RECT2" value="6">
+ <constant name="TYPE_RECT2" value="6" enum="Variant.Type">
Variable is of type [Rect2].
</constant>
- <constant name="TYPE_VECTOR3" value="7">
+ <constant name="TYPE_VECTOR3" value="7" enum="Variant.Type">
Variable is of type [Vector3].
</constant>
- <constant name="TYPE_TRANSFORM2D" value="8">
+ <constant name="TYPE_TRANSFORM2D" value="8" enum="Variant.Type">
Variable is of type [Transform2D].
</constant>
- <constant name="TYPE_PLANE" value="9">
+ <constant name="TYPE_PLANE" value="9" enum="Variant.Type">
Variable is of type [Plane].
</constant>
- <constant name="TYPE_QUAT" value="10">
+ <constant name="TYPE_QUAT" value="10" enum="Variant.Type">
Variable is of type [Quat].
</constant>
- <constant name="TYPE_AABB" value="11">
+ <constant name="TYPE_AABB" value="11" enum="Variant.Type">
Variable is of type [AABB].
</constant>
- <constant name="TYPE_BASIS" value="12">
+ <constant name="TYPE_BASIS" value="12" enum="Variant.Type">
Variable is of type [Basis].
</constant>
- <constant name="TYPE_TRANSFORM" value="13">
+ <constant name="TYPE_TRANSFORM" value="13" enum="Variant.Type">
Variable is of type [Transform].
</constant>
- <constant name="TYPE_COLOR" value="14">
+ <constant name="TYPE_COLOR" value="14" enum="Variant.Type">
Variable is of type [Color].
</constant>
- <constant name="TYPE_NODE_PATH" value="15">
+ <constant name="TYPE_NODE_PATH" value="15" enum="Variant.Type">
Variable is of type [NodePath].
</constant>
- <constant name="TYPE_RID" value="16">
+ <constant name="TYPE_RID" value="16" enum="Variant.Type">
Variable is of type [RID].
</constant>
- <constant name="TYPE_OBJECT" value="17">
+ <constant name="TYPE_OBJECT" value="17" enum="Variant.Type">
Variable is of type [Object].
</constant>
- <constant name="TYPE_DICTIONARY" value="18">
+ <constant name="TYPE_DICTIONARY" value="18" enum="Variant.Type">
Variable is of type [Dictionary].
</constant>
- <constant name="TYPE_ARRAY" value="19">
+ <constant name="TYPE_ARRAY" value="19" enum="Variant.Type">
Variable is of type [Array].
</constant>
- <constant name="TYPE_RAW_ARRAY" value="20">
+ <constant name="TYPE_RAW_ARRAY" value="20" enum="Variant.Type">
Variable is of type [PoolByteArray].
</constant>
- <constant name="TYPE_INT_ARRAY" value="21">
+ <constant name="TYPE_INT_ARRAY" value="21" enum="Variant.Type">
Variable is of type [PoolIntArray].
</constant>
- <constant name="TYPE_REAL_ARRAY" value="22">
+ <constant name="TYPE_REAL_ARRAY" value="22" enum="Variant.Type">
Variable is of type [PoolRealArray].
</constant>
- <constant name="TYPE_STRING_ARRAY" value="23">
+ <constant name="TYPE_STRING_ARRAY" value="23" enum="Variant.Type">
Variable is of type [PoolStringArray].
</constant>
- <constant name="TYPE_VECTOR2_ARRAY" value="24">
+ <constant name="TYPE_VECTOR2_ARRAY" value="24" enum="Variant.Type">
Variable is of type [PoolVector2Array].
</constant>
- <constant name="TYPE_VECTOR3_ARRAY" value="25">
+ <constant name="TYPE_VECTOR3_ARRAY" value="25" enum="Variant.Type">
Variable is of type [PoolVector3Array].
</constant>
- <constant name="TYPE_COLOR_ARRAY" value="26">
+ <constant name="TYPE_COLOR_ARRAY" value="26" enum="Variant.Type">
Variable is of type [PoolColorArray].
</constant>
- <constant name="TYPE_MAX" value="27">
+ <constant name="TYPE_MAX" value="27" enum="Variant.Type">
Marker for end of type constants.
</constant>
</constants>
diff --git a/doc/classes/@NativeScript.xml b/doc/classes/@NativeScript.xml
index a9dfc4538a..898c30431f 100644
--- a/doc/classes/@NativeScript.xml
+++ b/doc/classes/@NativeScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="@NativeScript" category="Core" version="3.0-alpha">
+<class name="@NativeScript" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/@VisualScript.xml b/doc/classes/@VisualScript.xml
index 0e6205c040..0d105b4274 100644
--- a/doc/classes/@VisualScript.xml
+++ b/doc/classes/@VisualScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="@VisualScript" category="Core" version="3.0-alpha">
+<class name="@VisualScript" category="Core" version="3.0-beta">
<brief_description>
Built-in visual script functions.
</brief_description>
diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml
index 494dcb8fce..4aef151fbd 100644
--- a/doc/classes/AABB.xml
+++ b/doc/classes/AABB.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AABB" category="Built-In Types" version="3.0-alpha">
+<class name="AABB" category="Built-In Types" version="3.0-beta">
<brief_description>
Axis-Aligned Bounding Box.
</brief_description>
diff --git a/doc/classes/ARVRAnchor.xml b/doc/classes/ARVRAnchor.xml
index 8bb12609b0..88862ec5f1 100644
--- a/doc/classes/ARVRAnchor.xml
+++ b/doc/classes/ARVRAnchor.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ARVRAnchor" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="ARVRAnchor" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Anchor point in AR Space
</brief_description>
@@ -13,13 +13,6 @@
<demos>
</demos>
<methods>
- <method name="get_anchor_id" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the anchor id for this anchor.
- </description>
- </method>
<method name="get_anchor_name" qualifiers="const">
<return type="String">
</return>
@@ -48,15 +41,6 @@
Returns the estimated size of the plane that was detected. Say when the anchor relates to a table in the real world, this is the estimated size of the surface of that table.
</description>
</method>
- <method name="set_anchor_id">
- <return type="void">
- </return>
- <argument index="0" name="anchor_id" type="int">
- </argument>
- <description>
- Binds this anchor node to an anchor with this id. You can set this before the anchor itself exists. The first anchor that is identified gets id 1, the second id 2, etc. When anchors get removed that slot remains free and can be assigned to the next anchor that is identified. The most common situation where anchors 'disappear' is when the AR server identifies that two anchors represent different parts of the same plane and merge them.
- </description>
- </method>
</methods>
<members>
<member name="anchor_id" type="int" setter="set_anchor_id" getter="get_anchor_id">
diff --git a/doc/classes/ARVRCamera.xml b/doc/classes/ARVRCamera.xml
index 0d9886618d..5195568e67 100644
--- a/doc/classes/ARVRCamera.xml
+++ b/doc/classes/ARVRCamera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ARVRCamera" inherits="Camera" category="Core" version="3.0-alpha">
+<class name="ARVRCamera" inherits="Camera" category="Core" version="3.0-beta">
<brief_description>
A camera node with a few overrules for AR/VR applied such as location tracking.
</brief_description>
diff --git a/doc/classes/ARVRController.xml b/doc/classes/ARVRController.xml
index 8af483132b..47a9341643 100644
--- a/doc/classes/ARVRController.xml
+++ b/doc/classes/ARVRController.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ARVRController" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="ARVRController" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
A spatial node representing a spatially tracked controller.
</brief_description>
@@ -13,13 +13,6 @@
<demos>
</demos>
<methods>
- <method name="get_controller_id" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the controller id currently assigned to this node.
- </description>
- </method>
<method name="get_controller_name" qualifiers="const">
<return type="String">
</return>
@@ -38,7 +31,7 @@
<return type="bool">
</return>
<description>
- Returns true if the controller bound to this node is currently active and being tracked.
+ Returns [code]true[/code] if the bound controller is active. ARVR systems attempt to track active controllers.
</description>
</method>
<method name="get_joystick_axis" qualifiers="const">
@@ -57,36 +50,13 @@
Returns the ID of the joystick object bound to this. Every controller tracked by the ARVR Server that has buttons and axis will also be registered as a joystick within Godot. This means that all the normal joystick tracking and input mapping will work for buttons and axis found on the AR/VR controllers. This ID is purely offered as information so you can link up the controller with its joystick entry.
</description>
</method>
- <method name="get_rumble" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="is_button_pressed" qualifiers="const">
<return type="int">
</return>
<argument index="0" name="button" type="int">
</argument>
<description>
- Is the given button currently pressed?
- </description>
- </method>
- <method name="set_controller_id">
- <return type="void">
- </return>
- <argument index="0" name="controller_id" type="int">
- </argument>
- <description>
- Changes the id that identifies the controller bound to this node. The first controller that the ARVR Server detects will have id 1, the second id 2, the third id 3, etc. When a controller is turned off that slot is freed ensuring that controllers will keep the same id while it is turned on even when controllers with lower ids are turned off.
- </description>
- </method>
- <method name="set_rumble">
- <return type="void">
- </return>
- <argument index="0" name="rumble" type="float">
- </argument>
- <description>
+ Returns [code]true[/code] if the button at index [code]button[/code] is pressed.
</description>
</method>
</methods>
@@ -95,6 +65,7 @@
The controller's id. The first controller that the [ARVRServer] detects will have id 1, the second id 2, the third id 3, etc. When a controller is turned off, it's slot is freed. This ensures controllers will keep the same id even when controllers with lower ids are turned off.
</member>
<member name="rumble" type="float" setter="set_rumble" getter="get_rumble">
+ The degree to which the tracker rumbles. Ranges from [code]0.0[/code] to [code]1.0[/code] with precision [code].01[/code]. If changed, updates [member ARVRPositionalTracker.rumble] accordingly.
</member>
</members>
<signals>
@@ -102,14 +73,14 @@
<argument index="0" name="button" type="int">
</argument>
<description>
- When a button on this controller is pressed, this signal is given.
+ Emitted when a button on this controller is pressed.
</description>
</signal>
<signal name="button_release">
<argument index="0" name="button" type="int">
</argument>
<description>
- When a button on this controller is released, this signal is given.
+ Emitted when a button on this controller is released.
</description>
</signal>
</signals>
diff --git a/doc/classes/ARVRInterface.xml b/doc/classes/ARVRInterface.xml
index e9f8857ec8..d00b5eeaf4 100644
--- a/doc/classes/ARVRInterface.xml
+++ b/doc/classes/ARVRInterface.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ARVRInterface" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="ARVRInterface" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Base class for ARVR interface implementation.
</brief_description>
@@ -12,13 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_anchor_detection_is_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns true if achor detection is enabled (AR only).
- </description>
- </method>
<method name="get_capabilities" qualifiers="const">
<return type="int">
</return>
@@ -58,20 +51,6 @@
While currently not used you can activate additional interfaces, you may wish to do this if you want to track controllers from other platforms. However at this point in time only one interface can render to an HMD.
</description>
</method>
- <method name="is_initialized">
- <return type="bool">
- </return>
- <description>
- Returns true if this interface is active.
- </description>
- </method>
- <method name="is_primary">
- <return type="bool">
- </return>
- <description>
- Returns true if this interface is currently the primary interface (the interface responsible for showing the output).
- </description>
- </method>
<method name="is_stereo">
<return type="bool">
</return>
@@ -79,33 +58,6 @@
Returns true if the current output of this interface is in stereo.
</description>
</method>
- <method name="set_anchor_detection_is_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Enables anchor detection, this is used on AR interfaces and enables the extra logic that will detect planes, features, objects, etc. and adds/modifies anchor points.
- </description>
- </method>
- <method name="set_is_initialized">
- <return type="void">
- </return>
- <argument index="0" name="initialized" type="bool">
- </argument>
- <description>
- Initialize/uninitialize this interface (same effect as calling initialize/uninitialize).
- </description>
- </method>
- <method name="set_is_primary">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set this interface to the primary interface (unset the old one).
- </description>
- </method>
<method name="uninitialize">
<return type="void">
</return>
@@ -126,43 +78,43 @@
</member>
</members>
<constants>
- <constant name="ARVR_NONE" value="0">
+ <constant name="ARVR_NONE" value="0" enum="Capabilities">
No ARVR capabilities.
</constant>
- <constant name="ARVR_MONO" value="1">
+ <constant name="ARVR_MONO" value="1" enum="Capabilities">
This interface can work with normal rendering output (non-HMD based AR).
</constant>
- <constant name="ARVR_STEREO" value="2">
+ <constant name="ARVR_STEREO" value="2" enum="Capabilities">
This interface supports stereoscopic rendering.
</constant>
- <constant name="ARVR_AR" value="4">
+ <constant name="ARVR_AR" value="4" enum="Capabilities">
This interface support AR (video background and real world tracking).
</constant>
- <constant name="ARVR_EXTERNAL" value="8">
+ <constant name="ARVR_EXTERNAL" value="8" enum="Capabilities">
This interface outputs to an external device, if the main viewport is used the on screen output is an unmodified buffer of either the left or right eye (stretched if the viewport size is not changed to the same aspect ratio of get_render_targetsize. Using a seperate viewport node frees up the main viewport for other purposes.
</constant>
- <constant name="EYE_MONO" value="0">
+ <constant name="EYE_MONO" value="0" enum="Eyes">
Mono output, this is mostly used internally when retrieving positioning information for our camera node or when stereo scopic rendering is not supported.
</constant>
- <constant name="EYE_LEFT" value="1">
+ <constant name="EYE_LEFT" value="1" enum="Eyes">
Left eye output, this is mostly used internally when rendering the image for the left eye and obtaining positioning and projection information.
</constant>
- <constant name="EYE_RIGHT" value="2">
+ <constant name="EYE_RIGHT" value="2" enum="Eyes">
Right eye output, this is mostly used internally when rendering the image for the right eye and obtaining positioning and projection information.
</constant>
- <constant name="ARVR_NORMAL_TRACKING" value="0">
+ <constant name="ARVR_NORMAL_TRACKING" value="0" enum="Tracking_status">
Tracking is behaving as expected.
</constant>
- <constant name="ARVR_EXCESSIVE_MOTION" value="1">
+ <constant name="ARVR_EXCESSIVE_MOTION" value="1" enum="Tracking_status">
Tracking is hindered by excessive motion, player is moving faster then tracking can keep up.
</constant>
- <constant name="ARVR_INSUFFICIENT_FEATURES" value="2">
+ <constant name="ARVR_INSUFFICIENT_FEATURES" value="2" enum="Tracking_status">
Tracking is hindered by insufficient features, it's too dark (for camera based tracking), player is blocked, etc.
</constant>
- <constant name="ARVR_UNKNOWN_TRACKING" value="3">
+ <constant name="ARVR_UNKNOWN_TRACKING" value="3" enum="Tracking_status">
We don't know the status of the tracking or this interface does not provide feedback.
</constant>
- <constant name="ARVR_NOT_TRACKING" value="4">
+ <constant name="ARVR_NOT_TRACKING" value="4" enum="Tracking_status">
Tracking is not functional (camera not plugged in or obscured, lighthouses turned off, etc.)
</constant>
</constants>
diff --git a/doc/classes/ARVROrigin.xml b/doc/classes/ARVROrigin.xml
index 8ad3793c80..6e0999a1f9 100644
--- a/doc/classes/ARVROrigin.xml
+++ b/doc/classes/ARVROrigin.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ARVROrigin" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="ARVROrigin" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Our origin point in AR/VR.
</brief_description>
@@ -14,24 +14,6 @@
<demos>
</demos>
<methods>
- <method name="get_world_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Get the world scale applied to our positioning.
- </description>
- </method>
- <method name="set_world_scale">
- <return type="void">
- </return>
- <argument index="0" name="world_scale" type="float">
- </argument>
- <description>
- Changes the world scaling factor.
- Most AR/VR platforms will assume a unit size of 1 unit in your game world = 1 meter in the real world. This scale allows you to adjust this to the unit system you use in your game.
- Note that this method is a passthrough to the ARVRServer itself.
- </description>
- </method>
</methods>
<members>
<member name="world_scale" type="float" setter="set_world_scale" getter="get_world_scale">
diff --git a/doc/classes/ARVRPositionalTracker.xml b/doc/classes/ARVRPositionalTracker.xml
index 2a2c6aa843..88740f5dc1 100644
--- a/doc/classes/ARVRPositionalTracker.xml
+++ b/doc/classes/ARVRPositionalTracker.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ARVRPositionalTracker" inherits="Object" category="Core" version="3.0-alpha">
+<class name="ARVRPositionalTracker" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
A tracked object
</brief_description>
@@ -31,41 +31,35 @@
<return type="String">
</return>
<description>
- If available this returns the name of the controller or anchor point.
+ Returns the controller or anchor point's name if available.
</description>
</method>
<method name="get_orientation" qualifiers="const">
<return type="Basis">
</return>
<description>
- Returns the orientation matrix of the controller.
+ Returns the controller's orientation matrix.
</description>
</method>
<method name="get_position" qualifiers="const">
<return type="Vector3">
</return>
<description>
- Returns the position of the controller adjusted by world scale.
- </description>
- </method>
- <method name="get_rumble" qualifiers="const">
- <return type="float">
- </return>
- <description>
+ Returns the world-space controller position.
</description>
</method>
<method name="get_tracks_orientation" qualifiers="const">
<return type="bool">
</return>
<description>
- Returns true if the orientation of this device is being tracked.
+ Returns [code]true[/code] if this device tracks orientation.
</description>
</method>
<method name="get_tracks_position" qualifiers="const">
<return type="bool">
</return>
<description>
- Returns true if the position of this device is being tracked.
+ Returns [code]true[/code] if this device tracks position.
</description>
</method>
<method name="get_transform" qualifiers="const">
@@ -74,37 +68,30 @@
<argument index="0" name="adjust_by_reference_frame" type="bool">
</argument>
<description>
- Returns the transform combining the orientation and position of this device.
+ Returns the transform combining this device's orientation and position.
</description>
</method>
<method name="get_type" qualifiers="const">
<return type="int" enum="ARVRServer.TrackerType">
</return>
<description>
- Type of tracker.
- </description>
- </method>
- <method name="set_rumble">
- <return type="void">
- </return>
- <argument index="0" name="rumble" type="float">
- </argument>
- <description>
+ Returns the tracker's type.
</description>
</method>
</methods>
<members>
<member name="rumble" type="float" setter="set_rumble" getter="get_rumble">
+ The degree to which the tracker rumbles. Ranges from [code]0.0[/code] to [code]1.0[/code] with precision [code].01[/code].
</member>
</members>
<constants>
- <constant name="TRACKER_HAND_UNKNOWN" value="0">
+ <constant name="TRACKER_HAND_UNKNOWN" value="0" enum="TrackerHand">
The hand this tracker is held in is unknown or not applicable.
</constant>
- <constant name="TRACKER_LEFT_HAND" value="1">
+ <constant name="TRACKER_LEFT_HAND" value="1" enum="TrackerHand">
This tracker is the left hand controller.
</constant>
- <constant name="TRACKER_RIGHT_HAND" value="2">
+ <constant name="TRACKER_RIGHT_HAND" value="2" enum="TrackerHand">
This tracker is the right hand controller.
</constant>
</constants>
diff --git a/doc/classes/ARVRServer.xml b/doc/classes/ARVRServer.xml
index bee95ea072..17202c8c2c 100644
--- a/doc/classes/ARVRServer.xml
+++ b/doc/classes/ARVRServer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ARVRServer" inherits="Object" category="Core" version="3.0-alpha">
+<class name="ARVRServer" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
This is our AR/VR Server.
</brief_description>
@@ -82,13 +82,6 @@
Get the number of trackers currently registered.
</description>
</method>
- <method name="get_world_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns our world scale (see ARVROrigin for more information).
- </description>
- </method>
<method name="set_primary_interface">
<return type="void">
</return>
@@ -98,15 +91,6 @@
Changes the primary interface to the specified interface. Again mostly exposed for GDNative interfaces.
</description>
</method>
- <method name="set_world_scale">
- <return type="void">
- </return>
- <argument index="0" name="arg0" type="float">
- </argument>
- <description>
- Changing the world scale, see the ARVROrigin documentation for more information.
- </description>
- </method>
</methods>
<members>
<member name="world_scale" type="float" setter="set_world_scale" getter="get_world_scale">
@@ -152,22 +136,22 @@
</signal>
</signals>
<constants>
- <constant name="TRACKER_CONTROLLER" value="1">
+ <constant name="TRACKER_CONTROLLER" value="1" enum="TrackerType">
Our tracker tracks the location of a controller.
</constant>
- <constant name="TRACKER_BASESTATION" value="2">
+ <constant name="TRACKER_BASESTATION" value="2" enum="TrackerType">
Our tracker tracks the location of a base station.
</constant>
- <constant name="TRACKER_ANCHOR" value="4">
+ <constant name="TRACKER_ANCHOR" value="4" enum="TrackerType">
Our tracker tracks the location and size of an AR anchor.
</constant>
- <constant name="TRACKER_ANY_KNOWN" value="127">
+ <constant name="TRACKER_ANY_KNOWN" value="127" enum="TrackerType">
Used internally to filter trackers of any known type.
</constant>
- <constant name="TRACKER_UNKNOWN" value="128">
+ <constant name="TRACKER_UNKNOWN" value="128" enum="TrackerType">
Used internally if we haven't set the tracker type yet.
</constant>
- <constant name="TRACKER_ANY" value="255">
+ <constant name="TRACKER_ANY" value="255" enum="TrackerType">
Used internally to select all trackers.
</constant>
</constants>
diff --git a/doc/classes/AStar.xml b/doc/classes/AStar.xml
index ceb3c907a6..eefdf4d7a7 100644
--- a/doc/classes/AStar.xml
+++ b/doc/classes/AStar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AStar" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="AStar" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
AStar class representation that uses vectors as edges.
</brief_description>
@@ -47,7 +47,7 @@
Adds a new point at the given position with the given identifier. The algorithm prefers points with lower [code]weight_scale[/code] to form a path. The [code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must be 1 or larger.
[codeblock]
var as = AStar.new()
-
+
as.add_point(1, Vector3(1,0,0), 4) # Adds the point (1,0,0) with weight_scale=4 and id=1
[/codeblock]
If there already exists a point for the given id, its position and weight scale are updated to the given values.
@@ -84,10 +84,10 @@
Creates a segment between the given points.
[codeblock]
var as = AStar.new()
-
+
as.add_point(1, Vector3(1,1,0))
as.add_point(2, Vector3(0,5,0))
-
+
as.connect_points(1, 2, false) # If bidirectional=false it's only possible to go from point 1 to point 2
# and not from point 2 to point 1.
[/codeblock]
@@ -129,12 +129,12 @@
Returns the closest position to [code]to_position[/code] that resides inside a segment between two connected points.
[codeblock]
var as = AStar.new()
-
+
as.add_point(1, Vector3(0,0,0))
as.add_point(2, Vector3(0,5,0))
-
+
as.connect_points(1, 2)
-
+
var res = as.get_closest_position_in_segment(Vector3(3,3,0)) # returns (0, 3, 0)
[/codeblock]
The result is in the segment that goes from [code]y=0[/code] to [code]y=5[/code]. It's the closest position in the segment to the given point.
@@ -151,18 +151,18 @@
Returns an array with the ids of the points that form the path found by AStar between the given points. The array is ordered from the starting point to the ending point of the path.
[codeblock]
var as = AStar.new()
-
+
as.add_point(1, Vector3(0,0,0))
as.add_point(2, Vector3(0,1,0), 1) # default weight is 1
as.add_point(3, Vector3(1,1,0))
as.add_point(4, Vector3(2,0,0))
-
+
as.connect_points(1, 2, false)
as.connect_points(2, 3, false)
as.connect_points(4, 3, false)
as.connect_points(1, 4, false)
as.connect_points(5, 4, false)
-
+
var res = as.get_id_path(1, 3) # returns [1, 2, 3]
[/codeblock]
If you change the 2nd point's weight to 3, then the result will be [code][1, 4, 3][/code] instead, because now even though the distance is longer, it's "easier" to get through point 4 than through point 2.
@@ -223,6 +223,7 @@
<return type="Array">
</return>
<description>
+ Returns an array of all points.
</description>
</method>
<method name="has_point" qualifiers="const">
diff --git a/doc/classes/AcceptDialog.xml b/doc/classes/AcceptDialog.xml
index 2292d54756..219995023e 100644
--- a/doc/classes/AcceptDialog.xml
+++ b/doc/classes/AcceptDialog.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AcceptDialog" inherits="WindowDialog" category="Core" version="3.0-alpha">
+<class name="AcceptDialog" inherits="WindowDialog" category="Core" version="3.0-beta">
<brief_description>
Base dialog for user notification.
</brief_description>
@@ -34,13 +34,6 @@
Adds a button with label [i]name[/i] and a cancel action to the dialog and returns the created button.
</description>
</method>
- <method name="get_hide_on_ok" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the dialog will be hidden when accepted (default true).
- </description>
- </method>
<method name="get_label">
<return type="Label">
</return>
@@ -55,13 +48,6 @@
Return the OK Button.
</description>
</method>
- <method name="get_text" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the built-in label text.
- </description>
- </method>
<method name="register_text_enter">
<return type="void">
</return>
@@ -71,24 +57,6 @@
Registers a [LineEdit] in the dialog. When the enter key is pressed, the dialog will be accepted.
</description>
</method>
- <method name="set_hide_on_ok">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set whether the dialog is hidden when accepted (default true).
- </description>
- </method>
- <method name="set_text">
- <return type="void">
- </return>
- <argument index="0" name="text" type="String">
- </argument>
- <description>
- Set the built-in label text.
- </description>
- </method>
</methods>
<members>
<member name="dialog_hide_on_ok" type="bool" setter="set_hide_on_ok" getter="get_hide_on_ok">
diff --git a/doc/classes/AnimatedSprite.xml b/doc/classes/AnimatedSprite.xml
index 984eb47f12..9645758ea0 100644
--- a/doc/classes/AnimatedSprite.xml
+++ b/doc/classes/AnimatedSprite.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AnimatedSprite" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="AnimatedSprite" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Sprite node that can use multiple textures for animation.
</brief_description>
@@ -11,55 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_animation" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the name of the current animation set to the node.
- </description>
- </method>
- <method name="get_frame" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the visible frame index.
- </description>
- </method>
- <method name="get_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the offset of the sprite in the node origin.
- </description>
- </method>
- <method name="get_sprite_frames" qualifiers="const">
- <return type="SpriteFrames">
- </return>
- <description>
- Get the [SpriteFrames] resource, which contains all frames.
- </description>
- </method>
- <method name="is_centered" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true when centered. See [method set_centered].
- </description>
- </method>
- <method name="is_flipped_h" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if sprite is flipped horizontally.
- </description>
- </method>
- <method name="is_flipped_v" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if sprite is flipped vertically.
- </description>
- </method>
<method name="is_playing" qualifiers="const">
<return type="bool">
</return>
@@ -76,69 +27,6 @@
Play the animation set in parameter. If no parameter is provided, the current animation is played.
</description>
</method>
- <method name="set_animation">
- <return type="void">
- </return>
- <argument index="0" name="animation" type="String">
- </argument>
- <description>
- Set the current animation of the node and reinits the frame counter of the animation.
- </description>
- </method>
- <method name="set_centered">
- <return type="void">
- </return>
- <argument index="0" name="centered" type="bool">
- </argument>
- <description>
- When turned on, offset at (0,0) is the center of the sprite, when off, the top-left corner is.
- </description>
- </method>
- <method name="set_flip_h">
- <return type="void">
- </return>
- <argument index="0" name="flip_h" type="bool">
- </argument>
- <description>
- If true, sprite is flipped horizontally.
- </description>
- </method>
- <method name="set_flip_v">
- <return type="void">
- </return>
- <argument index="0" name="flip_v" type="bool">
- </argument>
- <description>
- If true, sprite is flipped vertically.
- </description>
- </method>
- <method name="set_frame">
- <return type="void">
- </return>
- <argument index="0" name="frame" type="int">
- </argument>
- <description>
- Set the visible sprite frame index (from the list of frames inside the [SpriteFrames] resource).
- </description>
- </method>
- <method name="set_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector2">
- </argument>
- <description>
- Set the offset of the sprite in the node origin. Position varies depending on whether it is centered or not.
- </description>
- </method>
- <method name="set_sprite_frames">
- <return type="void">
- </return>
- <argument index="0" name="sprite_frames" type="SpriteFrames">
- </argument>
- <description>
- Set the [SpriteFrames] resource, which contains all frames.
- </description>
- </method>
<method name="stop">
<return type="void">
</return>
diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml
index 0d8e2fc433..beb65d4d28 100644
--- a/doc/classes/AnimatedSprite3D.xml
+++ b/doc/classes/AnimatedSprite3D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AnimatedSprite3D" inherits="SpriteBase3D" category="Core" version="3.0-alpha">
+<class name="AnimatedSprite3D" inherits="SpriteBase3D" category="Core" version="3.0-beta">
<brief_description>
2D sprite node in 3D world, that can use multiple 2D textures for animation.
</brief_description>
@@ -11,27 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_animation" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the name of the current animation set to the node.
- </description>
- </method>
- <method name="get_frame" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the visible frame index.
- </description>
- </method>
- <method name="get_sprite_frames" qualifiers="const">
- <return type="SpriteFrames">
- </return>
- <description>
- Get the [SpriteFrames] resource, which contains all frames.
- </description>
- </method>
<method name="is_playing" qualifiers="const">
<return type="bool">
</return>
@@ -48,33 +27,6 @@
Play the animation set in parameter. If no parameter is provided, the current animation is played.
</description>
</method>
- <method name="set_animation">
- <return type="void">
- </return>
- <argument index="0" name="animation" type="String">
- </argument>
- <description>
- Set the current animation of the node and reinits the frame counter of the animation.
- </description>
- </method>
- <method name="set_frame">
- <return type="void">
- </return>
- <argument index="0" name="frame" type="int">
- </argument>
- <description>
- Set the visible sprite frame index (from the list of frames inside the [SpriteFrames] resource).
- </description>
- </method>
- <method name="set_sprite_frames">
- <return type="void">
- </return>
- <argument index="0" name="sprite_frames" type="SpriteFrames">
- </argument>
- <description>
- Set the [SpriteFrames] resource, which contains all frames.
- </description>
- </method>
<method name="stop">
<return type="void">
</return>
diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml
index 677976f1d3..93b01a466b 100644
--- a/doc/classes/Animation.xml
+++ b/doc/classes/Animation.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Animation" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Animation" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Contains data used to animate everything in the engine.
</brief_description>
@@ -30,6 +30,16 @@
Clear the animation (clear all tracks and reset all).
</description>
</method>
+ <method name="copy_track">
+ <return type="void">
+ </return>
+ <argument index="0" name="track" type="int">
+ </argument>
+ <argument index="1" name="to_animation" type="Animation">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="find_track" qualifiers="const">
<return type="int">
</return>
@@ -157,6 +167,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns [code]true[/code] if the track at [code]idx[/code] wraps the interpolation loop. Default value: [code]true[/code].
</description>
</method>
<method name="track_get_interpolation_type" qualifiers="const">
@@ -243,6 +254,14 @@
Insert a generic key in a given track.
</description>
</method>
+ <method name="track_is_enabled" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="track_is_imported" qualifiers="const">
<return type="bool">
</return>
@@ -292,6 +311,16 @@
Remove a key by position (seconds) in a given track.
</description>
</method>
+ <method name="track_set_enabled">
+ <return type="void">
+ </return>
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <argument index="1" name="enabled" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="track_set_imported">
<return type="void">
</return>
@@ -311,6 +340,7 @@
<argument index="1" name="interpolation" type="bool">
</argument>
<description>
+ If [code]true[/code] the track at [code]idx[/code] wraps the interpolation loop.
</description>
</method>
<method name="track_set_interpolation_type">
@@ -424,31 +454,31 @@
</method>
</methods>
<constants>
- <constant name="TYPE_VALUE" value="0">
+ <constant name="TYPE_VALUE" value="0" enum="TrackType">
Value tracks set values in node properties, but only those which can be Interpolated.
</constant>
- <constant name="TYPE_TRANSFORM" value="1">
+ <constant name="TYPE_TRANSFORM" value="1" enum="TrackType">
Transform tracks are used to change node local transforms or skeleton pose bones. Transitions are Interpolated.
</constant>
- <constant name="TYPE_METHOD" value="2">
+ <constant name="TYPE_METHOD" value="2" enum="TrackType">
Method tracks call functions with given arguments per key.
</constant>
- <constant name="INTERPOLATION_NEAREST" value="0">
+ <constant name="INTERPOLATION_NEAREST" value="0" enum="InterpolationType">
No interpolation (nearest value).
</constant>
- <constant name="INTERPOLATION_LINEAR" value="1">
+ <constant name="INTERPOLATION_LINEAR" value="1" enum="InterpolationType">
Linear interpolation.
</constant>
- <constant name="INTERPOLATION_CUBIC" value="2">
+ <constant name="INTERPOLATION_CUBIC" value="2" enum="InterpolationType">
Cubic interpolation.
</constant>
- <constant name="UPDATE_CONTINUOUS" value="0">
+ <constant name="UPDATE_CONTINUOUS" value="0" enum="UpdateMode">
Update between keyframes.
</constant>
- <constant name="UPDATE_DISCRETE" value="1">
+ <constant name="UPDATE_DISCRETE" value="1" enum="UpdateMode">
Update at the keyframes and hold the value.
</constant>
- <constant name="UPDATE_TRIGGER" value="2">
+ <constant name="UPDATE_TRIGGER" value="2" enum="UpdateMode">
Update at the keyframes.
</constant>
</constants>
diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml
index f0a1f7f634..d61211bb6b 100644
--- a/doc/classes/AnimationPlayer.xml
+++ b/doc/classes/AnimationPlayer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AnimationPlayer" inherits="Node" category="Core" version="3.0-alpha">
+<class name="AnimationPlayer" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Container and player of [Animation] resources.
</brief_description>
@@ -19,7 +19,7 @@
<argument index="1" name="animation" type="Animation">
</argument>
<description>
- Add an animation resource to the player, which will be later referenced by the "name" argument.
+ Adds [code]animation[/code] to the player accessible with the key [code]name[/code].
</description>
</method>
<method name="advance">
@@ -28,7 +28,7 @@
<argument index="0" name="delta" type="float">
</argument>
<description>
- Used to skip ahead or skip back in an animation. Delta is the time in seconds to skip.
+ Shifts position in the animation timeline. Delta is the time in seconds to shift.
</description>
</method>
<method name="animation_get_next" qualifiers="const">
@@ -37,7 +37,7 @@
<argument index="0" name="anim_from" type="String">
</argument>
<description>
- Return the name of the next animation in the queue.
+ Returns the name of the next animation in the queue.
</description>
</method>
<method name="animation_set_next">
@@ -48,21 +48,21 @@
<argument index="1" name="anim_to" type="String">
</argument>
<description>
- Set the name of an animation that will be played after.
+ Triggers the [code]anim_to[/code] animation when the [code]anim_from[/code] animation completes.
</description>
</method>
<method name="clear_caches">
<return type="void">
</return>
<description>
- The animation player creates caches for faster access to the nodes it will animate. However, if a specific node is removed, it may not notice it, so clear_caches will force the player to search for the nodes again.
+ [code]AnimationPlayer[/code] caches animated nodes. It may not notice if a node disappears, so clear_caches forces it to update the cache again.
</description>
</method>
<method name="clear_queue">
<return type="void">
</return>
<description>
- If animations are queued to play, clear them.
+ Clears all queued, unplayed animations.
</description>
</method>
<method name="find_animation" qualifiers="const">
@@ -71,7 +71,7 @@
<argument index="0" name="animation" type="Animation">
</argument>
<description>
- Find an animation name by resource.
+ Returns the name of [code]animation[/code] or empty string if not found.
</description>
</method>
<method name="get_animation" qualifiers="const">
@@ -80,28 +80,14 @@
<argument index="0" name="name" type="String">
</argument>
<description>
- Get an [Animation] resource by requesting a name.
+ Returns the [Animation] with key [code]name[/code] or [code]null[/code] if not found.
</description>
</method>
<method name="get_animation_list" qualifiers="const">
<return type="PoolStringArray">
</return>
<description>
- Get the list of names of the animations stored in the player.
- </description>
- </method>
- <method name="get_animation_process_mode" qualifiers="const">
- <return type="int" enum="AnimationPlayer.AnimationProcessMode">
- </return>
- <description>
- Return the mode in which the animation player processes. See [method set_animation_process_mode].
- </description>
- </method>
- <method name="get_autoplay" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the name of the animation that will be automatically played when the scene is loaded.
+ Returns the list of stored animation names.
</description>
</method>
<method name="get_blend_time" qualifiers="const">
@@ -112,56 +98,21 @@
<argument index="1" name="anim_to" type="String">
</argument>
<description>
- Get the blend time between two animations, referenced by their names.
- </description>
- </method>
- <method name="get_current_animation" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the name of the animation being played.
+ Get the blend time (in seconds) between two animations, referenced by their names.
</description>
</method>
<method name="get_current_animation_length" qualifiers="const">
<return type="float">
</return>
<description>
- Get the length (in seconds) of the currently being played animation.
+ Get the length (in seconds) of the currently playing animation.
</description>
</method>
<method name="get_current_animation_position" qualifiers="const">
<return type="float">
</return>
<description>
- Get the position (in seconds) of the currently being played animation.
- </description>
- </method>
- <method name="get_default_blend_time" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the default blend time between animations.
- </description>
- </method>
- <method name="get_position" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the playback position (in seconds) in an animation channel (or channel 0 if none is provided).
- </description>
- </method>
- <method name="get_root" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- Return path to root node (see [method set_root]).
- </description>
- </method>
- <method name="get_speed_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Get the speed scaling ratio in a given animation channel (or channel 0 if none is provided). Default ratio is [i]1[/i] (no scaling).
+ Get the position (in seconds) of the currently playing animation.
</description>
</method>
<method name="has_animation" qualifiers="const">
@@ -170,21 +121,14 @@
<argument index="0" name="name" type="String">
</argument>
<description>
- Request whether an [Animation] name exist within the player.
- </description>
- </method>
- <method name="is_active" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the player is active.
+ Returns [code]true[/code] if the [code]AnimationPlayer[/code] stores an [Animation] with key [code]name[/code].
</description>
</method>
<method name="is_playing" qualifiers="const">
<return type="bool">
</return>
<description>
- Return whether an animation is playing.
+ Returns [code]true[/code] if playing an animation.
</description>
</method>
<method name="play">
@@ -199,7 +143,7 @@
<argument index="3" name="from_end" type="bool" default="false">
</argument>
<description>
- Play a given animation by the animation name. Custom speed and blend times can be set. If custom speed is negative (-1), 'from_end' being true can play the animation backwards.
+ Play the animation with key [code]name[/code]. Custom speed and blend times can be set. If custom speed is negative (-1), 'from_end' being true can play the animation backwards.
</description>
</method>
<method name="play_backwards">
@@ -210,7 +154,7 @@
<argument index="1" name="custom_blend" type="float" default="-1">
</argument>
<description>
- Play a given animation by the animation name in reverse.
+ Play the animation with key [code]name[/code] in reverse.
</description>
</method>
<method name="queue">
@@ -228,7 +172,7 @@
<argument index="0" name="name" type="String">
</argument>
<description>
- Remove an animation from the player (by supplying the same name used to add it).
+ Remove the animation with key [code]name[/code].
</description>
</method>
<method name="rename_animation">
@@ -239,7 +183,7 @@
<argument index="1" name="newname" type="String">
</argument>
<description>
- Rename an existing animation.
+ Rename an existing animation with key [code]name[/code] to [code]newname[/code].
</description>
</method>
<method name="seek">
@@ -250,34 +194,7 @@
<argument index="1" name="update" type="bool" default="false">
</argument>
<description>
- Seek the animation to a given position in time (in seconds). If 'update' is true, the animation will be updated too, otherwise it will be updated at process time.
- </description>
- </method>
- <method name="set_active">
- <return type="void">
- </return>
- <argument index="0" name="active" type="bool">
- </argument>
- <description>
- Set the player as active (playing). If false, it will do nothing.
- </description>
- </method>
- <method name="set_animation_process_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="AnimationPlayer.AnimationProcessMode">
- </argument>
- <description>
- Set the mode in which the animation player processes. By default, it processes on idle time (framerate dependent), but using fixed time works well for animating static collision bodies in 2D and 3D. See enum ANIMATION_PROCESS_*.
- </description>
- </method>
- <method name="set_autoplay">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- Set the name of the animation that will be automatically played when the scene is loaded.
+ Seek the animation to the [code]seconds[/code] point in time (in seconds). If 'update' is true, the animation updates too, otherwise it updates at process time.
</description>
</method>
<method name="set_blend_time">
@@ -293,49 +210,13 @@
Specify a blend time (in seconds) between two animations, referenced by their names.
</description>
</method>
- <method name="set_current_animation">
- <return type="void">
- </return>
- <argument index="0" name="anim" type="String">
- </argument>
- <description>
- Set the current animation (even if no playback occurs). Using set_current_animation() and set_active() are similar to calling play().
- </description>
- </method>
- <method name="set_default_blend_time">
- <return type="void">
- </return>
- <argument index="0" name="sec" type="float">
- </argument>
- <description>
- Set the default blend time between animations.
- </description>
- </method>
- <method name="set_root">
- <return type="void">
- </return>
- <argument index="0" name="path" type="NodePath">
- </argument>
- <description>
- AnimationPlayer resolves animation track paths from this node (which is relative to itself), by default root is "..", but it can be changed.
- </description>
- </method>
- <method name="set_speed_scale">
- <return type="void">
- </return>
- <argument index="0" name="speed" type="float">
- </argument>
- <description>
- Set a speed scaling ratio in a given animation channel (or channel 0 if none is provided). Default ratio is [i]1[/i] (no scaling).
- </description>
- </method>
<method name="stop">
<return type="void">
</return>
<argument index="0" name="reset" type="bool" default="true">
</argument>
<description>
- Stop the currently playing animation.
+ Stop the currently playing animation. If [code]reset[/code] is [code]true[/code], the anim position is reset to [code]0[/code].
</description>
</method>
<method name="stop_all">
@@ -347,11 +228,25 @@
</method>
</methods>
<members>
+ <member name="active" type="bool" setter="set_active" getter="is_active">
+ If [code]true[/code] updates animations in response to process-related notifications. Default value: [code]true[/code].
+ </member>
+ <member name="autoplay" type="String" setter="set_autoplay" getter="get_autoplay">
+ The name of the animation to play when the scene loads. Default value: [code]""[/code].
+ </member>
+ <member name="current_animation" type="String" setter="set_current_animation" getter="get_current_animation">
+ The name of the current animation. Default value: [code]""[/code].
+ </member>
<member name="playback_default_blend_time" type="float" setter="set_default_blend_time" getter="get_default_blend_time">
</member>
<member name="playback_process_mode" type="int" setter="set_animation_process_mode" getter="get_animation_process_mode" enum="AnimationPlayer.AnimationProcessMode">
+ The process notification in which to update animations. Default value: [enum ANIMATION_PROCESS_IDLE].
</member>
<member name="root_node" type="NodePath" setter="set_root" getter="get_root">
+ The node from which node path references will travel. Default value: [code]".."[/code].
+ </member>
+ <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale">
+ The speed scaling ratio in a given animation channel (or channel 0 if none is provided). Default value: [code]1[/code].
</member>
</members>
<signals>
@@ -361,29 +256,29 @@
<argument index="1" name="new_name" type="String">
</argument>
<description>
- If the currently being played animation changes, this signal will notify of such change.
+ Emitted when the [Animation] with key [member current_anim] is modified.
</description>
</signal>
<signal name="animation_finished">
<argument index="0" name="name" type="String">
</argument>
<description>
- Notifies when an animation finished playing.
+ Emitted when an animation finishes.
</description>
</signal>
<signal name="animation_started">
<argument index="0" name="name" type="String">
</argument>
<description>
- Notifies when an animation starts playing.
+ Emitted when an animation starts.
</description>
</signal>
</signals>
<constants>
- <constant name="ANIMATION_PROCESS_PHYSICS" value="0">
+ <constant name="ANIMATION_PROCESS_PHYSICS" value="0" enum="AnimationProcessMode">
Process animation during the physics process. This is especially useful when animating physics bodies.
</constant>
- <constant name="ANIMATION_PROCESS_IDLE" value="1">
+ <constant name="ANIMATION_PROCESS_IDLE" value="1" enum="AnimationProcessMode">
Process animation during the idle process.
</constant>
</constants>
diff --git a/doc/classes/AnimationTreePlayer.xml b/doc/classes/AnimationTreePlayer.xml
index 413606dbaa..ecd1f81951 100644
--- a/doc/classes/AnimationTreePlayer.xml
+++ b/doc/classes/AnimationTreePlayer.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AnimationTreePlayer" inherits="Node" category="Core" version="3.0-alpha">
+<class name="AnimationTreePlayer" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Animation Player that uses a node graph for the blending.
</brief_description>
<description>
- Animation Player that uses a node graph for the blending. This kind of player is very useful when animating character or other skeleton based rigs, because it can combine several animations to form a desired pose.
+ A node graph tool for blending multiple animations bound to an [AnimationPlayer]. Especially useful for animating characters or other skeleton-based rigs. It can combine several animations to form a desired pose.
</description>
<tutorials>
</tutorials>
@@ -19,7 +19,7 @@
<argument index="1" name="id" type="String">
</argument>
<description>
- Add a node of a given type in the graph with given id.
+ Adds a [code]type[/code] node to the graph with name [code]id[/code].
</description>
</method>
<method name="advance">
@@ -28,6 +28,7 @@
<argument index="0" name="delta" type="float">
</argument>
<description>
+ Shifts position in the animation timeline. Delta is the time in seconds to shift.
</description>
</method>
<method name="animation_node_get_animation" qualifiers="const">
@@ -36,7 +37,7 @@
<argument index="0" name="id" type="String">
</argument>
<description>
- Returns an animation given its name.
+ Returns the [AnimationPlayer]'s animation bound to the [code]AnimationTreePlayer[/code]'s animation node with name [code]id[/code].
</description>
</method>
<method name="animation_node_get_master_animation" qualifiers="const">
@@ -45,6 +46,7 @@
<argument index="0" name="id" type="String">
</argument>
<description>
+ Returns the name of the [member master_player]'s animation bound to this animation node.
</description>
</method>
<method name="animation_node_set_animation">
@@ -55,7 +57,7 @@
<argument index="1" name="animation" type="Animation">
</argument>
<description>
- Set the animation for an animation node.
+ Binds a new animation from the [member master_player] to the [code]AnimationTreePlayer[/code]'s animation node with name [code]id[/code].
</description>
</method>
<method name="animation_node_set_filter_path">
@@ -68,6 +70,7 @@
<argument index="2" name="enable" type="bool">
</argument>
<description>
+ If [code]enable[/code] is [code]true[/code], the animation node with ID [code]id[/code] turns off the track modifying the property at [code]path[/code]. The modified node's children continue to animate.
</description>
</method>
<method name="animation_node_set_master_animation">
@@ -78,6 +81,7 @@
<argument index="1" name="source" type="String">
</argument>
<description>
+ Binds the animation named [code]source[/code] from [member master_player] to the animation node [code]id[/code]. Recalculates caches.
</description>
</method>
<method name="are_nodes_connected" qualifiers="const">
@@ -123,6 +127,7 @@
<argument index="2" name="enable" type="bool">
</argument>
<description>
+ If [code]enable[/code] is [code]true[/code], the blend2 node with ID [code]id[/code] turns off the track modifying the property at [code]path[/code]. The modified node's children continue to animate.
</description>
</method>
<method name="blend3_node_get_amount" qualifiers="const">
@@ -189,25 +194,6 @@
Disconnects nodes connected to [code]id[/code] at the specified input slot.
</description>
</method>
- <method name="get_animation_process_mode" qualifiers="const">
- <return type="int" enum="AnimationTreePlayer.AnimationProcessMode">
- </return>
- <description>
- Returns playback process mode of this AnimationTreePlayer.
- </description>
- </method>
- <method name="get_base_path" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_master_player" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
<method name="get_node_list">
<return type="PoolStringArray">
</return>
@@ -215,13 +201,6 @@
Returns a PoolStringArray containing the name of all nodes.
</description>
</method>
- <method name="is_active" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether this AnimationTreePlayer is active.
- </description>
- </method>
<method name="mix_node_get_amount" qualifiers="const">
<return type="float">
</return>
@@ -430,6 +409,7 @@
<argument index="2" name="enable" type="bool">
</argument>
<description>
+ If [code]enable[/code] is [code]true[/code], the oneshot node with ID [code]id[/code] turns off the track modifying the property at [code]path[/code]. The modified node's children continue to animate.
</description>
</method>
<method name="oneshot_node_start">
@@ -447,13 +427,14 @@
<argument index="0" name="id" type="String">
</argument>
<description>
- Stops a OneShot node given its name.
+ Stops the OneShot node with name [code]id[/code].
</description>
</method>
<method name="recompute_caches">
<return type="void">
</return>
<description>
+ Manually recalculates the cache of track information generated from animation nodes. Needed when external sources modify the animation nodes' state.
</description>
</method>
<method name="remove_node">
@@ -462,6 +443,7 @@
<argument index="0" name="id" type="String">
</argument>
<description>
+ Removes the animation node with name [code]id[/code].
</description>
</method>
<method name="reset">
@@ -471,48 +453,13 @@
Resets this AnimationTreePlayer.
</description>
</method>
- <method name="set_active">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Sets whether this AnimationTreePlayer is active. AnimationTreePlayer will start processing if set to active.
- </description>
- </method>
- <method name="set_animation_process_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="AnimationTreePlayer.AnimationProcessMode">
- </argument>
- <description>
- Sets process mode (ANIMATION_PROCESS_*) of this AnimationTreePlayer.
- </description>
- </method>
- <method name="set_base_path">
- <return type="void">
- </return>
- <argument index="0" name="path" type="NodePath">
- </argument>
- <description>
- Sets base path of this AnimationTreePlayer.
- </description>
- </method>
- <method name="set_master_player">
- <return type="void">
- </return>
- <argument index="0" name="nodepath" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
<method name="timescale_node_get_scale" qualifiers="const">
<return type="float">
</return>
<argument index="0" name="id" type="String">
</argument>
<description>
- Returns time scale value of a TimeScale node given its name.
+ Returns time scale value of the TimeScale node with name [code]id[/code].
</description>
</method>
<method name="timescale_node_set_scale">
@@ -523,7 +470,7 @@
<argument index="1" name="scale" type="float">
</argument>
<description>
- Sets time scale value of a TimeScale node given its name and value.
+ Sets the time scale of the TimeScale node with name [code]id[/code] to [code]scale[/code].
</description>
</method>
<method name="timeseek_node_seek">
@@ -534,7 +481,7 @@
<argument index="1" name="seconds" type="float">
</argument>
<description>
- Sets time seek value of a TimeSeek node given its name and value.
+ Sets the time seek value of the TimeSeek node with name [code]id[/code] to [code]seconds[/code]
</description>
</method>
<method name="transition_node_delete_input">
@@ -545,6 +492,7 @@
<argument index="1" name="input_idx" type="int">
</argument>
<description>
+ Deletes the input at [code]input_idx[/code] for the transition node with name [code]id[/code].
</description>
</method>
<method name="transition_node_get_current" qualifiers="const">
@@ -553,6 +501,7 @@
<argument index="0" name="id" type="String">
</argument>
<description>
+ Returns the index of the currently evaluated input for the transition node with name [code]id[/code].
</description>
</method>
<method name="transition_node_get_input_count" qualifiers="const">
@@ -561,6 +510,7 @@
<argument index="0" name="id" type="String">
</argument>
<description>
+ Returns the number of inputs for the transition node with name [code]id[/code].
</description>
</method>
<method name="transition_node_get_xfade_time" qualifiers="const">
@@ -569,6 +519,7 @@
<argument index="0" name="id" type="String">
</argument>
<description>
+ Returns the cross fade time for the transition node with name [code]id[/code].
</description>
</method>
<method name="transition_node_has_input_auto_advance" qualifiers="const">
@@ -579,6 +530,7 @@
<argument index="1" name="input_idx" type="int">
</argument>
<description>
+ Returns [code]true[/code] if the input at [code]input_idx[/code] on transition node with name [code]id[/code] is set to automatically advance to the next input upon completion.
</description>
</method>
<method name="transition_node_set_current">
@@ -589,6 +541,7 @@
<argument index="1" name="input_idx" type="int">
</argument>
<description>
+ The transition node with name [code]id[/code] sets its current input at [code]input_idx[/code].
</description>
</method>
<method name="transition_node_set_input_auto_advance">
@@ -601,6 +554,7 @@
<argument index="2" name="enable" type="bool">
</argument>
<description>
+ The transition node with name [code]id[/code] advances to its next input automatically when the input at [code]input_idx[/code] completes.
</description>
</method>
<method name="transition_node_set_input_count">
@@ -611,6 +565,7 @@
<argument index="1" name="count" type="int">
</argument>
<description>
+ Resizes the number of inputs available for the transition node with name [code]id[/code].
</description>
</method>
<method name="transition_node_set_xfade_time">
@@ -621,47 +576,60 @@
<argument index="1" name="time_sec" type="float">
</argument>
<description>
+ The transition node with name [code]id[/code] sets its cross fade time to [code]time_sec[/code].
</description>
</method>
</methods>
<members>
+ <member name="active" type="bool" setter="set_active" getter="is_active">
+ If [code]true[/code] the [code]AnimationTreePlayer[/code] is able to play animations. Default value: [code]false[/code].
+ </member>
+ <member name="base_path" type="NodePath" setter="set_base_path" getter="get_base_path">
+ The node from which to relatively access other nodes. Default value: [code]".."[/code].
+ </member>
+ <member name="master_player" type="NodePath" setter="set_master_player" getter="get_master_player">
+ The path to the [AnimationPlayer] from which this [code]AnimationTreePlayer[/code] binds animations to animation nodes.
+ </member>
<member name="playback_process_mode" type="int" setter="set_animation_process_mode" getter="get_animation_process_mode" enum="AnimationTreePlayer.AnimationProcessMode">
+ The thread in which to update animations. Default value: [enum ANIMATION_PROCESS_IDLE].
</member>
</members>
<constants>
- <constant name="NODE_OUTPUT" value="0">
+ <constant name="NODE_OUTPUT" value="0" enum="NodeType">
Output node.
</constant>
- <constant name="NODE_ANIMATION" value="1">
+ <constant name="NODE_ANIMATION" value="1" enum="NodeType">
Animation node.
</constant>
- <constant name="NODE_ONESHOT" value="2">
+ <constant name="NODE_ONESHOT" value="2" enum="NodeType">
OneShot node.
</constant>
- <constant name="NODE_MIX" value="3">
+ <constant name="NODE_MIX" value="3" enum="NodeType">
Mix node.
</constant>
- <constant name="NODE_BLEND2" value="4">
+ <constant name="NODE_BLEND2" value="4" enum="NodeType">
Blend2 node.
</constant>
- <constant name="NODE_BLEND3" value="5">
+ <constant name="NODE_BLEND3" value="5" enum="NodeType">
Blend3 node.
</constant>
- <constant name="NODE_BLEND4" value="6">
+ <constant name="NODE_BLEND4" value="6" enum="NodeType">
Blend4 node.
</constant>
- <constant name="NODE_TIMESCALE" value="7">
+ <constant name="NODE_TIMESCALE" value="7" enum="NodeType">
TimeScale node.
</constant>
- <constant name="NODE_TIMESEEK" value="8">
+ <constant name="NODE_TIMESEEK" value="8" enum="NodeType">
TimeSeek node.
</constant>
- <constant name="NODE_TRANSITION" value="9">
+ <constant name="NODE_TRANSITION" value="9" enum="NodeType">
Transition node.
</constant>
- <constant name="ANIMATION_PROCESS_PHYSICS" value="0">
+ <constant name="ANIMATION_PROCESS_PHYSICS" value="0" enum="AnimationProcessMode">
+ Process animation during the physics process. This is especially useful when animating physics bodies.
</constant>
- <constant name="ANIMATION_PROCESS_IDLE" value="1">
+ <constant name="ANIMATION_PROCESS_IDLE" value="1" enum="AnimationProcessMode">
+ Process animation during the idle process.
</constant>
</constants>
</class>
diff --git a/doc/classes/Area.xml b/doc/classes/Area.xml
index 85afa24214..b74e767fd2 100644
--- a/doc/classes/Area.xml
+++ b/doc/classes/Area.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Area" inherits="CollisionObject" category="Core" version="3.0-alpha">
+<class name="Area" inherits="CollisionObject" category="Core" version="3.0-beta">
<brief_description>
General purpose area node for detection and 3D physics influence.
</brief_description>
@@ -11,40 +11,13 @@
<demos>
</demos>
<methods>
- <method name="get_angular_damp" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the angular damp rate.
- </description>
- </method>
- <method name="get_audio_bus" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collision_layer" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the physics layer this area is in.
- </description>
- </method>
<method name="get_collision_layer_bit" qualifiers="const">
<return type="bool">
</return>
<argument index="0" name="bit" type="int">
</argument>
<description>
- Return an individual bit on the layer mask.
- </description>
- </method>
- <method name="get_collision_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the physics layers this area can scan for collisions.
+ Returns an individual bit on the layer mask.
</description>
</method>
<method name="get_collision_mask_bit" qualifiers="const">
@@ -53,35 +26,7 @@
<argument index="0" name="bit" type="int">
</argument>
<description>
- Return an individual bit on the collision mask.
- </description>
- </method>
- <method name="get_gravity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the gravity intensity.
- </description>
- </method>
- <method name="get_gravity_distance_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the falloff factor for point gravity.
- </description>
- </method>
- <method name="get_gravity_vector" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Return the gravity vector. If gravity is a point (see [method is_gravity_a_point]), this will be the attraction center.
- </description>
- </method>
- <method name="get_linear_damp" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the linear damp rate.
+ Returns an individual bit on the collision mask.
</description>
</method>
<method name="get_overlapping_areas" qualifiers="const">
@@ -98,71 +43,6 @@
Returns a list of intersecting [PhysicsBody]s.
</description>
</method>
- <method name="get_priority" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the processing order of this area.
- </description>
- </method>
- <method name="get_reverb_amount" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_reverb_bus" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_reverb_uniformity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_space_override_mode" qualifiers="const">
- <return type="int" enum="Area.SpaceOverride">
- </return>
- <description>
- Return the space override mode.
- </description>
- </method>
- <method name="is_gravity_a_point" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether gravity is a point. A point gravity will attract objects towards it, as opposed to a gravity vector, which moves them in a given direction.
- </description>
- </method>
- <method name="is_monitorable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether this area can be detected by other, monitoring, areas.
- </description>
- </method>
- <method name="is_monitoring" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether this area detects bodies/areas entering/exiting it.
- </description>
- </method>
- <method name="is_overriding_audio_bus" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_using_reverb_bus" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="overlaps_area" qualifiers="const">
<return type="bool">
</return>
@@ -181,43 +61,6 @@
If [code]true[/code] the given body overlaps the Area.
</description>
</method>
- <method name="set_angular_damp">
- <return type="void">
- </return>
- <argument index="0" name="angular_damp" type="float">
- </argument>
- <description>
- Set the rate at which objects stop spinning in this area, if there are not any other forces making it spin. The value is a fraction of its current speed, lost per second. Thus, a value of 1.0 should mean stopping immediately, and 0.0 means the object never stops.
- In practice, as the fraction of speed lost gets smaller with each frame, a value of 1.0 does not mean the object will stop in exactly one second. Only when the physics calculations are done at 1 frame per second, it does stop in a second.
- </description>
- </method>
- <method name="set_audio_bus">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_audio_bus_override">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_collision_layer">
- <return type="void">
- </return>
- <argument index="0" name="collision_layer" type="int">
- </argument>
- <description>
- Set the physics layers this area is in.
- Collidable objects can exist in any of 32 different layers. These layers are not visual, but more of a tagging system instead. A collidable can use these layers/tags to select with which objects it can collide, using [method set_collision_mask].
- A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A.
- </description>
- </method>
<method name="set_collision_layer_bit">
<return type="void">
</return>
@@ -226,16 +69,7 @@
<argument index="1" name="value" type="bool">
</argument>
<description>
- Set/clear individual bits on the layer mask. This makes getting an area in/out of only one layer easier.
- </description>
- </method>
- <method name="set_collision_mask">
- <return type="void">
- </return>
- <argument index="0" name="collision_mask" type="int">
- </argument>
- <description>
- Set the physics layers this area can scan for collisions.
+ Set/clear individual bits on the layer mask. This simplifies editing this [code]Area[code]'s layers.
</description>
</method>
<method name="set_collision_mask_bit">
@@ -246,129 +80,7 @@
<argument index="1" name="value" type="bool">
</argument>
<description>
- Set/clear individual bits on the collision mask. This makes selecting the areas scanned easier.
- </description>
- </method>
- <method name="set_gravity">
- <return type="void">
- </return>
- <argument index="0" name="gravity" type="float">
- </argument>
- <description>
- Set the gravity intensity. This is useful to alter the force of gravity without altering its direction.
- This value multiplies the gravity vector, whether it is the given vector ([method set_gravity_vector]), or a calculated one (when using a center of gravity).
- </description>
- </method>
- <method name="set_gravity_distance_scale">
- <return type="void">
- </return>
- <argument index="0" name="distance_scale" type="float">
- </argument>
- <description>
- Set the falloff factor for point gravity. The greater this value is, the faster the strength of gravity decreases with the square of distance.
- </description>
- </method>
- <method name="set_gravity_is_point">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- When overriding space parameters, this method sets whether this area has a center of gravity. To set/get the location of the center of gravity, use [method set_gravity_vector]/[method get_gravity_vector].
- </description>
- </method>
- <method name="set_gravity_vector">
- <return type="void">
- </return>
- <argument index="0" name="vector" type="Vector3">
- </argument>
- <description>
- Set the gravity vector. This vector does not have to be normalized.
- If gravity is a point (see [method is_gravity_a_point]), this will be the attraction center.
- </description>
- </method>
- <method name="set_linear_damp">
- <return type="void">
- </return>
- <argument index="0" name="linear_damp" type="float">
- </argument>
- <description>
- Set the rate at which objects stop moving in this area, if there are not any other forces moving it. The value is a fraction of its current speed, lost per second. Thus, a value of 1.0 should mean stopping immediately, and 0.0 means the object never stops.
- In practice, as the fraction of speed lost gets smaller with each frame, a value of 1.0 does not mean the object will stop in exactly one second. Only when the physics calculations are done at 1 frame per second, it does stop in a second.
- </description>
- </method>
- <method name="set_monitorable">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set whether this area can be detected by other, monitoring, areas. Only areas need to be marked as monitorable. Bodies are always so.
- </description>
- </method>
- <method name="set_monitoring">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set whether this area can detect bodies/areas entering/exiting it.
- </description>
- </method>
- <method name="set_priority">
- <return type="void">
- </return>
- <argument index="0" name="priority" type="float">
- </argument>
- <description>
- Set the order in which the area is processed. Greater values mean the area gets processed first. This is useful for areas which have a space override different from AREA_SPACE_OVERRIDE_DISABLED or AREA_SPACE_OVERRIDE_COMBINE, as they replace values, and are thus order-dependent.
- Areas with the same priority value get evaluated in an unpredictable order, and should be differentiated if evaluation order is to be important.
- </description>
- </method>
- <method name="set_reverb_amount">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_reverb_bus">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_reverb_uniformity">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_space_override_mode">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="int" enum="Area.SpaceOverride">
- </argument>
- <description>
- Set the space override mode. This mode controls how an area affects gravity and damp.
- AREA_SPACE_OVERRIDE_DISABLED: This area does not affect gravity/damp. These are generally areas that exist only to detect collisions, and objects entering or exiting them.
- AREA_SPACE_OVERRIDE_COMBINE: This area adds its gravity/damp values to whatever has been calculated so far. This way, many overlapping areas can combine their physics to make interesting effects.
- AREA_SPACE_OVERRIDE_COMBINE_REPLACE: This area adds its gravity/damp values to whatever has been calculated so far. Then stops taking into account the rest of the areas, even the default one.
- AREA_SPACE_OVERRIDE_REPLACE: This area replaces any gravity/damp, even the default one, and stops taking into account the rest of the areas.
- AREA_SPACE_OVERRIDE_REPLACE_COMBINE: This area replaces any gravity/damp calculated so far, but keeps calculating the rest of the areas, down to the default one.
- </description>
- </method>
- <method name="set_use_reverb_bus">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
+ Set/clear individual bits on the collision mask. This simplifies editing which [code]Area[/code] layers this [code]Area[/code] scans.
</description>
</method>
</methods>
@@ -413,12 +125,16 @@
The area's priority. Higher priority areas are processed first. Default value: 0.
</member>
<member name="reverb_bus_amount" type="float" setter="set_reverb_amount" getter="get_reverb_amount">
+ The degree to which this area applies reverb to its associated audio. Ranges from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision.
</member>
<member name="reverb_bus_enable" type="bool" setter="set_use_reverb_bus" getter="is_using_reverb_bus">
+ If [code]true[/code] the area applies reverb to its associated audio.
</member>
<member name="reverb_bus_name" type="String" setter="set_reverb_bus" getter="get_reverb_bus">
+ The reverb bus name to use for this area's associated audio.
</member>
<member name="reverb_bus_uniformity" type="float" setter="set_reverb_uniformity" getter="get_reverb_uniformity">
+ The degree to which this area's reverb is a uniform effect. Ranges from [code]0[/code] to [code]1[/code] with [code]0.1[/code] precision.
</member>
<member name="space_override" type="int" setter="set_space_override_mode" getter="get_space_override_mode" enum="Area.SpaceOverride">
Override mode for gravity and damping calculations within this area. See the SPACE_OVERRIDE_* constants for values.
@@ -507,19 +223,19 @@
</signal>
</signals>
<constants>
- <constant name="SPACE_OVERRIDE_DISABLED" value="0">
+ <constant name="SPACE_OVERRIDE_DISABLED" value="0" enum="SpaceOverride">
This area does not affect gravity/damping.
</constant>
- <constant name="SPACE_OVERRIDE_COMBINE" value="1">
+ <constant name="SPACE_OVERRIDE_COMBINE" value="1" enum="SpaceOverride">
This area adds its gravity/damping values to whatever has been calculated so far (in [code]priority[/code] order).
</constant>
- <constant name="SPACE_OVERRIDE_COMBINE_REPLACE" value="2">
+ <constant name="SPACE_OVERRIDE_COMBINE_REPLACE" value="2" enum="SpaceOverride">
This area adds its gravity/damping values to whatever has been calculated so far (in [code]priority[/code] order), ignoring any lower priority areas.
</constant>
- <constant name="SPACE_OVERRIDE_REPLACE" value="3">
+ <constant name="SPACE_OVERRIDE_REPLACE" value="3" enum="SpaceOverride">
This area replaces any gravity/damping, even the defaults, ignoring any lower priority areas.
</constant>
- <constant name="SPACE_OVERRIDE_REPLACE_COMBINE" value="4">
+ <constant name="SPACE_OVERRIDE_REPLACE_COMBINE" value="4" enum="SpaceOverride">
This area replaces any gravity/damping calculated so far (in [code]priority[/code] order), but keeps calculating the rest of the areas.
</constant>
</constants>
diff --git a/doc/classes/Area2D.xml b/doc/classes/Area2D.xml
index 5869e2238e..6a3f0e7645 100644
--- a/doc/classes/Area2D.xml
+++ b/doc/classes/Area2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Area2D" inherits="CollisionObject2D" category="Core" version="3.0-alpha">
+<class name="Area2D" inherits="CollisionObject2D" category="Core" version="3.0-beta">
<brief_description>
2D area for detection and 2D physics influence.
</brief_description>
@@ -11,26 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_angular_damp" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the angular damp rate.
- </description>
- </method>
- <method name="get_audio_bus_name" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collision_layer" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the physics layer this area is in.
- </description>
- </method>
<method name="get_collision_layer_bit" qualifiers="const">
<return type="bool">
</return>
@@ -40,13 +20,6 @@
Return an individual bit on the layer mask. Describes whether other areas will collide with this one on the given layer.
</description>
</method>
- <method name="get_collision_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the physics layers this area will scan to determine collisions.
- </description>
- </method>
<method name="get_collision_mask_bit" qualifiers="const">
<return type="bool">
</return>
@@ -56,34 +29,6 @@
Return an individual bit on the collision mask. Describes whether this area will collide with others on the given layer.
</description>
</method>
- <method name="get_gravity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the gravity intensity.
- </description>
- </method>
- <method name="get_gravity_distance_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the falloff factor for point gravity.
- </description>
- </method>
- <method name="get_gravity_vector" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the gravity vector. If gravity is a point (see [method is_gravity_a_point]), this will be the attraction center.
- </description>
- </method>
- <method name="get_linear_damp" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the linear damp rate.
- </description>
- </method>
<method name="get_overlapping_areas" qualifiers="const">
<return type="Array">
</return>
@@ -98,47 +43,6 @@
Returns a list of intersecting [PhysicsBody2D]s.
</description>
</method>
- <method name="get_priority" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the processing order of this area.
- </description>
- </method>
- <method name="get_space_override_mode" qualifiers="const">
- <return type="int" enum="Area2D.SpaceOverride">
- </return>
- <description>
- Return the space override mode.
- </description>
- </method>
- <method name="is_gravity_a_point" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether gravity is a point. A point gravity will attract objects towards it, as opposed to a gravity vector, which moves them in a given direction.
- </description>
- </method>
- <method name="is_monitorable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether this area can be detected by other, monitoring, areas.
- </description>
- </method>
- <method name="is_monitoring" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether this area detects bodies/areas entering/exiting it.
- </description>
- </method>
- <method name="is_overriding_audio_bus" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="overlaps_area" qualifiers="const">
<return type="bool">
</return>
@@ -157,43 +61,6 @@
If [code]true[/code] the given body overlaps the Area2D.
</description>
</method>
- <method name="set_angular_damp">
- <return type="void">
- </return>
- <argument index="0" name="angular_damp" type="float">
- </argument>
- <description>
- Set the rate at which objects stop spinning in this area, if there are not any other forces making it spin. The value is a fraction of its current speed, lost per second. Thus, a value of 1.0 should mean stopping immediately, and 0.0 means the object never stops.
- In practice, as the fraction of speed lost gets smaller with each frame, a value of 1.0 does not mean the object will stop in exactly one second. Only when the physics calculations are done at 1 frame per second, it does stop in a second.
- </description>
- </method>
- <method name="set_audio_bus_name">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_audio_bus_override">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_collision_layer">
- <return type="void">
- </return>
- <argument index="0" name="collision_layer" type="int">
- </argument>
- <description>
- Set the physics layers this area is in.
- Collidable objects can exist in any of 32 different layers. These layers are not visual, but more of a tagging system instead. A collidable can use these layers/tags to select with which objects it can collide, using [method set_collision_mask].
- A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A.
- </description>
- </method>
<method name="set_collision_layer_bit">
<return type="void">
</return>
@@ -205,15 +72,6 @@
Set/clear individual bits on the layer mask. This makes getting an area in/out of only one layer easier.
</description>
</method>
- <method name="set_collision_mask">
- <return type="void">
- </return>
- <argument index="0" name="collision_mask" type="int">
- </argument>
- <description>
- Set the physics layers this area can scan for collisions.
- </description>
- </method>
<method name="set_collision_mask_bit">
<return type="void">
</return>
@@ -225,96 +83,6 @@
Set/clear individual bits on the collision mask. This makes selecting the areas scanned easier.
</description>
</method>
- <method name="set_gravity">
- <return type="void">
- </return>
- <argument index="0" name="gravity" type="float">
- </argument>
- <description>
- Set the gravity intensity. This is useful to alter the force of gravity without altering its direction.
- This value multiplies the gravity vector, whether it is the given vector ([method set_gravity_vector]), or a calculated one (when using a center of gravity).
- </description>
- </method>
- <method name="set_gravity_distance_scale">
- <return type="void">
- </return>
- <argument index="0" name="distance_scale" type="float">
- </argument>
- <description>
- Set the falloff factor for point gravity. The greater this value is, the faster the strength of gravity decreases with the square of distance.
- </description>
- </method>
- <method name="set_gravity_is_point">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- When overriding space parameters, this method sets whether this area has a center of gravity. To set/get the location of the center of gravity, use [method set_gravity_vector]/[method get_gravity_vector].
- </description>
- </method>
- <method name="set_gravity_vector">
- <return type="void">
- </return>
- <argument index="0" name="vector" type="Vector2">
- </argument>
- <description>
- Set the gravity vector. This vector does not have to be normalized.
- If gravity is a point (see [method is_gravity_a_point]), this will be the attraction center.
- </description>
- </method>
- <method name="set_linear_damp">
- <return type="void">
- </return>
- <argument index="0" name="linear_damp" type="float">
- </argument>
- <description>
- Set the rate at which objects stop moving in this area, if there are not any other forces moving it. The value is a fraction of its current speed, lost per second. Thus, a value of 1.0 should mean stopping immediately, and 0.0 means the object never stops.
- In practice, as the fraction of speed lost gets smaller with each frame, a value of 1.0 does not mean the object will stop in exactly one second. Only when the physics calculations are done at 1 frame per second, it does stop in a second.
- </description>
- </method>
- <method name="set_monitorable">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set whether this area can be detected by other, monitoring, areas. Only areas need to be marked as monitorable. Bodies are always so.
- </description>
- </method>
- <method name="set_monitoring">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set whether this area can detect bodies/areas entering/exiting it.
- </description>
- </method>
- <method name="set_priority">
- <return type="void">
- </return>
- <argument index="0" name="priority" type="float">
- </argument>
- <description>
- Set the order in which the area is processed. Greater values mean the area gets processed first. This is useful for areas which have a space override different from AREA_SPACE_OVERRIDE_DISABLED or AREA_SPACE_OVERRIDE_COMBINE, as they replace values, and are thus order-dependent.
- Areas with the same priority value get evaluated in an unpredictable order, and should be differentiated if evaluation order is to be important.
- </description>
- </method>
- <method name="set_space_override_mode">
- <return type="void">
- </return>
- <argument index="0" name="space_override_mode" type="int" enum="Area2D.SpaceOverride">
- </argument>
- <description>
- Set the space override mode. This mode controls how an area affects gravity and damp.
- AREA_SPACE_OVERRIDE_DISABLED: This area does not affect gravity/damp. These are generally areas that exist only to detect collisions, and objects entering or exiting them.
- AREA_SPACE_OVERRIDE_COMBINE: This area adds its gravity/damp values to whatever has been calculated so far. This way, many overlapping areas can combine their physics to make interesting effects.
- AREA_SPACE_OVERRIDE_COMBINE_REPLACE: This area adds its gravity/damp values to whatever has been calculated so far. Then stops taking into account the rest of the areas, even the default one.
- AREA_SPACE_OVERRIDE_REPLACE: This area replaces any gravity/damp, even the default one, and stops taking into account the rest of the areas.
- AREA_SPACE_OVERRIDE_REPLACE_COMBINE: This area replaces any gravity/damp calculated so far, but keeps calculating the rest of the areas, down to the default one.
- </description>
- </method>
</methods>
<members>
<member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp">
@@ -443,19 +211,19 @@
</signal>
</signals>
<constants>
- <constant name="SPACE_OVERRIDE_DISABLED" value="0">
+ <constant name="SPACE_OVERRIDE_DISABLED" value="0" enum="SpaceOverride">
This area does not affect gravity/damping.
</constant>
- <constant name="SPACE_OVERRIDE_COMBINE" value="1">
+ <constant name="SPACE_OVERRIDE_COMBINE" value="1" enum="SpaceOverride">
This area adds its gravity/damping values to whatever has been calculated so far (in [code]priority[/code] order).
</constant>
- <constant name="SPACE_OVERRIDE_COMBINE_REPLACE" value="2">
+ <constant name="SPACE_OVERRIDE_COMBINE_REPLACE" value="2" enum="SpaceOverride">
This area adds its gravity/damping values to whatever has been calculated so far (in [code]priority[/code] order), ignoring any lower priority areas.
</constant>
- <constant name="SPACE_OVERRIDE_REPLACE" value="3">
+ <constant name="SPACE_OVERRIDE_REPLACE" value="3" enum="SpaceOverride">
This area replaces any gravity/damping, even the defaults, ignoring any lower priority areas.
</constant>
- <constant name="SPACE_OVERRIDE_REPLACE_COMBINE" value="4">
+ <constant name="SPACE_OVERRIDE_REPLACE_COMBINE" value="4" enum="SpaceOverride">
This area replaces any gravity/damping calculated so far (in [code]priority[/code] order), but keeps calculating the rest of the areas.
</constant>
</constants>
diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml
index 3bb40755a6..9445a1732e 100644
--- a/doc/classes/Array.xml
+++ b/doc/classes/Array.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Array" category="Built-In Types" version="3.0-alpha">
+<class name="Array" category="Built-In Types" version="3.0-beta">
<brief_description>
Generic array datatype.
</brief_description>
@@ -88,6 +88,32 @@
Returns the last element of the array if the array is not empty (size&gt;0).
</description>
</method>
+ <method name="bsearch">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="var">
+ </argument>
+ <argument index="1" name="before" type="bool" default="True">
+ </argument>
+ <description>
+ Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search. Optionally, a before specifier can be passed. If false, the returned index comes after all existing entries of the value in the array. Note that calling bsearch on an unsorted array results in unexpected behavior.
+ </description>
+ </method>
+ <method name="bsearch_custom">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="var">
+ </argument>
+ <argument index="1" name="obj" type="Object">
+ </argument>
+ <argument index="2" name="func" type="String">
+ </argument>
+ <argument index="3" name="before" type="bool" default="True">
+ </argument>
+ <description>
+ Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search and a custom comparison method. Optionally, a before specifier can be passed. If false, the returned index comes after all existing entries of the value in the array. The custom method receives two arguments (an element from the array and the value searched for) and must return true if the first argument is less than the second, and return false otherwise. Note that calling bsearch on an unsorted array results in unexpected behavior.
+ </description>
+ </method>
<method name="clear">
<description>
Clear the array (resize to 0).
@@ -258,32 +284,16 @@
</argument>
<description>
Sort the array using a custom method and return reference to the array. The arguments are an object that holds the method and the name of such method. The custom method receives two arguments (a pair of elements from the array) and must return true if the first argument is less than the second, and return false otherwise. Note: you cannot randomize the return value as the heapsort algorithm expects a deterministic result. Doing so will result in unexpected behavior.
- </description>
- </method>
- <method name="bsearch">
- <return type="int">
- </return>
- <argument index="0" name="value" type="var">
- </argument>
- <argument index="1" name="before" type="bool" default="true">
- </argument>
- <description>
- Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search. Optionally, a before specifier can be passed. If false, the returned index comes after all existing entries of the value in the array. Note that calling bsearch on an unsorted array results in unexpected behavior.
- </description>
- </method>
- <method name="bsearch_custom">
- <return type="int">
- </return>
- <argument index="0" name="value" type="var">
- </argument>
- <argument index="1" name="obj" type="Object">
- </argument>
- <argument index="2" name="func" type="String">
- </argument>
- <argument index="3" name="before" type="bool" default="true">
- </argument>
- <description>
- Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search and a custom comparison method. Optionally, a before specifier can be passed. If false, the returned index comes after all existing entries of the value in the array. The custom method receives two arguments (an element from the array and the value searched for) and must return true if the first argument is less than the second, and return false otherwise. Note that calling bsearch on an unsorted array results in unexpected behavior.
+ [codeblock]
+ class MyCustomSorter:
+ static func sort(a, b):
+ if a[0] &lt; b[0]:
+ return true
+ return false
+
+ var my_items = [[5, "Potato"], [9, "Rice"], [4, "Tomato"]]
+ my_items.sort_custom(MyCustomSorter, "sort")
+ [/codeblock]
</description>
</method>
</methods>
diff --git a/doc/classes/ArrayMesh.xml b/doc/classes/ArrayMesh.xml
index 6c9b191371..92c4fe2fe7 100644
--- a/doc/classes/ArrayMesh.xml
+++ b/doc/classes/ArrayMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ArrayMesh" inherits="Mesh" category="Core" version="3.0-alpha">
+<class name="ArrayMesh" inherits="Mesh" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -213,66 +213,66 @@
</method>
</methods>
<constants>
- <constant name="NO_INDEX_ARRAY" value="-1" enum="">
+ <constant name="NO_INDEX_ARRAY" value="-1">
Default value used for index_array_len when no indices are present.
</constant>
- <constant name="ARRAY_WEIGHTS_SIZE" value="4" enum="">
+ <constant name="ARRAY_WEIGHTS_SIZE" value="4">
Amount of weights/bone indices per vertex (always 4).
</constant>
- <constant name="ARRAY_VERTEX" value="0">
+ <constant name="ARRAY_VERTEX" value="0" enum="ArrayType">
Vertex array (array of [Vector3] vertices).
</constant>
- <constant name="ARRAY_NORMAL" value="1">
+ <constant name="ARRAY_NORMAL" value="1" enum="ArrayType">
Normal array (array of [Vector3] normals).
</constant>
- <constant name="ARRAY_TANGENT" value="2">
+ <constant name="ARRAY_TANGENT" value="2" enum="ArrayType">
Tangent array, array of groups of 4 floats. first 3 floats determine the tangent, and the last the binormal direction as -1 or 1.
</constant>
- <constant name="ARRAY_COLOR" value="3">
+ <constant name="ARRAY_COLOR" value="3" enum="ArrayType">
Vertex array (array of [Color] colors).
</constant>
- <constant name="ARRAY_TEX_UV" value="4">
+ <constant name="ARRAY_TEX_UV" value="4" enum="ArrayType">
UV array (array of [Vector3] UVs or float array of groups of 2 floats (u,v)).
</constant>
- <constant name="ARRAY_TEX_UV2" value="5">
+ <constant name="ARRAY_TEX_UV2" value="5" enum="ArrayType">
Second UV array (array of [Vector3] UVs or float array of groups of 2 floats (u,v)).
</constant>
- <constant name="ARRAY_BONES" value="6">
+ <constant name="ARRAY_BONES" value="6" enum="ArrayType">
Array of bone indices, as a float array. Each element in groups of 4 floats.
</constant>
- <constant name="ARRAY_WEIGHTS" value="7">
+ <constant name="ARRAY_WEIGHTS" value="7" enum="ArrayType">
Array of bone weights, as a float array. Each element in groups of 4 floats.
</constant>
- <constant name="ARRAY_INDEX" value="8">
+ <constant name="ARRAY_INDEX" value="8" enum="ArrayType">
Array of integers, used as indices referencing vertices. No index can be beyond the vertex array size.
</constant>
- <constant name="ARRAY_MAX" value="9">
+ <constant name="ARRAY_MAX" value="9" enum="ArrayType">
</constant>
- <constant name="ARRAY_FORMAT_VERTEX" value="1">
+ <constant name="ARRAY_FORMAT_VERTEX" value="1" enum="ArrayFormat">
Array format will include vertices (mandatory).
</constant>
- <constant name="ARRAY_FORMAT_NORMAL" value="2">
+ <constant name="ARRAY_FORMAT_NORMAL" value="2" enum="ArrayFormat">
Array format will include normals
</constant>
- <constant name="ARRAY_FORMAT_TANGENT" value="4">
+ <constant name="ARRAY_FORMAT_TANGENT" value="4" enum="ArrayFormat">
Array format will include tangents
</constant>
- <constant name="ARRAY_FORMAT_COLOR" value="8">
+ <constant name="ARRAY_FORMAT_COLOR" value="8" enum="ArrayFormat">
Array format will include a color array.
</constant>
- <constant name="ARRAY_FORMAT_TEX_UV" value="16">
+ <constant name="ARRAY_FORMAT_TEX_UV" value="16" enum="ArrayFormat">
Array format will include UVs.
</constant>
- <constant name="ARRAY_FORMAT_TEX_UV2" value="32">
+ <constant name="ARRAY_FORMAT_TEX_UV2" value="32" enum="ArrayFormat">
Array format will include another set of UVs.
</constant>
- <constant name="ARRAY_FORMAT_BONES" value="64">
+ <constant name="ARRAY_FORMAT_BONES" value="64" enum="ArrayFormat">
Array format will include bone indices.
</constant>
- <constant name="ARRAY_FORMAT_WEIGHTS" value="128">
+ <constant name="ARRAY_FORMAT_WEIGHTS" value="128" enum="ArrayFormat">
Array format will include bone weights.
</constant>
- <constant name="ARRAY_FORMAT_INDEX" value="256">
+ <constant name="ARRAY_FORMAT_INDEX" value="256" enum="ArrayFormat">
Index array will be used.
</constant>
</constants>
diff --git a/doc/classes/AtlasTexture.xml b/doc/classes/AtlasTexture.xml
index 7cb934889e..f1a79bc312 100644
--- a/doc/classes/AtlasTexture.xml
+++ b/doc/classes/AtlasTexture.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AtlasTexture" inherits="Texture" category="Core" version="3.0-alpha">
+<class name="AtlasTexture" inherits="Texture" category="Core" version="3.0-beta">
<brief_description>
Packs multiple small textures in a single, bigger one. Helps to optimize video memory costs and render calls.
</brief_description>
@@ -12,68 +12,13 @@
<demos>
</demos>
<methods>
- <method name="get_atlas" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_margin" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_region" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- </description>
- </method>
- <method name="has_filter_clip" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_atlas">
- <return type="void">
- </return>
- <argument index="0" name="atlas" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_filter_clip">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_margin">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="Rect2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_region">
- <return type="void">
- </return>
- <argument index="0" name="region" type="Rect2">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="atlas" type="Texture" setter="set_atlas" getter="get_atlas">
The texture that contains the atlas. Can be any [Texture] subtype.
</member>
<member name="filter_clip" type="bool" setter="set_filter_clip" getter="has_filter_clip">
+ If [code]true[/code] clips the area outside of the region to avoid bleeding of the surrounding texture pixels.
</member>
<member name="margin" type="Rect2" setter="set_margin" getter="get_margin">
The margin around the region. The [Rect2]'s 'size' parameter ('w' and 'h' in the editor) resizes the texture so it fits within the margin.
diff --git a/doc/classes/AudioBusLayout.xml b/doc/classes/AudioBusLayout.xml
index c539c7500b..a70a3e1702 100644
--- a/doc/classes/AudioBusLayout.xml
+++ b/doc/classes/AudioBusLayout.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioBusLayout" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="AudioBusLayout" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Stores information about the audiobusses.
</brief_description>
diff --git a/doc/classes/AudioEffect.xml b/doc/classes/AudioEffect.xml
index 804cba82fe..0122f727d0 100644
--- a/doc/classes/AudioEffect.xml
+++ b/doc/classes/AudioEffect.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffect" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="AudioEffect" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Audio Effect For Audio.
</brief_description>
diff --git a/doc/classes/AudioEffectAmplify.xml b/doc/classes/AudioEffectAmplify.xml
index 0149e03de4..efdf6c3b9b 100644
--- a/doc/classes/AudioEffectAmplify.xml
+++ b/doc/classes/AudioEffectAmplify.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectAmplify" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectAmplify" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a Amplify audio effect to an Audio bus.
Increases or decreases the volume of the selected audio bus.
@@ -12,20 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_volume_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_volume_db">
- <return type="void">
- </return>
- <argument index="0" name="volume" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="volume_db" type="float" setter="set_volume_db" getter="get_volume_db">
diff --git a/doc/classes/AudioEffectBandLimitFilter.xml b/doc/classes/AudioEffectBandLimitFilter.xml
index f83cf8ba72..64542e8b92 100644
--- a/doc/classes/AudioEffectBandLimitFilter.xml
+++ b/doc/classes/AudioEffectBandLimitFilter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectBandLimitFilter" inherits="AudioEffectFilter" category="Core" version="3.0-alpha">
+<class name="AudioEffectBandLimitFilter" inherits="AudioEffectFilter" category="Core" version="3.0-beta">
<brief_description>
Adds a band limit filter to the Audio Bus.
</brief_description>
diff --git a/doc/classes/AudioEffectBandPassFilter.xml b/doc/classes/AudioEffectBandPassFilter.xml
index e922d3e821..dbc8b2c85a 100644
--- a/doc/classes/AudioEffectBandPassFilter.xml
+++ b/doc/classes/AudioEffectBandPassFilter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectBandPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0-alpha">
+<class name="AudioEffectBandPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0-beta">
<brief_description>
Adds a band pass filter to the Audio Bus.
</brief_description>
diff --git a/doc/classes/AudioEffectChorus.xml b/doc/classes/AudioEffectChorus.xml
index 40bac419d6..465fda28da 100644
--- a/doc/classes/AudioEffectChorus.xml
+++ b/doc/classes/AudioEffectChorus.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectChorus" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectChorus" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a chorus audio effect.
</brief_description>
@@ -11,174 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_dry" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the set dry ratio.
- </description>
- </method>
- <method name="get_voice_count" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the set voice count.
- </description>
- </method>
- <method name="get_voice_cutoff_hz" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <description>
- Returns the voice's set cutoff frequency.
- </description>
- </method>
- <method name="get_voice_delay_ms" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <description>
- Returns the voice's set delay.
- </description>
- </method>
- <method name="get_voice_depth_ms" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <description>
- Returns the voice's set filter depth.
- </description>
- </method>
- <method name="get_voice_level_db" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <description>
- Returns the voice's set maximum volume.
- </description>
- </method>
- <method name="get_voice_pan" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <description>
- Returns the voice's set pan.
- </description>
- </method>
- <method name="get_voice_rate_hz" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <description>
- Returns the voice filter's set rate in cycles.
- </description>
- </method>
- <method name="get_wet" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the set applied wetness of the effect.
- </description>
- </method>
- <method name="set_dry">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- Returns the set applied dryness of the effect.
- </description>
- </method>
- <method name="set_voice_count">
- <return type="void">
- </return>
- <argument index="0" name="voices" type="int">
- </argument>
- <description>
- Set the number of voices in the effect's filter.
- </description>
- </method>
- <method name="set_voice_cutoff_hz">
- <return type="void">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <argument index="1" name="cutoff_hz" type="float">
- </argument>
- <description>
- Set the cutoff frequency of the voice. The maximum frequency the voice may affect.
- </description>
- </method>
- <method name="set_voice_delay_ms">
- <return type="void">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <argument index="1" name="delay_ms" type="float">
- </argument>
- <description>
- Set the delay of the voice's signal.
- </description>
- </method>
- <method name="set_voice_depth_ms">
- <return type="void">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <argument index="1" name="depth_ms" type="float">
- </argument>
- <description>
- Set the filter depth of the voice's signal.
- </description>
- </method>
- <method name="set_voice_level_db">
- <return type="void">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <argument index="1" name="level_db" type="float">
- </argument>
- <description>
- Set the volume level of the voice.
- </description>
- </method>
- <method name="set_voice_pan">
- <return type="void">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <argument index="1" name="pan" type="float">
- </argument>
- <description>
- Set the pan level of the voice.
- </description>
- </method>
- <method name="set_voice_rate_hz">
- <return type="void">
- </return>
- <argument index="0" name="voice_idx" type="int">
- </argument>
- <argument index="1" name="rate_hz" type="float">
- </argument>
- <description>
- Set the voice filter's rate.
- </description>
- </method>
- <method name="set_wet">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- Set the amount of effect.
- </description>
- </method>
</methods>
<members>
<member name="dry" type="float" setter="set_dry" getter="get_dry">
diff --git a/doc/classes/AudioEffectCompressor.xml b/doc/classes/AudioEffectCompressor.xml
index ae877f145a..dd9d6481e2 100644
--- a/doc/classes/AudioEffectCompressor.xml
+++ b/doc/classes/AudioEffectCompressor.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectCompressor" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectCompressor" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a Compressor audio effect to an Audio bus.
Reduces sounds that exceed a certain threshold level, smooths out the dynamics and increases the overall volume.
@@ -17,104 +17,6 @@
<demos>
</demos>
<methods>
- <method name="get_attack_us" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_gain" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_mix" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ratio" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_release_ms" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sidechain" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_threshold" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_attack_us">
- <return type="void">
- </return>
- <argument index="0" name="attack_us" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_gain">
- <return type="void">
- </return>
- <argument index="0" name="gain" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_mix">
- <return type="void">
- </return>
- <argument index="0" name="mix" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ratio">
- <return type="void">
- </return>
- <argument index="0" name="ratio" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_release_ms">
- <return type="void">
- </return>
- <argument index="0" name="release_ms" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sidechain">
- <return type="void">
- </return>
- <argument index="0" name="sidechain" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_threshold">
- <return type="void">
- </return>
- <argument index="0" name="threshold" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="attack_us" type="float" setter="set_attack_us" getter="get_attack_us">
diff --git a/doc/classes/AudioEffectDelay.xml b/doc/classes/AudioEffectDelay.xml
index a9251b6cf0..c961f1f582 100644
--- a/doc/classes/AudioEffectDelay.xml
+++ b/doc/classes/AudioEffectDelay.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectDelay" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectDelay" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a Delay audio effect to an Audio bus. Plays input signal back after a period of time.
Two tap delay and feedback options.
@@ -12,188 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_dry">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_feedback_delay_ms" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_feedback_level_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_feedback_lowpass" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tap1_delay_ms" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tap1_level_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tap1_pan" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tap2_delay_ms" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tap2_level_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tap2_pan" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="is_feedback_active" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_tap1_active" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_tap2_active" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_dry">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_feedback_active">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_feedback_delay_ms">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_feedback_level_db">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_feedback_lowpass">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tap1_active">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tap1_delay_ms">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tap1_level_db">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tap1_pan">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tap2_active">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tap2_delay_ms">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tap2_level_db">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tap2_pan">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="dry" type="float" setter="set_dry" getter="get_dry">
diff --git a/doc/classes/AudioEffectDistortion.xml b/doc/classes/AudioEffectDistortion.xml
index 25df71d5f5..fd77a91570 100644
--- a/doc/classes/AudioEffectDistortion.xml
+++ b/doc/classes/AudioEffectDistortion.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectDistortion" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectDistortion" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a Distortion audio effect to an Audio bus.
Modify the sound to make it dirty.
@@ -13,76 +13,6 @@
<demos>
</demos>
<methods>
- <method name="get_drive" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_keep_hf_hz" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_mode" qualifiers="const">
- <return type="int" enum="AudioEffectDistortion.Mode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_post_gain" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_pre_gain" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_drive">
- <return type="void">
- </return>
- <argument index="0" name="drive" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_keep_hf_hz">
- <return type="void">
- </return>
- <argument index="0" name="keep_hf_hz" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="AudioEffectDistortion.Mode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_post_gain">
- <return type="void">
- </return>
- <argument index="0" name="post_gain" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pre_gain">
- <return type="void">
- </return>
- <argument index="0" name="pre_gain" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="drive" type="float" setter="set_drive" getter="get_drive">
@@ -102,18 +32,18 @@
</member>
</members>
<constants>
- <constant name="MODE_CLIP" value="0">
+ <constant name="MODE_CLIP" value="0" enum="Mode">
Digital distortion effect which cuts off peaks at the top and bottom of the waveform.
</constant>
- <constant name="MODE_ATAN" value="1">
+ <constant name="MODE_ATAN" value="1" enum="Mode">
</constant>
- <constant name="MODE_LOFI" value="2">
+ <constant name="MODE_LOFI" value="2" enum="Mode">
Low-resolution digital distortion effect. You can use it to emulate the sound of early digital audio devices.
</constant>
- <constant name="MODE_OVERDRIVE" value="3">
+ <constant name="MODE_OVERDRIVE" value="3" enum="Mode">
Emulates the warm distortion produced by a field effect transistor, which is commonly used in solid-state musical instrument amplifiers.
</constant>
- <constant name="MODE_WAVESHAPE" value="4">
+ <constant name="MODE_WAVESHAPE" value="4" enum="Mode">
Waveshaper distortions are used mainly by electronic musicians to achieve an extra-abrasive sound.
</constant>
</constants>
diff --git a/doc/classes/AudioEffectEQ.xml b/doc/classes/AudioEffectEQ.xml
index f8b4d426f4..a78b9e4bb1 100644
--- a/doc/classes/AudioEffectEQ.xml
+++ b/doc/classes/AudioEffectEQ.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectEQ" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectEQ" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Base class for audio equalizers. Gives you control over frequencies.
Use it to create a custom equalizer if [AudioEffectEQ6], [AudioEffectEQ10] or [AudioEffectEQ21] don't fit your needs.
diff --git a/doc/classes/AudioEffectEQ10.xml b/doc/classes/AudioEffectEQ10.xml
index 95801ef40c..9a007f80b1 100644
--- a/doc/classes/AudioEffectEQ10.xml
+++ b/doc/classes/AudioEffectEQ10.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectEQ10" inherits="AudioEffectEQ" category="Core" version="3.0-alpha">
+<class name="AudioEffectEQ10" inherits="AudioEffectEQ" category="Core" version="3.0-beta">
<brief_description>
Adds a 10-band equalizer audio effect to an Audio bus. Gives you control over frequencies from 31 Hz to 16000 Hz.
Each frequency can be modulated between -60/+24 dB.
diff --git a/doc/classes/AudioEffectEQ21.xml b/doc/classes/AudioEffectEQ21.xml
index b62e0458f7..6e13291895 100644
--- a/doc/classes/AudioEffectEQ21.xml
+++ b/doc/classes/AudioEffectEQ21.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectEQ21" inherits="AudioEffectEQ" category="Core" version="3.0-alpha">
+<class name="AudioEffectEQ21" inherits="AudioEffectEQ" category="Core" version="3.0-beta">
<brief_description>
Adds a 21-band equalizer audio effect to an Audio bus. Gives you control over frequencies from 22 Hz to 22000 Hz.
Each frequency can be modulated between -60/+24 dB.
diff --git a/doc/classes/AudioEffectEQ6.xml b/doc/classes/AudioEffectEQ6.xml
index f679ccede4..ecfc7afeed 100644
--- a/doc/classes/AudioEffectEQ6.xml
+++ b/doc/classes/AudioEffectEQ6.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectEQ6" inherits="AudioEffectEQ" category="Core" version="3.0-alpha">
+<class name="AudioEffectEQ6" inherits="AudioEffectEQ" category="Core" version="3.0-beta">
<brief_description>
Adds a 6-band equalizer audio effect to an Audio bus. Gives you control over frequencies from 32 Hz to 10000 Hz.
Each frequency can be modulated between -60/+24 dB.
diff --git a/doc/classes/AudioEffectFilter.xml b/doc/classes/AudioEffectFilter.xml
index 244c07a6da..3e1848f314 100644
--- a/doc/classes/AudioEffectFilter.xml
+++ b/doc/classes/AudioEffectFilter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectFilter" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectFilter" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a filter to the Audio Bus.
</brief_description>
@@ -11,62 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_cutoff" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_db" qualifiers="const">
- <return type="int" enum="AudioEffectFilter.FilterDB">
- </return>
- <description>
- </description>
- </method>
- <method name="get_gain" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_resonance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_cutoff">
- <return type="void">
- </return>
- <argument index="0" name="freq" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_db">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int" enum="AudioEffectFilter.FilterDB">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_gain">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_resonance">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="cutoff_hz" type="float" setter="set_cutoff" getter="get_cutoff">
@@ -82,13 +26,13 @@
</member>
</members>
<constants>
- <constant name="FILTER_6DB" value="0">
+ <constant name="FILTER_6DB" value="0" enum="FilterDB">
</constant>
- <constant name="FILTER_12DB" value="1">
+ <constant name="FILTER_12DB" value="1" enum="FilterDB">
</constant>
- <constant name="FILTER_18DB" value="2">
+ <constant name="FILTER_18DB" value="2" enum="FilterDB">
</constant>
- <constant name="FILTER_24DB" value="3">
+ <constant name="FILTER_24DB" value="3" enum="FilterDB">
</constant>
</constants>
</class>
diff --git a/doc/classes/AudioEffectHighPassFilter.xml b/doc/classes/AudioEffectHighPassFilter.xml
index 4718d4d4a5..ac57ec0d2f 100644
--- a/doc/classes/AudioEffectHighPassFilter.xml
+++ b/doc/classes/AudioEffectHighPassFilter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectHighPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0-alpha">
+<class name="AudioEffectHighPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0-beta">
<brief_description>
Adds a high pass filter to the Audio Bus.
</brief_description>
diff --git a/doc/classes/AudioEffectHighShelfFilter.xml b/doc/classes/AudioEffectHighShelfFilter.xml
index 62ff3d9366..9496fcbffe 100644
--- a/doc/classes/AudioEffectHighShelfFilter.xml
+++ b/doc/classes/AudioEffectHighShelfFilter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectHighShelfFilter" inherits="AudioEffectFilter" category="Core" version="3.0-alpha">
+<class name="AudioEffectHighShelfFilter" inherits="AudioEffectFilter" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/AudioEffectLimiter.xml b/doc/classes/AudioEffectLimiter.xml
index ebed589829..e641be782d 100644
--- a/doc/classes/AudioEffectLimiter.xml
+++ b/doc/classes/AudioEffectLimiter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectLimiter" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectLimiter" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a soft clip Limiter audio effect to an Audio bus.
</brief_description>
@@ -12,62 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_ceiling_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_soft_clip_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_soft_clip_ratio" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_threshold_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_ceiling_db">
- <return type="void">
- </return>
- <argument index="0" name="ceiling" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_soft_clip_db">
- <return type="void">
- </return>
- <argument index="0" name="soft_clip" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_soft_clip_ratio">
- <return type="void">
- </return>
- <argument index="0" name="soft_clip" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_threshold_db">
- <return type="void">
- </return>
- <argument index="0" name="threshold" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="ceiling_db" type="float" setter="set_ceiling_db" getter="get_ceiling_db">
diff --git a/doc/classes/AudioEffectLowPassFilter.xml b/doc/classes/AudioEffectLowPassFilter.xml
index 9f9ecc98b1..50d66e874e 100644
--- a/doc/classes/AudioEffectLowPassFilter.xml
+++ b/doc/classes/AudioEffectLowPassFilter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectLowPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0-alpha">
+<class name="AudioEffectLowPassFilter" inherits="AudioEffectFilter" category="Core" version="3.0-beta">
<brief_description>
Adds a low pass filter to the Audio Bus.
</brief_description>
diff --git a/doc/classes/AudioEffectLowShelfFilter.xml b/doc/classes/AudioEffectLowShelfFilter.xml
index c74d1bc479..689faba672 100644
--- a/doc/classes/AudioEffectLowShelfFilter.xml
+++ b/doc/classes/AudioEffectLowShelfFilter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectLowShelfFilter" inherits="AudioEffectFilter" category="Core" version="3.0-alpha">
+<class name="AudioEffectLowShelfFilter" inherits="AudioEffectFilter" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/AudioEffectNotchFilter.xml b/doc/classes/AudioEffectNotchFilter.xml
index 6407fc8431..dc160ae3e6 100644
--- a/doc/classes/AudioEffectNotchFilter.xml
+++ b/doc/classes/AudioEffectNotchFilter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectNotchFilter" inherits="AudioEffectFilter" category="Core" version="3.0-alpha">
+<class name="AudioEffectNotchFilter" inherits="AudioEffectFilter" category="Core" version="3.0-beta">
<brief_description>
Adds a notch filter to the Audio Bus.
</brief_description>
diff --git a/doc/classes/AudioEffectPanner.xml b/doc/classes/AudioEffectPanner.xml
index 46be7c1696..05a6444a1e 100644
--- a/doc/classes/AudioEffectPanner.xml
+++ b/doc/classes/AudioEffectPanner.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectPanner" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectPanner" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a Panner audio effect to an Audio bus. Pans sound left or right.
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_pan" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_pan">
- <return type="void">
- </return>
- <argument index="0" name="cpanume" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="pan" type="float" setter="set_pan" getter="get_pan">
diff --git a/doc/classes/AudioEffectPhaser.xml b/doc/classes/AudioEffectPhaser.xml
index f413366fc7..6b82a4d32a 100644
--- a/doc/classes/AudioEffectPhaser.xml
+++ b/doc/classes/AudioEffectPhaser.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectPhaser" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectPhaser" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a Phaser audio effect to an Audio bus.
Combines the original signal with a copy that is slightly out of phase with the original.
@@ -12,76 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_depth" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_feedback" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_range_max_hz" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_range_min_hz" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_rate_hz" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_depth">
- <return type="void">
- </return>
- <argument index="0" name="depth" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_feedback">
- <return type="void">
- </return>
- <argument index="0" name="fbk" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_range_max_hz">
- <return type="void">
- </return>
- <argument index="0" name="hz" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_range_min_hz">
- <return type="void">
- </return>
- <argument index="0" name="hz" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_rate_hz">
- <return type="void">
- </return>
- <argument index="0" name="hz" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="depth" type="float" setter="set_depth" getter="get_depth">
diff --git a/doc/classes/AudioEffectPitchShift.xml b/doc/classes/AudioEffectPitchShift.xml
index 490aacbc8e..a6d2bef9ff 100644
--- a/doc/classes/AudioEffectPitchShift.xml
+++ b/doc/classes/AudioEffectPitchShift.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectPitchShift" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectPitchShift" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a Pitch shift audio effect to an Audio bus.
Raises or lowers the pitch of original sound.
@@ -12,20 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_pitch_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_pitch_scale">
- <return type="void">
- </return>
- <argument index="0" name="rate" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale">
diff --git a/doc/classes/AudioEffectReverb.xml b/doc/classes/AudioEffectReverb.xml
index e0567a48c7..13bc66f6f3 100644
--- a/doc/classes/AudioEffectReverb.xml
+++ b/doc/classes/AudioEffectReverb.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectReverb" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectReverb" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
Adds a Reverb audio effect to an Audio bus.
Simulates the sound of acoustic environments such as rooms, concert halls, caverns, or an open spaces.
@@ -12,78 +12,12 @@
<demos>
</demos>
<methods>
- <method name="get_damping" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dry" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_hpf" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_predelay_feedback" qualifiers="const">
<return type="float">
</return>
<description>
</description>
</method>
- <method name="get_predelay_msec" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_room_size" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_spread" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_wet" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_damping">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dry">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_hpf">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="set_predelay_feedback">
<return type="void">
</return>
@@ -92,38 +26,6 @@
<description>
</description>
</method>
- <method name="set_predelay_msec">
- <return type="void">
- </return>
- <argument index="0" name="msec" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_room_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_spread">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_wet">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="damping" type="float" setter="set_damping" getter="get_damping">
diff --git a/doc/classes/AudioEffectStereoEnhance.xml b/doc/classes/AudioEffectStereoEnhance.xml
index eb17056813..006145c0f1 100644
--- a/doc/classes/AudioEffectStereoEnhance.xml
+++ b/doc/classes/AudioEffectStereoEnhance.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioEffectStereoEnhance" inherits="AudioEffect" category="Core" version="3.0-alpha">
+<class name="AudioEffectStereoEnhance" inherits="AudioEffect" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,48 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_pan_pullout" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_surround" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_time_pullout" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_pan_pullout">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_surround">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_time_pullout">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="pan_pullout" type="float" setter="set_pan_pullout" getter="get_pan_pullout">
diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml
index 83a06bcd4d..1d861d5a4f 100644
--- a/doc/classes/AudioServer.xml
+++ b/doc/classes/AudioServer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioServer" inherits="Object" category="Core" version="3.0-alpha">
+<class name="AudioServer" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Server interface for low level audio access.
</brief_description>
@@ -341,13 +341,13 @@
</signal>
</signals>
<constants>
- <constant name="SPEAKER_MODE_STEREO" value="0">
+ <constant name="SPEAKER_MODE_STEREO" value="0" enum="SpeakerMode">
Two or fewer speakers are detected.
</constant>
- <constant name="SPEAKER_SURROUND_51" value="2">
+ <constant name="SPEAKER_SURROUND_51" value="2" enum="SpeakerMode">
A 5.1 channel surround setup detected.
</constant>
- <constant name="SPEAKER_SURROUND_71" value="3">
+ <constant name="SPEAKER_SURROUND_71" value="3" enum="SpeakerMode">
A 7.1 channel surround setup detected.
</constant>
</constants>
diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml
index 67323c59c5..342382ca05 100644
--- a/doc/classes/AudioStream.xml
+++ b/doc/classes/AudioStream.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioStream" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="AudioStream" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Base class for audio streams.
</brief_description>
diff --git a/doc/classes/AudioStreamPlayback.xml b/doc/classes/AudioStreamPlayback.xml
index 61393fbe29..663b2b57a4 100644
--- a/doc/classes/AudioStreamPlayback.xml
+++ b/doc/classes/AudioStreamPlayback.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioStreamPlayback" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="AudioStreamPlayback" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Meta class for playing back audio.
</brief_description>
diff --git a/doc/classes/AudioStreamPlayer.xml b/doc/classes/AudioStreamPlayer.xml
index 55edbfb438..032473113c 100644
--- a/doc/classes/AudioStreamPlayer.xml
+++ b/doc/classes/AudioStreamPlayer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioStreamPlayer" inherits="Node" category="Core" version="3.0-alpha">
+<class name="AudioStreamPlayer" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Plays back audio.
</brief_description>
@@ -12,18 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_bus" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_mix_target" qualifiers="const">
- <return type="int" enum="AudioStreamPlayer.MixTarget">
- </return>
- <description>
- </description>
- </method>
<method name="get_playback_position">
<return type="float">
</return>
@@ -31,30 +19,6 @@
Returns the position in the [AudioStream].
</description>
</method>
- <method name="get_stream" qualifiers="const">
- <return type="AudioStream">
- </return>
- <description>
- </description>
- </method>
- <method name="get_volume_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="is_autoplay_enabled">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_playing" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="play">
<return type="void">
</return>
@@ -73,46 +37,6 @@
Sets the position from which audio will be played, in seconds.
</description>
</method>
- <method name="set_autoplay">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_bus">
- <return type="void">
- </return>
- <argument index="0" name="bus" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_mix_target">
- <return type="void">
- </return>
- <argument index="0" name="mix_target" type="int" enum="AudioStreamPlayer.MixTarget">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_stream">
- <return type="void">
- </return>
- <argument index="0" name="stream" type="AudioStream">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_volume_db">
- <return type="void">
- </return>
- <argument index="0" name="volume_db" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="stop">
<return type="void">
</return>
@@ -149,13 +73,13 @@
</signal>
</signals>
<constants>
- <constant name="MIX_TARGET_STEREO" value="0">
+ <constant name="MIX_TARGET_STEREO" value="0" enum="MixTarget">
The audio will be played only on the first channel.
</constant>
- <constant name="MIX_TARGET_SURROUND" value="1">
+ <constant name="MIX_TARGET_SURROUND" value="1" enum="MixTarget">
The audio will be played on all surround channels.
</constant>
- <constant name="MIX_TARGET_CENTER" value="2">
+ <constant name="MIX_TARGET_CENTER" value="2" enum="MixTarget">
The audio will be played on the second channel, which is usually the center.
</constant>
</constants>
diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml
index 98ebeacc5f..63e569ee39 100644
--- a/doc/classes/AudioStreamPlayer2D.xml
+++ b/doc/classes/AudioStreamPlayer2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioStreamPlayer2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="AudioStreamPlayer2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Plays audio in 2D.
</brief_description>
@@ -12,30 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_area_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_attenuation" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_bus" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_max_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_playback_position">
<return type="float">
</return>
@@ -43,30 +19,6 @@
Returns the position in the [AudioStream].
</description>
</method>
- <method name="get_stream" qualifiers="const">
- <return type="AudioStream">
- </return>
- <description>
- </description>
- </method>
- <method name="get_volume_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="is_autoplay_enabled">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_playing" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="play">
<return type="void">
</return>
@@ -85,62 +37,6 @@
Sets the position from which audio will be played, in seconds.
</description>
</method>
- <method name="set_area_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_attenuation">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_autoplay">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_bus">
- <return type="void">
- </return>
- <argument index="0" name="bus" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_max_distance">
- <return type="void">
- </return>
- <argument index="0" name="pixels" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_stream">
- <return type="void">
- </return>
- <argument index="0" name="stream" type="AudioStream">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_volume_db">
- <return type="void">
- </return>
- <argument index="0" name="volume_db" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="stop">
<return type="void">
</return>
diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml
index 9c016a0173..21edfd12d5 100644
--- a/doc/classes/AudioStreamPlayer3D.xml
+++ b/doc/classes/AudioStreamPlayer3D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioStreamPlayer3D" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="AudioStreamPlayer3D" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Plays 3D sound in 3D space
</brief_description>
@@ -12,72 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_area_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_attenuation_filter_cutoff_hz" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_attenuation_filter_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_attenuation_model" qualifiers="const">
- <return type="int" enum="AudioStreamPlayer3D.AttenuationModel">
- </return>
- <description>
- </description>
- </method>
- <method name="get_bus" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_doppler_tracking" qualifiers="const">
- <return type="int" enum="AudioStreamPlayer3D.DopplerTracking">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_angle" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_angle_filter_attenuation_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_max_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_max_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_out_of_range_mode" qualifiers="const">
- <return type="int" enum="AudioStreamPlayer3D.OutOfRangeMode">
- </return>
- <description>
- </description>
- </method>
<method name="get_playback_position">
<return type="float">
</return>
@@ -85,42 +19,6 @@
Returns the position in the [AudioStream].
</description>
</method>
- <method name="get_stream" qualifiers="const">
- <return type="AudioStream">
- </return>
- <description>
- </description>
- </method>
- <method name="get_unit_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_unit_size" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="is_autoplay_enabled">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_emission_angle_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_playing" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="play">
<return type="void">
</return>
@@ -139,134 +37,6 @@
Sets the position from which audio will be played, in seconds.
</description>
</method>
- <method name="set_area_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_attenuation_filter_cutoff_hz">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_attenuation_filter_db">
- <return type="void">
- </return>
- <argument index="0" name="db" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_attenuation_model">
- <return type="void">
- </return>
- <argument index="0" name="model" type="int" enum="AudioStreamPlayer3D.AttenuationModel">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_autoplay">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_bus">
- <return type="void">
- </return>
- <argument index="0" name="bus" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_doppler_tracking">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="AudioStreamPlayer3D.DopplerTracking">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_angle">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_angle_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_angle_filter_attenuation_db">
- <return type="void">
- </return>
- <argument index="0" name="db" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_max_db">
- <return type="void">
- </return>
- <argument index="0" name="max_db" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_max_distance">
- <return type="void">
- </return>
- <argument index="0" name="metres" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_out_of_range_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="AudioStreamPlayer3D.OutOfRangeMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_stream">
- <return type="void">
- </return>
- <argument index="0" name="stream" type="AudioStream">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_unit_db">
- <return type="void">
- </return>
- <argument index="0" name="unit_db" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_unit_size">
- <return type="void">
- </return>
- <argument index="0" name="unit_size" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="stop">
<return type="void">
</return>
@@ -336,28 +106,28 @@
</signal>
</signals>
<constants>
- <constant name="ATTENUATION_INVERSE_DISTANCE" value="0">
+ <constant name="ATTENUATION_INVERSE_DISTANCE" value="0" enum="AttenuationModel">
Linear dampening of loudness according to distance.
</constant>
- <constant name="ATTENUATION_INVERSE_SQUARE_DISTANCE" value="1">
+ <constant name="ATTENUATION_INVERSE_SQUARE_DISTANCE" value="1" enum="AttenuationModel">
Squared dampening of loudness according to distance.
</constant>
- <constant name="ATTENUATION_LOGARITHMIC" value="2">
+ <constant name="ATTENUATION_LOGARITHMIC" value="2" enum="AttenuationModel">
Logarithmic dampening of loudness according to distance.
</constant>
- <constant name="OUT_OF_RANGE_MIX" value="0">
+ <constant name="OUT_OF_RANGE_MIX" value="0" enum="OutOfRangeMode">
Mix this audio in, even when it's out of range.
</constant>
- <constant name="OUT_OF_RANGE_PAUSE" value="1">
+ <constant name="OUT_OF_RANGE_PAUSE" value="1" enum="OutOfRangeMode">
Pause this audio when it gets out of range.
</constant>
- <constant name="DOPPLER_TRACKING_DISABLED" value="0">
+ <constant name="DOPPLER_TRACKING_DISABLED" value="0" enum="DopplerTracking">
Disables doppler tracking.
</constant>
- <constant name="DOPPLER_TRACKING_IDLE_STEP" value="1">
+ <constant name="DOPPLER_TRACKING_IDLE_STEP" value="1" enum="DopplerTracking">
Executes doppler tracking in idle step.
</constant>
- <constant name="DOPPLER_TRACKING_PHYSICS_STEP" value="2">
+ <constant name="DOPPLER_TRACKING_PHYSICS_STEP" value="2" enum="DopplerTracking">
Executes doppler tracking in physics step.
</constant>
</constants>
diff --git a/doc/classes/AudioStreamRandomPitch.xml b/doc/classes/AudioStreamRandomPitch.xml
index 56c7ee1998..24d6f8965a 100644
--- a/doc/classes/AudioStreamRandomPitch.xml
+++ b/doc/classes/AudioStreamRandomPitch.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioStreamRandomPitch" inherits="AudioStream" category="Core" version="3.0-alpha">
+<class name="AudioStreamRandomPitch" inherits="AudioStream" category="Core" version="3.0-beta">
<brief_description>
Plays audio with random pitch tweaking.
</brief_description>
@@ -11,34 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_audio_stream" qualifiers="const">
- <return type="AudioStream">
- </return>
- <description>
- </description>
- </method>
- <method name="get_random_pitch" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_audio_stream">
- <return type="void">
- </return>
- <argument index="0" name="stream" type="AudioStream">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_random_pitch">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="audio_stream" type="AudioStream" setter="set_audio_stream" getter="get_audio_stream">
diff --git a/doc/classes/AudioStreamSample.xml b/doc/classes/AudioStreamSample.xml
index 3a0a171480..83e9729bc1 100644
--- a/doc/classes/AudioStreamSample.xml
+++ b/doc/classes/AudioStreamSample.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioStreamSample" inherits="AudioStream" category="Core" version="3.0-alpha">
+<class name="AudioStreamSample" inherits="AudioStream" category="Core" version="3.0-beta">
<brief_description>
Plays audio.
</brief_description>
@@ -17,42 +17,6 @@
<description>
</description>
</method>
- <method name="get_format" qualifiers="const">
- <return type="int" enum="AudioStreamSample.Format">
- </return>
- <description>
- </description>
- </method>
- <method name="get_loop_begin" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_loop_end" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_loop_mode" qualifiers="const">
- <return type="int" enum="AudioStreamSample.LoopMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_mix_rate" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="is_stereo" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="set_data">
<return type="void">
</return>
@@ -61,59 +25,8 @@
<description>
</description>
</method>
- <method name="set_format">
- <return type="void">
- </return>
- <argument index="0" name="format" type="int" enum="AudioStreamSample.Format">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_loop_begin">
- <return type="void">
- </return>
- <argument index="0" name="loop_begin" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_loop_end">
- <return type="void">
- </return>
- <argument index="0" name="loop_end" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_loop_mode">
- <return type="void">
- </return>
- <argument index="0" name="loop_mode" type="int" enum="AudioStreamSample.LoopMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_mix_rate">
- <return type="void">
- </return>
- <argument index="0" name="mix_rate" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_stereo">
- <return type="void">
- </return>
- <argument index="0" name="stereo" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
- <member name="data" type="PoolByteArray" setter="set_data" getter="get_data">
- Raw audio data.
- </member>
<member name="format" type="int" setter="set_format" getter="get_format" enum="AudioStreamSample.Format">
Audio format. See FORMAT_* constants for values.
</member>
@@ -134,22 +47,22 @@
</member>
</members>
<constants>
- <constant name="FORMAT_8_BITS" value="0">
+ <constant name="FORMAT_8_BITS" value="0" enum="Format">
Audio codec 8 bit.
</constant>
- <constant name="FORMAT_16_BITS" value="1">
+ <constant name="FORMAT_16_BITS" value="1" enum="Format">
Audio codec 16 bit.
</constant>
- <constant name="FORMAT_IMA_ADPCM" value="2">
+ <constant name="FORMAT_IMA_ADPCM" value="2" enum="Format">
Audio codec IMA ADPCM.
</constant>
- <constant name="LOOP_DISABLED" value="0">
+ <constant name="LOOP_DISABLED" value="0" enum="LoopMode">
Audio does not loop.
</constant>
- <constant name="LOOP_FORWARD" value="1">
+ <constant name="LOOP_FORWARD" value="1" enum="LoopMode">
Audio loops the data between loop_begin and loop_end playing forward only.
</constant>
- <constant name="LOOP_PING_PONG" value="2">
+ <constant name="LOOP_PING_PONG" value="2" enum="LoopMode">
Audio loops the data between loop_begin and loop_end playing back and forth.
</constant>
</constants>
diff --git a/doc/classes/BackBufferCopy.xml b/doc/classes/BackBufferCopy.xml
index 2b5a9aac20..122e0c7fae 100644
--- a/doc/classes/BackBufferCopy.xml
+++ b/doc/classes/BackBufferCopy.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BackBufferCopy" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="BackBufferCopy" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Copies a region of the screen (or the whole screen) to a buffer so it can be accessed with the texscreen() shader instruction.
</brief_description>
@@ -11,38 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_copy_mode" qualifiers="const">
- <return type="int" enum="BackBufferCopy.CopyMode">
- </return>
- <description>
- Return the copy mode currently applied to the BackBufferCopy. See [code]COPY_MODE_*[/code] constants.
- </description>
- </method>
- <method name="get_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- Return the area covered by the BackBufferCopy.
- </description>
- </method>
- <method name="set_copy_mode">
- <return type="void">
- </return>
- <argument index="0" name="copy_mode" type="int" enum="BackBufferCopy.CopyMode">
- </argument>
- <description>
- Set the copy mode of the BackBufferCopy. See [code]COPY_MODE_*[/code] constants.
- </description>
- </method>
- <method name="set_rect">
- <return type="void">
- </return>
- <argument index="0" name="rect" type="Rect2">
- </argument>
- <description>
- Defines the area covered by the BackBufferCopy.
- </description>
- </method>
</methods>
<members>
<member name="copy_mode" type="int" setter="set_copy_mode" getter="get_copy_mode" enum="BackBufferCopy.CopyMode">
@@ -53,13 +21,13 @@
</member>
</members>
<constants>
- <constant name="COPY_MODE_DISABLED" value="0">
+ <constant name="COPY_MODE_DISABLED" value="0" enum="CopyMode">
Disables the buffering mode. This means the BackBufferCopy node will directly use the portion of screen it covers.
</constant>
- <constant name="COPY_MODE_RECT" value="1">
+ <constant name="COPY_MODE_RECT" value="1" enum="CopyMode">
BackBufferCopy buffers a rectangular region.
</constant>
- <constant name="COPY_MODE_VIEWPORT" value="2">
+ <constant name="COPY_MODE_VIEWPORT" value="2" enum="CopyMode">
BackBufferCopy buffers the entire screen.
</constant>
</constants>
diff --git a/doc/classes/BaseButton.xml b/doc/classes/BaseButton.xml
index 26939143b6..7f1aaa6822 100644
--- a/doc/classes/BaseButton.xml
+++ b/doc/classes/BaseButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BaseButton" inherits="Control" category="Core" version="3.0-alpha">
+<class name="BaseButton" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Base class for different kinds of buttons.
</brief_description>
@@ -27,19 +27,6 @@
Called when button is toggled (only if toggle_mode is active).
</description>
</method>
- <method name="get_action_mode" qualifiers="const">
- <return type="int" enum="BaseButton.ActionMode">
- </return>
- <description>
- Return the current mode of action (see [method set_action_mode]) (one of the ACTION_MODE_* constants).
- </description>
- </method>
- <method name="get_button_group" qualifiers="const">
- <return type="ButtonGroup">
- </return>
- <description>
- </description>
- </method>
<method name="get_draw_mode" qualifiers="const">
<return type="int" enum="BaseButton.DrawMode">
</return>
@@ -47,26 +34,6 @@
Return the visual state used to draw the button. This is useful mainly when implementing your own draw code by either overriding _draw() or connecting to "draw" signal. The visual state of the button is defined by the DRAW_* enum.
</description>
</method>
- <method name="get_enabled_focus_mode" qualifiers="const">
- <return type="int" enum="Control.FocusMode">
- </return>
- <description>
- Returns focus access mode used when switching between enabled/disabled (see [method Control.set_focus_mode] and [method set_disabled]).
- </description>
- </method>
- <method name="get_shortcut" qualifiers="const">
- <return type="ShortCut">
- </return>
- <description>
- </description>
- </method>
- <method name="is_disabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether the button is in disabled state (see [method set_disabled]).
- </description>
- </method>
<method name="is_hovered" qualifiers="const">
<return type="bool">
</return>
@@ -74,81 +41,6 @@
Return true if mouse entered the button before it exit.
</description>
</method>
- <method name="is_pressed" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- If toggle_mode is active, return whether the button is toggled. If toggle_mode is not active, return whether the button is pressed down.
- </description>
- </method>
- <method name="is_toggle_mode" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return the toggle_mode property (see [method set_toggle_mode]).
- </description>
- </method>
- <method name="set_action_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="BaseButton.ActionMode">
- </argument>
- <description>
- Set the current mode of action, determining when the button is considered clicked (see the ACTION_MODE_* constants).
- </description>
- </method>
- <method name="set_button_group">
- <return type="void">
- </return>
- <argument index="0" name="button_group" type="ButtonGroup">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_disabled">
- <return type="void">
- </return>
- <argument index="0" name="disabled" type="bool">
- </argument>
- <description>
- Set the button into disabled state. When a button is disabled, it can't be clicked or toggled.
- </description>
- </method>
- <method name="set_enabled_focus_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Control.FocusMode">
- </argument>
- <description>
- Sets the focus access mode to use when switching between enabled/disabled (see [method Control.set_focus_mode] and [method set_disabled]).
- </description>
- </method>
- <method name="set_pressed">
- <return type="void">
- </return>
- <argument index="0" name="pressed" type="bool">
- </argument>
- <description>
- Set the button to pressed state (only if toggle_mode is active).
- </description>
- </method>
- <method name="set_shortcut">
- <return type="void">
- </return>
- <argument index="0" name="shortcut" type="ShortCut">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_toggle_mode">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set the button toggle_mode property. Toggle mode makes the button flip state between pressed and unpressed each time its area is clicked.
- </description>
- </method>
</methods>
<members>
<member name="action_mode" type="int" setter="set_action_mode" getter="get_action_mode" enum="BaseButton.ActionMode">
@@ -198,22 +90,22 @@
</signal>
</signals>
<constants>
- <constant name="DRAW_NORMAL" value="0">
+ <constant name="DRAW_NORMAL" value="0" enum="DrawMode">
The normal state (i.e. not pressed, not hovered, not toggled and enabled) of buttons.
</constant>
- <constant name="DRAW_PRESSED" value="1">
+ <constant name="DRAW_PRESSED" value="1" enum="DrawMode">
The state of buttons are pressed.
</constant>
- <constant name="DRAW_HOVER" value="2">
+ <constant name="DRAW_HOVER" value="2" enum="DrawMode">
The state of buttons are hovered.
</constant>
- <constant name="DRAW_DISABLED" value="3">
+ <constant name="DRAW_DISABLED" value="3" enum="DrawMode">
The state of buttons are disabled.
</constant>
- <constant name="ACTION_MODE_BUTTON_PRESS" value="0">
+ <constant name="ACTION_MODE_BUTTON_PRESS" value="0" enum="ActionMode">
Require just a press to consider the button clicked.
</constant>
- <constant name="ACTION_MODE_BUTTON_RELEASE" value="1">
+ <constant name="ACTION_MODE_BUTTON_RELEASE" value="1" enum="ActionMode">
Require a press and a subsequent release before considering the button clicked.
</constant>
</constants>
diff --git a/doc/classes/Basis.xml b/doc/classes/Basis.xml
index c8a28621ea..a873bd9a27 100644
--- a/doc/classes/Basis.xml
+++ b/doc/classes/Basis.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Basis" category="Built-In Types" version="3.0-alpha">
+<class name="Basis" category="Built-In Types" version="3.0-beta">
<brief_description>
3x3 matrix datatype.
</brief_description>
@@ -24,7 +24,7 @@
<method name="Basis">
<return type="Basis">
</return>
- <argument index="0" name="euler" type="Vector3">
+ <argument index="0" name="from" type="Vector3">
</argument>
<description>
Create a rotation matrix (in the YXZ convention: first Z, then X, and Y last) from the specified Euler angles, given in the vector format as (X-angle, Y-angle, Z-angle).
@@ -171,10 +171,13 @@
</methods>
<members>
<member name="x" type="Vector3" setter="" getter="">
+ The basis matrix's x vector.
</member>
<member name="y" type="Vector3" setter="" getter="">
+ The basis matrix's y vector.
</member>
<member name="z" type="Vector3" setter="" getter="">
+ The basis matrix's z vector.
</member>
</members>
<constants>
diff --git a/doc/classes/BitMap.xml b/doc/classes/BitMap.xml
index 4de059d908..39bf46ac3d 100644
--- a/doc/classes/BitMap.xml
+++ b/doc/classes/BitMap.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BitMap" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="BitMap" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Boolean matrix.
</brief_description>
@@ -75,13 +75,6 @@
</description>
</method>
</methods>
- <members>
- <member name="data" type="Dictionary" setter="_set_data" getter="_get_data">
- Returns a [Dictionary] with two keys :
- [code]data[/code] : [PoolByteArray] with [code]true[/code]/[code]false[/code] [code]BitMap[/code] data.
- [code]size[/code] : The [code]Bitmap[/code]'s size.
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/doc/classes/BitmapFont.xml b/doc/classes/BitmapFont.xml
index c013a474b2..2fb7d7d87a 100644
--- a/doc/classes/BitmapFont.xml
+++ b/doc/classes/BitmapFont.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BitmapFont" inherits="Font" category="Core" version="3.0-alpha">
+<class name="BitmapFont" inherits="Font" category="Core" version="3.0-beta">
<brief_description>
Renders text using [code]*.fnt[/code] fonts.
</brief_description>
@@ -77,13 +77,6 @@
Returns the size of a character, optionally taking kerning into account if the next character is provided.
</description>
</method>
- <method name="get_fallback" qualifiers="const">
- <return type="BitmapFont">
- </return>
- <description>
- Returns the fallback BitmapFont.
- </description>
- </method>
<method name="get_kerning_pair" qualifiers="const">
<return type="int">
</return>
@@ -111,50 +104,11 @@
Returns the number of textures in the BitmapFont atlas.
</description>
</method>
- <method name="set_ascent">
- <return type="void">
- </return>
- <argument index="0" name="px" type="float">
- </argument>
- <description>
- Sets the font ascent (number of pixels above the baseline).
- </description>
- </method>
- <method name="set_distance_field_hint">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- If [code]true[/code] distance field hint is enabled.
- </description>
- </method>
- <method name="set_fallback">
- <return type="void">
- </return>
- <argument index="0" name="fallback" type="BitmapFont">
- </argument>
- <description>
- Sets the fallback BitmapFont.
- </description>
- </method>
- <method name="set_height">
- <return type="void">
- </return>
- <argument index="0" name="px" type="float">
- </argument>
- <description>
- Sets the total font height (ascent plus descent) in pixels.
- </description>
- </method>
</methods>
<members>
<member name="ascent" type="float" setter="set_ascent" getter="get_ascent">
Ascent (number of pixels above the baseline).
</member>
- <member name="chars" type="PoolIntArray" setter="_set_chars" getter="_get_chars">
- The characters in the BitmapFont.
- </member>
<member name="distance_field" type="bool" setter="set_distance_field_hint" getter="is_distance_field_hint">
If [code]true[/code] distance field hint is enabled.
</member>
@@ -164,12 +118,6 @@
<member name="height" type="float" setter="set_height" getter="get_height">
Total font height (ascent plus descent) in pixels.
</member>
- <member name="kernings" type="PoolIntArray" setter="_set_kernings" getter="_get_kernings">
- The font's kernings as [PoolIntArray].
- </member>
- <member name="textures" type="Array" setter="_set_textures" getter="_get_textures">
- The font's [Texture]s.
- </member>
</members>
<constants>
</constants>
diff --git a/doc/classes/BoneAttachment.xml b/doc/classes/BoneAttachment.xml
index 8f33d7a73c..b7f21ebf0c 100644
--- a/doc/classes/BoneAttachment.xml
+++ b/doc/classes/BoneAttachment.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BoneAttachment" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="BoneAttachment" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
A node that will attach to a bone.
</brief_description>
diff --git a/doc/classes/BoxContainer.xml b/doc/classes/BoxContainer.xml
index a7465a959a..7003158387 100644
--- a/doc/classes/BoxContainer.xml
+++ b/doc/classes/BoxContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BoxContainer" inherits="Container" category="Core" version="3.0-alpha">
+<class name="BoxContainer" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
Base class for box containers.
</brief_description>
@@ -20,22 +20,6 @@
Adds a control to the box as a spacer. If [code]true[/code], [i]begin[/i] will insert the spacer control in front of other children.
</description>
</method>
- <method name="get_alignment" qualifiers="const">
- <return type="int" enum="BoxContainer.AlignMode">
- </return>
- <description>
- Return the alignment of children in the container.
- </description>
- </method>
- <method name="set_alignment">
- <return type="void">
- </return>
- <argument index="0" name="alignment" type="int" enum="BoxContainer.AlignMode">
- </argument>
- <description>
- Set the alignment of children in the container(Must be one of ALIGN_BEGIN, ALIGN_CENTER or ALIGN_END).
- </description>
- </method>
</methods>
<members>
<member name="alignment" type="int" setter="set_alignment" getter="get_alignment" enum="BoxContainer.AlignMode">
@@ -43,13 +27,13 @@
</member>
</members>
<constants>
- <constant name="ALIGN_BEGIN" value="0">
+ <constant name="ALIGN_BEGIN" value="0" enum="AlignMode">
Aligns children with the beginning of the container.
</constant>
- <constant name="ALIGN_CENTER" value="1">
+ <constant name="ALIGN_CENTER" value="1" enum="AlignMode">
Aligns children with the center of the container.
</constant>
- <constant name="ALIGN_END" value="2">
+ <constant name="ALIGN_END" value="2" enum="AlignMode">
Aligns children with the end of the container.
</constant>
</constants>
diff --git a/doc/classes/BoxShape.xml b/doc/classes/BoxShape.xml
index 0f46442550..4a4b528449 100644
--- a/doc/classes/BoxShape.xml
+++ b/doc/classes/BoxShape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BoxShape" inherits="Shape" category="Core" version="3.0-alpha">
+<class name="BoxShape" inherits="Shape" category="Core" version="3.0-beta">
<brief_description>
Box shape resource.
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_extents" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Return the half extents of the shape.
- </description>
- </method>
- <method name="set_extents">
- <return type="void">
- </return>
- <argument index="0" name="extents" type="Vector3">
- </argument>
- <description>
- Set the half extents for the shape.
- </description>
- </method>
</methods>
<members>
<member name="extents" type="Vector3" setter="set_extents" getter="get_extents">
diff --git a/doc/classes/Button.xml b/doc/classes/Button.xml
index 2964cc9efc..854f1cc7c3 100644
--- a/doc/classes/Button.xml
+++ b/doc/classes/Button.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Button" inherits="BaseButton" category="Core" version="3.0-alpha">
+<class name="Button" inherits="BaseButton" category="Core" version="3.0-beta">
<brief_description>
Standard themed Button.
</brief_description>
@@ -11,76 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_button_icon" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_clip_text" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_text" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_text_align" qualifiers="const">
- <return type="int" enum="Button.TextAlign">
- </return>
- <description>
- </description>
- </method>
- <method name="is_flat" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_button_icon">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_clip_text">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flat">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_text">
- <return type="void">
- </return>
- <argument index="0" name="text" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_text_align">
- <return type="void">
- </return>
- <argument index="0" name="align" type="int" enum="Button.TextAlign">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="align" type="int" setter="set_text_align" getter="get_text_align" enum="Button.TextAlign">
@@ -100,13 +30,13 @@
</member>
</members>
<constants>
- <constant name="ALIGN_LEFT" value="0">
+ <constant name="ALIGN_LEFT" value="0" enum="TextAlign">
Align the text to the left.
</constant>
- <constant name="ALIGN_CENTER" value="1">
+ <constant name="ALIGN_CENTER" value="1" enum="TextAlign">
Align the text to the center.
</constant>
- <constant name="ALIGN_RIGHT" value="2">
+ <constant name="ALIGN_RIGHT" value="2" enum="TextAlign">
Align the text to the right.
</constant>
</constants>
diff --git a/doc/classes/ButtonGroup.xml b/doc/classes/ButtonGroup.xml
index ccc457f9e6..2c857371f9 100644
--- a/doc/classes/ButtonGroup.xml
+++ b/doc/classes/ButtonGroup.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ButtonGroup" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="ButtonGroup" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Group of Buttons.
</brief_description>
diff --git a/doc/classes/Camera.xml b/doc/classes/Camera.xml
index c840da9266..5d6c13498c 100644
--- a/doc/classes/Camera.xml
+++ b/doc/classes/Camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Camera" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="Camera" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Camera node, displays from a point of view.
</brief_description>
@@ -249,25 +249,25 @@
</method>
</methods>
<constants>
- <constant name="PROJECTION_PERSPECTIVE" value="0">
+ <constant name="PROJECTION_PERSPECTIVE" value="0" enum="Projection">
Perspective Projection (object's size on the screen becomes smaller when far away).
</constant>
- <constant name="PROJECTION_ORTHOGONAL" value="1">
+ <constant name="PROJECTION_ORTHOGONAL" value="1" enum="Projection">
Orthogonal Projection (objects remain the same size on the screen no matter how far away they are).
</constant>
- <constant name="KEEP_WIDTH" value="0">
+ <constant name="KEEP_WIDTH" value="0" enum="KeepAspect">
Try to keep the aspect ratio when scaling the Camera's viewport to the screen. If not possible, preserve the viewport's width by changing the height. Height is [code]sizey[/code] for orthographic projection, [code]fovy[/code] for perspective projection.
</constant>
- <constant name="KEEP_HEIGHT" value="1">
+ <constant name="KEEP_HEIGHT" value="1" enum="KeepAspect">
Try to keep the aspect ratio when scaling the Camera's viewport to the screen. If not possible, preserve the viewport's height by changing the width. Width is [code]sizex[/code] for orthographic projection, [code]fovx[/code] for perspective projection.
</constant>
- <constant name="DOPPLER_TRACKING_DISABLED" value="0">
+ <constant name="DOPPLER_TRACKING_DISABLED" value="0" enum="DopplerTracking">
Disable Doppler effect simulation (default).
</constant>
- <constant name="DOPPLER_TRACKING_IDLE_STEP" value="1">
+ <constant name="DOPPLER_TRACKING_IDLE_STEP" value="1" enum="DopplerTracking">
Simulate Doppler effect by tracking positions of objects that are changed in [code]_process[/code]. Changes in the relative velocity of this Camera compared to those objects affect how Audio is perceived (changing the Audio's [code]pitch shift[/code]).
</constant>
- <constant name="DOPPLER_TRACKING_PHYSICS_STEP" value="2">
+ <constant name="DOPPLER_TRACKING_PHYSICS_STEP" value="2" enum="DopplerTracking">
Simulate Doppler effect by tracking positions of objects that are changed in [code]_physics_process[/code]. Changes in the relative velocity of this Camera compared to those objects affect how Audio is perceived (changing the Audio's [code]pitch shift[/code]).
</constant>
</constants>
diff --git a/doc/classes/Camera2D.xml b/doc/classes/Camera2D.xml
index 8704624b2d..c95691d07f 100644
--- a/doc/classes/Camera2D.xml
+++ b/doc/classes/Camera2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Camera2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Camera2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Camera node for 2D scenes.
</brief_description>
@@ -23,6 +23,7 @@
<return type="void">
</return>
<description>
+ Removes any [code]Camera2D[/code] from the ancestor [Viewport]'s internal currently-assigned camera.
</description>
</method>
<method name="force_update_scroll">
@@ -32,12 +33,6 @@
Force the camera to update scroll immediately.
</description>
</method>
- <method name="get_anchor_mode" qualifiers="const">
- <return type="int" enum="Camera2D.AnchorMode">
- </return>
- <description>
- </description>
- </method>
<method name="get_camera_position" qualifiers="const">
<return type="Vector2">
</return>
@@ -49,116 +44,28 @@
<return type="Vector2">
</return>
<description>
+ Returns the location of the [code]Camera2D[/code]'s screen-center, relative to the origin.
</description>
</method>
<method name="get_custom_viewport" qualifiers="const">
<return type="Node">
</return>
<description>
- </description>
- </method>
- <method name="get_drag_margin" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- Return the margins needed to drag the camera (see [method set_drag_margin]).
- </description>
- </method>
- <method name="get_follow_smoothing" qualifiers="const">
- <return type="float">
- </return>
- <description>
+ Returns the [Viewport] used by the camera if it is not using the default viewport.
</description>
</method>
<method name="get_h_offset" qualifiers="const">
<return type="float">
</return>
<description>
- </description>
- </method>
- <method name="get_limit" qualifiers="const">
- <return type="int">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- Return the scrolling limit in pixels.
- </description>
- </method>
- <method name="get_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the scroll offset.
+ Returns the horizontal offset of the camera.
</description>
</method>
<method name="get_v_offset" qualifiers="const">
<return type="float">
</return>
<description>
- </description>
- </method>
- <method name="get_zoom" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="is_current" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true of this is the current camera (see [method make_current]).
- </description>
- </method>
- <method name="is_follow_smoothing_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_h_drag_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_limit_drawing_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_limit_smoothing_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_margin_drawing_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_rotating" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_screen_drawing_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_v_drag_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
+ Returns the vertical offset of the camera.
</description>
</method>
<method name="make_current">
@@ -176,55 +83,13 @@
This has no effect if smoothing is disabled.
</description>
</method>
- <method name="set_anchor_mode">
- <return type="void">
- </return>
- <argument index="0" name="anchor_mode" type="int" enum="Camera2D.AnchorMode">
- </argument>
- <description>
- </description>
- </method>
<method name="set_custom_viewport">
<return type="void">
</return>
<argument index="0" name="viewport" type="Node">
</argument>
<description>
- </description>
- </method>
- <method name="set_drag_margin">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="drag_margin" type="float">
- </argument>
- <description>
- Set the margins needed to drag the camera (relative to the screen size). Margin uses the MARGIN_* enum. Drag margins of 0,0,0,0 will keep the camera at the center of the screen, while drag margins of 1,1,1,1 will only move when the camera is at the edges.
- </description>
- </method>
- <method name="set_enable_follow_smoothing">
- <return type="void">
- </return>
- <argument index="0" name="follow_smoothing" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_follow_smoothing">
- <return type="void">
- </return>
- <argument index="0" name="follow_smoothing" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_h_drag_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
+ Assigns a custom [Viewport] node to the [code]Camera2D[/code]. If [code]viewport[/code] is not a [Viewport], it re-assigns the default viewport instead.
</description>
</method>
<method name="set_h_offset">
@@ -233,76 +98,7 @@
<argument index="0" name="ofs" type="float">
</argument>
<description>
- </description>
- </method>
- <method name="set_limit">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="limit" type="int">
- </argument>
- <description>
- Set the scrolling limit in pixels.
- </description>
- </method>
- <method name="set_limit_drawing_enabled">
- <return type="void">
- </return>
- <argument index="0" name="limit_drawing_enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_limit_smoothing_enabled">
- <return type="void">
- </return>
- <argument index="0" name="limit_smoothing_enabled" type="bool">
- </argument>
- <description>
- Smooth camera when reaching camera limits.
- This requires camera smoothing being enabled to have a noticeable effect.
- </description>
- </method>
- <method name="set_margin_drawing_enabled">
- <return type="void">
- </return>
- <argument index="0" name="margin_drawing_enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector2">
- </argument>
- <description>
- Set the scroll offset. Useful for looking around or camera shake animations.
- </description>
- </method>
- <method name="set_rotating">
- <return type="void">
- </return>
- <argument index="0" name="rotating" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_screen_drawing_enabled">
- <return type="void">
- </return>
- <argument index="0" name="screen_drawing_enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_v_drag_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
+ The camera's horizontal offset is set to [code]ofs[/code].
</description>
</method>
<method name="set_v_offset">
@@ -311,14 +107,7 @@
<argument index="0" name="ofs" type="float">
</argument>
<description>
- </description>
- </method>
- <method name="set_zoom">
- <return type="void">
- </return>
- <argument index="0" name="zoom" type="Vector2">
- </argument>
- <description>
+ The camera's vertical offset is set to [code]ofs[/code].
</description>
</method>
</methods>
@@ -388,9 +177,11 @@
</member>
</members>
<constants>
- <constant name="ANCHOR_MODE_FIXED_TOP_LEFT" value="0">
+ <constant name="ANCHOR_MODE_FIXED_TOP_LEFT" value="0" enum="AnchorMode">
+ The camera's position is fixed so that the top-left corner is always at the origin.
</constant>
- <constant name="ANCHOR_MODE_DRAG_CENTER" value="1">
+ <constant name="ANCHOR_MODE_DRAG_CENTER" value="1" enum="AnchorMode">
+ The camera's position takes into account vertical/horizontal offsets and the screen size.
</constant>
</constants>
</class>
diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml
index bb3a9b3845..cf0b482b07 100644
--- a/doc/classes/CanvasItem.xml
+++ b/doc/classes/CanvasItem.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CanvasItem" inherits="Node" category="Core" version="3.0-alpha">
+<class name="CanvasItem" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Base class of anything 2D.
</brief_description>
@@ -88,6 +88,34 @@
Draw a line from a 2D point to another, with a given color and width. It can be optionally antialiased.
</description>
</method>
+ <method name="draw_multiline">
+ <return type="void">
+ </return>
+ <argument index="0" name="points" type="PoolVector2Array">
+ </argument>
+ <argument index="1" name="color" type="Color">
+ </argument>
+ <argument index="2" name="width" type="float" default="1.0">
+ </argument>
+ <argument index="3" name="antialiased" type="bool" default="false">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="draw_multiline_colors">
+ <return type="void">
+ </return>
+ <argument index="0" name="points" type="PoolVector2Array">
+ </argument>
+ <argument index="1" name="colors" type="PoolColorArray">
+ </argument>
+ <argument index="2" name="width" type="float" default="1.0">
+ </argument>
+ <argument index="3" name="antialiased" type="bool" default="false">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="draw_polygon">
<return type="void">
</return>
@@ -119,6 +147,7 @@
<argument index="3" name="antialiased" type="bool" default="false">
</argument>
<description>
+ Draw a polyline with a uniform [code]color[/code] and [code]width[/code] and optional antialiasing.
</description>
</method>
<method name="draw_polyline_colors">
@@ -133,6 +162,7 @@
<argument index="3" name="antialiased" type="bool" default="false">
</argument>
<description>
+ Draw a polyline with a uniform [code]width[/code], segment-by-segment coloring, and optional antialiasing. Colors assigned to line segments match by index between [code]points[/code] and [code]colors[/code].
</description>
</method>
<method name="draw_primitive">
@@ -177,7 +207,7 @@
<argument index="2" name="scale" type="Vector2">
</argument>
<description>
- Set a custom transform for drawing. Anything drawn afterwards will be transformed by this.
+ Sets a custom transform for drawing via components. Anything drawn afterwards will be transformed by this.
</description>
</method>
<method name="draw_set_transform_matrix">
@@ -186,6 +216,7 @@
<argument index="0" name="xform" type="Transform2D">
</argument>
<description>
+ Sets a custom transform for drawing via matrix. Anything drawn afterwards will be transformed by this.
</description>
</method>
<method name="draw_string">
@@ -271,39 +302,6 @@
Draw a textured rectangle region at a given position, optionally modulated by a color. Transpose swaps the x and y coordinates when reading the texture.
</description>
</method>
- <method name="edit_get_state" qualifiers="const">
- <return type="Variant">
- </return>
- <description>
- Used for editing, returns an opaque value representing the transform state.
- </description>
- </method>
- <method name="edit_rotate">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- Used for editing, handle rotation.
- </description>
- </method>
- <method name="edit_set_rect">
- <return type="void">
- </return>
- <argument index="0" name="rect" type="Rect2">
- </argument>
- <description>
- </description>
- </method>
- <method name="edit_set_state">
- <return type="void">
- </return>
- <argument index="0" name="state" type="Variant">
- </argument>
- <description>
- Set the transform state of this CanvasItem. For [Node2D], this is an [Array] with (in order) a [Vector2] for position, a float for rotation (radians) and another [Vector2] for scale. For [Control] this is a [Rect2] with the position and size.
- </description>
- </method>
<method name="get_canvas" qualifiers="const">
<return type="RID">
</return>
@@ -346,27 +344,6 @@
Get the global transform matrix of this item in relation to the canvas.
</description>
</method>
- <method name="edit_get_item_and_children_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- Get a [Rect2] with the boundaries of this item and its children.
- </description>
- </method>
- <method name="edit_get_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- Return a rect containing the editable boundaries of the item.
- </description>
- </method>
- <method name="get_light_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Get this item's light mask number.
- </description>
- </method>
<method name="get_local_mouse_position" qualifiers="const">
<return type="Vector2">
</return>
@@ -374,27 +351,6 @@
Get the mouse position relative to this item's position.
</description>
</method>
- <method name="get_material" qualifiers="const">
- <return type="Material">
- </return>
- <description>
- Get the material of this item.
- </description>
- </method>
- <method name="get_modulate" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- Get the modulate of the CanvasItem, which affects children items too.
- </description>
- </method>
- <method name="get_self_modulate" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- Get the self-modulate of the CanvasItem.
- </description>
- </method>
<method name="get_transform" qualifiers="const">
<return type="Transform2D">
</return>
@@ -402,13 +358,6 @@
Get the transform matrix of this item.
</description>
</method>
- <method name="get_use_parent_material" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Get whether this item uses its parent's material.
- </description>
- </method>
<method name="get_viewport_rect" qualifiers="const">
<return type="Rect2">
</return>
@@ -437,17 +386,11 @@
Hide the CanvasItem currently visible.
</description>
</method>
- <method name="is_draw_behind_parent_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether the item is drawn behind its parent.
- </description>
- </method>
<method name="is_local_transform_notification_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Returns [code]true[/code] if local transform notifications are communicated to children.
</description>
</method>
<method name="is_set_as_toplevel" qualifiers="const">
@@ -461,19 +404,14 @@
<return type="bool">
</return>
<description>
- </description>
- </method>
- <method name="is_visible" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if this CanvasItem is visible. It may be invisible because itself or a parent canvas item is hidden.
+ Returns [code]true[/code] if global transform notifications are communicated to children.
</description>
</method>
<method name="is_visible_in_tree" qualifiers="const">
<return type="bool">
</return>
<description>
+ Returns [code]true[/code] if the node is in the [SceneTree] and is visible on-screen.
</description>
</method>
<method name="make_canvas_position_local" qualifiers="const">
@@ -482,6 +420,7 @@
<argument index="0" name="screen_point" type="Vector2">
</argument>
<description>
+ Assigns [code]screen_point[/code] as this node's new local transform.
</description>
</method>
<method name="make_input_local" qualifiers="const">
@@ -490,6 +429,7 @@
<argument index="0" name="event" type="InputEvent">
</argument>
<description>
+ Transformations issued by [code]event[/code]'s inputs are applied in local space instead of global space.
</description>
</method>
<method name="set_as_toplevel">
@@ -498,43 +438,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Set as top level. This means that it will not inherit transform from parent canvas items.
- </description>
- </method>
- <method name="set_draw_behind_parent">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set whether the canvas item is drawn behind its parent.
- </description>
- </method>
- <method name="set_light_mask">
- <return type="void">
- </return>
- <argument index="0" name="light_mask" type="int">
- </argument>
- <description>
- Set the ligtht mask number of this item.
- </description>
- </method>
- <method name="set_material">
- <return type="void">
- </return>
- <argument index="0" name="material" type="Material">
- </argument>
- <description>
- Set the material of this item.
- </description>
- </method>
- <method name="set_modulate">
- <return type="void">
- </return>
- <argument index="0" name="modulate" type="Color">
- </argument>
- <description>
- Set the modulate of the CanvasItem. This [i]affects[/i] the modulation of children items.
+ Sets as top level. This means that it will not inherit transform from parent canvas items.
</description>
</method>
<method name="set_notify_local_transform">
@@ -543,6 +447,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ If [code]enable[/code] is [code]true[/code], children will be updated with local transform data.
</description>
</method>
<method name="set_notify_transform">
@@ -551,34 +456,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
- </description>
- </method>
- <method name="set_self_modulate">
- <return type="void">
- </return>
- <argument index="0" name="self_modulate" type="Color">
- </argument>
- <description>
- Set the self-modulate of the CanvasItem. This does not affect the modulation of children items.
- </description>
- </method>
- <method name="set_use_parent_material">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set whether or not this item should use its parent's material.
- </description>
- </method>
- <method name="set_visible">
- <return type="void">
- </return>
- <argument index="0" name="visible" type="bool">
- </argument>
- <description>
- Set whether this item should be visible or not.
- Note that a hidden CanvasItem will make all children hidden too, so no matter what is set here this item won't be shown if its parent or grandparents nodes are hidden.
+ If [code]enable[/code] is [code]true[/code], children will be updated with global transform data.
</description>
</method>
<method name="show">
@@ -598,20 +476,28 @@
</methods>
<members>
<member name="light_mask" type="int" setter="set_light_mask" getter="get_light_mask">
+ The rendering layers in which this [code]CanvasItem[/code] responds to [Light2D] nodes. Default value: [code]1[/code].
</member>
<member name="material" type="Material" setter="set_material" getter="get_material">
+ The material applied to textures on this [code]CanvasItem[/code]. Default value: [code]null[/code].
</member>
<member name="modulate" type="Color" setter="set_modulate" getter="get_modulate">
+ The color applied to textures on this [code]CanvasItem[/code]. Default value: [code]Color(1, 1, 1, 1)[/code] (opaque "white").
</member>
<member name="self_modulate" type="Color" setter="set_self_modulate" getter="get_self_modulate">
+ The color applied to textures on this [code]CanvasItem[/code]. This is not inherited by children [code]CanvasItem[/code]s. Default value: [code]Color(1, 1, 1, 1)[/code] (opaque "white")..
</member>
<member name="show_behind_parent" type="bool" setter="set_draw_behind_parent" getter="is_draw_behind_parent_enabled">
+ If [code]true[/code] the object draws behind its parent. Default value: [code]false[/code].
</member>
<member name="show_on_top" type="bool" setter="_set_on_top" getter="_is_on_top">
+ If [code]true[/code] the object draws on top of its parent. Default value: [code]true[/code].
</member>
<member name="use_parent_material" type="bool" setter="set_use_parent_material" getter="get_use_parent_material">
+ If [code]true[/code] the parent [code]CanvasItem[/code]'s [member material] property is used as this one's material. Default value: [code]false[/code].
</member>
<member name="visible" type="bool" setter="set_visible" getter="is_visible">
+ If [code]true[/code] this [code]CanvasItem[/code] is drawn. Default value: [code]true[/code].
</member>
</members>
<signals>
@@ -637,34 +523,34 @@
</signal>
</signals>
<constants>
- <constant name="BLEND_MODE_MIX" value="0">
+ <constant name="BLEND_MODE_MIX" value="0" enum="BlendMode">
Mix blending mode. Colors are assumed to be independent of the alpha (opacity) value.
</constant>
- <constant name="BLEND_MODE_ADD" value="1">
+ <constant name="BLEND_MODE_ADD" value="1" enum="BlendMode">
Additive blending mode.
</constant>
- <constant name="BLEND_MODE_SUB" value="2">
+ <constant name="BLEND_MODE_SUB" value="2" enum="BlendMode">
Subtractive blending mode.
</constant>
- <constant name="BLEND_MODE_MUL" value="3">
+ <constant name="BLEND_MODE_MUL" value="3" enum="BlendMode">
Multiplicative blending mode.
</constant>
- <constant name="BLEND_MODE_PREMULT_ALPHA" value="4">
+ <constant name="BLEND_MODE_PREMULT_ALPHA" value="4" enum="BlendMode">
Mix blending mode. Colors are assumed to be premultiplied by the alpha (opacity) value.
</constant>
- <constant name="NOTIFICATION_TRANSFORM_CHANGED" value="29" enum="">
+ <constant name="NOTIFICATION_TRANSFORM_CHANGED" value="29">
Canvas item transform has changed. Only received if requested.
</constant>
- <constant name="NOTIFICATION_DRAW" value="30" enum="">
+ <constant name="NOTIFICATION_DRAW" value="30">
CanvasItem is requested to draw.
</constant>
- <constant name="NOTIFICATION_VISIBILITY_CHANGED" value="31" enum="">
+ <constant name="NOTIFICATION_VISIBILITY_CHANGED" value="31">
Canvas item visibility has changed.
</constant>
- <constant name="NOTIFICATION_ENTER_CANVAS" value="32" enum="">
+ <constant name="NOTIFICATION_ENTER_CANVAS" value="32">
Canvas item has entered the canvas.
</constant>
- <constant name="NOTIFICATION_EXIT_CANVAS" value="33" enum="">
+ <constant name="NOTIFICATION_EXIT_CANVAS" value="33">
Canvas item has exited the canvas.
</constant>
</constants>
diff --git a/doc/classes/CanvasItemMaterial.xml b/doc/classes/CanvasItemMaterial.xml
index b9d2653a2f..81709227ad 100644
--- a/doc/classes/CanvasItemMaterial.xml
+++ b/doc/classes/CanvasItemMaterial.xml
@@ -1,65 +1,49 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CanvasItemMaterial" inherits="Material" category="Core" version="3.0-alpha">
+<class name="CanvasItemMaterial" inherits="Material" category="Core" version="3.0-beta">
<brief_description>
+ A material for [CanvasItem]s.
</brief_description>
<description>
+ [code]CanvasItemMaterial[/code]s provide a means of modifying the textures associated with a CanvasItem. They specialize in describing blend and lighting behaviors for textures. Use a [ShaderMaterial] to more fully customize a material's interactions with a [CanvasItem].
</description>
<tutorials>
</tutorials>
<demos>
</demos>
<methods>
- <method name="get_blend_mode" qualifiers="const">
- <return type="int" enum="CanvasItemMaterial.BlendMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_light_mode" qualifiers="const">
- <return type="int" enum="CanvasItemMaterial.LightMode">
- </return>
- <description>
- </description>
- </method>
- <method name="set_blend_mode">
- <return type="void">
- </return>
- <argument index="0" name="blend_mode" type="int" enum="CanvasItemMaterial.BlendMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_light_mode">
- <return type="void">
- </return>
- <argument index="0" name="light_mode" type="int" enum="CanvasItemMaterial.LightMode">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="CanvasItemMaterial.BlendMode">
+ The manner in which a material's rendering is applied to underlying textures.
</member>
<member name="light_mode" type="int" setter="set_light_mode" getter="get_light_mode" enum="CanvasItemMaterial.LightMode">
+ The manner in which material reacts to lighting.
</member>
</members>
<constants>
- <constant name="BLEND_MODE_MIX" value="0">
+ <constant name="BLEND_MODE_MIX" value="0" enum="BlendMode">
+ Mix blending mode. Colors are assumed to be independent of the alpha (opacity) value.
</constant>
- <constant name="BLEND_MODE_ADD" value="1">
+ <constant name="BLEND_MODE_ADD" value="1" enum="BlendMode">
+ Additive blending mode.
</constant>
- <constant name="BLEND_MODE_SUB" value="2">
+ <constant name="BLEND_MODE_SUB" value="2" enum="BlendMode">
+ Subtractive blending mode.
</constant>
- <constant name="BLEND_MODE_MUL" value="3">
+ <constant name="BLEND_MODE_MUL" value="3" enum="BlendMode">
+ Multiplicative blending mode.
</constant>
- <constant name="BLEND_MODE_PREMULT_ALPHA" value="4">
+ <constant name="BLEND_MODE_PREMULT_ALPHA" value="4" enum="BlendMode">
+ Mix blending mode. Colors are assumed to be premultiplied by the alpha (opacity) value.
</constant>
- <constant name="LIGHT_MODE_NORMAL" value="0">
+ <constant name="LIGHT_MODE_NORMAL" value="0" enum="LightMode">
+ Render the material using both light and non-light sensitive material properties.
</constant>
- <constant name="LIGHT_MODE_UNSHADED" value="1">
+ <constant name="LIGHT_MODE_UNSHADED" value="1" enum="LightMode">
+ Render the material as if there were no light.
</constant>
- <constant name="LIGHT_MODE_LIGHT_ONLY" value="2">
+ <constant name="LIGHT_MODE_LIGHT_ONLY" value="2" enum="LightMode">
+ Render the material as if there were only light.
</constant>
</constants>
</class>
diff --git a/doc/classes/CanvasLayer.xml b/doc/classes/CanvasLayer.xml
index 139624bb1d..01c2dd6ba9 100644
--- a/doc/classes/CanvasLayer.xml
+++ b/doc/classes/CanvasLayer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CanvasLayer" inherits="Node" category="Core" version="3.0-alpha">
+<class name="CanvasLayer" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Canvas drawing layer.
</brief_description>
@@ -15,20 +15,7 @@
<return type="Node">
</return>
<description>
- </description>
- </method>
- <method name="get_layer" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the layer index, determines the draw order, a lower value will be below a higher one.
- </description>
- </method>
- <method name="get_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the base offset for this layer (helper).
+ Returns the [Viewport] used by the camera if it is not using the default viewport.
</description>
</method>
<method name="get_rotation" qualifiers="const">
@@ -38,20 +25,6 @@
Return the base rotation for this layer in radians (helper).
</description>
</method>
- <method name="get_rotation_degrees" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the base rotation for this layer in degrees.
- </description>
- </method>
- <method name="get_scale" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the base scale for this layer (helper).
- </description>
- </method>
<method name="get_transform" qualifiers="const">
<return type="Transform2D">
</return>
@@ -72,24 +45,7 @@
<argument index="0" name="viewport" type="Node">
</argument>
<description>
- </description>
- </method>
- <method name="set_layer">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- Set the layer index, determines the draw order, a lower value will be below a higher one.
- </description>
- </method>
- <method name="set_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector2">
- </argument>
- <description>
- Set the base offset for this layer (helper).
+ Assigns a custom [Viewport] node to the [code]CanvasLayer[/code]. If [code]viewport[/code] is not a [Viewport], it re-assigns the default viewport instead.
</description>
</method>
<method name="set_rotation">
@@ -101,24 +57,6 @@
Set the base rotation for this layer in radians (helper).
</description>
</method>
- <method name="set_rotation_degrees">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- Set the base rotation for this layer in degrees (helper).
- </description>
- </method>
- <method name="set_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector2">
- </argument>
- <description>
- Set the base scale for this layer (helper).
- </description>
- </method>
<method name="set_transform">
<return type="void">
</return>
diff --git a/doc/classes/CanvasModulate.xml b/doc/classes/CanvasModulate.xml
index 3872d80236..117230db1c 100644
--- a/doc/classes/CanvasModulate.xml
+++ b/doc/classes/CanvasModulate.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CanvasModulate" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="CanvasModulate" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Tint the entire canvas.
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- Gets the canvas tint color
- </description>
- </method>
- <method name="set_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- Sets the canvas tint color
- </description>
- </method>
</methods>
<members>
<member name="color" type="Color" setter="set_color" getter="get_color">
diff --git a/doc/classes/CapsuleMesh.xml b/doc/classes/CapsuleMesh.xml
index 497e795253..715bd7ac5a 100644
--- a/doc/classes/CapsuleMesh.xml
+++ b/doc/classes/CapsuleMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CapsuleMesh" inherits="PrimitiveMesh" category="Core" version="3.0-alpha">
+<class name="CapsuleMesh" inherits="PrimitiveMesh" category="Core" version="3.0-beta">
<brief_description>
Class representing a capsule-shaped [PrimitiveMesh].
</brief_description>
@@ -11,62 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_mid_height" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_radial_segments" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_rings" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_mid_height">
- <return type="void">
- </return>
- <argument index="0" name="mid_height" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_radial_segments">
- <return type="void">
- </return>
- <argument index="0" name="segments" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_rings">
- <return type="void">
- </return>
- <argument index="0" name="rings" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="mid_height" type="float" setter="set_mid_height" getter="get_mid_height">
diff --git a/doc/classes/CapsuleShape.xml b/doc/classes/CapsuleShape.xml
index f2d3528e4f..25f5b8eb35 100644
--- a/doc/classes/CapsuleShape.xml
+++ b/doc/classes/CapsuleShape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CapsuleShape" inherits="Shape" category="Core" version="3.0-alpha">
+<class name="CapsuleShape" inherits="Shape" category="Core" version="3.0-beta">
<brief_description>
Capsule shape for collisions.
</brief_description>
@@ -11,38 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_height" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the capsule height.
- </description>
- </method>
- <method name="get_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the capsule radius.
- </description>
- </method>
- <method name="set_height">
- <return type="void">
- </return>
- <argument index="0" name="height" type="float">
- </argument>
- <description>
- Set the capsule height.
- </description>
- </method>
- <method name="set_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- Set the capsule radius.
- </description>
- </method>
</methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height">
diff --git a/doc/classes/CapsuleShape2D.xml b/doc/classes/CapsuleShape2D.xml
index b700388303..75a69546aa 100644
--- a/doc/classes/CapsuleShape2D.xml
+++ b/doc/classes/CapsuleShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CapsuleShape2D" inherits="Shape2D" category="Core" version="3.0-alpha">
+<class name="CapsuleShape2D" inherits="Shape2D" category="Core" version="3.0-beta">
<brief_description>
Capsule shape for 2D collisions.
</brief_description>
@@ -11,38 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_height" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the height of the [code]CapsuleShape2D[/code].
- </description>
- </method>
- <method name="get_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the radius of the [code]CapsuleShape2D[/code].
- </description>
- </method>
- <method name="set_height">
- <return type="void">
- </return>
- <argument index="0" name="height" type="float">
- </argument>
- <description>
- Set the height of the [code]CapsuleShape2D[/code].
- </description>
- </method>
- <method name="set_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- Set the radius of the [code]CapsuleShape2D[/code].
- </description>
- </method>
</methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height">
diff --git a/doc/classes/CenterContainer.xml b/doc/classes/CenterContainer.xml
index 9e88448e32..6235a3fec4 100644
--- a/doc/classes/CenterContainer.xml
+++ b/doc/classes/CenterContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CenterContainer" inherits="Container" category="Core" version="3.0-alpha">
+<class name="CenterContainer" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
Keeps children controls centered.
</brief_description>
@@ -11,25 +11,10 @@
<demos>
</demos>
<methods>
- <method name="is_using_top_left" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Should put children to the top left corner instead of center of the container.
- </description>
- </method>
- <method name="set_use_top_left">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- This function will anchor the container children to the top left corner of the the container boundaries, moving all its children to that position, (the children new center will be the top left corner of the container).
- </description>
- </method>
</methods>
<members>
<member name="use_top_left" type="bool" setter="set_use_top_left" getter="is_using_top_left">
+ If [code]true[/code] centers children relative to the [code]CenterContainer[/code]'s top left corner. Default value: [code]false[/code].
</member>
</members>
<constants>
diff --git a/doc/classes/CheckBox.xml b/doc/classes/CheckBox.xml
index fb9a67323b..f38b43cf8c 100644
--- a/doc/classes/CheckBox.xml
+++ b/doc/classes/CheckBox.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CheckBox" inherits="Button" category="Core" version="3.0-alpha">
+<class name="CheckBox" inherits="Button" category="Core" version="3.0-beta">
<brief_description>
Binary choice user interface widget
</brief_description>
diff --git a/doc/classes/CheckButton.xml b/doc/classes/CheckButton.xml
index 996b4238a1..77de3c17fc 100644
--- a/doc/classes/CheckButton.xml
+++ b/doc/classes/CheckButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CheckButton" inherits="Button" category="Core" version="3.0-alpha">
+<class name="CheckButton" inherits="Button" category="Core" version="3.0-beta">
<brief_description>
Checkable button.
</brief_description>
diff --git a/doc/classes/CircleShape2D.xml b/doc/classes/CircleShape2D.xml
index e5158755fe..1018790803 100644
--- a/doc/classes/CircleShape2D.xml
+++ b/doc/classes/CircleShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CircleShape2D" inherits="Shape2D" category="Core" version="3.0-alpha">
+<class name="CircleShape2D" inherits="Shape2D" category="Core" version="3.0-beta">
<brief_description>
Circular shape for 2D collisions.
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the radius of the circle shape.
- </description>
- </method>
- <method name="set_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- Set the radius of the circle shape.
- </description>
- </method>
</methods>
<members>
<member name="radius" type="float" setter="set_radius" getter="get_radius">
diff --git a/doc/classes/ClassDB.xml b/doc/classes/ClassDB.xml
index 2fed2f8676..b4d4d0b448 100644
--- a/doc/classes/ClassDB.xml
+++ b/doc/classes/ClassDB.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ClassDB" inherits="Object" category="Core" version="3.0-alpha">
+<class name="ClassDB" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Class information repository.
</brief_description>
@@ -35,6 +35,7 @@
<argument index="0" name="class" type="String">
</argument>
<description>
+ Returns a category associated with the class for use in documentation and the Asset Library. Debug mode required.
</description>
</method>
<method name="class_get_integer_constant" qualifiers="const">
diff --git a/doc/classes/CollisionObject.xml b/doc/classes/CollisionObject.xml
index be047ad699..5d0984bcdf 100644
--- a/doc/classes/CollisionObject.xml
+++ b/doc/classes/CollisionObject.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CollisionObject" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="CollisionObject" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Base node for collision objects.
</brief_description>
@@ -25,6 +25,7 @@
<argument index="4" name="shape_idx" type="int">
</argument>
<description>
+ Accepts unhandled [InputEvent]s. [code]click_position[/code] is the clicked location in world space and [code]click_normal[/code] is the normal vector extending from the clicked surface of the [Shape] at [code]shape_idx[/code]. Connect to the [code]input_event[/code] signal to easily pick up these events.
</description>
</method>
<method name="create_shape_owner">
@@ -36,12 +37,6 @@
Creates a new shape owner for the given object. Returns [code]owner_id[/code] of the new owner for future reference.
</description>
</method>
- <method name="get_capture_input_on_drag" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="get_rid" qualifiers="const">
<return type="RID">
</return>
@@ -56,12 +51,6 @@
Returns an [Array] of [code]owner_id[/code] identifiers. You can use these ids in other methods that take [code]owner_id[/code] as an argument.
</description>
</method>
- <method name="is_ray_pickable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="is_shape_owner_disabled" qualifiers="const">
<return type="bool">
</return>
@@ -80,22 +69,6 @@
Removes the given shape owner.
</description>
</method>
- <method name="set_capture_input_on_drag">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ray_pickable">
- <return type="void">
- </return>
- <argument index="0" name="ray_pickable" type="bool">
- </argument>
- <description>
- </description>
- </method>
<method name="shape_find_owner" qualifiers="const">
<return type="int">
</return>
@@ -162,6 +135,7 @@
<argument index="1" name="shape_id" type="int">
</argument>
<description>
+ Returns the child index of the [Shape] with the given id from the given shape owner.
</description>
</method>
<method name="shape_owner_get_transform" qualifiers="const">
@@ -209,8 +183,10 @@
</methods>
<members>
<member name="input_capture_on_drag" type="bool" setter="set_capture_input_on_drag" getter="get_capture_input_on_drag">
+ If [code]true[/code] the [code]CollisionObject[/code] will continue to receive input events as the mouse is dragged across its shapes. Default value: [code]false[/code].
</member>
<member name="input_ray_pickable" type="bool" setter="set_ray_pickable" getter="is_ray_pickable">
+ If [code]true[/code] the [CollisionObject]'s shapes will respond to [RayCast]s. Default value: [code]true[/code].
</member>
</members>
<signals>
@@ -226,6 +202,7 @@
<argument index="4" name="shape_idx" type="int">
</argument>
<description>
+ Emitted when [method _input_event] receives an event. See its description for details.
</description>
</signal>
<signal name="mouse_entered">
diff --git a/doc/classes/CollisionObject2D.xml b/doc/classes/CollisionObject2D.xml
index d10368229c..086513cad5 100644
--- a/doc/classes/CollisionObject2D.xml
+++ b/doc/classes/CollisionObject2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CollisionObject2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="CollisionObject2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Base node for 2D collision objects.
</brief_description>
@@ -21,6 +21,7 @@
<argument index="2" name="shape_idx" type="int">
</argument>
<description>
+ Accepts unhandled [InputEvent]s. [code]shape_idx[/code] is the child index of the clicked [Shape2D]. Connect to the [code]input_event[/code] signal to easily pick up these events.
</description>
</method>
<method name="create_shape_owner">
@@ -46,13 +47,6 @@
Returns an [Array] of [code]owner_id[/code] identifiers. You can use these ids in other methods that take [code]owner_id[/code] as an argument.
</description>
</method>
- <method name="is_pickable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether this object is pickable.
- </description>
- </method>
<method name="is_shape_owner_disabled" qualifiers="const">
<return type="bool">
</return>
@@ -68,6 +62,7 @@
<argument index="0" name="owner_id" type="int">
</argument>
<description>
+ Returns [code]true[/code] if collisions for the shape owner originating from this [code]CollisionObject2D[/code] will not be reported to collided with [code]CollisionObject2D[/code]s.
</description>
</method>
<method name="remove_shape_owner">
@@ -79,15 +74,6 @@
Removes the given shape owner.
</description>
</method>
- <method name="set_pickable">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set whether this object is pickable. A pickable object can detect the mouse pointer enter/leave it and, if the mouse is inside it, report input events.
- </description>
- </method>
<method name="shape_find_owner" qualifiers="const">
<return type="int">
</return>
@@ -154,6 +140,7 @@
<argument index="1" name="shape_id" type="int">
</argument>
<description>
+ Returns the child index of the [Shape2D] with the given id from the given shape owner.
</description>
</method>
<method name="shape_owner_get_transform" qualifiers="const">
@@ -195,6 +182,7 @@
<argument index="1" name="enable" type="bool">
</argument>
<description>
+ If [code]enable[/code] is [code]true[/code], collisions for the shape owner originating from this [code]CollisionObject2D[/code] will not be reported to collided with [code]CollisionObject2D[/code]s.
</description>
</method>
<method name="shape_owner_set_transform">
@@ -223,7 +211,7 @@
<argument index="2" name="shape_idx" type="int">
</argument>
<description>
- Emitted when an input event occurs and [code]input_pickable[/code] is [code]true[/code].
+ Emitted when an input event occurs and [code]input_pickable[/code] is [code]true[/code]. See [method _input_event] for details.
</description>
</signal>
<signal name="mouse_entered">
diff --git a/doc/classes/CollisionPolygon.xml b/doc/classes/CollisionPolygon.xml
index 13a993e9f4..ff689e36f4 100644
--- a/doc/classes/CollisionPolygon.xml
+++ b/doc/classes/CollisionPolygon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CollisionPolygon" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="CollisionPolygon" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Editor-only class for defining a collision polygon in 3D space.
</brief_description>
@@ -11,48 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_depth" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_polygon" qualifiers="const">
- <return type="PoolVector2Array">
- </return>
- <description>
- </description>
- </method>
- <method name="is_disabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_depth">
- <return type="void">
- </return>
- <argument index="0" name="depth" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_disabled">
- <return type="void">
- </return>
- <argument index="0" name="disabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_polygon">
- <return type="void">
- </return>
- <argument index="0" name="polygon" type="PoolVector2Array">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="depth" type="float" setter="set_depth" getter="get_depth">
diff --git a/doc/classes/CollisionPolygon2D.xml b/doc/classes/CollisionPolygon2D.xml
index bc4d2a5b16..995b868f89 100644
--- a/doc/classes/CollisionPolygon2D.xml
+++ b/doc/classes/CollisionPolygon2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CollisionPolygon2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="CollisionPolygon2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Defines a 2D collision polygon.
</brief_description>
@@ -11,67 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_build_mode" qualifiers="const">
- <return type="int" enum="CollisionPolygon2D.BuildMode">
- </return>
- <description>
- Return whether the polygon is a [ConvexPolygonShape2D] ([code]build_mode==0[/code]), or a [ConcavePolygonShape2D] ([code]build_mode==1[/code]).
- </description>
- </method>
- <method name="get_polygon" qualifiers="const">
- <return type="PoolVector2Array">
- </return>
- <description>
- Return the list of points that define the polygon.
- </description>
- </method>
- <method name="is_disabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_one_way_collision_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_build_mode">
- <return type="void">
- </return>
- <argument index="0" name="build_mode" type="int" enum="CollisionPolygon2D.BuildMode">
- </argument>
- <description>
- Set whether the polygon is to be a [ConvexPolygonShape2D] ([code]build_mode==0[/code]), or a [ConcavePolygonShape2D] ([code]build_mode==1[/code]).
- </description>
- </method>
- <method name="set_disabled">
- <return type="void">
- </return>
- <argument index="0" name="disabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_one_way_collision">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_polygon">
- <return type="void">
- </return>
- <argument index="0" name="polygon" type="PoolVector2Array">
- </argument>
- <description>
- Set the array of points forming the polygon.
- When editing the point list via the editor, depending on [method get_build_mode], it has to be a list of points (for [code]build_mode==0[/code]), or a list of lines (for [code]build_mode==1[/code]). In the second case, the even elements of the array define the start point of the line, and the odd elements the end point.
- </description>
- </method>
</methods>
<members>
<member name="build_mode" type="int" setter="set_build_mode" getter="get_build_mode" enum="CollisionPolygon2D.BuildMode">
@@ -88,10 +27,10 @@
</member>
</members>
<constants>
- <constant name="BUILD_SOLIDS" value="0">
+ <constant name="BUILD_SOLIDS" value="0" enum="BuildMode">
Collisions will include the polygon and its contained area.
</constant>
- <constant name="BUILD_SEGMENTS" value="1">
+ <constant name="BUILD_SEGMENTS" value="1" enum="BuildMode">
Collisions will only include the polygon edges.
</constant>
</constants>
diff --git a/doc/classes/CollisionShape.xml b/doc/classes/CollisionShape.xml
index 3c9e252788..b893ee79ad 100644
--- a/doc/classes/CollisionShape.xml
+++ b/doc/classes/CollisionShape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CollisionShape" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="CollisionShape" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Node that represents collision shape data in 3D space.
</brief_description>
@@ -11,18 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_shape" qualifiers="const">
- <return type="Shape">
- </return>
- <description>
- </description>
- </method>
- <method name="is_disabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="make_convex_from_brothers">
<return type="void">
</return>
@@ -39,22 +27,6 @@
If this method exists within a script it will be called whenever the shape resource has been modified.
</description>
</method>
- <method name="set_disabled">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shape">
- <return type="void">
- </return>
- <argument index="0" name="shape" type="Shape">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled">
diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml
index caf3f8d8be..2ab9540196 100644
--- a/doc/classes/CollisionShape2D.xml
+++ b/doc/classes/CollisionShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CollisionShape2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="CollisionShape2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Node that represents collision shape data in 2D space.
</brief_description>
@@ -11,48 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_shape" qualifiers="const">
- <return type="Shape2D">
- </return>
- <description>
- </description>
- </method>
- <method name="is_disabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_one_way_collision_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_disabled">
- <return type="void">
- </return>
- <argument index="0" name="disabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_one_way_collision">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shape">
- <return type="void">
- </return>
- <argument index="0" name="shape" type="Shape2D">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled">
diff --git a/doc/classes/Color.xml b/doc/classes/Color.xml
index 479eb719d4..6fa7ed0a86 100644
--- a/doc/classes/Color.xml
+++ b/doc/classes/Color.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Color" category="Built-In Types" version="3.0-alpha">
+<class name="Color" category="Built-In Types" version="3.0-beta">
<brief_description>
Color in RGBA format with some support for ARGB format.
</brief_description>
@@ -103,6 +103,19 @@
[/codeblock]
</description>
</method>
+ <method name="darkened">
+ <return type="Color">
+ </return>
+ <argument index="0" name="amount" type="float">
+ </argument>
+ <description>
+ Returns a new color resulting from making this color darker by the specified percentage (0-1).
+ [codeblock]
+ var green = Color(0.0, 1.0, 0.0)
+ var darkgreen = green.darkened(0.2) # 20% darker than regular green
+ [/codeblock]
+ </description>
+ </method>
<method name="gray">
<return type="float">
</return>
@@ -126,6 +139,19 @@
[/codeblock]
</description>
</method>
+ <method name="lightened">
+ <return type="Color">
+ </return>
+ <argument index="0" name="amount" type="float">
+ </argument>
+ <description>
+ Returns a new color resulting from making this color lighter by the specified percentage (0-1).
+ [codeblock]
+ var green = Color(0.0, 1.0, 0.0)
+ var lightgreen = green.lightened(0.2) # 20% lighter than regular green
+ [/codeblock]
+ </description>
+ </method>
<method name="linear_interpolate">
<return type="Color">
</return>
diff --git a/doc/classes/ColorPicker.xml b/doc/classes/ColorPicker.xml
index b6aeb8d0e3..192f139ba9 100644
--- a/doc/classes/ColorPicker.xml
+++ b/doc/classes/ColorPicker.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ColorPicker" inherits="BoxContainer" category="Core" version="3.0-alpha">
+<class name="ColorPicker" inherits="BoxContainer" category="Core" version="3.0-beta">
<brief_description>
Color picker control.
</brief_description>
diff --git a/doc/classes/ColorPickerButton.xml b/doc/classes/ColorPickerButton.xml
index 24b37580d6..185460eef2 100644
--- a/doc/classes/ColorPickerButton.xml
+++ b/doc/classes/ColorPickerButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ColorPickerButton" inherits="Button" category="Core" version="3.0-alpha">
+<class name="ColorPickerButton" inherits="Button" category="Core" version="3.0-beta">
<brief_description>
Button that pops out a [ColorPicker]
</brief_description>
@@ -11,53 +11,27 @@
<demos>
</demos>
<methods>
- <method name="get_pick_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
<method name="get_picker">
<return type="ColorPicker">
</return>
<description>
+ Returns the [code]ColorPicker[/code] that this [code]ColorPickerButton[/code] toggles.
</description>
</method>
- <method name="is_editing_alpha" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- See [method ColorPicker.is_edit_alpha]
- </description>
- </method>
- <method name="set_edit_alpha">
- <return type="void">
+ <method name="get_popup">
+ <return type="PopupPanel">
</return>
- <argument index="0" name="show" type="bool">
- </argument>
- <description>
- See [method ColorPicker.set_edit_alpha]
- </description>
- </method>
- <method name="set_pick_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
<description>
- Set new color to ColorRect.
-
- [codeblock]
- var cr = get_node("colorrect_node")
- cr.set_frame_color(Color(1, 0, 0, 1)) # Set color rect node to red
- [/codeblock]
+ Returns the control's [PopupPanel] which allows you to connect to Popup Signals. This allows you to handle events when the ColorPicker is shown or hidden.
</description>
</method>
</methods>
<members>
<member name="color" type="Color" setter="set_pick_color" getter="get_pick_color">
+ The currently selected color.
</member>
<member name="edit_alpha" type="bool" setter="set_edit_alpha" getter="is_editing_alpha">
+ If [code]true[/code] the alpha channel in the displayed [ColorPicker] will be visible. Default value: [code]true[/code].
</member>
</members>
<signals>
@@ -65,7 +39,7 @@
<argument index="0" name="color" type="Color">
</argument>
<description>
- Emitted when the color is changed.
+ Emitted when the color changes.
</description>
</signal>
</signals>
diff --git a/doc/classes/ColorRect.xml b/doc/classes/ColorRect.xml
index 4dbc4f010c..af1b0f57e2 100644
--- a/doc/classes/ColorRect.xml
+++ b/doc/classes/ColorRect.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ColorRect" inherits="Control" category="Core" version="3.0-alpha">
+<class name="ColorRect" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Colored rect for canvas.
</brief_description>
@@ -11,30 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_frame_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- Return the color in RGBA format.
- [codeblock]
- var cr = get_node("colorrect_node")
- var c = cr.get_frame_color() # Default color is white
- [/codeblock]
- </description>
- </method>
- <method name="set_frame_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- Set new color to ColorRect.
- [codeblock]
- var cr = get_node("colorrect_node")
- cr.set_frame_color(Color(1, 0, 0, 1)) # Set color rect node to red
- [/codeblock]
- </description>
- </method>
</methods>
<members>
<member name="color" type="Color" setter="set_frame_color" getter="get_frame_color">
diff --git a/doc/classes/ConcavePolygonShape.xml b/doc/classes/ConcavePolygonShape.xml
index e586eb11c5..bae86d5b22 100644
--- a/doc/classes/ConcavePolygonShape.xml
+++ b/doc/classes/ConcavePolygonShape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ConcavePolygonShape" inherits="Shape" category="Core" version="3.0-alpha">
+<class name="ConcavePolygonShape" inherits="Shape" category="Core" version="3.0-beta">
<brief_description>
Concave polygon shape.
</brief_description>
diff --git a/doc/classes/ConcavePolygonShape2D.xml b/doc/classes/ConcavePolygonShape2D.xml
index 5d2dbb4596..1d2aabd6ea 100644
--- a/doc/classes/ConcavePolygonShape2D.xml
+++ b/doc/classes/ConcavePolygonShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ConcavePolygonShape2D" inherits="Shape2D" category="Core" version="3.0-alpha">
+<class name="ConcavePolygonShape2D" inherits="Shape2D" category="Core" version="3.0-beta">
<brief_description>
Concave polygon 2D shape resource for physics.
</brief_description>
@@ -12,25 +12,10 @@
<demos>
</demos>
<methods>
- <method name="get_segments" qualifiers="const">
- <return type="PoolVector2Array">
- </return>
- <description>
- Return the array of segments.
- </description>
- </method>
- <method name="set_segments">
- <return type="void">
- </return>
- <argument index="0" name="segments" type="PoolVector2Array">
- </argument>
- <description>
- Set the array of segments.
- </description>
- </method>
</methods>
<members>
<member name="segments" type="PoolVector2Array" setter="set_segments" getter="get_segments">
+ The array of points that make up the [code]ConcavePolygonShape2D[/code]'s line segments.
</member>
</members>
<constants>
diff --git a/doc/classes/ConeTwistJoint.xml b/doc/classes/ConeTwistJoint.xml
index 2f72b451f3..4fcacb6d46 100644
--- a/doc/classes/ConeTwistJoint.xml
+++ b/doc/classes/ConeTwistJoint.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ConeTwistJoint" inherits="Joint" category="Core" version="3.0-alpha">
+<class name="ConeTwistJoint" inherits="Joint" category="Core" version="3.0-beta">
<brief_description>
A twist joint between two 3D bodies
</brief_description>
@@ -13,24 +13,6 @@
<demos>
</demos>
<methods>
- <method name="get_param" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="ConeTwistJoint.Param">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="ConeTwistJoint.Param">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="bias" type="float" setter="set_param" getter="get_param">
@@ -55,27 +37,27 @@
</member>
</members>
<constants>
- <constant name="PARAM_SWING_SPAN" value="0">
+ <constant name="PARAM_SWING_SPAN" value="0" enum="Param">
Swing is rotation from side to side, around the axis perpendicular to the twist axis.
The swing span defines, how much rotation will not get corrected allong the swing axis.
Could be defined as looseness in the [code]ConeTwistJoint[/code].
If below 0.05, this behaviour is locked. Default value: [code]PI/4[/code].
</constant>
- <constant name="PARAM_TWIST_SPAN" value="1">
+ <constant name="PARAM_TWIST_SPAN" value="1" enum="Param">
Twist is the rotation around the twist axis, this value defined how far the joint can twist.
Twist is locked if below 0.05.
</constant>
- <constant name="PARAM_BIAS" value="2">
+ <constant name="PARAM_BIAS" value="2" enum="Param">
The speed with which the swing or twist will take place.
The higher, the faster.
</constant>
- <constant name="PARAM_SOFTNESS" value="3">
+ <constant name="PARAM_SOFTNESS" value="3" enum="Param">
The ease with which the joint starts to twist. If it's too low, it takes more force to start twisting the joint.
</constant>
- <constant name="PARAM_RELAXATION" value="4">
+ <constant name="PARAM_RELAXATION" value="4" enum="Param">
Defines, how fast the swing- and twist-speed-difference on both sides gets synced.
</constant>
- <constant name="PARAM_MAX" value="5">
+ <constant name="PARAM_MAX" value="5" enum="Param">
End flag of PARAM_* constants, used internally.
</constant>
</constants>
diff --git a/doc/classes/ConfigFile.xml b/doc/classes/ConfigFile.xml
index ef668ca994..fcd8834b0c 100644
--- a/doc/classes/ConfigFile.xml
+++ b/doc/classes/ConfigFile.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ConfigFile" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="ConfigFile" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Helper class to handle INI-style files.
</brief_description>
diff --git a/doc/classes/ConfirmationDialog.xml b/doc/classes/ConfirmationDialog.xml
index 1bbb338c07..77eb1bfc2c 100644
--- a/doc/classes/ConfirmationDialog.xml
+++ b/doc/classes/ConfirmationDialog.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ConfirmationDialog" inherits="AcceptDialog" category="Core" version="3.0-alpha">
+<class name="ConfirmationDialog" inherits="AcceptDialog" category="Core" version="3.0-beta">
<brief_description>
Dialog for confirmation of actions.
</brief_description>
diff --git a/doc/classes/Container.xml b/doc/classes/Container.xml
index 5490c84bae..a2aa39414c 100644
--- a/doc/classes/Container.xml
+++ b/doc/classes/Container.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Container" inherits="Control" category="Core" version="3.0-alpha">
+<class name="Container" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Base node for containers.
</brief_description>
@@ -39,7 +39,7 @@
</signal>
</signals>
<constants>
- <constant name="NOTIFICATION_SORT_CHILDREN" value="50" enum="">
+ <constant name="NOTIFICATION_SORT_CHILDREN" value="50">
Notification for when sorting the children, it must be obeyed immediately.
</constant>
</constants>
diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml
index 57966fb74e..6c30a92ed5 100644
--- a/doc/classes/Control.xml
+++ b/doc/classes/Control.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Control" inherits="CanvasItem" category="Core" version="3.0-alpha">
+<class name="Control" inherits="CanvasItem" category="Core" version="3.0-beta">
<brief_description>
All User Interface nodes inherit from Control. Features anchors and margins to adapt its position and size to its parent.
</brief_description>
@@ -137,15 +137,6 @@
<description>
</description>
</method>
- <method name="get_anchor" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- Return the anchor type (ANCHOR_BEGIN, ANCHOR_END, ANCHOR_RATIO) for a given margin (MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM).
- </description>
- </method>
<method name="get_begin" qualifiers="const">
<return type="Vector2">
</return>
@@ -187,12 +178,6 @@
Returns the mouse cursor shape the control displays on mouse hover, one of the [code]CURSOR_*[/code] constants.
</description>
</method>
- <method name="get_custom_minimum_size" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
<method name="get_default_cursor_shape" qualifiers="const">
<return type="int" enum="Control.CursorShape">
</return>
@@ -222,22 +207,6 @@
Returns the focus access mode for the control (FOCUS_NONE, FOCUS_CLICK, FOCUS_ALL) (see [method set_focus_mode]).
</description>
</method>
- <method name="get_focus_neighbour" qualifiers="const">
- <return type="NodePath">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- Return the forced neighbour for moving the input focus to. When pressing directional/joypad directions, focus is moved to the next control in that direction. However, the neighbour to move to can be forced with this function.
- </description>
- </method>
- <method name="get_focus_next" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- Return the 'focus_next' for moving input focus to. When pressing TAB, focus is moved to the next control in the tree. However, the control to move to can be forced with this function.
- </description>
- </method>
<method name="get_focus_owner" qualifiers="const">
<return type="Control">
</return>
@@ -245,13 +214,6 @@
Return which control is owning the keyboard focus, or null if no one.
</description>
</method>
- <method name="get_focus_previous" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- Return the 'focus_previous' for moving input focus to. When pressing Shift+TAB focus is moved to the previous control in the tree. However, the control to move to can be forced with this function.
- </description>
- </method>
<method name="get_font" qualifiers="const">
<return type="Font">
</return>
@@ -276,19 +238,6 @@
Return position and size of the Control, relative to the top-left corner of the [i]window[/i] Control. This is a helper (see [method get_global_position], [method get_size]).
</description>
</method>
- <method name="get_h_grow_direction" qualifiers="const">
- <return type="int" enum="Control.GrowDirection">
- </return>
- <description>
- </description>
- </method>
- <method name="get_h_size_flags" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Hint for containers, return horizontal positioning flags.
- </description>
- </method>
<method name="get_icon" qualifiers="const">
<return type="Texture">
</return>
@@ -299,15 +248,6 @@
<description>
</description>
</method>
- <method name="get_margin" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- Return a margin offset. Margin can be one of (MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM). Offset value being returned depends on the anchor mode.
- </description>
- </method>
<method name="get_minimum_size" qualifiers="const">
<return type="Vector2">
</return>
@@ -315,13 +255,6 @@
Return the minimum size this Control can shrink to. A control will never be displayed or resized smaller than its minimum size.
</description>
</method>
- <method name="get_mouse_filter" qualifiers="const">
- <return type="int" enum="Control.MouseFilter">
- </return>
- <description>
- Return when the control is ignoring mouse events (even touchpad events send mouse events).
- </description>
- </method>
<method name="get_parent_area_size" qualifiers="const">
<return type="Vector2">
</return>
@@ -334,19 +267,6 @@
<description>
</description>
</method>
- <method name="get_pivot_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_position" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Returns the Control position, relative to the top-left corner of the parent Control and independent of the anchor mode.
- </description>
- </method>
<method name="get_rect" qualifiers="const">
<return type="Rect2">
</return>
@@ -361,33 +281,6 @@
Return the rotation (in radians)
</description>
</method>
- <method name="get_rotation_degrees" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the rotation (in degrees)
- </description>
- </method>
- <method name="get_scale" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_size" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Returns the size of the Control, computed from all margins, however the size returned will [b]never be smaller than the minimum size reported by[/b] [method get_minimum_size]. This means that even if end position of the Control rectangle is smaller than the begin position, the Control will still display and interact correctly. (see description, [method get_minimum_size], [method set_margin], [method set_anchor]).
- </description>
- </method>
- <method name="get_stretch_ratio" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Hint for containers, return the stretch ratio. This value is relative to other stretch ratio, so if this control has 2 and another has 1, this one will be twice as big.
- </description>
- </method>
<method name="get_stylebox" qualifiers="const">
<return type="StyleBox">
</return>
@@ -398,13 +291,6 @@
<description>
</description>
</method>
- <method name="get_theme" qualifiers="const">
- <return type="Theme">
- </return>
- <description>
- Return a [Theme] override, if one exists (see [method set_theme]).
- </description>
- </method>
<method name="get_tooltip" qualifiers="const">
<return type="String">
</return>
@@ -414,19 +300,6 @@
Return the tooltip, which will appear when the cursor is resting over this control.
</description>
</method>
- <method name="get_v_grow_direction" qualifiers="const">
- <return type="int" enum="Control.GrowDirection">
- </return>
- <description>
- </description>
- </method>
- <method name="get_v_size_flags" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Hint for containers, return vertical positioning flags.
- </description>
- </method>
<method name="grab_click_focus">
<return type="void">
</return>
@@ -545,12 +418,6 @@
<description>
</description>
</method>
- <method name="is_clipping_contents">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="minimum_size_changed">
<return type="void">
</return>
@@ -623,22 +490,6 @@
Sets MARGIN_LEFT and MARGIN_TOP at the same time. This is a helper (see [method set_margin]).
</description>
</method>
- <method name="set_clip_contents">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_custom_minimum_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
<method name="set_default_cursor_shape">
<return type="void">
</return>
@@ -682,35 +533,6 @@
Set the focus access mode for the control (FOCUS_NONE, FOCUS_CLICK, FOCUS_ALL). Only one Control can be focused at the same time, and it will receive keyboard signals.
</description>
</method>
- <method name="set_focus_neighbour">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="neighbour" type="NodePath">
- </argument>
- <description>
- Force a neighbour for moving the input focus to. When pressing directional/joypad directions, focus is moved to the next control in that direction. However, the neighbour to move to can be forced with this function.
- </description>
- </method>
- <method name="set_focus_next">
- <return type="void">
- </return>
- <argument index="0" name="next" type="NodePath">
- </argument>
- <description>
- Force the 'focus_next' for moving input focus to. When pressing TAB, focus is moved to the next control in the tree. However, the control to move to can be forced with this function.
- </description>
- </method>
- <method name="set_focus_previous">
- <return type="void">
- </return>
- <argument index="0" name="previous" type="NodePath">
- </argument>
- <description>
- Force the 'focus_previous' for moving input focus to. When pressing Shift+TAB, focus is moved to the previous control in the tree. However, the control to move to can be forced with this function.
- </description>
- </method>
<method name="set_global_position">
<return type="void">
</return>
@@ -720,34 +542,6 @@
Move the Control to a new position, relative to the top-left corner of the [i]window[/i] Control, and without changing current anchor mode. (see [method set_margin]).
</description>
</method>
- <method name="set_h_grow_direction">
- <return type="void">
- </return>
- <argument index="0" name="direction" type="int" enum="Control.GrowDirection">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_h_size_flags">
- <return type="void">
- </return>
- <argument index="0" name="flags" type="int">
- </argument>
- <description>
- Hint for containers, set horizontal positioning flags.
- </description>
- </method>
- <method name="set_margin">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="offset" type="float">
- </argument>
- <description>
- Set a margin offset. Margin can be one of (MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM). Offset value being set depends on the anchor mode.
- </description>
- </method>
<method name="set_margins_preset">
<return type="void">
</return>
@@ -760,32 +554,6 @@
<description>
</description>
</method>
- <method name="set_mouse_filter">
- <return type="void">
- </return>
- <argument index="0" name="filter" type="int" enum="Control.MouseFilter">
- </argument>
- <description>
- Set when the control is ignoring mouse events (even touchpad events send mouse events). (see the MOUSE_FILTER_* constants)
- </description>
- </method>
- <method name="set_pivot_offset">
- <return type="void">
- </return>
- <argument index="0" name="pivot_offset" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_position">
- <return type="void">
- </return>
- <argument index="0" name="position" type="Vector2">
- </argument>
- <description>
- Move the Control to a new position, relative to the top-left corner of the parent Control, changing all margins if needed and without changing current anchor mode. This is a helper (see [method set_margin]).
- </description>
- </method>
<method name="set_rotation">
<return type="void">
</return>
@@ -795,76 +563,6 @@
Set the rotation (in radians).
</description>
</method>
- <method name="set_rotation_degrees">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- Set the rotation (in degrees).
- </description>
- </method>
- <method name="set_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector2">
- </argument>
- <description>
- Changes MARGIN_RIGHT and MARGIN_BOTTOM to fit a given size. This is a helper (see [method set_margin]).
- </description>
- </method>
- <method name="set_stretch_ratio">
- <return type="void">
- </return>
- <argument index="0" name="ratio" type="float">
- </argument>
- <description>
- Hint for containers, set the stretch ratio. This value is relative to other stretch ratio, so if this control has 2 and another has 1, this one will be twice as big.
- </description>
- </method>
- <method name="set_theme">
- <return type="void">
- </return>
- <argument index="0" name="theme" type="Theme">
- </argument>
- <description>
- Overrides the whole [Theme] for this node and all its [code]Control[/code] children.
- </description>
- </method>
- <method name="set_tooltip">
- <return type="void">
- </return>
- <argument index="0" name="tooltip" type="String">
- </argument>
- <description>
- Changes the tooltip text. The tooltip appears when the user's mouse cursor stays idle over this control for a few moments.
- </description>
- </method>
- <method name="set_v_grow_direction">
- <return type="void">
- </return>
- <argument index="0" name="direction" type="int" enum="Control.GrowDirection">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_v_size_flags">
- <return type="void">
- </return>
- <argument index="0" name="flags" type="int">
- </argument>
- <description>
- Hint for containers, set vertical positioning flags.
- </description>
- </method>
<method name="show_modal">
<return type="void">
</return>
@@ -909,6 +607,10 @@
<member name="focus_neighbour_top" type="NodePath" setter="set_focus_neighbour" getter="get_focus_neighbour">
Tells Godot which node it should give keyboard focus to if the user presses Shift+Tab, the top arrow on the keyboard or top on a gamepad. The node must be a [code]Control[/code]. If this property is not set, Godot will give focus to the closest [code]Control[/code] to the bottom of this one.
</member>
+ <member name="focus_next" type="NodePath" setter="set_focus_next" getter="get_focus_next">
+ </member>
+ <member name="focus_previous" type="NodePath" setter="set_focus_previous" getter="get_focus_previous">
+ </member>
<member name="grow_horizontal" type="int" setter="set_h_grow_direction" getter="get_h_grow_direction" enum="Control.GrowDirection">
</member>
<member name="grow_vertical" type="int" setter="set_v_grow_direction" getter="get_v_grow_direction" enum="Control.GrowDirection">
@@ -1014,172 +716,172 @@
</signal>
</signals>
<constants>
- <constant name="FOCUS_NONE" value="0">
+ <constant name="FOCUS_NONE" value="0" enum="FocusMode">
The node cannot grab focus. Use with [member set_focus_mode].
</constant>
- <constant name="FOCUS_CLICK" value="1">
+ <constant name="FOCUS_CLICK" value="1" enum="FocusMode">
The node can only grab focus on mouse clicks. Use with [member set_focus_mode].
</constant>
- <constant name="FOCUS_ALL" value="2">
+ <constant name="FOCUS_ALL" value="2" enum="FocusMode">
The node can grab focus on mouse click or using the arrows and the Tab keys on the keyboard. Use with [member set_focus_mode].
</constant>
- <constant name="NOTIFICATION_RESIZED" value="40" enum="">
+ <constant name="NOTIFICATION_RESIZED" value="40">
Sent when the node changes size. Use [member rect_size] to get the new size.
</constant>
- <constant name="NOTIFICATION_MOUSE_ENTER" value="41" enum="">
+ <constant name="NOTIFICATION_MOUSE_ENTER" value="41">
Sent when the mouse pointer enters the node's [code]Rect[/code] area.
</constant>
- <constant name="NOTIFICATION_MOUSE_EXIT" value="42" enum="">
+ <constant name="NOTIFICATION_MOUSE_EXIT" value="42">
Sent when the mouse pointer exits the node's [code]Rect[/code] area.
</constant>
- <constant name="NOTIFICATION_FOCUS_ENTER" value="43" enum="">
+ <constant name="NOTIFICATION_FOCUS_ENTER" value="43">
Sent when the node grabs focus.
</constant>
- <constant name="NOTIFICATION_FOCUS_EXIT" value="44" enum="">
+ <constant name="NOTIFICATION_FOCUS_EXIT" value="44">
Sent when the node loses focus.
</constant>
- <constant name="NOTIFICATION_THEME_CHANGED" value="45" enum="">
+ <constant name="NOTIFICATION_THEME_CHANGED" value="45">
Sent when the node's [member theme] changes, right before Godot redraws the [code]Control[/code]. Happens when you call one of the [code]add_*_override[/code]
</constant>
- <constant name="NOTIFICATION_MODAL_CLOSE" value="46" enum="">
+ <constant name="NOTIFICATION_MODAL_CLOSE" value="46">
Sent when an open modal dialog closes. See [member show_modal].
</constant>
- <constant name="CURSOR_ARROW" value="0">
+ <constant name="CURSOR_ARROW" value="0" enum="CursorShape">
Show the system's arrow mouse cursor when the user hovers the node. Use with [method set_default_cursor_shape].
</constant>
- <constant name="CURSOR_IBEAM" value="1">
+ <constant name="CURSOR_IBEAM" value="1" enum="CursorShape">
Show the system's I-beam mouse cursor when the user hovers the node. The I-beam pointer has a shape similar to "I". It tells the user they can highlight or insert text.
</constant>
- <constant name="CURSOR_POINTING_HAND" value="2">
+ <constant name="CURSOR_POINTING_HAND" value="2" enum="CursorShape">
Show the system's pointing hand mouse cursor when the user hovers the node.
</constant>
- <constant name="CURSOR_CROSS" value="3">
+ <constant name="CURSOR_CROSS" value="3" enum="CursorShape">
Show the system's cross mouse cursor when the user hovers the node.
</constant>
- <constant name="CURSOR_WAIT" value="4">
+ <constant name="CURSOR_WAIT" value="4" enum="CursorShape">
Show the system's wait mouse cursor, often an hourglass, when the user hovers the node.
</constant>
- <constant name="CURSOR_BUSY" value="5">
+ <constant name="CURSOR_BUSY" value="5" enum="CursorShape">
Show the system's busy mouse cursor when the user hovers the node. Often an hourglass.
</constant>
- <constant name="CURSOR_DRAG" value="6">
+ <constant name="CURSOR_DRAG" value="6" enum="CursorShape">
Show the system's drag mouse cursor, often a closed fist or a cross symbol, when the user hovers the node. It tells the user they're currently dragging an item, like a node in the Scene dock.
</constant>
- <constant name="CURSOR_CAN_DROP" value="7">
+ <constant name="CURSOR_CAN_DROP" value="7" enum="CursorShape">
Show the system's drop mouse cursor when the user hovers the node. It can be an open hand. It tells the user they can drop an item they're currently grabbing, like a node in the Scene dock.
</constant>
- <constant name="CURSOR_FORBIDDEN" value="8">
+ <constant name="CURSOR_FORBIDDEN" value="8" enum="CursorShape">
Show the system's forbidden mouse cursor when the user hovers the node. Often a crossed circle.
</constant>
- <constant name="CURSOR_VSIZE" value="9">
+ <constant name="CURSOR_VSIZE" value="9" enum="CursorShape">
Show the system's vertical resize mouse cursor when the user hovers the node. A double headed vertical arrow. It tells the user they can resize the window or the panel vertically.
</constant>
- <constant name="CURSOR_HSIZE" value="10">
+ <constant name="CURSOR_HSIZE" value="10" enum="CursorShape">
Show the system's horizontal resize mouse cursor when the user hovers the node. A double headed horizontal arrow. It tells the user they can resize the window or the panel horizontally.
</constant>
- <constant name="CURSOR_BDIAGSIZE" value="11">
+ <constant name="CURSOR_BDIAGSIZE" value="11" enum="CursorShape">
Show the system's window resize mouse cursor when the user hovers the node. The cursor is a double headed arrow that goes from the bottom left to the top right. It tells the user they can resize the window or the panel both horizontally and vertically.
</constant>
- <constant name="CURSOR_FDIAGSIZE" value="12">
+ <constant name="CURSOR_FDIAGSIZE" value="12" enum="CursorShape">
Show the system's window resize mouse cursor when the user hovers the node. The cursor is a double headed arrow that goes from the top left to the bottom right, the opposite of [code]CURSOR_BDIAGSIZE[/code]. It tells the user they can resize the window or the panel both horizontally and vertically.
</constant>
- <constant name="CURSOR_MOVE" value="13">
+ <constant name="CURSOR_MOVE" value="13" enum="CursorShape">
Show the system's move mouse cursor when the user hovers the node. It shows 2 double-headed arrows at a 90 degree angle. It tells the user they can move a UI element freely.
</constant>
- <constant name="CURSOR_VSPLIT" value="14">
+ <constant name="CURSOR_VSPLIT" value="14" enum="CursorShape">
Show the system's vertical split mouse cursor when the user hovers the node. On Windows, it's the same as [code]CURSOR_VSIZE[/code].
</constant>
- <constant name="CURSOR_HSPLIT" value="15">
+ <constant name="CURSOR_HSPLIT" value="15" enum="CursorShape">
Show the system's horizontal split mouse cursor when the user hovers the node. On Windows, it's the same as [code]CURSOR_HSIZE[/code].
</constant>
- <constant name="CURSOR_HELP" value="16">
+ <constant name="CURSOR_HELP" value="16" enum="CursorShape">
Show the system's help mouse cursor when the user hovers the node, a question mark.
</constant>
- <constant name="PRESET_TOP_LEFT" value="0">
+ <constant name="PRESET_TOP_LEFT" value="0" enum="LayoutPreset">
Snap all 4 anchors to the top-left of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_TOP_RIGHT" value="1">
+ <constant name="PRESET_TOP_RIGHT" value="1" enum="LayoutPreset">
Snap all 4 anchors to the top-right of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_BOTTOM_LEFT" value="2">
+ <constant name="PRESET_BOTTOM_LEFT" value="2" enum="LayoutPreset">
Snap all 4 anchors to the bottom-left of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_BOTTOM_RIGHT" value="3">
+ <constant name="PRESET_BOTTOM_RIGHT" value="3" enum="LayoutPreset">
Snap all 4 anchors to the bottom-right of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_CENTER_LEFT" value="4">
+ <constant name="PRESET_CENTER_LEFT" value="4" enum="LayoutPreset">
Snap all 4 anchors to the center of the left edge of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_CENTER_TOP" value="5">
+ <constant name="PRESET_CENTER_TOP" value="5" enum="LayoutPreset">
Snap all 4 anchors to the center of the top edge of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_CENTER_RIGHT" value="6">
+ <constant name="PRESET_CENTER_RIGHT" value="6" enum="LayoutPreset">
Snap all 4 anchors to the center of the right edge of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_CENTER_BOTTOM" value="7">
+ <constant name="PRESET_CENTER_BOTTOM" value="7" enum="LayoutPreset">
Snap all 4 anchors to the center of the bottom edge of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_CENTER" value="8">
+ <constant name="PRESET_CENTER" value="8" enum="LayoutPreset">
Snap all 4 anchors to the center of the parent container's bounds. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_LEFT_WIDE" value="9">
+ <constant name="PRESET_LEFT_WIDE" value="9" enum="LayoutPreset">
Snap all 4 anchors to the left edge of the parent container. The left margin becomes relative to the left edge and the top margin relative to the top left corner of the node's parent. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_TOP_WIDE" value="10">
+ <constant name="PRESET_TOP_WIDE" value="10" enum="LayoutPreset">
Snap all 4 anchors to the top edge of the parent container. The left margin becomes relative to the top left corner, the top margin relative to the top edge, and the right margin relative to the top right corner of the node's parent. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_RIGHT_WIDE" value="11">
+ <constant name="PRESET_RIGHT_WIDE" value="11" enum="LayoutPreset">
Snap all 4 anchors to the right edge of the parent container. The right margin becomes relative to the right edge and the top margin relative to the top right corner of the node's parent. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_BOTTOM_WIDE" value="12">
+ <constant name="PRESET_BOTTOM_WIDE" value="12" enum="LayoutPreset">
Snap all 4 anchors to the bottom edge of the parent container. The left margin becomes relative to the bottom left corner, the bottom margin relative to the bottom edge, and the right margin relative to the bottom right corner of the node's parent. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_VCENTER_WIDE" value="13">
+ <constant name="PRESET_VCENTER_WIDE" value="13" enum="LayoutPreset">
Snap all 4 anchors to a vertical line that cuts the parent container in half. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_HCENTER_WIDE" value="14">
+ <constant name="PRESET_HCENTER_WIDE" value="14" enum="LayoutPreset">
Snap all 4 anchors to a horizontal line that cuts the parent container in half. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_WIDE" value="15">
+ <constant name="PRESET_WIDE" value="15" enum="LayoutPreset">
Snap all 4 anchors to the respective corners of the parent container. Set all 4 margins to 0 after you applied this preset and the [code]Control[/code] will fit its parent container. Use with [method set_anchors_preset].
</constant>
- <constant name="PRESET_MODE_MINSIZE" value="0">
+ <constant name="PRESET_MODE_MINSIZE" value="0" enum="LayoutPresetMode">
</constant>
- <constant name="PRESET_MODE_KEEP_WIDTH" value="1">
+ <constant name="PRESET_MODE_KEEP_WIDTH" value="1" enum="LayoutPresetMode">
</constant>
- <constant name="PRESET_MODE_KEEP_HEIGHT" value="2">
+ <constant name="PRESET_MODE_KEEP_HEIGHT" value="2" enum="LayoutPresetMode">
</constant>
- <constant name="PRESET_MODE_KEEP_SIZE" value="3">
+ <constant name="PRESET_MODE_KEEP_SIZE" value="3" enum="LayoutPresetMode">
</constant>
- <constant name="SIZE_FILL" value="1">
+ <constant name="SIZE_FILL" value="1" enum="SizeFlags">
Tells the parent [Container] to expand the bounds of this node to fill all the available space without pushing any other node. Use with [member size_flags_horizontal] and [member size_flags_vertical].
</constant>
- <constant name="SIZE_EXPAND" value="2">
+ <constant name="SIZE_EXPAND" value="2" enum="SizeFlags">
Tells the parent [Container] to let this node take all the available space on the axis you flag. If multiple neighboring nodes are set to expand, they'll share the space based on their stretch ratio. See [member size_flags_stretch_ratio]. Use with [member size_flags_horizontal] and [member size_flags_vertical].
</constant>
- <constant name="SIZE_EXPAND_FILL" value="3">
+ <constant name="SIZE_EXPAND_FILL" value="3" enum="SizeFlags">
Sets the node's size flags to both fill and expand. See the 2 constants above for more information.
</constant>
- <constant name="SIZE_SHRINK_CENTER" value="4">
+ <constant name="SIZE_SHRINK_CENTER" value="4" enum="SizeFlags">
Tells the parent [Container] to center the node in itself. It centers the [code]Control[/code] based on its bounding box, so it doesn't work with the fill or expand size flags. Use with [member size_flags_horizontal] and [member size_flags_vertical].
</constant>
- <constant name="SIZE_SHRINK_END" value="8">
+ <constant name="SIZE_SHRINK_END" value="8" enum="SizeFlags">
Tells the parent [Container] to align the node with its end, either the bottom or the right edge. It doesn't work with the fill or expand size flags. Use with [member size_flags_horizontal] and [member size_flags_vertical].
</constant>
- <constant name="MOUSE_FILTER_STOP" value="0">
+ <constant name="MOUSE_FILTER_STOP" value="0" enum="MouseFilter">
</constant>
- <constant name="MOUSE_FILTER_PASS" value="1">
+ <constant name="MOUSE_FILTER_PASS" value="1" enum="MouseFilter">
</constant>
- <constant name="MOUSE_FILTER_IGNORE" value="2">
+ <constant name="MOUSE_FILTER_IGNORE" value="2" enum="MouseFilter">
</constant>
- <constant name="GROW_DIRECTION_BEGIN" value="0">
+ <constant name="GROW_DIRECTION_BEGIN" value="0" enum="GrowDirection">
</constant>
- <constant name="GROW_DIRECTION_END" value="1">
+ <constant name="GROW_DIRECTION_END" value="1" enum="GrowDirection">
</constant>
- <constant name="ANCHOR_BEGIN" value="0">
+ <constant name="ANCHOR_BEGIN" value="0" enum="Anchor">
Snaps one of the 4 anchor's sides to the origin of the node's [code]Rect[/code], in the top left. Use it with one of the [code]anchor_*[/code] member variables, like [member anchor_left]. To change all 4 anchors at once, use [method set_anchors_preset].
</constant>
- <constant name="ANCHOR_END" value="1">
+ <constant name="ANCHOR_END" value="1" enum="Anchor">
Snaps one of the 4 anchor's sides to the end of the node's [code]Rect[/code], in the bottom right. Use it with one of the [code]anchor_*[/code] member variables, like [member anchor_left]. To change all 4 anchors at once, use [method set_anchors_preset].
</constant>
</constants>
diff --git a/doc/classes/ConvexPolygonShape.xml b/doc/classes/ConvexPolygonShape.xml
index 0ea140148c..5ed57a5c05 100644
--- a/doc/classes/ConvexPolygonShape.xml
+++ b/doc/classes/ConvexPolygonShape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ConvexPolygonShape" inherits="Shape" category="Core" version="3.0-alpha">
+<class name="ConvexPolygonShape" inherits="Shape" category="Core" version="3.0-beta">
<brief_description>
Convex polygon shape for 3D physics.
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_points" qualifiers="const">
- <return type="PoolVector3Array">
- </return>
- <description>
- </description>
- </method>
- <method name="set_points">
- <return type="void">
- </return>
- <argument index="0" name="points" type="PoolVector3Array">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="points" type="PoolVector3Array" setter="set_points" getter="get_points">
diff --git a/doc/classes/ConvexPolygonShape2D.xml b/doc/classes/ConvexPolygonShape2D.xml
index 40507c6a6b..a670ddc9cd 100644
--- a/doc/classes/ConvexPolygonShape2D.xml
+++ b/doc/classes/ConvexPolygonShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ConvexPolygonShape2D" inherits="Shape2D" category="Core" version="3.0-alpha">
+<class name="ConvexPolygonShape2D" inherits="Shape2D" category="Core" version="3.0-beta">
<brief_description>
Convex Polygon Shape for 2D physics.
</brief_description>
@@ -12,13 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_points" qualifiers="const">
- <return type="PoolVector2Array">
- </return>
- <description>
- Returns a list of points in either clockwise or counter clockwise order, forming a convex polygon.
- </description>
- </method>
<method name="set_point_cloud">
<return type="void">
</return>
@@ -28,15 +21,6 @@
Currently, this method does nothing.
</description>
</method>
- <method name="set_points">
- <return type="void">
- </return>
- <argument index="0" name="points" type="PoolVector2Array">
- </argument>
- <description>
- Sets a list of points in either clockwise or counter clockwise order, forming a convex polygon.
- </description>
- </method>
</methods>
<members>
<member name="points" type="PoolVector2Array" setter="set_points" getter="get_points">
diff --git a/doc/classes/CubeMap.xml b/doc/classes/CubeMap.xml
index 9b0837306e..7444fb0258 100644
--- a/doc/classes/CubeMap.xml
+++ b/doc/classes/CubeMap.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CubeMap" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="CubeMap" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
A CubeMap is a 6 sided 3D texture.
</brief_description>
<description>
- A CubeMap is a 6 sided 3D texture typically used for faking reflections. It can be used to make an object look as if it's reflecting its surroundings. This usually delivers much better performance than other reflection methods.
+ A 6-sided 3D texture typically used for faking reflections. It can be used to make an object look as if it's reflecting its surroundings. This usually delivers much better performance than other reflection methods.
</description>
<tutorials>
</tutorials>
@@ -15,19 +15,14 @@
<return type="int">
</return>
<description>
+ Returns the render flags for the [code]CubeMap[/code]. See the [code]FLAG_*[/code] constants for details.
</description>
</method>
<method name="get_height" qualifiers="const">
<return type="int">
</return>
<description>
- Returns the CubeMap's height.
- </description>
- </method>
- <method name="get_lossy_storage_quality" qualifiers="const">
- <return type="float">
- </return>
- <description>
+ Returns the [code]CubeMap[/code]'s height.
</description>
</method>
<method name="get_side" qualifiers="const">
@@ -36,20 +31,14 @@
<argument index="0" name="side" type="int" enum="CubeMap.Side">
</argument>
<description>
- Returns an [Image] for a side of the CubeMap using one of the [code]SIDE_*[/code] constants or an integer 0-5.
- </description>
- </method>
- <method name="get_storage" qualifiers="const">
- <return type="int" enum="CubeMap.Storage">
- </return>
- <description>
+ Returns an [Image] for a side of the [code]CubeMap[/code] using one of the [code]SIDE_*[/code] constants or an integer 0-5.
</description>
</method>
<method name="get_width" qualifiers="const">
<return type="int">
</return>
<description>
- Returns the CubeMap's width.
+ Returns the [code]CubeMap[/code]'s width.
</description>
</method>
<method name="set_flags">
@@ -58,14 +47,7 @@
<argument index="0" name="flags" type="int">
</argument>
<description>
- </description>
- </method>
- <method name="set_lossy_storage_quality">
- <return type="void">
- </return>
- <argument index="0" name="quality" type="float">
- </argument>
- <description>
+ Returns the render flags for the [code]CubeMap[/code]. See the [code]FLAG_*[/code] constants for details.
</description>
</method>
<method name="set_side">
@@ -76,52 +58,57 @@
<argument index="1" name="image" type="Image">
</argument>
<description>
- Sets an [Image] for a side of the CubeMap using one of the [code]SIDE_*[/code] constants or an integer 0-5.
- </description>
- </method>
- <method name="set_storage">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="CubeMap.Storage">
- </argument>
- <description>
+ Sets an [Image] for a side of the [code]CubeMap[/code] using one of the [code]SIDE_*[/code] constants or an integer 0-5.
</description>
</method>
</methods>
<members>
<member name="lossy_storage_quality" type="float" setter="set_lossy_storage_quality" getter="get_lossy_storage_quality">
- The lossy storage quality of the CubeMap if the storage mode is set to STORAGE_COMPRESS_LOSSY.
+ The lossy storage quality of the [code]CubeMap[/code] if the storage mode is set to STORAGE_COMPRESS_LOSSY.
</member>
- <member name="storage_mode" type="int" setter="set_storage" getter="get_storage" enum="CubeMap.Storage">
- The CubeMap's storage mode. See [code]STORAGE_*[/code] constants.
+ <member name="storage_mode" type="CubeMap.Storage" setter="set_storage" getter="get_storage" enum="CubeMap.Storage">
+ The [code]CubeMap[/code]'s storage mode. See [code]STORAGE_*[/code] constants.
</member>
</members>
<constants>
- <constant name="STORAGE_RAW" value="0">
+ <constant name="STORAGE_RAW" value="0" enum="Storage">
+ Store the [code]CubeMap[/code] without any compression.
</constant>
- <constant name="STORAGE_COMPRESS_LOSSY" value="1">
+ <constant name="STORAGE_COMPRESS_LOSSY" value="1" enum="Storage">
+ Store the [code]CubeMap[/code] with strong compression that reduces image quality.
</constant>
- <constant name="STORAGE_COMPRESS_LOSSLESS" value="2">
+ <constant name="STORAGE_COMPRESS_LOSSLESS" value="2" enum="Storage">
+ Store the [code]CubeMap[/code] with moderate compression that doesn't reduce image quality.
</constant>
- <constant name="SIDE_LEFT" value="0">
+ <constant name="SIDE_LEFT" value="0" enum="Side">
+ Identifier for the left face of the [code]CubeMap[/code].
</constant>
- <constant name="SIDE_RIGHT" value="1">
+ <constant name="SIDE_RIGHT" value="1" enum="Side">
+ Identifier for the right face of the [code]CubeMap[/code].
</constant>
- <constant name="SIDE_BOTTOM" value="2">
+ <constant name="SIDE_BOTTOM" value="2" enum="Side">
+ Identifier for the bottom face of the [code]CubeMap[/code].
</constant>
- <constant name="SIDE_TOP" value="3">
+ <constant name="SIDE_TOP" value="3" enum="Side">
+ Identifier for the top face of the [code]CubeMap[/code].
</constant>
- <constant name="SIDE_FRONT" value="4">
+ <constant name="SIDE_FRONT" value="4" enum="Side">
+ Identifier for the front face of the [code]CubeMap[/code].
</constant>
- <constant name="SIDE_BACK" value="5">
+ <constant name="SIDE_BACK" value="5" enum="Side">
+ Identifier for the back face of the [code]CubeMap[/code].
</constant>
- <constant name="FLAG_MIPMAPS" value="1">
+ <constant name="FLAG_MIPMAPS" value="1" enum="Flags">
+ Generate mipmaps, to enable smooth zooming out of the texture.
</constant>
- <constant name="FLAG_REPEAT" value="2">
+ <constant name="FLAG_REPEAT" value="2" enum="Flags">
+ Repeat (instead of clamp to edge).
</constant>
- <constant name="FLAG_FILTER" value="4">
+ <constant name="FLAG_FILTER" value="4" enum="Flags">
+ Turn on magnifying filter, to enable smooth zooming in of the texture.
</constant>
- <constant name="FLAGS_DEFAULT" value="7">
+ <constant name="FLAGS_DEFAULT" value="7" enum="Flags">
+ Default flags. Generate mipmaps, repeat, and filter are enabled.
</constant>
</constants>
</class>
diff --git a/doc/classes/CubeMesh.xml b/doc/classes/CubeMesh.xml
index 4a8ad104b7..56ca64e10a 100644
--- a/doc/classes/CubeMesh.xml
+++ b/doc/classes/CubeMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CubeMesh" inherits="PrimitiveMesh" category="Core" version="3.0-alpha">
+<class name="CubeMesh" inherits="PrimitiveMesh" category="Core" version="3.0-beta">
<brief_description>
Generate an axis-aligned cuboid [PrimitiveMesh].
</brief_description>
@@ -11,62 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_size" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdivide_depth" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdivide_height" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdivide_width" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdivide_depth">
- <return type="void">
- </return>
- <argument index="0" name="divisions" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdivide_height">
- <return type="void">
- </return>
- <argument index="0" name="divisions" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdivide_width">
- <return type="void">
- </return>
- <argument index="0" name="subdivide" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="size" type="Vector3" setter="set_size" getter="get_size">
diff --git a/doc/classes/Curve.xml b/doc/classes/Curve.xml
index 3741f51fad..3e1158ca3b 100644
--- a/doc/classes/Curve.xml
+++ b/doc/classes/Curve.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Curve" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Curve" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -43,24 +43,6 @@
<description>
</description>
</method>
- <method name="get_bake_resolution" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_max_value" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_min_value" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_point_left_mode" qualifiers="const">
<return type="int" enum="Curve.TangentMode">
</return>
@@ -125,30 +107,6 @@
<description>
</description>
</method>
- <method name="set_bake_resolution">
- <return type="void">
- </return>
- <argument index="0" name="resolution" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_max_value">
- <return type="void">
- </return>
- <argument index="0" name="max" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_min_value">
- <return type="void">
- </return>
- <argument index="0" name="min" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="set_point_left_mode">
<return type="void">
</return>
@@ -211,8 +169,6 @@
</method>
</methods>
<members>
- <member name="_data" type="Array" setter="_set_data" getter="_get_data">
- </member>
<member name="bake_resolution" type="int" setter="set_bake_resolution" getter="get_bake_resolution">
</member>
<member name="max_value" type="float" setter="set_max_value" getter="get_max_value">
@@ -227,11 +183,11 @@
</signal>
</signals>
<constants>
- <constant name="TANGENT_FREE" value="0">
+ <constant name="TANGENT_FREE" value="0" enum="TangentMode">
</constant>
- <constant name="TANGENT_LINEAR" value="1">
+ <constant name="TANGENT_LINEAR" value="1" enum="TangentMode">
</constant>
- <constant name="TANGENT_MODE_COUNT" value="2">
+ <constant name="TANGENT_MODE_COUNT" value="2" enum="TangentMode">
</constant>
</constants>
</class>
diff --git a/doc/classes/Curve2D.xml b/doc/classes/Curve2D.xml
index 0d9dfad643..8a857799e6 100644
--- a/doc/classes/Curve2D.xml
+++ b/doc/classes/Curve2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Curve2D" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Curve2D" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Describes a Bezier curve in 2D space.
</brief_description>
@@ -35,13 +35,6 @@
Removes all points from the curve.
</description>
</method>
- <method name="get_bake_interval" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the distance between two adjacent cached points.
- </description>
- </method>
<method name="get_baked_length" qualifiers="const">
<return type="float">
</return>
@@ -133,15 +126,6 @@
Deletes the point "idx" from the curve. Sends an error to the console if "idx" is out of bounds.
</description>
</method>
- <method name="set_bake_interval">
- <return type="void">
- </return>
- <argument index="0" name="distance" type="float">
- </argument>
- <description>
- Sets the distance in pixels between two adjacent cached points. Changing it forces the cache to be recomputed the next time a xxx_baked_xxx function is called. The less distance, the more points the cache will have, and the more memory it will consume, so use with care.
- </description>
- </method>
<method name="set_point_in">
<return type="void">
</return>
@@ -191,9 +175,6 @@
</method>
</methods>
<members>
- <member name="_data" type="Dictionary" setter="_set_data" getter="_get_data">
- The points describing the curve. Value is a [Dictionary] with the keys [code]in[/code], [code]out[/code], and [code]pos[/code]. The key pos is the position of a vertex of the curve, the key in is the vector from that position to the control point before this vertex, the key out is the vector from that position to the controlpoint after this vertex.
- </member>
<member name="bake_interval" type="float" setter="set_bake_interval" getter="get_bake_interval">
The distance in pixels between two adjacent cached points. Changing it forces the cache to be recomputed the next time the [method get_baked_points] or [method get_baked_length] function is called. The smaller the distance, the more points in the cache and the more memory it will consume, so use with care.
</member>
diff --git a/doc/classes/Curve3D.xml b/doc/classes/Curve3D.xml
index 35f8db0177..e30ae85617 100644
--- a/doc/classes/Curve3D.xml
+++ b/doc/classes/Curve3D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Curve3D" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Curve3D" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Describes a Bezier curve in 3D space.
</brief_description>
@@ -34,13 +34,6 @@
<description>
</description>
</method>
- <method name="get_bake_interval" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the distance between two adjacent cached points.
- </description>
- </method>
<method name="get_baked_length" qualifiers="const">
<return type="float">
</return>
@@ -148,15 +141,6 @@
Deletes the point "idx" from the curve. Sends an error to the console if "idx" is out of bounds.
</description>
</method>
- <method name="set_bake_interval">
- <return type="void">
- </return>
- <argument index="0" name="distance" type="float">
- </argument>
- <description>
- Sets the distance in 3D units between two adjacent cached points. Changing it forces the cache to be recomputed the next time a xxx_baked_xxx function is called. The less distance, the more points the cache will have, and the more memory it will consume, so use with care.
- </description>
- </method>
<method name="set_point_in">
<return type="void">
</return>
@@ -218,8 +202,6 @@
</method>
</methods>
<members>
- <member name="_data" type="Dictionary" setter="_set_data" getter="_get_data">
- </member>
<member name="bake_interval" type="float" setter="set_bake_interval" getter="get_bake_interval">
</member>
</members>
diff --git a/doc/classes/CurveTexture.xml b/doc/classes/CurveTexture.xml
index 61a6a2486f..f62da8a135 100644
--- a/doc/classes/CurveTexture.xml
+++ b/doc/classes/CurveTexture.xml
@@ -1,41 +1,23 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CurveTexture" inherits="Texture" category="Core" version="3.0-alpha">
+<class name="CurveTexture" inherits="Texture" category="Core" version="3.0-beta">
<brief_description>
+ A texture that shows a curve.
</brief_description>
<description>
+ Renders a given [Curve] provided to it. Simplifies the task of drawing curves and/or saving them as image files.
</description>
<tutorials>
</tutorials>
<demos>
</demos>
<methods>
- <method name="get_curve" qualifiers="const">
- <return type="Curve">
- </return>
- <description>
- </description>
- </method>
- <method name="set_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="Curve">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_width">
- <return type="void">
- </return>
- <argument index="0" name="width" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="curve" type="Curve" setter="set_curve" getter="get_curve">
+ The [code]curve[/code] rendered onto the texture.
</member>
<member name="width" type="int" setter="set_width" getter="get_width">
+ The width of the texture.
</member>
</members>
<constants>
diff --git a/doc/classes/CylinderMesh.xml b/doc/classes/CylinderMesh.xml
index 8398b52ee0..57c0027c4c 100644
--- a/doc/classes/CylinderMesh.xml
+++ b/doc/classes/CylinderMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CylinderMesh" inherits="PrimitiveMesh" category="Core" version="3.0-alpha">
+<class name="CylinderMesh" inherits="PrimitiveMesh" category="Core" version="3.0-beta">
<brief_description>
Class representing a cylindrical [PrimitiveMesh].
</brief_description>
@@ -11,76 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_bottom_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_height" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_radial_segments" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_rings" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_top_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_bottom_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_height">
- <return type="void">
- </return>
- <argument index="0" name="height" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_radial_segments">
- <return type="void">
- </return>
- <argument index="0" name="segments" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_rings">
- <return type="void">
- </return>
- <argument index="0" name="rings" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_top_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="bottom_radius" type="float" setter="set_bottom_radius" getter="get_bottom_radius">
diff --git a/doc/classes/DampedSpringJoint2D.xml b/doc/classes/DampedSpringJoint2D.xml
index da7147933d..a49f03eb07 100644
--- a/doc/classes/DampedSpringJoint2D.xml
+++ b/doc/classes/DampedSpringJoint2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="DampedSpringJoint2D" inherits="Joint2D" category="Core" version="3.0-alpha">
+<class name="DampedSpringJoint2D" inherits="Joint2D" category="Core" version="3.0-beta">
<brief_description>
Damped spring constraint for 2D physics.
</brief_description>
@@ -11,70 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_damping" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the damping ratio of the spring joint. A value of 0 indicates an undamped spring, while 1 causes the system to reach equilibrium as fast as possible (critical damping).
- </description>
- </method>
- <method name="get_length" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the maximum length of the spring joint.
- </description>
- </method>
- <method name="get_rest_length" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the resting length of the spring joint. The joint will always try to go to back this length when pulled apart.
- </description>
- </method>
- <method name="get_stiffness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the stiffness of the spring joint. The joint applies a force equal to the stiffness times the distance from its resting length.
- </description>
- </method>
- <method name="set_damping">
- <return type="void">
- </return>
- <argument index="0" name="damping" type="float">
- </argument>
- <description>
- Set the damping ratio of the spring joint. A value of 0 indicates an undamped spring, while 1 causes the system to reach equilibrium as fast as possible (critical damping).
- </description>
- </method>
- <method name="set_length">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- Set the maximum length of the spring joint.
- </description>
- </method>
- <method name="set_rest_length">
- <return type="void">
- </return>
- <argument index="0" name="rest_length" type="float">
- </argument>
- <description>
- Set the resting length of the spring joint. The joint will always try to go to back this length when pulled apart.
- </description>
- </method>
- <method name="set_stiffness">
- <return type="void">
- </return>
- <argument index="0" name="stiffness" type="float">
- </argument>
- <description>
- Set the stiffness of the spring joint. The joint applies a force equal to the stiffness times the distance from its resting length.
- </description>
- </method>
</methods>
<members>
<member name="damping" type="float" setter="set_damping" getter="get_damping">
diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml
index 5664b2079b..40b60f00cf 100644
--- a/doc/classes/Dictionary.xml
+++ b/doc/classes/Dictionary.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Dictionary" category="Built-In Types" version="3.0-alpha">
+<class name="Dictionary" category="Built-In Types" version="3.0-beta">
<brief_description>
Dictionary type.
</brief_description>
diff --git a/doc/classes/DirectionalLight.xml b/doc/classes/DirectionalLight.xml
index f0cc007339..287c98e715 100644
--- a/doc/classes/DirectionalLight.xml
+++ b/doc/classes/DirectionalLight.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="DirectionalLight" inherits="Light" category="Core" version="3.0-alpha">
+<class name="DirectionalLight" inherits="Light" category="Core" version="3.0-beta">
<brief_description>
Directional Light, such as the Sun or the Moon.
</brief_description>
@@ -11,48 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_shadow_depth_range" qualifiers="const">
- <return type="int" enum="DirectionalLight.ShadowDepthRange">
- </return>
- <description>
- </description>
- </method>
- <method name="get_shadow_mode" qualifiers="const">
- <return type="int" enum="DirectionalLight.ShadowMode">
- </return>
- <description>
- </description>
- </method>
- <method name="is_blend_splits_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_blend_splits">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_depth_range">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="DirectionalLight.ShadowDepthRange">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="DirectionalLight.ShadowMode">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="directional_shadow_bias_split_scale" type="float" setter="set_param" getter="get_param">
@@ -75,15 +33,15 @@
</member>
</members>
<constants>
- <constant name="SHADOW_ORTHOGONAL" value="0">
+ <constant name="SHADOW_ORTHOGONAL" value="0" enum="ShadowMode">
</constant>
- <constant name="SHADOW_PARALLEL_2_SPLITS" value="1">
+ <constant name="SHADOW_PARALLEL_2_SPLITS" value="1" enum="ShadowMode">
</constant>
- <constant name="SHADOW_PARALLEL_4_SPLITS" value="2">
+ <constant name="SHADOW_PARALLEL_4_SPLITS" value="2" enum="ShadowMode">
</constant>
- <constant name="SHADOW_DEPTH_RANGE_STABLE" value="0">
+ <constant name="SHADOW_DEPTH_RANGE_STABLE" value="0" enum="ShadowDepthRange">
</constant>
- <constant name="SHADOW_DEPTH_RANGE_OPTIMIZED" value="1">
+ <constant name="SHADOW_DEPTH_RANGE_OPTIMIZED" value="1" enum="ShadowDepthRange">
</constant>
</constants>
</class>
diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml
index b11e0629cd..c87d1ef006 100644
--- a/doc/classes/Directory.xml
+++ b/doc/classes/Directory.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Directory" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Directory" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Type used to handle the filesystem.
</brief_description>
diff --git a/doc/classes/DynamicFont.xml b/doc/classes/DynamicFont.xml
index 9149e14a62..eae7a1b02b 100644
--- a/doc/classes/DynamicFont.xml
+++ b/doc/classes/DynamicFont.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="DynamicFont" inherits="Font" category="Core" version="3.0-alpha">
+<class name="DynamicFont" inherits="Font" category="Core" version="3.0-beta">
<brief_description>
DynamicFont renders vector font files at runtime.
</brief_description>
@@ -36,42 +36,6 @@
Returns the number of fallback fonts.
</description>
</method>
- <method name="get_font_data" qualifiers="const">
- <return type="DynamicFontData">
- </return>
- <description>
- </description>
- </method>
- <method name="get_size" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the font size in pixels.
- </description>
- </method>
- <method name="get_spacing" qualifiers="const">
- <return type="int">
- </return>
- <argument index="0" name="type" type="int">
- </argument>
- <description>
- Returns the given type of spacing in pixels. See [code]SPACING_*[/code] constants.
- </description>
- </method>
- <method name="get_use_filter" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns [code]true[/code] if filtering is used.
- </description>
- </method>
- <method name="get_use_mipmaps" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns [code]true[/code] if mipmapping is used.
- </description>
- </method>
<method name="remove_fallback">
<return type="void">
</return>
@@ -92,53 +56,6 @@
Sets the fallback font at index [code]idx[/code].
</description>
</method>
- <method name="set_font_data">
- <return type="void">
- </return>
- <argument index="0" name="data" type="DynamicFontData">
- </argument>
- <description>
- Sets the [DynamicFontData].
- </description>
- </method>
- <method name="set_size">
- <return type="void">
- </return>
- <argument index="0" name="data" type="int">
- </argument>
- <description>
- Sets the font size.
- </description>
- </method>
- <method name="set_spacing">
- <return type="void">
- </return>
- <argument index="0" name="type" type="int">
- </argument>
- <argument index="1" name="value" type="int">
- </argument>
- <description>
- Sets the spacing of the given type. See [code]SPACING_*[/code] constants.
- </description>
- </method>
- <method name="set_use_filter">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set to [code]true[/code] to use filtering.
- </description>
- </method>
- <method name="set_use_mipmaps">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set to [code]true[/code] to use mipmapping.
- </description>
- </method>
</methods>
<members>
<member name="extra_spacing_bottom" type="int" setter="set_spacing" getter="get_spacing">
@@ -167,16 +84,16 @@
</member>
</members>
<constants>
- <constant name="SPACING_TOP" value="0">
+ <constant name="SPACING_TOP" value="0" enum="SpacingType">
Spacing at the top.
</constant>
- <constant name="SPACING_BOTTOM" value="1">
+ <constant name="SPACING_BOTTOM" value="1" enum="SpacingType">
Spacing at the bottom.
</constant>
- <constant name="SPACING_CHAR" value="2">
+ <constant name="SPACING_CHAR" value="2" enum="SpacingType">
Character spacing.
</constant>
- <constant name="SPACING_SPACE" value="3">
+ <constant name="SPACING_SPACE" value="3" enum="SpacingType">
Space spacing.
</constant>
</constants>
diff --git a/doc/classes/DynamicFontData.xml b/doc/classes/DynamicFontData.xml
index 26529006cb..360f0cb0d8 100644
--- a/doc/classes/DynamicFontData.xml
+++ b/doc/classes/DynamicFontData.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="DynamicFontData" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="DynamicFontData" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Used with [DynamicFont] to describe the location of a font file.
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_font_path" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Returns the font path.
- </description>
- </method>
- <method name="set_font_path">
- <return type="void">
- </return>
- <argument index="0" name="path" type="String">
- </argument>
- <description>
- Sets the font path.
- </description>
- </method>
</methods>
<members>
<member name="font_path" type="String" setter="set_font_path" getter="get_font_path">
diff --git a/doc/classes/EditorExportPlugin.xml b/doc/classes/EditorExportPlugin.xml
index a3bab32476..ef430d31be 100644
--- a/doc/classes/EditorExportPlugin.xml
+++ b/doc/classes/EditorExportPlugin.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorExportPlugin" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="EditorExportPlugin" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -14,6 +14,12 @@
</return>
<argument index="0" name="features" type="PoolStringArray">
</argument>
+ <argument index="1" name="is_debug" type="bool">
+ </argument>
+ <argument index="2" name="path" type="String">
+ </argument>
+ <argument index="3" name="flags" type="int">
+ </argument>
<description>
</description>
</method>
@@ -41,11 +47,53 @@
<description>
</description>
</method>
+ <method name="add_ios_bundle_file">
+ <return type="void">
+ </return>
+ <argument index="0" name="path" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="add_ios_cpp_code">
+ <return type="void">
+ </return>
+ <argument index="0" name="code" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="add_ios_framework">
+ <return type="void">
+ </return>
+ <argument index="0" name="path" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="add_ios_linker_flags">
+ <return type="void">
+ </return>
+ <argument index="0" name="flags" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="add_ios_plist_content">
+ <return type="void">
+ </return>
+ <argument index="0" name="plist_content" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="add_shared_object">
<return type="void">
</return>
<argument index="0" name="path" type="String">
</argument>
+ <argument index="1" name="tags" type="PoolStringArray">
+ </argument>
<description>
</description>
</method>
diff --git a/doc/classes/EditorFileDialog.xml b/doc/classes/EditorFileDialog.xml
index f29d9fd4dd..1a1c382e59 100644
--- a/doc/classes/EditorFileDialog.xml
+++ b/doc/classes/EditorFileDialog.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorFileDialog" inherits="ConfirmationDialog" category="Core" version="3.0-alpha">
+<class name="EditorFileDialog" inherits="ConfirmationDialog" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -15,179 +15,111 @@
<argument index="0" name="filter" type="String">
</argument>
<description>
+ Adds a comma-delimited file extension filter option to the [code]EditorFileDialog[/code] with an optional semi-colon-delimited label.
+ Example: "*.tscn, *.scn; Scenes", results in filter text "Scenes (*.tscn, *.scn)".
</description>
</method>
<method name="clear_filters">
<return type="void">
</return>
<description>
- </description>
- </method>
- <method name="get_access" qualifiers="const">
- <return type="int" enum="EditorFileDialog.Access">
- </return>
- <description>
- </description>
- </method>
- <method name="get_current_dir" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_current_file" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_current_path" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_display_mode" qualifiers="const">
- <return type="int" enum="EditorFileDialog.DisplayMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_mode" qualifiers="const">
- <return type="int" enum="EditorFileDialog.Mode">
- </return>
- <description>
+ Removes all filters except for "All Files (*)".
</description>
</method>
<method name="get_vbox">
<return type="VBoxContainer">
</return>
<description>
+ Returns the [code]VBoxContainer[/code] used to display the file system.
</description>
</method>
<method name="invalidate">
<return type="void">
</return>
<description>
- </description>
- </method>
- <method name="is_overwrite_warning_disabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_showing_hidden_files" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_access">
- <return type="void">
- </return>
- <argument index="0" name="access" type="int" enum="EditorFileDialog.Access">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_current_dir">
- <return type="void">
- </return>
- <argument index="0" name="dir" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_current_file">
- <return type="void">
- </return>
- <argument index="0" name="file" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_current_path">
- <return type="void">
- </return>
- <argument index="0" name="path" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_disable_overwrite_warning">
- <return type="void">
- </return>
- <argument index="0" name="disable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_display_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="EditorFileDialog.DisplayMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="EditorFileDialog.Mode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_show_hidden_files">
- <return type="void">
- </return>
- <argument index="0" name="show" type="bool">
- </argument>
- <description>
+ Notify the [code]EditorFileDialog[/code] that its view of the data is no longer accurate. Updates the view contents on next view update.
</description>
</method>
</methods>
+ <members>
+ <member name="access" type="int" setter="set_access" getter="get_access" enum="EditorFileDialog.Access">
+ The location from which the user may select a file, including [code]res://[/code], [code]user://[/code], and the local file system.
+ </member>
+ <member name="current_dir" type="String" setter="set_current_dir" getter="get_current_dir">
+ The currently occupied directory.
+ </member>
+ <member name="current_file" type="String" setter="set_current_file" getter="get_current_file">
+ The currently selected file.
+ </member>
+ <member name="current_path" type="String" setter="set_current_path" getter="get_current_path">
+ The file system path in the address bar.
+ </member>
+ <member name="disable_overwrite_warning" type="bool" setter="set_disable_overwrite_warning" getter="is_overwrite_warning_disabled">
+ If [code]true[/code] the [code]EditorFileDialog[/code] will not warn the user before overwriting files.
+ </member>
+ <member name="display_mode" type="int" setter="set_display_mode" getter="get_display_mode" enum="EditorFileDialog.DisplayMode">
+ The view format in which the [code]EditorFileDialog[/code] displays resources to the user.
+ </member>
+ <member name="mode" type="int" setter="set_mode" getter="get_mode" enum="EditorFileDialog.Mode">
+ The purpose of the [code]EditorFileDialog[/code]. Changes allowed behaviors.
+ </member>
+ <member name="show_hidden_files" type="bool" setter="set_show_hidden_files" getter="is_showing_hidden_files">
+ If [code]true[/code] hidden files and directories will be visible in the [code]EditorFileDialog[/code].
+ </member>
+ </members>
<signals>
<signal name="dir_selected">
<argument index="0" name="dir" type="String">
</argument>
<description>
+ Emitted when a directory is selected.
</description>
</signal>
<signal name="file_selected">
<argument index="0" name="path" type="String">
</argument>
<description>
+ Emitted when a file is selected.
</description>
</signal>
<signal name="files_selected">
<argument index="0" name="paths" type="PoolStringArray">
</argument>
<description>
+ Emitted when multiple files are selected.
</description>
</signal>
</signals>
<constants>
- <constant name="MODE_OPEN_FILE" value="0">
+ <constant name="MODE_OPEN_FILE" value="0" enum="Mode">
+ The [code]EditorFileDialog[/code] can select only one file. Accepting the window will open the file.
</constant>
- <constant name="MODE_OPEN_FILES" value="1">
+ <constant name="MODE_OPEN_FILES" value="1" enum="Mode">
+ The [code]EditorFileDialog[/code] can select multiple files. Accepting the window will open all files.
</constant>
- <constant name="MODE_OPEN_DIR" value="2">
+ <constant name="MODE_OPEN_DIR" value="2" enum="Mode">
+ The [code]EditorFileDialog[/code] can select only one directory. Accepting the window will open the directory.
</constant>
- <constant name="MODE_OPEN_ANY" value="3">
+ <constant name="MODE_OPEN_ANY" value="3" enum="Mode">
+ The [code]EditorFileDialog[/code] can select a file or directory. Accepting the window will open it.
</constant>
- <constant name="MODE_SAVE_FILE" value="4">
+ <constant name="MODE_SAVE_FILE" value="4" enum="Mode">
+ The [code]EditorFileDialog[/code] can select only one file. Accepting the window will save the file.
</constant>
- <constant name="ACCESS_RESOURCES" value="0">
+ <constant name="ACCESS_RESOURCES" value="0" enum="Access">
+ The [code]EditorFileDialog[/code] can only view [code]res://[/code] directory contents.
</constant>
- <constant name="ACCESS_USERDATA" value="1">
+ <constant name="ACCESS_USERDATA" value="1" enum="Access">
+ The [code]EditorFileDialog[/code] can only view [code]user://[/code] directory contents.
</constant>
- <constant name="ACCESS_FILESYSTEM" value="2">
+ <constant name="ACCESS_FILESYSTEM" value="2" enum="Access">
+ The [code]EditorFileDialog[/code] can view the entire local file system.
</constant>
- <constant name="DISPLAY_THUMBNAILS" value="0">
+ <constant name="DISPLAY_THUMBNAILS" value="0" enum="DisplayMode">
+ The [code]EditorFileDialog[/code] displays resources as thumbnails.
</constant>
- <constant name="DISPLAY_LIST" value="1">
+ <constant name="DISPLAY_LIST" value="1" enum="DisplayMode">
+ The [code]EditorFileDialog[/code] displays resources as a list of filenames.
</constant>
</constants>
</class>
diff --git a/doc/classes/EditorFileSystem.xml b/doc/classes/EditorFileSystem.xml
index afec85184c..54b3accb19 100644
--- a/doc/classes/EditorFileSystem.xml
+++ b/doc/classes/EditorFileSystem.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorFileSystem" inherits="Node" category="Core" version="3.0-alpha">
+<class name="EditorFileSystem" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Resource filesystem, as the editor sees it.
</brief_description>
@@ -33,6 +33,7 @@
<argument index="0" name="path" type="String">
</argument>
<description>
+ Returns a view into the filesystem at [code]path[/code].
</description>
</method>
<method name="get_scanning_progress" qualifiers="const">
@@ -83,6 +84,7 @@
<argument index="0" name="resources" type="PoolStringArray">
</argument>
<description>
+ Remitted if a resource is reimported.
</description>
</signal>
<signal name="sources_changed">
diff --git a/doc/classes/EditorFileSystemDirectory.xml b/doc/classes/EditorFileSystemDirectory.xml
index 99bca09eb6..1a2f73a683 100644
--- a/doc/classes/EditorFileSystemDirectory.xml
+++ b/doc/classes/EditorFileSystemDirectory.xml
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorFileSystemDirectory" inherits="Object" category="Core" version="3.0-alpha">
+<class name="EditorFileSystemDirectory" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
A diretory for the resource filesystem.
</brief_description>
<description>
+ A more generalized, low-level variation of the directory concept.
</description>
<tutorials>
</tutorials>
@@ -16,6 +17,7 @@
<argument index="0" name="name" type="String">
</argument>
<description>
+ Returns the index of the directory with name [code]name[/code] or [code]-1[/code] if not found.
</description>
</method>
<method name="find_file_index" qualifiers="const">
@@ -24,6 +26,7 @@
<argument index="0" name="name" type="String">
</argument>
<description>
+ Returns the index of the file with name [code]name[/code] or [code]-1[/code] if not found.
</description>
</method>
<method name="get_file" qualifiers="const">
@@ -32,12 +35,14 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the name of the file at index [code]idx[/code].
</description>
</method>
<method name="get_file_count" qualifiers="const">
<return type="int">
</return>
<description>
+ Returns the number of files in this directory.
</description>
</method>
<method name="get_file_import_is_valid" qualifiers="const">
@@ -46,6 +51,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns [code]true[/code] if the file at index [code]idx[/code] imported properly.
</description>
</method>
<method name="get_file_path" qualifiers="const">
@@ -54,6 +60,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the path to the file at index [code]idx[/code].
</description>
</method>
<method name="get_file_type" qualifiers="const">
@@ -62,24 +69,28 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the file extension of the file at index [code]idx[/code].
</description>
</method>
<method name="get_name">
<return type="String">
</return>
<description>
+ Returns the name of this directory.
</description>
</method>
<method name="get_parent">
<return type="EditorFileSystemDirectory">
</return>
<description>
+ Returns the parent directory for this directory or null if called on a directory at [code]res://[/code] or [code]user://[/code].
</description>
</method>
<method name="get_path" qualifiers="const">
<return type="String">
</return>
<description>
+ Returns the path to this directory.
</description>
</method>
<method name="get_subdir">
@@ -88,12 +99,14 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the subdirectory at index [code]idx[/code].
</description>
</method>
<method name="get_subdir_count" qualifiers="const">
<return type="int">
</return>
<description>
+ Returns the number of subdirectories in this directory.
</description>
</method>
</methods>
diff --git a/doc/classes/EditorImportPlugin.xml b/doc/classes/EditorImportPlugin.xml
index 9836fb2527..f9e3c288e7 100644
--- a/doc/classes/EditorImportPlugin.xml
+++ b/doc/classes/EditorImportPlugin.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorImportPlugin" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="EditorImportPlugin" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Registers a custom resource importer in the editor. Use the class to parse any file and import it as a new resource type.
</brief_description>
diff --git a/doc/classes/EditorInterface.xml b/doc/classes/EditorInterface.xml
index 0059804c00..4bbbac8cf7 100644
--- a/doc/classes/EditorInterface.xml
+++ b/doc/classes/EditorInterface.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorInterface" inherits="Node" category="Core" version="3.0-alpha">
+<class name="EditorInterface" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Editor interface and main components.
</brief_description>
diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml
index f9bdf1dcd5..ada0ee56a8 100644
--- a/doc/classes/EditorPlugin.xml
+++ b/doc/classes/EditorPlugin.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorPlugin" inherits="Node" category="Core" version="3.0-alpha">
+<class name="EditorPlugin" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Used by the editor to extend its functionality.
</brief_description>
@@ -82,6 +82,14 @@
<description>
</description>
</method>
+ <method name="add_scene_import_plugin">
+ <return type="void">
+ </return>
+ <argument index="0" name="scene_importer" type="EditorSceneImporter">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="add_tool_submenu_item">
<return type="void">
</return>
@@ -135,15 +143,20 @@
<description>
</description>
</method>
- <method name="forward_draw_over_canvas" qualifiers="virtual">
+ <method name="forward_draw_over_viewport" qualifiers="virtual">
<return type="void">
</return>
- <argument index="0" name="canvas_xform" type="Transform2D">
+ <argument index="0" name="overlay" type="Control">
</argument>
- <argument index="1" name="canvas" type="Control">
+ <description>
+ </description>
+ </method>
+ <method name="forward_force_draw_over_viewport" qualifiers="virtual">
+ <return type="void">
+ </return>
+ <argument index="0" name="overlay" type="Control">
</argument>
<description>
- This function is called every time the 2D canvas editor draws (which overlays over the edited scene). Drawing over the supplied control will draw over the edited scene. To convert from control coordinates to edited scene coordinates (including zoom and offset), a transform is also provided. If you require this control to be redraw, call [method update_canvas].
</description>
</method>
<method name="forward_spatial_gui_input" qualifiers="virtual">
@@ -171,6 +184,12 @@
<description>
</description>
</method>
+ <method name="get_plugin_icon" qualifiers="virtual">
+ <return type="Object">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_plugin_name" qualifiers="virtual">
<return type="String">
</return>
@@ -290,6 +309,14 @@
<description>
</description>
</method>
+ <method name="remove_scene_import_plugin">
+ <return type="void">
+ </return>
+ <argument index="0" name="scene_importer" type="EditorSceneImporter">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="save_external_data" qualifiers="virtual">
<return type="void">
</return>
@@ -297,6 +324,12 @@
This method is called after the editor saves the project or when it's closed. It asks the plugin to save edited external scenes/resources.
</description>
</method>
+ <method name="set_force_draw_over_forwarding_enabled">
+ <return type="void">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="set_input_event_forwarding_always_enabled">
<return type="void">
</return>
@@ -322,11 +355,10 @@
Restore the plugin GUI layout saved by [method EditorPlugin.get_window_layout].
</description>
</method>
- <method name="update_canvas">
- <return type="void">
+ <method name="update_overlays" qualifiers="const">
+ <return type="int">
</return>
<description>
- Updates the control used to draw the edited scene over the 2D canvas. This is used together with [method forward_canvas_input_event].
</description>
</method>
</methods>
@@ -354,39 +386,39 @@
</signal>
</signals>
<constants>
- <constant name="CONTAINER_TOOLBAR" value="0">
+ <constant name="CONTAINER_TOOLBAR" value="0" enum="CustomControlContainer">
</constant>
- <constant name="CONTAINER_SPATIAL_EDITOR_MENU" value="1">
+ <constant name="CONTAINER_SPATIAL_EDITOR_MENU" value="1" enum="CustomControlContainer">
</constant>
- <constant name="CONTAINER_SPATIAL_EDITOR_SIDE" value="2">
+ <constant name="CONTAINER_SPATIAL_EDITOR_SIDE" value="2" enum="CustomControlContainer">
</constant>
- <constant name="CONTAINER_SPATIAL_EDITOR_BOTTOM" value="3">
+ <constant name="CONTAINER_SPATIAL_EDITOR_BOTTOM" value="3" enum="CustomControlContainer">
</constant>
- <constant name="CONTAINER_CANVAS_EDITOR_MENU" value="4">
+ <constant name="CONTAINER_CANVAS_EDITOR_MENU" value="4" enum="CustomControlContainer">
</constant>
- <constant name="CONTAINER_CANVAS_EDITOR_SIDE" value="5">
+ <constant name="CONTAINER_CANVAS_EDITOR_SIDE" value="5" enum="CustomControlContainer">
</constant>
- <constant name="CONTAINER_CANVAS_EDITOR_BOTTOM" value="6">
+ <constant name="CONTAINER_CANVAS_EDITOR_BOTTOM" value="6" enum="CustomControlContainer">
</constant>
- <constant name="CONTAINER_PROPERTY_EDITOR_BOTTOM" value="7">
+ <constant name="CONTAINER_PROPERTY_EDITOR_BOTTOM" value="7" enum="CustomControlContainer">
</constant>
- <constant name="DOCK_SLOT_LEFT_UL" value="0">
+ <constant name="DOCK_SLOT_LEFT_UL" value="0" enum="DockSlot">
</constant>
- <constant name="DOCK_SLOT_LEFT_BL" value="1">
+ <constant name="DOCK_SLOT_LEFT_BL" value="1" enum="DockSlot">
</constant>
- <constant name="DOCK_SLOT_LEFT_UR" value="2">
+ <constant name="DOCK_SLOT_LEFT_UR" value="2" enum="DockSlot">
</constant>
- <constant name="DOCK_SLOT_LEFT_BR" value="3">
+ <constant name="DOCK_SLOT_LEFT_BR" value="3" enum="DockSlot">
</constant>
- <constant name="DOCK_SLOT_RIGHT_UL" value="4">
+ <constant name="DOCK_SLOT_RIGHT_UL" value="4" enum="DockSlot">
</constant>
- <constant name="DOCK_SLOT_RIGHT_BL" value="5">
+ <constant name="DOCK_SLOT_RIGHT_BL" value="5" enum="DockSlot">
</constant>
- <constant name="DOCK_SLOT_RIGHT_UR" value="6">
+ <constant name="DOCK_SLOT_RIGHT_UR" value="6" enum="DockSlot">
</constant>
- <constant name="DOCK_SLOT_RIGHT_BR" value="7">
+ <constant name="DOCK_SLOT_RIGHT_BR" value="7" enum="DockSlot">
</constant>
- <constant name="DOCK_SLOT_MAX" value="8">
+ <constant name="DOCK_SLOT_MAX" value="8" enum="DockSlot">
</constant>
</constants>
</class>
diff --git a/doc/classes/EditorResourceConversionPlugin.xml b/doc/classes/EditorResourceConversionPlugin.xml
index 6fbb60ddf6..b2bbe69061 100644
--- a/doc/classes/EditorResourceConversionPlugin.xml
+++ b/doc/classes/EditorResourceConversionPlugin.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorResourceConversionPlugin" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="EditorResourceConversionPlugin" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/EditorResourcePreview.xml b/doc/classes/EditorResourcePreview.xml
index 44f60d4d2c..481ffed70b 100644
--- a/doc/classes/EditorResourcePreview.xml
+++ b/doc/classes/EditorResourcePreview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorResourcePreview" inherits="Node" category="Core" version="3.0-alpha">
+<class name="EditorResourcePreview" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Helper to generate previews of resources or files.
</brief_description>
diff --git a/doc/classes/EditorResourcePreviewGenerator.xml b/doc/classes/EditorResourcePreviewGenerator.xml
index 3de0dbc708..03cb232619 100644
--- a/doc/classes/EditorResourcePreviewGenerator.xml
+++ b/doc/classes/EditorResourcePreviewGenerator.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorResourcePreviewGenerator" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="EditorResourcePreviewGenerator" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Custom generator of previews.
</brief_description>
diff --git a/doc/classes/EditorSceneImporter.xml b/doc/classes/EditorSceneImporter.xml
new file mode 100644
index 0000000000..69fe4050f4
--- /dev/null
+++ b/doc/classes/EditorSceneImporter.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="EditorSceneImporter" inherits="Reference" category="Core" version="3.0-beta">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <demos>
+ </demos>
+ <methods>
+ <method name="_get_extensions" qualifiers="virtual">
+ <return type="Array">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="_get_import_flags" qualifiers="virtual">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="_import_animation" qualifiers="virtual">
+ <return type="Animation">
+ </return>
+ <argument index="0" name="path" type="String">
+ </argument>
+ <argument index="1" name="flags" type="int">
+ </argument>
+ <argument index="2" name="bake_fps" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="_import_scene" qualifiers="virtual">
+ <return type="Node">
+ </return>
+ <argument index="0" name="path" type="String">
+ </argument>
+ <argument index="1" name="flags" type="int">
+ </argument>
+ <argument index="2" name="bake_fps" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="import_animation_from_other_importer">
+ <return type="Animation">
+ </return>
+ <argument index="0" name="path" type="String">
+ </argument>
+ <argument index="1" name="flags" type="int">
+ </argument>
+ <argument index="2" name="bake_fps" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="import_scene_from_other_importer">
+ <return type="Node">
+ </return>
+ <argument index="0" name="path" type="String">
+ </argument>
+ <argument index="1" name="flags" type="int">
+ </argument>
+ <argument index="2" name="bake_fps" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ <constant name="IMPORT_SCENE" value="1">
+ </constant>
+ <constant name="IMPORT_ANIMATION" value="2">
+ </constant>
+ <constant name="IMPORT_ANIMATION_DETECT_LOOP" value="4">
+ </constant>
+ <constant name="IMPORT_ANIMATION_OPTIMIZE" value="8">
+ </constant>
+ <constant name="IMPORT_ANIMATION_FORCE_ALL_TRACKS_IN_ALL_CLIPS" value="16">
+ </constant>
+ <constant name="IMPORT_ANIMATION_KEEP_VALUE_TRACKS" value="32">
+ </constant>
+ <constant name="IMPORT_GENERATE_TANGENT_ARRAYS" value="256">
+ </constant>
+ <constant name="IMPORT_FAIL_ON_MISSING_DEPENDENCIES" value="512">
+ </constant>
+ <constant name="IMPORT_MATERIALS_IN_INSTANCES" value="1024">
+ </constant>
+ <constant name="IMPORT_USE_COMPRESSION" value="2048">
+ </constant>
+ </constants>
+</class>
diff --git a/doc/classes/EditorScenePostImport.xml b/doc/classes/EditorScenePostImport.xml
new file mode 100644
index 0000000000..a9bc659e7d
--- /dev/null
+++ b/doc/classes/EditorScenePostImport.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="EditorScenePostImport" inherits="Reference" category="Core" version="3.0-beta">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <demos>
+ </demos>
+ <methods>
+ <method name="post_import" qualifiers="virtual">
+ <return type="void">
+ </return>
+ <argument index="0" name="scene" type="Object">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
diff --git a/doc/classes/EditorScript.xml b/doc/classes/EditorScript.xml
index 1e46164fc6..97f126e7f7 100644
--- a/doc/classes/EditorScript.xml
+++ b/doc/classes/EditorScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorScript" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="EditorScript" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Base script that can be used to add extension functions to the editor.
</brief_description>
@@ -9,7 +9,7 @@
[codeblock]
tool
extends EditorScript
-
+
func _run():
print("Hello from the Godot Editor!")
[/codeblock]
@@ -33,6 +33,8 @@
<argument index="0" name="node" type="Node">
</argument>
<description>
+ Adds [code]node[/code] as a child of the root node in the editor context.
+ WARNING: The implementation of this method is currently disabled.
</description>
</method>
<method name="get_editor_interface">
diff --git a/doc/classes/EditorSelection.xml b/doc/classes/EditorSelection.xml
index 999cb5e505..31e27a1b01 100644
--- a/doc/classes/EditorSelection.xml
+++ b/doc/classes/EditorSelection.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorSelection" inherits="Object" category="Core" version="3.0-alpha">
+<class name="EditorSelection" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Manages the SceneTree selection in the editor.
</brief_description>
diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml
index e58516d461..174b62fde0 100644
--- a/doc/classes/EditorSettings.xml
+++ b/doc/classes/EditorSettings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorSettings" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="EditorSettings" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Object that holds the project-independent editor settings.
</brief_description>
diff --git a/doc/classes/EditorSpatialGizmo.xml b/doc/classes/EditorSpatialGizmo.xml
index 758024c99b..e55cdd0ca7 100644
--- a/doc/classes/EditorSpatialGizmo.xml
+++ b/doc/classes/EditorSpatialGizmo.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EditorSpatialGizmo" inherits="SpatialGizmo" category="Core" version="3.0-alpha">
+<class name="EditorSpatialGizmo" inherits="SpatialGizmo" category="Core" version="3.0-beta">
<brief_description>
Custom gizmo for editing Spatial objects.
</brief_description>
diff --git a/doc/classes/EncodedObjectAsID.xml b/doc/classes/EncodedObjectAsID.xml
index 41839e3d01..b60f2fc2bd 100644
--- a/doc/classes/EncodedObjectAsID.xml
+++ b/doc/classes/EncodedObjectAsID.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="EncodedObjectAsID" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="EncodedObjectAsID" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml
index 090e0d7910..0fd5892860 100644
--- a/doc/classes/Engine.xml
+++ b/doc/classes/Engine.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Engine" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Engine" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Access to basic engine properties.
</brief_description>
diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml
index 285caa8d0a..e252f67774 100644
--- a/doc/classes/Environment.xml
+++ b/doc/classes/Environment.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Environment" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Environment" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Resource for environment nodes (like [WorldEnvironment]) that define multiple rendering options.
</brief_description>
@@ -16,1004 +16,6 @@
<demos>
</demos>
<methods>
- <method name="get_adjustment_brightness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_adjustment_color_correction" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_adjustment_contrast" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_adjustment_saturation" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ambient_light_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ambient_light_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ambient_light_sky_contribution" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_background" qualifiers="const">
- <return type="int" enum="Environment.BGMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_bg_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_bg_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_canvas_max_layer" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dof_blur_far_amount" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dof_blur_far_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dof_blur_far_quality" qualifiers="const">
- <return type="int" enum="Environment.DOFBlurQuality">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dof_blur_far_transition" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dof_blur_near_amount" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dof_blur_near_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dof_blur_near_quality" qualifiers="const">
- <return type="int" enum="Environment.DOFBlurQuality">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dof_blur_near_transition" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_depth_begin" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_depth_curve" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_height_curve" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_height_max" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_height_min" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_sun_amount" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_sun_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fog_transmit_curve" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_glow_blend_mode" qualifiers="const">
- <return type="int" enum="Environment.GlowBlendMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_glow_bloom" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_glow_hdr_bleed_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_glow_hdr_bleed_threshold" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_glow_intensity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_glow_strength" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sky" qualifiers="const">
- <return type="Sky">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sky_custom_fov" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_bias" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_blur" qualifiers="const">
- <return type="int" enum="Environment.SSAOBlur">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_direct_light_affect" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_edge_sharpness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_intensity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_intensity2" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_quality" qualifiers="const">
- <return type="int" enum="Environment.SSAOQuality">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssao_radius2" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssr_depth_tolerance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssr_fade_in" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssr_fade_out" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ssr_max_steps" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tonemap_auto_exposure" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tonemap_auto_exposure_grey" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tonemap_auto_exposure_max" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tonemap_auto_exposure_min" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tonemap_auto_exposure_speed" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tonemap_exposure" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tonemap_white" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_tonemapper" qualifiers="const">
- <return type="int" enum="Environment.ToneMapper">
- </return>
- <description>
- </description>
- </method>
- <method name="is_adjustment_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_dof_blur_far_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_dof_blur_near_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_fog_depth_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_fog_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_fog_height_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_fog_transmit_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_glow_bicubic_upscale_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_glow_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_glow_level_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="idx" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="is_ssao_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_ssr_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_ssr_rough" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_adjustment_brightness">
- <return type="void">
- </return>
- <argument index="0" name="brightness" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_adjustment_color_correction">
- <return type="void">
- </return>
- <argument index="0" name="color_correction" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_adjustment_contrast">
- <return type="void">
- </return>
- <argument index="0" name="contrast" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_adjustment_enable">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_adjustment_saturation">
- <return type="void">
- </return>
- <argument index="0" name="saturation" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ambient_light_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ambient_light_energy">
- <return type="void">
- </return>
- <argument index="0" name="energy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ambient_light_sky_contribution">
- <return type="void">
- </return>
- <argument index="0" name="energy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_background">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Environment.BGMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_bg_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_bg_energy">
- <return type="void">
- </return>
- <argument index="0" name="energy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_canvas_max_layer">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_far_amount">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_far_distance">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_far_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_far_quality">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="int" enum="Environment.DOFBlurQuality">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_far_transition">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_near_amount">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_near_distance">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_near_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_near_quality">
- <return type="void">
- </return>
- <argument index="0" name="level" type="int" enum="Environment.DOFBlurQuality">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dof_blur_near_transition">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_depth_begin">
- <return type="void">
- </return>
- <argument index="0" name="distance" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_depth_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_depth_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_height_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_height_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_height_max">
- <return type="void">
- </return>
- <argument index="0" name="height" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_height_min">
- <return type="void">
- </return>
- <argument index="0" name="height" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_sun_amount">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_sun_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_transmit_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fog_transmit_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_bicubic_upscale">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_blend_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Environment.GlowBlendMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_bloom">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_hdr_bleed_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_hdr_bleed_threshold">
- <return type="void">
- </return>
- <argument index="0" name="threshold" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_intensity">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_level">
- <return type="void">
- </return>
- <argument index="0" name="idx" type="int">
- </argument>
- <argument index="1" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_glow_strength">
- <return type="void">
- </return>
- <argument index="0" name="strength" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sky">
- <return type="void">
- </return>
- <argument index="0" name="sky" type="Sky">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sky_custom_fov">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_bias">
- <return type="void">
- </return>
- <argument index="0" name="bias" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_blur">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Environment.SSAOBlur">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_direct_light_affect">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_edge_sharpness">
- <return type="void">
- </return>
- <argument index="0" name="edge_sharpness" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_intensity">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_intensity2">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_quality">
- <return type="void">
- </return>
- <argument index="0" name="quality" type="int" enum="Environment.SSAOQuality">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssao_radius2">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssr_depth_tolerance">
- <return type="void">
- </return>
- <argument index="0" name="depth_tolerance" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssr_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssr_fade_in">
- <return type="void">
- </return>
- <argument index="0" name="fade_in" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssr_fade_out">
- <return type="void">
- </return>
- <argument index="0" name="fade_out" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssr_max_steps">
- <return type="void">
- </return>
- <argument index="0" name="max_steps" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ssr_rough">
- <return type="void">
- </return>
- <argument index="0" name="rough" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tonemap_auto_exposure">
- <return type="void">
- </return>
- <argument index="0" name="auto_exposure" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tonemap_auto_exposure_grey">
- <return type="void">
- </return>
- <argument index="0" name="exposure_grey" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tonemap_auto_exposure_max">
- <return type="void">
- </return>
- <argument index="0" name="exposure_max" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tonemap_auto_exposure_min">
- <return type="void">
- </return>
- <argument index="0" name="exposure_min" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tonemap_auto_exposure_speed">
- <return type="void">
- </return>
- <argument index="0" name="exposure_speed" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tonemap_exposure">
- <return type="void">
- </return>
- <argument index="0" name="exposure" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tonemap_white">
- <return type="void">
- </return>
- <argument index="0" name="white" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_tonemapper">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Environment.ToneMapper">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="adjustment_brightness" type="float" setter="set_adjustment_brightness" getter="get_adjustment_brightness">
@@ -1231,73 +233,73 @@
</member>
</members>
<constants>
- <constant name="BG_KEEP" value="5">
+ <constant name="BG_KEEP" value="5" enum="BGMode">
Keep on screen every pixel drawn in the background.
</constant>
- <constant name="BG_CLEAR_COLOR" value="0">
+ <constant name="BG_CLEAR_COLOR" value="0" enum="BGMode">
Clear the background using the project's clear color.
</constant>
- <constant name="BG_COLOR" value="1">
+ <constant name="BG_COLOR" value="1" enum="BGMode">
Clear the background using a custom clear color.
</constant>
- <constant name="BG_SKY" value="2">
+ <constant name="BG_SKY" value="2" enum="BGMode">
Display a user-defined sky in the background.
</constant>
- <constant name="BG_COLOR_SKY" value="3">
+ <constant name="BG_COLOR_SKY" value="3" enum="BGMode">
Clear the background using a custom clear color and allows defining a sky for shading and reflection.
</constant>
- <constant name="BG_CANVAS" value="4">
+ <constant name="BG_CANVAS" value="4" enum="BGMode">
Display a [CanvasLayer] in the background.
</constant>
- <constant name="BG_MAX" value="6">
+ <constant name="BG_MAX" value="6" enum="BGMode">
Helper constant keeping track of the enum's size, has no direct usage in API calls.
</constant>
- <constant name="GLOW_BLEND_MODE_ADDITIVE" value="0">
+ <constant name="GLOW_BLEND_MODE_ADDITIVE" value="0" enum="GlowBlendMode">
Additive glow blending mode. Mostly used for particles, glows (bloom), lens flare, bright sources.
</constant>
- <constant name="GLOW_BLEND_MODE_SCREEN" value="1">
+ <constant name="GLOW_BLEND_MODE_SCREEN" value="1" enum="GlowBlendMode">
Screen glow blending mode. Increases brightness, used frequently with bloom.
</constant>
- <constant name="GLOW_BLEND_MODE_SOFTLIGHT" value="2">
+ <constant name="GLOW_BLEND_MODE_SOFTLIGHT" value="2" enum="GlowBlendMode">
Softlight glow blending mode. Modifies contrast, exposes shadows and highlights, vivid bloom.
</constant>
- <constant name="GLOW_BLEND_MODE_REPLACE" value="3">
+ <constant name="GLOW_BLEND_MODE_REPLACE" value="3" enum="GlowBlendMode">
Replace glow blending mode. Replaces all pixels' color by the glow value.
</constant>
- <constant name="TONE_MAPPER_LINEAR" value="0">
+ <constant name="TONE_MAPPER_LINEAR" value="0" enum="ToneMapper">
Linear tonemapper operator. Reads the linear data and performs an exposure adjustment.
</constant>
- <constant name="TONE_MAPPER_REINHARDT" value="1">
+ <constant name="TONE_MAPPER_REINHARDT" value="1" enum="ToneMapper">
Reinhardt tonemapper operator. Performs a variation on rendered pixels' colors by this formula: color = color / (1 + color).
</constant>
- <constant name="TONE_MAPPER_FILMIC" value="2">
+ <constant name="TONE_MAPPER_FILMIC" value="2" enum="ToneMapper">
Filmic tonemapper operator.
</constant>
- <constant name="TONE_MAPPER_ACES" value="3">
+ <constant name="TONE_MAPPER_ACES" value="3" enum="ToneMapper">
Academy Color Encoding System tonemapper operator.
</constant>
- <constant name="DOF_BLUR_QUALITY_LOW" value="0">
+ <constant name="DOF_BLUR_QUALITY_LOW" value="0" enum="DOFBlurQuality">
Low depth-of-field blur quality.
</constant>
- <constant name="DOF_BLUR_QUALITY_MEDIUM" value="1">
+ <constant name="DOF_BLUR_QUALITY_MEDIUM" value="1" enum="DOFBlurQuality">
Medium depth-of-field blur quality.
</constant>
- <constant name="DOF_BLUR_QUALITY_HIGH" value="2">
+ <constant name="DOF_BLUR_QUALITY_HIGH" value="2" enum="DOFBlurQuality">
High depth-of-field blur quality.
</constant>
- <constant name="SSAO_BLUR_DISABLED" value="0">
+ <constant name="SSAO_BLUR_DISABLED" value="0" enum="SSAOBlur">
</constant>
- <constant name="SSAO_BLUR_1x1" value="1">
+ <constant name="SSAO_BLUR_1x1" value="1" enum="SSAOBlur">
</constant>
- <constant name="SSAO_BLUR_2x2" value="2">
+ <constant name="SSAO_BLUR_2x2" value="2" enum="SSAOBlur">
</constant>
- <constant name="SSAO_BLUR_3x3" value="3">
+ <constant name="SSAO_BLUR_3x3" value="3" enum="SSAOBlur">
</constant>
- <constant name="SSAO_QUALITY_LOW" value="0">
+ <constant name="SSAO_QUALITY_LOW" value="0" enum="SSAOQuality">
</constant>
- <constant name="SSAO_QUALITY_MEDIUM" value="1">
+ <constant name="SSAO_QUALITY_MEDIUM" value="1" enum="SSAOQuality">
</constant>
- <constant name="SSAO_QUALITY_HIGH" value="2">
+ <constant name="SSAO_QUALITY_HIGH" value="2" enum="SSAOQuality">
</constant>
</constants>
</class>
diff --git a/doc/classes/File.xml b/doc/classes/File.xml
index 8ec56e9c48..8c270ece4b 100644
--- a/doc/classes/File.xml
+++ b/doc/classes/File.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="File" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="File" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Type to handle file reading and writing operations.
</brief_description>
@@ -394,28 +394,28 @@
</method>
</methods>
<constants>
- <constant name="READ" value="1">
+ <constant name="READ" value="1" enum="ModeFlags">
Opens the file for read operations.
</constant>
- <constant name="WRITE" value="2">
+ <constant name="WRITE" value="2" enum="ModeFlags">
Opens the file for write operations. Create it if the file does not exist and truncate if it exists.
</constant>
- <constant name="READ_WRITE" value="3">
+ <constant name="READ_WRITE" value="3" enum="ModeFlags">
Opens the file for read and write operations. Does not truncate the file.
</constant>
- <constant name="WRITE_READ" value="7">
+ <constant name="WRITE_READ" value="7" enum="ModeFlags">
Opens the file for read and write operations. Create it if the file does not exist and truncate if it exists.
</constant>
- <constant name="COMPRESSION_FASTLZ" value="0">
+ <constant name="COMPRESSION_FASTLZ" value="0" enum="CompressionMode">
Uses the FastLZ compression method.
</constant>
- <constant name="COMPRESSION_DEFLATE" value="1">
+ <constant name="COMPRESSION_DEFLATE" value="1" enum="CompressionMode">
Uses the Deflate compression method.
</constant>
- <constant name="COMPRESSION_ZSTD" value="2">
+ <constant name="COMPRESSION_ZSTD" value="2" enum="CompressionMode">
Uses the Zstd compression method.
</constant>
- <constant name="COMPRESSION_GZIP" value="3">
+ <constant name="COMPRESSION_GZIP" value="3" enum="CompressionMode">
Uses the gzip compression method.
</constant>
</constants>
diff --git a/doc/classes/FileDialog.xml b/doc/classes/FileDialog.xml
index 7dda486ac9..3387b4a2ed 100644
--- a/doc/classes/FileDialog.xml
+++ b/doc/classes/FileDialog.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="FileDialog" inherits="ConfirmationDialog" category="Core" version="3.0-alpha">
+<class name="FileDialog" inherits="ConfirmationDialog" category="Core" version="3.0-beta">
<brief_description>
Dialog for selecting files or directories in the filesystem.
</brief_description>
@@ -27,11 +27,10 @@
Clear all the added filters in the dialog.
</description>
</method>
- <method name="get_access" qualifiers="const">
- <return type="int" enum="FileDialog.Access">
+ <method name="deselect_items">
+ <return type="void">
</return>
<description>
- Return the file access permission of the dialog.
</description>
</method>
<method name="get_current_dir" qualifiers="const">
@@ -55,19 +54,6 @@
Get the current selected path (directory and file) of the file dialog (empty if none).
</description>
</method>
- <method name="get_filters" qualifiers="const">
- <return type="PoolStringArray">
- </return>
- <description>
- </description>
- </method>
- <method name="get_mode" qualifiers="const">
- <return type="int" enum="FileDialog.Mode">
- </return>
- <description>
- Get the file dialog mode from the MODE_* enum.
- </description>
- </method>
<method name="get_vbox">
<return type="VBoxContainer">
</return>
@@ -82,22 +68,6 @@
Invalidate and update the current dialog content list.
</description>
</method>
- <method name="is_showing_hidden_files" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the dialog allows show hidden files.
- </description>
- </method>
- <method name="set_access">
- <return type="void">
- </return>
- <argument index="0" name="access" type="int" enum="FileDialog.Access">
- </argument>
- <description>
- Set the file access permission of the dialog(Must be one of [ACCESS_RESOURCES], [ACCESS_USERDATA] or [ACCESS_FILESYSTEM]).
- </description>
- </method>
<method name="set_current_dir">
<return type="void">
</return>
@@ -125,32 +95,6 @@
Set the current selected file path of the file dialog.
</description>
</method>
- <method name="set_filters">
- <return type="void">
- </return>
- <argument index="0" name="filters" type="PoolStringArray">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="FileDialog.Mode">
- </argument>
- <description>
- Set the file dialog mode from the MODE_* enum.
- </description>
- </method>
- <method name="set_show_hidden_files">
- <return type="void">
- </return>
- <argument index="0" name="show" type="bool">
- </argument>
- <description>
- Set the dialog should show hidden files.
- </description>
- </method>
</methods>
<members>
<member name="access" type="int" setter="set_access" getter="get_access" enum="FileDialog.Access">
@@ -159,6 +103,9 @@
</member>
<member name="mode" type="int" setter="set_mode" getter="get_mode" enum="FileDialog.Mode">
</member>
+ <member name="mode_overrides_title" type="bool" setter="set_mode_overrides_title" getter="is_mode_overriding_title">
+ If [code]true[/code], changing the [code]mode[/code] property will set the window title accordingly (e. g. setting mode to [code]MODE_OPEN_FILE[/code] will change the window title to "Open a File").
+ </member>
<member name="show_hidden_files" type="bool" setter="set_show_hidden_files" getter="is_showing_hidden_files">
</member>
</members>
@@ -186,28 +133,28 @@
</signal>
</signals>
<constants>
- <constant name="MODE_OPEN_FILE" value="0">
+ <constant name="MODE_OPEN_FILE" value="0" enum="Mode">
The dialog allows the selection of one, and only one file.
</constant>
- <constant name="MODE_OPEN_FILES" value="1">
+ <constant name="MODE_OPEN_FILES" value="1" enum="Mode">
The dialog allows the selection of multiple files.
</constant>
- <constant name="MODE_OPEN_DIR" value="2">
+ <constant name="MODE_OPEN_DIR" value="2" enum="Mode">
The dialog functions as a folder selector, disallowing the selection of any file.
</constant>
- <constant name="MODE_OPEN_ANY" value="3">
+ <constant name="MODE_OPEN_ANY" value="3" enum="Mode">
The dialog allows the selection of a file or a directory.
</constant>
- <constant name="MODE_SAVE_FILE" value="4">
+ <constant name="MODE_SAVE_FILE" value="4" enum="Mode">
The dialog will warn when a file exists.
</constant>
- <constant name="ACCESS_RESOURCES" value="0">
+ <constant name="ACCESS_RESOURCES" value="0" enum="Access">
The dialog allows the selection of file and directory.
</constant>
- <constant name="ACCESS_USERDATA" value="1">
+ <constant name="ACCESS_USERDATA" value="1" enum="Access">
The dialog allows access files under [Resource] path(res://) .
</constant>
- <constant name="ACCESS_FILESYSTEM" value="2">
+ <constant name="ACCESS_FILESYSTEM" value="2" enum="Access">
The dialog allows access files in whole file system.
</constant>
</constants>
@@ -216,6 +163,8 @@
</theme_item>
<theme_item name="folder" type="Texture">
</theme_item>
+ <theme_item name="parent_folder" type="Texture">
+ </theme_item>
<theme_item name="reload" type="Texture">
</theme_item>
</theme_items>
diff --git a/doc/classes/Font.xml b/doc/classes/Font.xml
index b83d66830f..bc4557a171 100644
--- a/doc/classes/Font.xml
+++ b/doc/classes/Font.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Font" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Font" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Internationalized font and text drawing support.
</brief_description>
diff --git a/doc/classes/FuncRef.xml b/doc/classes/FuncRef.xml
index 65da5dd98f..802f35dd10 100644
--- a/doc/classes/FuncRef.xml
+++ b/doc/classes/FuncRef.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="FuncRef" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="FuncRef" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Reference to a function in an object.
</brief_description>
diff --git a/doc/classes/GIProbe.xml b/doc/classes/GIProbe.xml
index e445d94835..0644e3f24e 100644
--- a/doc/classes/GIProbe.xml
+++ b/doc/classes/GIProbe.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GIProbe" inherits="VisualInstance" category="Core" version="3.0-alpha">
+<class name="GIProbe" inherits="VisualInstance" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -25,146 +25,6 @@
<description>
</description>
</method>
- <method name="get_bias" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_dynamic_range" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_extents" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_normal_bias" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_probe_data" qualifiers="const">
- <return type="GIProbeData">
- </return>
- <description>
- </description>
- </method>
- <method name="get_propagation" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdiv" qualifiers="const">
- <return type="int" enum="GIProbe.Subdiv">
- </return>
- <description>
- </description>
- </method>
- <method name="is_compressed" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_interior" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_bias">
- <return type="void">
- </return>
- <argument index="0" name="max" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_compress">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_dynamic_range">
- <return type="void">
- </return>
- <argument index="0" name="max" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_energy">
- <return type="void">
- </return>
- <argument index="0" name="max" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_extents">
- <return type="void">
- </return>
- <argument index="0" name="extents" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_interior">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_normal_bias">
- <return type="void">
- </return>
- <argument index="0" name="max" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_probe_data">
- <return type="void">
- </return>
- <argument index="0" name="data" type="GIProbeData">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_propagation">
- <return type="void">
- </return>
- <argument index="0" name="max" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdiv">
- <return type="void">
- </return>
- <argument index="0" name="subdiv" type="int" enum="GIProbe.Subdiv">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="bias" type="float" setter="set_bias" getter="get_bias">
@@ -189,15 +49,15 @@
</member>
</members>
<constants>
- <constant name="SUBDIV_64" value="0">
+ <constant name="SUBDIV_64" value="0" enum="Subdiv">
</constant>
- <constant name="SUBDIV_128" value="1">
+ <constant name="SUBDIV_128" value="1" enum="Subdiv">
</constant>
- <constant name="SUBDIV_256" value="2">
+ <constant name="SUBDIV_256" value="2" enum="Subdiv">
</constant>
- <constant name="SUBDIV_512" value="3">
+ <constant name="SUBDIV_512" value="3" enum="Subdiv">
</constant>
- <constant name="SUBDIV_MAX" value="4">
+ <constant name="SUBDIV_MAX" value="4" enum="Subdiv">
</constant>
</constants>
</class>
diff --git a/doc/classes/GIProbeData.xml b/doc/classes/GIProbeData.xml
index 5d118be776..aba59f57ea 100644
--- a/doc/classes/GIProbeData.xml
+++ b/doc/classes/GIProbeData.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GIProbeData" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="GIProbeData" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -164,30 +164,6 @@
</description>
</method>
</methods>
- <members>
- <member name="bias" type="float" setter="set_bias" getter="get_bias">
- </member>
- <member name="bounds" type="AABB" setter="set_bounds" getter="get_bounds">
- </member>
- <member name="cell_size" type="float" setter="set_cell_size" getter="get_cell_size">
- </member>
- <member name="compress" type="bool" setter="set_compress" getter="is_compressed">
- </member>
- <member name="dynamic_data" type="PoolIntArray" setter="set_dynamic_data" getter="get_dynamic_data">
- </member>
- <member name="dynamic_range" type="int" setter="set_dynamic_range" getter="get_dynamic_range">
- </member>
- <member name="energy" type="float" setter="set_energy" getter="get_energy">
- </member>
- <member name="interior" type="bool" setter="set_interior" getter="is_interior">
- </member>
- <member name="normal_bias" type="float" setter="set_normal_bias" getter="get_normal_bias">
- </member>
- <member name="propagation" type="float" setter="set_propagation" getter="get_propagation">
- </member>
- <member name="to_cell_xform" type="Transform" setter="set_to_cell_xform" getter="get_to_cell_xform">
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/doc/classes/Generic6DOFJoint.xml b/doc/classes/Generic6DOFJoint.xml
index 202e461652..e44ae867d4 100644
--- a/doc/classes/Generic6DOFJoint.xml
+++ b/doc/classes/Generic6DOFJoint.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Generic6DOFJoint" inherits="Joint" category="Core" version="3.0-alpha">
+<class name="Generic6DOFJoint" inherits="Joint" category="Core" version="3.0-beta">
<brief_description>
The generic 6 degrees of freedom joint can implement a variety of joint-types by locking certain axes' rotation or translation.
</brief_description>
@@ -11,114 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_flag_x" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="flag" type="int" enum="Generic6DOFJoint.Flag">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_flag_y" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="flag" type="int" enum="Generic6DOFJoint.Flag">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_flag_z" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="flag" type="int" enum="Generic6DOFJoint.Flag">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_param_x" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="Generic6DOFJoint.Param">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_param_y" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="Generic6DOFJoint.Param">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_param_z" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="Generic6DOFJoint.Param">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flag_x">
- <return type="void">
- </return>
- <argument index="0" name="flag" type="int" enum="Generic6DOFJoint.Flag">
- </argument>
- <argument index="1" name="value" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flag_y">
- <return type="void">
- </return>
- <argument index="0" name="flag" type="int" enum="Generic6DOFJoint.Flag">
- </argument>
- <argument index="1" name="value" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flag_z">
- <return type="void">
- </return>
- <argument index="0" name="flag" type="int" enum="Generic6DOFJoint.Flag">
- </argument>
- <argument index="1" name="value" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param_x">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="Generic6DOFJoint.Param">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param_y">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="Generic6DOFJoint.Param">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param_z">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="Generic6DOFJoint.Param">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="angular_limit_x/damping" type="float" setter="set_param_x" getter="get_param_x">
@@ -277,61 +169,61 @@
</member>
</members>
<constants>
- <constant name="PARAM_LINEAR_LOWER_LIMIT" value="0">
+ <constant name="PARAM_LINEAR_LOWER_LIMIT" value="0" enum="Param">
The minimum difference between the pivot points' axes.
</constant>
- <constant name="PARAM_LINEAR_UPPER_LIMIT" value="1">
+ <constant name="PARAM_LINEAR_UPPER_LIMIT" value="1" enum="Param">
The maximum difference between the pivot points' axes.
</constant>
- <constant name="PARAM_LINEAR_LIMIT_SOFTNESS" value="2">
+ <constant name="PARAM_LINEAR_LIMIT_SOFTNESS" value="2" enum="Param">
A factor applied to the movement across the axes The lower, the slower the movement.
</constant>
- <constant name="PARAM_LINEAR_RESTITUTION" value="3">
+ <constant name="PARAM_LINEAR_RESTITUTION" value="3" enum="Param">
The amount of restitution on the axes movement The lower, the more momentum gets lost.
</constant>
- <constant name="PARAM_LINEAR_DAMPING" value="4">
+ <constant name="PARAM_LINEAR_DAMPING" value="4" enum="Param">
The amount of damping that happens at the linear motion across the axes.
</constant>
- <constant name="PARAM_ANGULAR_LOWER_LIMIT" value="5">
+ <constant name="PARAM_ANGULAR_LOWER_LIMIT" value="5" enum="Param">
The minimum rotation in negative direction to break loose and rotate arround the axes.
</constant>
- <constant name="PARAM_ANGULAR_UPPER_LIMIT" value="6">
+ <constant name="PARAM_ANGULAR_UPPER_LIMIT" value="6" enum="Param">
The minimum rotation in positive direction to break loose and rotate arround the axes.
</constant>
- <constant name="PARAM_ANGULAR_LIMIT_SOFTNESS" value="7">
+ <constant name="PARAM_ANGULAR_LIMIT_SOFTNESS" value="7" enum="Param">
The speed of all rotations across the axes.
</constant>
- <constant name="PARAM_ANGULAR_DAMPING" value="8">
+ <constant name="PARAM_ANGULAR_DAMPING" value="8" enum="Param">
The amount of rotational damping across the axes. The lower, the more dampening occurs.
</constant>
- <constant name="PARAM_ANGULAR_RESTITUTION" value="9">
+ <constant name="PARAM_ANGULAR_RESTITUTION" value="9" enum="Param">
The amount of rotational restitution across the axes. The lower, the more restitution occurs.
</constant>
- <constant name="PARAM_ANGULAR_FORCE_LIMIT" value="10">
+ <constant name="PARAM_ANGULAR_FORCE_LIMIT" value="10" enum="Param">
The maximum amount of force that can occur, when rotating arround the axes.
</constant>
- <constant name="PARAM_ANGULAR_ERP" value="11">
+ <constant name="PARAM_ANGULAR_ERP" value="11" enum="Param">
When rotating across the axes, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
</constant>
- <constant name="PARAM_ANGULAR_MOTOR_TARGET_VELOCITY" value="12">
+ <constant name="PARAM_ANGULAR_MOTOR_TARGET_VELOCITY" value="12" enum="Param">
Target speed for the motor at the axes.
</constant>
- <constant name="PARAM_ANGULAR_MOTOR_FORCE_LIMIT" value="13">
+ <constant name="PARAM_ANGULAR_MOTOR_FORCE_LIMIT" value="13" enum="Param">
Maximum acceleration for the motor at the axes.
</constant>
- <constant name="PARAM_MAX" value="14">
+ <constant name="PARAM_MAX" value="14" enum="Param">
End flag of PARAM_* constants, used internally.
</constant>
- <constant name="FLAG_ENABLE_LINEAR_LIMIT" value="0">
+ <constant name="FLAG_ENABLE_LINEAR_LIMIT" value="0" enum="Flag">
If [code]set[/code] there is linear motion possible within the given limits.
</constant>
- <constant name="FLAG_ENABLE_ANGULAR_LIMIT" value="1">
+ <constant name="FLAG_ENABLE_ANGULAR_LIMIT" value="1" enum="Flag">
If [code]set[/code] there is rotational motion possible.
</constant>
- <constant name="FLAG_ENABLE_MOTOR" value="2">
+ <constant name="FLAG_ENABLE_MOTOR" value="2" enum="Flag">
If [code]set[/code] there is a rotational motor across these axes.
</constant>
- <constant name="FLAG_MAX" value="3">
+ <constant name="FLAG_MAX" value="3" enum="Flag">
End flag of FLAG_* constants, used internally.
</constant>
</constants>
diff --git a/doc/classes/Geometry.xml b/doc/classes/Geometry.xml
index 5da3ca0059..3f25d04f16 100644
--- a/doc/classes/Geometry.xml
+++ b/doc/classes/Geometry.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Geometry" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Geometry" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/GeometryInstance.xml b/doc/classes/GeometryInstance.xml
index f21dbecd04..981873b1fe 100644
--- a/doc/classes/GeometryInstance.xml
+++ b/doc/classes/GeometryInstance.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GeometryInstance" inherits="VisualInstance" category="Core" version="3.0-alpha">
+<class name="GeometryInstance" inherits="VisualInstance" category="Core" version="3.0-beta">
<brief_description>
Base node for geometry based visual instances.
</brief_description>
@@ -11,155 +11,55 @@
<demos>
</demos>
<methods>
- <method name="get_cast_shadows_setting" qualifiers="const">
- <return type="int" enum="GeometryInstance.ShadowCastingSetting">
- </return>
- <description>
- </description>
- </method>
- <method name="get_extra_cull_margin" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_flag" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="flag" type="int" enum="GeometryInstance.Flags">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_lod_max_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_lod_max_hysteresis" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_lod_min_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_lod_min_hysteresis" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_material_override" qualifiers="const">
- <return type="Material">
- </return>
- <description>
- Return the material override for the whole geometry.
- </description>
- </method>
- <method name="set_cast_shadows_setting">
- <return type="void">
- </return>
- <argument index="0" name="shadow_casting_setting" type="int" enum="GeometryInstance.ShadowCastingSetting">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_extra_cull_margin">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flag">
- <return type="void">
- </return>
- <argument index="0" name="flag" type="int" enum="GeometryInstance.Flags">
- </argument>
- <argument index="1" name="value" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_lod_max_distance">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_lod_max_hysteresis">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_lod_min_distance">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_lod_min_hysteresis">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_material_override">
- <return type="void">
- </return>
- <argument index="0" name="material" type="Material">
- </argument>
- <description>
- Set the material override for the whole geometry.
- </description>
- </method>
</methods>
<members>
<member name="cast_shadow" type="int" setter="set_cast_shadows_setting" getter="get_cast_shadows_setting" enum="GeometryInstance.ShadowCastingSetting">
+ The selected shadow casting flag. See SHADOW_CASTING_SETTING_* constants for values.
</member>
<member name="extra_cull_margin" type="float" setter="set_extra_cull_margin" getter="get_extra_cull_margin">
+ The extra distance added to the GeometryInstance's bounding box ([AABB]) to increase its cull box.
</member>
<member name="lod_max_distance" type="float" setter="set_lod_max_distance" getter="get_lod_max_distance">
+ The GeometryInstance's max LOD distance.
</member>
<member name="lod_max_hysteresis" type="float" setter="set_lod_max_hysteresis" getter="get_lod_max_hysteresis">
+ The GeometryInstance's max LOD margin.
</member>
<member name="lod_min_distance" type="float" setter="set_lod_min_distance" getter="get_lod_min_distance">
+ The GeometryInstance's min LOD distance.
</member>
<member name="lod_min_hysteresis" type="float" setter="set_lod_min_hysteresis" getter="get_lod_min_hysteresis">
+ The GeometryInstance's min LOD margin.
</member>
<member name="material_override" type="Material" setter="set_material_override" getter="get_material_override">
+ The material override for the whole geometry.
+ If there is a material in material_override, it will be used instead of any material set in any material slot of the mesh.
</member>
<member name="use_in_baked_light" type="bool" setter="set_flag" getter="get_flag">
+ If [code]true[/code] this GeometryInstance will be used when baking lights using a [GIProbe] and/or any other form of baked lighting.
</member>
</members>
<constants>
- <constant name="SHADOW_CASTING_SETTING_OFF" value="0">
+ <constant name="SHADOW_CASTING_SETTING_OFF" value="0" enum="ShadowCastingSetting">
+ Will not cast any shadows.
</constant>
- <constant name="SHADOW_CASTING_SETTING_ON" value="1">
+ <constant name="SHADOW_CASTING_SETTING_ON" value="1" enum="ShadowCastingSetting">
+ Will cast shadows from all visible faces in the GeometryInstance.
+ Will take culling into account, so faces not being rendered will not be taken into account when shadow casting.
</constant>
- <constant name="SHADOW_CASTING_SETTING_DOUBLE_SIDED" value="2">
+ <constant name="SHADOW_CASTING_SETTING_DOUBLE_SIDED" value="2" enum="ShadowCastingSetting">
+ Will cast shadows from all visible faces in the GeometryInstance.
+ Will not take culling into account, so all faces will be taken into account when shadow casting.
</constant>
- <constant name="SHADOW_CASTING_SETTING_SHADOWS_ONLY" value="3">
+ <constant name="SHADOW_CASTING_SETTING_SHADOWS_ONLY" value="3" enum="ShadowCastingSetting">
+ Will only show the shadows casted from this object.
+ In other words: The actual mesh will not be visible, only the shadows casted from the mesh.
</constant>
- <constant name="FLAG_USE_BAKED_LIGHT" value="0">
+ <constant name="FLAG_USE_BAKED_LIGHT" value="0" enum="Flags">
+ Will allow the GeometryInstance to be used when baking lights using a [GIProbe] and/or any other form of baked lighting.
+ Added documentation for GeometryInstance and VisualInstance
</constant>
- <constant name="FLAG_MAX" value="1">
+ <constant name="FLAG_MAX" value="1" enum="Flags">
</constant>
</constants>
</class>
diff --git a/doc/classes/Gradient.xml b/doc/classes/Gradient.xml
index d557ec11c5..b1a723ee47 100644
--- a/doc/classes/Gradient.xml
+++ b/doc/classes/Gradient.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Gradient" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Gradient" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Color interpolator node.
</brief_description>
@@ -31,13 +31,6 @@
Returns the color of the ramp color at index [i]point[/i]
</description>
</method>
- <method name="get_colors" qualifiers="const">
- <return type="PoolColorArray">
- </return>
- <description>
- Returns the colors in the ramp
- </description>
- </method>
<method name="get_offset" qualifiers="const">
<return type="float">
</return>
@@ -47,13 +40,6 @@
Returns the offset of the ramp color at index [i]point[/i]
</description>
</method>
- <method name="get_offsets" qualifiers="const">
- <return type="PoolRealArray">
- </return>
- <description>
- Returns the offsets for the colors in this ramp
- </description>
- </method>
<method name="get_point_count" qualifiers="const">
<return type="int">
</return>
@@ -90,15 +76,6 @@
Sets the color of the ramp color at index [i]point[/i]
</description>
</method>
- <method name="set_colors">
- <return type="void">
- </return>
- <argument index="0" name="colors" type="PoolColorArray">
- </argument>
- <description>
- Sets the colors for the specified amount of elements. Calling this function with a different number of elements than previously defined causes the ramp to resize its colors and offsets array to accommodate the new elements.
- </description>
- </method>
<method name="set_offset">
<return type="void">
</return>
@@ -110,15 +87,6 @@
Sets the offset for the ramp color at index [i]point[/i]
</description>
</method>
- <method name="set_offsets">
- <return type="void">
- </return>
- <argument index="0" name="offsets" type="PoolRealArray">
- </argument>
- <description>
- Sets the offset for the specified amount of elements. Calling this function with a different number of elements than previously defined causes the ramp to resize its colors and offsets array to accommodate the new elements, all new colors will be black by default.
- </description>
- </method>
</methods>
<members>
<member name="colors" type="PoolColorArray" setter="set_colors" getter="get_colors">
diff --git a/doc/classes/GradientTexture.xml b/doc/classes/GradientTexture.xml
index 88a776cb6a..e28dd2ce42 100644
--- a/doc/classes/GradientTexture.xml
+++ b/doc/classes/GradientTexture.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GradientTexture" inherits="Texture" category="Core" version="3.0-alpha">
+<class name="GradientTexture" inherits="Texture" category="Core" version="3.0-beta">
<brief_description>
Gradient filled texture.
</brief_description>
@@ -11,28 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_gradient" qualifiers="const">
- <return type="Gradient">
- </return>
- <description>
- </description>
- </method>
- <method name="set_gradient">
- <return type="void">
- </return>
- <argument index="0" name="gradient" type="Gradient">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_width">
- <return type="void">
- </return>
- <argument index="0" name="width" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="gradient" type="Gradient" setter="set_gradient" getter="get_gradient">
diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml
index a07809ce95..3bc7fed1d9 100644
--- a/doc/classes/GraphEdit.xml
+++ b/doc/classes/GraphEdit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GraphEdit" inherits="Control" category="Core" version="3.0-alpha">
+<class name="GraphEdit" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
GraphEdit is an area capable of showing various GraphNodes. It manages connection events between them.
</brief_description>
diff --git a/doc/classes/GraphNode.xml b/doc/classes/GraphNode.xml
index 2ad0cc1182..c1b18e4cd8 100644
--- a/doc/classes/GraphNode.xml
+++ b/doc/classes/GraphNode.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GraphNode" inherits="Container" category="Core" version="3.0-alpha">
+<class name="GraphNode" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
A GraphNode is a container with several input and output slots allowing connections between GraphNodes. Slots can have different, incompatible types.
</brief_description>
@@ -144,32 +144,12 @@
Return the (integer) type of right (output) 'idx' slot.
</description>
</method>
- <method name="get_title" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the title of the GraphNode.
- </description>
- </method>
- <method name="is_close_button_visible" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns true if the close button is shown. False otherwise.
- </description>
- </method>
<method name="is_comment" qualifiers="const">
<return type="bool">
</return>
<description>
</description>
</method>
- <method name="is_resizable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="is_selected">
<return type="bool">
</return>
@@ -219,14 +199,6 @@
<description>
</description>
</method>
- <method name="set_resizable">
- <return type="void">
- </return>
- <argument index="0" name="resizable" type="bool">
- </argument>
- <description>
- </description>
- </method>
<method name="set_selected">
<return type="void">
</return>
@@ -235,15 +207,6 @@
<description>
</description>
</method>
- <method name="set_show_close_button">
- <return type="void">
- </return>
- <argument index="0" name="show" type="bool">
- </argument>
- <description>
- Show the close button on the GraphNode if 'show' is true (disabled by default). If enabled, a connection on the signal close_request is needed for the close button to work.
- </description>
- </method>
<method name="set_slot">
<return type="void">
</return>
@@ -268,15 +231,6 @@
<description>
</description>
</method>
- <method name="set_title">
- <return type="void">
- </return>
- <argument index="0" name="title" type="String">
- </argument>
- <description>
- Set the title of the GraphNode.
- </description>
- </method>
</methods>
<members>
<member name="resizable" type="bool" setter="set_resizable" getter="is_resizable">
@@ -319,11 +273,11 @@
</signal>
</signals>
<constants>
- <constant name="OVERLAY_DISABLED" value="0">
+ <constant name="OVERLAY_DISABLED" value="0" enum="Overlay">
</constant>
- <constant name="OVERLAY_BREAKPOINT" value="1">
+ <constant name="OVERLAY_BREAKPOINT" value="1" enum="Overlay">
</constant>
- <constant name="OVERLAY_POSITION" value="2">
+ <constant name="OVERLAY_POSITION" value="2" enum="Overlay">
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/GridContainer.xml b/doc/classes/GridContainer.xml
index 01bbed6ea7..9deec7e410 100644
--- a/doc/classes/GridContainer.xml
+++ b/doc/classes/GridContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GridContainer" inherits="Container" category="Core" version="3.0-alpha">
+<class name="GridContainer" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
Grid container used to arrange elements in a grid like layout
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_columns" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the number of columns in this container
- </description>
- </method>
- <method name="set_columns">
- <return type="void">
- </return>
- <argument index="0" name="columns" type="int">
- </argument>
- <description>
- Sets the numbers of columns in the container, then reorder its children to accommodate the new layout
- </description>
- </method>
</methods>
<members>
<member name="columns" type="int" setter="set_columns" getter="get_columns">
diff --git a/doc/classes/GrooveJoint2D.xml b/doc/classes/GrooveJoint2D.xml
index 182bf5e8f1..6ccad9a155 100644
--- a/doc/classes/GrooveJoint2D.xml
+++ b/doc/classes/GrooveJoint2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GrooveJoint2D" inherits="Joint2D" category="Core" version="3.0-alpha">
+<class name="GrooveJoint2D" inherits="Joint2D" category="Core" version="3.0-beta">
<brief_description>
Groove constraint for 2D physics.
</brief_description>
@@ -11,38 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_initial_offset" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Set the final offset of the groove on body A.
- </description>
- </method>
- <method name="get_length" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the length of the groove.
- </description>
- </method>
- <method name="set_initial_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="float">
- </argument>
- <description>
- Set the initial offset of the groove on body A.
- </description>
- </method>
- <method name="set_length">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- Set the length of the groove.
- </description>
- </method>
</methods>
<members>
<member name="initial_offset" type="float" setter="set_initial_offset" getter="get_initial_offset">
diff --git a/doc/classes/HBoxContainer.xml b/doc/classes/HBoxContainer.xml
index 6ee9a2c1f4..c94aa709cb 100644
--- a/doc/classes/HBoxContainer.xml
+++ b/doc/classes/HBoxContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="HBoxContainer" inherits="BoxContainer" category="Core" version="3.0-alpha">
+<class name="HBoxContainer" inherits="BoxContainer" category="Core" version="3.0-beta">
<brief_description>
Horizontal box container.
</brief_description>
diff --git a/doc/classes/HScrollBar.xml b/doc/classes/HScrollBar.xml
index 7fe26ec863..0add27d996 100644
--- a/doc/classes/HScrollBar.xml
+++ b/doc/classes/HScrollBar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="HScrollBar" inherits="ScrollBar" category="Core" version="3.0-alpha">
+<class name="HScrollBar" inherits="ScrollBar" category="Core" version="3.0-beta">
<brief_description>
Horizontal scroll bar.
</brief_description>
diff --git a/doc/classes/HSeparator.xml b/doc/classes/HSeparator.xml
index 487f83ec1d..ee5422592f 100644
--- a/doc/classes/HSeparator.xml
+++ b/doc/classes/HSeparator.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="HSeparator" inherits="Separator" category="Core" version="3.0-alpha">
+<class name="HSeparator" inherits="Separator" category="Core" version="3.0-beta">
<brief_description>
Horizontal separator.
</brief_description>
diff --git a/doc/classes/HSlider.xml b/doc/classes/HSlider.xml
index b4a97425f3..a04ce73fcb 100644
--- a/doc/classes/HSlider.xml
+++ b/doc/classes/HSlider.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="HSlider" inherits="Slider" category="Core" version="3.0-alpha">
+<class name="HSlider" inherits="Slider" category="Core" version="3.0-beta">
<brief_description>
Horizontal slider.
</brief_description>
diff --git a/doc/classes/HSplitContainer.xml b/doc/classes/HSplitContainer.xml
index a107d30be7..4c1528f098 100644
--- a/doc/classes/HSplitContainer.xml
+++ b/doc/classes/HSplitContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="HSplitContainer" inherits="SplitContainer" category="Core" version="3.0-alpha">
+<class name="HSplitContainer" inherits="SplitContainer" category="Core" version="3.0-beta">
<brief_description>
Horizontal split container.
</brief_description>
diff --git a/doc/classes/HTTPClient.xml b/doc/classes/HTTPClient.xml
index 569c76ae0c..b1526b64c5 100644
--- a/doc/classes/HTTPClient.xml
+++ b/doc/classes/HTTPClient.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="HTTPClient" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="HTTPClient" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Hyper-text transfer protocol client.
</brief_description>
@@ -198,141 +198,141 @@
</method>
</methods>
<constants>
- <constant name="METHOD_GET" value="0">
+ <constant name="METHOD_GET" value="0" enum="Method">
</constant>
- <constant name="METHOD_HEAD" value="1">
+ <constant name="METHOD_HEAD" value="1" enum="Method">
</constant>
- <constant name="METHOD_POST" value="2">
+ <constant name="METHOD_POST" value="2" enum="Method">
</constant>
- <constant name="METHOD_PUT" value="3">
+ <constant name="METHOD_PUT" value="3" enum="Method">
</constant>
- <constant name="METHOD_DELETE" value="4">
+ <constant name="METHOD_DELETE" value="4" enum="Method">
</constant>
- <constant name="METHOD_OPTIONS" value="5">
+ <constant name="METHOD_OPTIONS" value="5" enum="Method">
</constant>
- <constant name="METHOD_TRACE" value="6">
+ <constant name="METHOD_TRACE" value="6" enum="Method">
</constant>
- <constant name="METHOD_CONNECT" value="7">
+ <constant name="METHOD_CONNECT" value="7" enum="Method">
</constant>
- <constant name="METHOD_MAX" value="8">
+ <constant name="METHOD_MAX" value="8" enum="Method">
</constant>
- <constant name="STATUS_DISCONNECTED" value="0">
+ <constant name="STATUS_DISCONNECTED" value="0" enum="Status">
</constant>
- <constant name="STATUS_RESOLVING" value="1">
+ <constant name="STATUS_RESOLVING" value="1" enum="Status">
</constant>
- <constant name="STATUS_CANT_RESOLVE" value="2">
+ <constant name="STATUS_CANT_RESOLVE" value="2" enum="Status">
</constant>
- <constant name="STATUS_CONNECTING" value="3">
+ <constant name="STATUS_CONNECTING" value="3" enum="Status">
</constant>
- <constant name="STATUS_CANT_CONNECT" value="4">
+ <constant name="STATUS_CANT_CONNECT" value="4" enum="Status">
</constant>
- <constant name="STATUS_CONNECTED" value="5">
+ <constant name="STATUS_CONNECTED" value="5" enum="Status">
</constant>
- <constant name="STATUS_REQUESTING" value="6">
+ <constant name="STATUS_REQUESTING" value="6" enum="Status">
</constant>
- <constant name="STATUS_BODY" value="7">
+ <constant name="STATUS_BODY" value="7" enum="Status">
</constant>
- <constant name="STATUS_CONNECTION_ERROR" value="8">
+ <constant name="STATUS_CONNECTION_ERROR" value="8" enum="Status">
</constant>
- <constant name="STATUS_SSL_HANDSHAKE_ERROR" value="9">
+ <constant name="STATUS_SSL_HANDSHAKE_ERROR" value="9" enum="Status">
</constant>
- <constant name="RESPONSE_CONTINUE" value="100">
+ <constant name="RESPONSE_CONTINUE" value="100" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_SWITCHING_PROTOCOLS" value="101">
+ <constant name="RESPONSE_SWITCHING_PROTOCOLS" value="101" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_PROCESSING" value="102">
+ <constant name="RESPONSE_PROCESSING" value="102" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_OK" value="200">
+ <constant name="RESPONSE_OK" value="200" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_CREATED" value="201">
+ <constant name="RESPONSE_CREATED" value="201" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_ACCEPTED" value="202">
+ <constant name="RESPONSE_ACCEPTED" value="202" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_NON_AUTHORITATIVE_INFORMATION" value="203">
+ <constant name="RESPONSE_NON_AUTHORITATIVE_INFORMATION" value="203" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_NO_CONTENT" value="204">
+ <constant name="RESPONSE_NO_CONTENT" value="204" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_RESET_CONTENT" value="205">
+ <constant name="RESPONSE_RESET_CONTENT" value="205" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_PARTIAL_CONTENT" value="206">
+ <constant name="RESPONSE_PARTIAL_CONTENT" value="206" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_MULTI_STATUS" value="207">
+ <constant name="RESPONSE_MULTI_STATUS" value="207" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_IM_USED" value="226">
+ <constant name="RESPONSE_IM_USED" value="226" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_MULTIPLE_CHOICES" value="300">
+ <constant name="RESPONSE_MULTIPLE_CHOICES" value="300" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_MOVED_PERMANENTLY" value="301">
+ <constant name="RESPONSE_MOVED_PERMANENTLY" value="301" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_FOUND" value="302">
+ <constant name="RESPONSE_FOUND" value="302" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_SEE_OTHER" value="303">
+ <constant name="RESPONSE_SEE_OTHER" value="303" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_NOT_MODIFIED" value="304">
+ <constant name="RESPONSE_NOT_MODIFIED" value="304" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_USE_PROXY" value="305">
+ <constant name="RESPONSE_USE_PROXY" value="305" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_TEMPORARY_REDIRECT" value="307">
+ <constant name="RESPONSE_TEMPORARY_REDIRECT" value="307" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_BAD_REQUEST" value="400">
+ <constant name="RESPONSE_BAD_REQUEST" value="400" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_UNAUTHORIZED" value="401">
+ <constant name="RESPONSE_UNAUTHORIZED" value="401" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_PAYMENT_REQUIRED" value="402">
+ <constant name="RESPONSE_PAYMENT_REQUIRED" value="402" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_FORBIDDEN" value="403">
+ <constant name="RESPONSE_FORBIDDEN" value="403" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_NOT_FOUND" value="404">
+ <constant name="RESPONSE_NOT_FOUND" value="404" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_METHOD_NOT_ALLOWED" value="405">
+ <constant name="RESPONSE_METHOD_NOT_ALLOWED" value="405" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_NOT_ACCEPTABLE" value="406">
+ <constant name="RESPONSE_NOT_ACCEPTABLE" value="406" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_PROXY_AUTHENTICATION_REQUIRED" value="407">
+ <constant name="RESPONSE_PROXY_AUTHENTICATION_REQUIRED" value="407" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_REQUEST_TIMEOUT" value="408">
+ <constant name="RESPONSE_REQUEST_TIMEOUT" value="408" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_CONFLICT" value="409">
+ <constant name="RESPONSE_CONFLICT" value="409" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_GONE" value="410">
+ <constant name="RESPONSE_GONE" value="410" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_LENGTH_REQUIRED" value="411">
+ <constant name="RESPONSE_LENGTH_REQUIRED" value="411" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_PRECONDITION_FAILED" value="412">
+ <constant name="RESPONSE_PRECONDITION_FAILED" value="412" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_REQUEST_ENTITY_TOO_LARGE" value="413">
+ <constant name="RESPONSE_REQUEST_ENTITY_TOO_LARGE" value="413" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_REQUEST_URI_TOO_LONG" value="414">
+ <constant name="RESPONSE_REQUEST_URI_TOO_LONG" value="414" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_UNSUPPORTED_MEDIA_TYPE" value="415">
+ <constant name="RESPONSE_UNSUPPORTED_MEDIA_TYPE" value="415" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_REQUESTED_RANGE_NOT_SATISFIABLE" value="416">
+ <constant name="RESPONSE_REQUESTED_RANGE_NOT_SATISFIABLE" value="416" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_EXPECTATION_FAILED" value="417">
+ <constant name="RESPONSE_EXPECTATION_FAILED" value="417" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_UNPROCESSABLE_ENTITY" value="422">
+ <constant name="RESPONSE_UNPROCESSABLE_ENTITY" value="422" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_LOCKED" value="423">
+ <constant name="RESPONSE_LOCKED" value="423" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_FAILED_DEPENDENCY" value="424">
+ <constant name="RESPONSE_FAILED_DEPENDENCY" value="424" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_UPGRADE_REQUIRED" value="426">
+ <constant name="RESPONSE_UPGRADE_REQUIRED" value="426" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_INTERNAL_SERVER_ERROR" value="500">
+ <constant name="RESPONSE_INTERNAL_SERVER_ERROR" value="500" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_NOT_IMPLEMENTED" value="501">
+ <constant name="RESPONSE_NOT_IMPLEMENTED" value="501" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_BAD_GATEWAY" value="502">
+ <constant name="RESPONSE_BAD_GATEWAY" value="502" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_SERVICE_UNAVAILABLE" value="503">
+ <constant name="RESPONSE_SERVICE_UNAVAILABLE" value="503" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_GATEWAY_TIMEOUT" value="504">
+ <constant name="RESPONSE_GATEWAY_TIMEOUT" value="504" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_HTTP_VERSION_NOT_SUPPORTED" value="505">
+ <constant name="RESPONSE_HTTP_VERSION_NOT_SUPPORTED" value="505" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_INSUFFICIENT_STORAGE" value="507">
+ <constant name="RESPONSE_INSUFFICIENT_STORAGE" value="507" enum="ResponseCode">
</constant>
- <constant name="RESPONSE_NOT_EXTENDED" value="510">
+ <constant name="RESPONSE_NOT_EXTENDED" value="510" enum="ResponseCode">
</constant>
</constants>
</class>
diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml
index a1a84d2211..7c37479295 100644
--- a/doc/classes/HTTPRequest.xml
+++ b/doc/classes/HTTPRequest.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="HTTPRequest" inherits="Node" category="Core" version="3.0-alpha">
+<class name="HTTPRequest" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
A Node with the ability to send HTTP requests.
</brief_description>
@@ -26,13 +26,6 @@
Return the response body length.
</description>
</method>
- <method name="get_body_size_limit" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return current body size limit.
- </description>
- </method>
<method name="get_download_file" qualifiers="const">
<return type="String">
</return>
@@ -54,20 +47,6 @@
Return the current status of the underlying [HTTPClient].
</description>
</method>
- <method name="get_max_redirects" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the maximum amount of redirects that will be followed.
- </description>
- </method>
- <method name="is_using_threads" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Whether this request is using threads.
- </description>
- </method>
<method name="request">
<return type="int" enum="Error">
</return>
@@ -84,15 +63,6 @@
<description>
</description>
</method>
- <method name="set_body_size_limit">
- <return type="void">
- </return>
- <argument index="0" name="bytes" type="int">
- </argument>
- <description>
- Set the response body size limit.
- </description>
- </method>
<method name="set_download_file">
<return type="void">
</return>
@@ -102,24 +72,6 @@
Set the file to download into. Outputs the response body into the file.
</description>
</method>
- <method name="set_max_redirects">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- Set the maximum amount of redirects the request will follow.
- </description>
- </method>
- <method name="set_use_threads">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Make this HTTPRequest use threads.
- </description>
- </method>
</methods>
<members>
<member name="body_size_limit" type="int" setter="set_body_size_limit" getter="get_body_size_limit">
@@ -145,39 +97,39 @@
</signal>
</signals>
<constants>
- <constant name="RESULT_SUCCESS" value="0">
+ <constant name="RESULT_SUCCESS" value="0" enum="Result">
Request successful.
</constant>
- <constant name="RESULT_CHUNKED_BODY_SIZE_MISMATCH" value="1">
+ <constant name="RESULT_CHUNKED_BODY_SIZE_MISMATCH" value="1" enum="Result">
</constant>
- <constant name="RESULT_CANT_CONNECT" value="2">
+ <constant name="RESULT_CANT_CONNECT" value="2" enum="Result">
Request failed while connecting.
</constant>
- <constant name="RESULT_CANT_RESOLVE" value="3">
+ <constant name="RESULT_CANT_RESOLVE" value="3" enum="Result">
Request failed while resolving.
</constant>
- <constant name="RESULT_CONNECTION_ERROR" value="4">
+ <constant name="RESULT_CONNECTION_ERROR" value="4" enum="Result">
Request failed due to connection(read/write) error.
</constant>
- <constant name="RESULT_SSL_HANDSHAKE_ERROR" value="5">
+ <constant name="RESULT_SSL_HANDSHAKE_ERROR" value="5" enum="Result">
Request failed on SSL handshake.
</constant>
- <constant name="RESULT_NO_RESPONSE" value="6">
+ <constant name="RESULT_NO_RESPONSE" value="6" enum="Result">
Request does not have a response(yet).
</constant>
- <constant name="RESULT_BODY_SIZE_LIMIT_EXCEEDED" value="7">
+ <constant name="RESULT_BODY_SIZE_LIMIT_EXCEEDED" value="7" enum="Result">
Request exceeded its maximum size limit, see [method set_body_size_limit].
</constant>
- <constant name="RESULT_REQUEST_FAILED" value="8">
+ <constant name="RESULT_REQUEST_FAILED" value="8" enum="Result">
Request failed. (unused)
</constant>
- <constant name="RESULT_DOWNLOAD_FILE_CANT_OPEN" value="9">
+ <constant name="RESULT_DOWNLOAD_FILE_CANT_OPEN" value="9" enum="Result">
HTTPRequest couldn't open the download file.
</constant>
- <constant name="RESULT_DOWNLOAD_FILE_WRITE_ERROR" value="10">
+ <constant name="RESULT_DOWNLOAD_FILE_WRITE_ERROR" value="10" enum="Result">
HTTPRequest couldn't write to the download file.
</constant>
- <constant name="RESULT_REDIRECT_LIMIT_REACHED" value="11">
+ <constant name="RESULT_REDIRECT_LIMIT_REACHED" value="11" enum="Result">
Request reached its maximum redirect limit, see [method set_max_redirects].
</constant>
</constants>
diff --git a/doc/classes/HingeJoint.xml b/doc/classes/HingeJoint.xml
index 2d91549a66..4a23f63d5a 100644
--- a/doc/classes/HingeJoint.xml
+++ b/doc/classes/HingeJoint.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="HingeJoint" inherits="Joint" category="Core" version="3.0-alpha">
+<class name="HingeJoint" inherits="Joint" category="Core" version="3.0-beta">
<brief_description>
A hinge between two 3D bodies.
</brief_description>
@@ -11,42 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_flag" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="flag" type="int" enum="HingeJoint.Flag">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_param" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="HingeJoint.Param">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flag">
- <return type="void">
- </return>
- <argument index="0" name="flag" type="int" enum="HingeJoint.Flag">
- </argument>
- <argument index="1" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="HingeJoint.Param">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="angular_limit/bias" type="float" setter="set_param" getter="get_param">
@@ -80,39 +44,39 @@
</member>
</members>
<constants>
- <constant name="PARAM_BIAS" value="0">
+ <constant name="PARAM_BIAS" value="0" enum="Param">
The speed with wich the two bodies get pulled together when they move in different directions.
</constant>
- <constant name="PARAM_LIMIT_UPPER" value="1">
+ <constant name="PARAM_LIMIT_UPPER" value="1" enum="Param">
The maximum rotation. only active if [member angular_limit/enable] is [code]true[/code].
</constant>
- <constant name="PARAM_LIMIT_LOWER" value="2">
+ <constant name="PARAM_LIMIT_LOWER" value="2" enum="Param">
The minimum rotation. only active if [member angular_limit/enable] is [code]true[/code].
</constant>
- <constant name="PARAM_LIMIT_BIAS" value="3">
+ <constant name="PARAM_LIMIT_BIAS" value="3" enum="Param">
The speed with which the rotation across the axis perpendicular to the hinge gets corrected.
</constant>
- <constant name="PARAM_LIMIT_SOFTNESS" value="4">
+ <constant name="PARAM_LIMIT_SOFTNESS" value="4" enum="Param">
</constant>
- <constant name="PARAM_LIMIT_RELAXATION" value="5">
+ <constant name="PARAM_LIMIT_RELAXATION" value="5" enum="Param">
The lower this value, the more the rotation gets slowed down.
</constant>
- <constant name="PARAM_MOTOR_TARGET_VELOCITY" value="6">
+ <constant name="PARAM_MOTOR_TARGET_VELOCITY" value="6" enum="Param">
Target speed for the motor.
</constant>
- <constant name="PARAM_MOTOR_MAX_IMPULSE" value="7">
+ <constant name="PARAM_MOTOR_MAX_IMPULSE" value="7" enum="Param">
Maximum acceleration for the motor.
</constant>
- <constant name="PARAM_MAX" value="8">
+ <constant name="PARAM_MAX" value="8" enum="Param">
End flag of PARAM_* constants, used internally.
</constant>
- <constant name="FLAG_USE_LIMIT" value="0">
+ <constant name="FLAG_USE_LIMIT" value="0" enum="Flag">
If [code]true[/code] the hinges maximum and minimum rotation, defined by [member angular_limit/lower] and [member angular_limit/upper] has effects.
</constant>
- <constant name="FLAG_ENABLE_MOTOR" value="1">
+ <constant name="FLAG_ENABLE_MOTOR" value="1" enum="Flag">
When activated, a motor turns the hinge.
</constant>
- <constant name="FLAG_MAX" value="2">
+ <constant name="FLAG_MAX" value="2" enum="Flag">
End flag of FLAG_* constants, used internally.
</constant>
</constants>
diff --git a/doc/classes/IP.xml b/doc/classes/IP.xml
index 721cf07441..09734e746c 100644
--- a/doc/classes/IP.xml
+++ b/doc/classes/IP.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="IP" inherits="Object" category="Core" version="3.0-alpha">
+<class name="IP" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
IP Protocol support functions.
</brief_description>
@@ -78,25 +78,25 @@
</method>
</methods>
<constants>
- <constant name="RESOLVER_STATUS_NONE" value="0">
+ <constant name="RESOLVER_STATUS_NONE" value="0" enum="ResolverStatus">
</constant>
- <constant name="RESOLVER_STATUS_WAITING" value="1">
+ <constant name="RESOLVER_STATUS_WAITING" value="1" enum="ResolverStatus">
</constant>
- <constant name="RESOLVER_STATUS_DONE" value="2">
+ <constant name="RESOLVER_STATUS_DONE" value="2" enum="ResolverStatus">
</constant>
- <constant name="RESOLVER_STATUS_ERROR" value="3">
+ <constant name="RESOLVER_STATUS_ERROR" value="3" enum="ResolverStatus">
</constant>
- <constant name="RESOLVER_MAX_QUERIES" value="32" enum="">
+ <constant name="RESOLVER_MAX_QUERIES" value="32">
</constant>
- <constant name="RESOLVER_INVALID_ID" value="-1" enum="">
+ <constant name="RESOLVER_INVALID_ID" value="-1">
</constant>
- <constant name="TYPE_NONE" value="0">
+ <constant name="TYPE_NONE" value="0" enum="Type">
</constant>
- <constant name="TYPE_IPV4" value="1">
+ <constant name="TYPE_IPV4" value="1" enum="Type">
</constant>
- <constant name="TYPE_IPV6" value="2">
+ <constant name="TYPE_IPV6" value="2" enum="Type">
</constant>
- <constant name="TYPE_ANY" value="3">
+ <constant name="TYPE_ANY" value="3" enum="Type">
</constant>
</constants>
</class>
diff --git a/doc/classes/IP_Unix.xml b/doc/classes/IP_Unix.xml
index bac7e374bb..28e8a3804b 100644
--- a/doc/classes/IP_Unix.xml
+++ b/doc/classes/IP_Unix.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="IP_Unix" inherits="IP" category="Core" version="3.0-alpha">
+<class name="IP_Unix" inherits="IP" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml
index b6eb26ce8c..54eaf6cc7a 100644
--- a/doc/classes/Image.xml
+++ b/doc/classes/Image.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Image" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Image" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Image datatype.
</brief_description>
@@ -318,7 +318,7 @@
<return type="void">
</return>
<description>
- Locks the data and prevents changes.
+ Locks the data for writing access.
</description>
</method>
<method name="normalmap_to_xy">
@@ -376,13 +376,13 @@
<argument index="2" name="color" type="Color">
</argument>
<description>
- Sets the [Color] of the pixel at [code](x, y)[/code] if the image is unlocked. Example:
+ Sets the [Color] of the pixel at [code](x, y)[/code] if the image is locked. Example:
[codeblock]
var img = Image.new()
img.lock()
- img.set_pixel(x, y, color) # Does not have an effect
- img.unlock()
img.set_pixel(x, y, color) # Works
+ img.unlock()
+ img.set_pixel(x, y, color) # Does not have an effect
[/codeblock]
</description>
</method>
@@ -404,7 +404,7 @@
<return type="void">
</return>
<description>
- Unlocks the data for writing access.
+ Unlocks the data and prevents changes.
</description>
</method>
</methods>
@@ -414,109 +414,109 @@
</member>
</members>
<constants>
- <constant name="FORMAT_L8" value="0">
+ <constant name="FORMAT_L8" value="0" enum="Format">
</constant>
- <constant name="FORMAT_LA8" value="1">
+ <constant name="FORMAT_LA8" value="1" enum="Format">
</constant>
- <constant name="FORMAT_R8" value="2">
+ <constant name="FORMAT_R8" value="2" enum="Format">
</constant>
- <constant name="FORMAT_RG8" value="3">
+ <constant name="FORMAT_RG8" value="3" enum="Format">
</constant>
- <constant name="FORMAT_RGB8" value="4">
+ <constant name="FORMAT_RGB8" value="4" enum="Format">
</constant>
- <constant name="FORMAT_RGBA8" value="5">
+ <constant name="FORMAT_RGBA8" value="5" enum="Format">
</constant>
- <constant name="FORMAT_RGBA4444" value="6">
+ <constant name="FORMAT_RGBA4444" value="6" enum="Format">
</constant>
- <constant name="FORMAT_RGBA5551" value="7">
+ <constant name="FORMAT_RGBA5551" value="7" enum="Format">
</constant>
- <constant name="FORMAT_RF" value="8">
+ <constant name="FORMAT_RF" value="8" enum="Format">
</constant>
- <constant name="FORMAT_RGF" value="9">
+ <constant name="FORMAT_RGF" value="9" enum="Format">
</constant>
- <constant name="FORMAT_RGBF" value="10">
+ <constant name="FORMAT_RGBF" value="10" enum="Format">
</constant>
- <constant name="FORMAT_RGBAF" value="11">
+ <constant name="FORMAT_RGBAF" value="11" enum="Format">
</constant>
- <constant name="FORMAT_RH" value="12">
+ <constant name="FORMAT_RH" value="12" enum="Format">
</constant>
- <constant name="FORMAT_RGH" value="13">
+ <constant name="FORMAT_RGH" value="13" enum="Format">
</constant>
- <constant name="FORMAT_RGBH" value="14">
+ <constant name="FORMAT_RGBH" value="14" enum="Format">
</constant>
- <constant name="FORMAT_RGBAH" value="15">
+ <constant name="FORMAT_RGBAH" value="15" enum="Format">
</constant>
- <constant name="FORMAT_RGBE9995" value="16">
+ <constant name="FORMAT_RGBE9995" value="16" enum="Format">
</constant>
- <constant name="FORMAT_DXT1" value="17">
+ <constant name="FORMAT_DXT1" value="17" enum="Format">
</constant>
- <constant name="FORMAT_DXT3" value="18">
+ <constant name="FORMAT_DXT3" value="18" enum="Format">
</constant>
- <constant name="FORMAT_DXT5" value="19">
+ <constant name="FORMAT_DXT5" value="19" enum="Format">
</constant>
- <constant name="FORMAT_RGTC_R" value="20">
+ <constant name="FORMAT_RGTC_R" value="20" enum="Format">
</constant>
- <constant name="FORMAT_RGTC_RG" value="21">
+ <constant name="FORMAT_RGTC_RG" value="21" enum="Format">
</constant>
- <constant name="FORMAT_BPTC_RGBA" value="22">
+ <constant name="FORMAT_BPTC_RGBA" value="22" enum="Format">
</constant>
- <constant name="FORMAT_BPTC_RGBF" value="23">
+ <constant name="FORMAT_BPTC_RGBF" value="23" enum="Format">
</constant>
- <constant name="FORMAT_BPTC_RGBFU" value="24">
+ <constant name="FORMAT_BPTC_RGBFU" value="24" enum="Format">
</constant>
- <constant name="FORMAT_PVRTC2" value="25">
+ <constant name="FORMAT_PVRTC2" value="25" enum="Format">
</constant>
- <constant name="FORMAT_PVRTC2A" value="26">
+ <constant name="FORMAT_PVRTC2A" value="26" enum="Format">
</constant>
- <constant name="FORMAT_PVRTC4" value="27">
+ <constant name="FORMAT_PVRTC4" value="27" enum="Format">
</constant>
- <constant name="FORMAT_PVRTC4A" value="28">
+ <constant name="FORMAT_PVRTC4A" value="28" enum="Format">
</constant>
- <constant name="FORMAT_ETC" value="29">
+ <constant name="FORMAT_ETC" value="29" enum="Format">
</constant>
- <constant name="FORMAT_ETC2_R11" value="30">
+ <constant name="FORMAT_ETC2_R11" value="30" enum="Format">
</constant>
- <constant name="FORMAT_ETC2_R11S" value="31">
+ <constant name="FORMAT_ETC2_R11S" value="31" enum="Format">
</constant>
- <constant name="FORMAT_ETC2_RG11" value="32">
+ <constant name="FORMAT_ETC2_RG11" value="32" enum="Format">
</constant>
- <constant name="FORMAT_ETC2_RG11S" value="33">
+ <constant name="FORMAT_ETC2_RG11S" value="33" enum="Format">
</constant>
- <constant name="FORMAT_ETC2_RGB8" value="34">
+ <constant name="FORMAT_ETC2_RGB8" value="34" enum="Format">
</constant>
- <constant name="FORMAT_ETC2_RGBA8" value="35">
+ <constant name="FORMAT_ETC2_RGBA8" value="35" enum="Format">
</constant>
- <constant name="FORMAT_ETC2_RGB8A1" value="36">
+ <constant name="FORMAT_ETC2_RGB8A1" value="36" enum="Format">
</constant>
- <constant name="FORMAT_MAX" value="37">
+ <constant name="FORMAT_MAX" value="37" enum="Format">
</constant>
- <constant name="INTERPOLATE_NEAREST" value="0">
+ <constant name="INTERPOLATE_NEAREST" value="0" enum="Interpolation">
</constant>
- <constant name="INTERPOLATE_BILINEAR" value="1">
+ <constant name="INTERPOLATE_BILINEAR" value="1" enum="Interpolation">
</constant>
- <constant name="INTERPOLATE_CUBIC" value="2">
+ <constant name="INTERPOLATE_CUBIC" value="2" enum="Interpolation">
</constant>
- <constant name="ALPHA_NONE" value="0">
+ <constant name="ALPHA_NONE" value="0" enum="AlphaMode">
</constant>
- <constant name="ALPHA_BIT" value="1">
+ <constant name="ALPHA_BIT" value="1" enum="AlphaMode">
</constant>
- <constant name="ALPHA_BLEND" value="2">
+ <constant name="ALPHA_BLEND" value="2" enum="AlphaMode">
</constant>
- <constant name="COMPRESS_S3TC" value="0">
+ <constant name="COMPRESS_S3TC" value="0" enum="CompressMode">
</constant>
- <constant name="COMPRESS_PVRTC2" value="1">
+ <constant name="COMPRESS_PVRTC2" value="1" enum="CompressMode">
</constant>
- <constant name="COMPRESS_PVRTC4" value="2">
+ <constant name="COMPRESS_PVRTC4" value="2" enum="CompressMode">
</constant>
- <constant name="COMPRESS_ETC" value="3">
+ <constant name="COMPRESS_ETC" value="3" enum="CompressMode">
</constant>
- <constant name="COMPRESS_ETC2" value="4">
+ <constant name="COMPRESS_ETC2" value="4" enum="CompressMode">
</constant>
- <constant name="COMPRESS_SOURCE_GENERIC" value="0">
+ <constant name="COMPRESS_SOURCE_GENERIC" value="0" enum="CompressSource">
</constant>
- <constant name="COMPRESS_SOURCE_SRGB" value="1">
+ <constant name="COMPRESS_SOURCE_SRGB" value="1" enum="CompressSource">
</constant>
- <constant name="COMPRESS_SOURCE_NORMAL" value="2">
+ <constant name="COMPRESS_SOURCE_NORMAL" value="2" enum="CompressSource">
</constant>
</constants>
</class>
diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml
index d179794c1f..a20af677cb 100644
--- a/doc/classes/ImageTexture.xml
+++ b/doc/classes/ImageTexture.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ImageTexture" inherits="Texture" category="Core" version="3.0-alpha">
+<class name="ImageTexture" inherits="Texture" category="Core" version="3.0-beta">
<brief_description>
A [Texture] based on an [Image].
</brief_description>
@@ -107,13 +107,13 @@
</method>
</methods>
<constants>
- <constant name="STORAGE_RAW" value="0">
+ <constant name="STORAGE_RAW" value="0" enum="Storage">
[Image] data is stored raw and unaltered.
</constant>
- <constant name="STORAGE_COMPRESS_LOSSY" value="1">
+ <constant name="STORAGE_COMPRESS_LOSSY" value="1" enum="Storage">
[Image] data is compressed with a lossy algorithm. You can set the storage quality with [method set_lossy_storage_quality].
</constant>
- <constant name="STORAGE_COMPRESS_LOSSLESS" value="2">
+ <constant name="STORAGE_COMPRESS_LOSSLESS" value="2" enum="Storage">
[Image] data is compressed with a lossless algorithm.
</constant>
</constants>
diff --git a/doc/classes/ImmediateGeometry.xml b/doc/classes/ImmediateGeometry.xml
index 7ad09c3fe9..11b513fb84 100644
--- a/doc/classes/ImmediateGeometry.xml
+++ b/doc/classes/ImmediateGeometry.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ImmediateGeometry" inherits="GeometryInstance" category="Core" version="3.0-alpha">
+<class name="ImmediateGeometry" inherits="GeometryInstance" category="Core" version="3.0-beta">
<brief_description>
Draws simple geometry from code.
</brief_description>
diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml
index 114c8d2c59..1200ac5170 100644
--- a/doc/classes/Input.xml
+++ b/doc/classes/Input.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Input" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Input" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
A Singleton that deals with inputs.
</brief_description>
@@ -336,16 +336,16 @@
</signal>
</signals>
<constants>
- <constant name="MOUSE_MODE_VISIBLE" value="0">
+ <constant name="MOUSE_MODE_VISIBLE" value="0" enum="MouseMode">
Makes the mouse cursor visible if it is hidden.
</constant>
- <constant name="MOUSE_MODE_HIDDEN" value="1">
+ <constant name="MOUSE_MODE_HIDDEN" value="1" enum="MouseMode">
Makes the mouse cursor hidden if it is visible.
</constant>
- <constant name="MOUSE_MODE_CAPTURED" value="2">
+ <constant name="MOUSE_MODE_CAPTURED" value="2" enum="MouseMode">
Captures the mouse. The mouse will be hidden and unable to leave the game window. But it will still register movement and mouse button presses.
</constant>
- <constant name="MOUSE_MODE_CONFINED" value="3">
+ <constant name="MOUSE_MODE_CONFINED" value="3" enum="MouseMode">
</constant>
</constants>
</class>
diff --git a/doc/classes/InputDefault.xml b/doc/classes/InputDefault.xml
index 9cbc993af1..28cba56334 100644
--- a/doc/classes/InputDefault.xml
+++ b/doc/classes/InputDefault.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputDefault" inherits="Input" category="Core" version="3.0-alpha">
+<class name="InputDefault" inherits="Input" category="Core" version="3.0-beta">
<brief_description>
Default implementation of the [Input] class.
</brief_description>
diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml
index e4404fc258..cc31da0627 100644
--- a/doc/classes/InputEvent.xml
+++ b/doc/classes/InputEvent.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEvent" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="InputEvent" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Generic input event
</brief_description>
@@ -28,13 +28,6 @@
Returns a [String] representation of the event.
</description>
</method>
- <method name="get_device" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the device's id that generated the event.
- </description>
- </method>
<method name="get_id" qualifiers="const">
<return type="int">
</return>
@@ -90,14 +83,6 @@
Returns [code]true[/code] if this input event is pressed. Not relevant for the event types [code]MOUSE_MOTION[/code], [code]SCREEN_DRAG[/code] or [code]NONE[/code].
</description>
</method>
- <method name="set_device">
- <return type="void">
- </return>
- <argument index="0" name="device" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="set_id">
<return type="void">
</return>
diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml
index 383f8360fb..9d05c44498 100644
--- a/doc/classes/InputEventAction.xml
+++ b/doc/classes/InputEventAction.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventAction" inherits="InputEvent" category="Core" version="3.0-alpha">
+<class name="InputEventAction" inherits="InputEvent" category="Core" version="3.0-beta">
<brief_description>
Input event type for actions.
</brief_description>
@@ -12,28 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_action" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_action">
- <return type="void">
- </return>
- <argument index="0" name="action" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pressed">
- <return type="void">
- </return>
- <argument index="0" name="pressed" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="action" type="String" setter="set_action" getter="get_action">
diff --git a/doc/classes/InputEventGesture.xml b/doc/classes/InputEventGesture.xml
new file mode 100644
index 0000000000..bf8f9667e3
--- /dev/null
+++ b/doc/classes/InputEventGesture.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="InputEventGesture" inherits="InputEventWithModifiers" category="Core" version="3.0-beta">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <demos>
+ </demos>
+ <methods>
+ </methods>
+ <members>
+ <member name="position" type="Vector2" setter="set_position" getter="get_position">
+ </member>
+ </members>
+ <constants>
+ </constants>
+</class>
diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml
index fecd65e6a2..66c7320369 100644
--- a/doc/classes/InputEventJoypadButton.xml
+++ b/doc/classes/InputEventJoypadButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventJoypadButton" inherits="InputEvent" category="Core" version="3.0-alpha">
+<class name="InputEventJoypadButton" inherits="InputEvent" category="Core" version="3.0-beta">
<brief_description>
Input event for gamepad buttons.
</brief_description>
@@ -12,42 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_button_index" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_pressure" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_button_index">
- <return type="void">
- </return>
- <argument index="0" name="button_index" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pressed">
- <return type="void">
- </return>
- <argument index="0" name="pressed" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pressure">
- <return type="void">
- </return>
- <argument index="0" name="pressure" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="button_index" type="int" setter="set_button_index" getter="get_button_index">
diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml
index a89c91fbe6..f52225d302 100644
--- a/doc/classes/InputEventJoypadMotion.xml
+++ b/doc/classes/InputEventJoypadMotion.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventJoypadMotion" inherits="InputEvent" category="Core" version="3.0-alpha">
+<class name="InputEventJoypadMotion" inherits="InputEvent" category="Core" version="3.0-beta">
<brief_description>
Input event type for gamepad joysticks and other motions. For buttons see [code]InputEventJoypadMotion[/code].
</brief_description>
@@ -12,34 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_axis" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_axis_value" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_axis">
- <return type="void">
- </return>
- <argument index="0" name="axis" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_axis_value">
- <return type="void">
- </return>
- <argument index="0" name="axis_value" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="axis" type="int" setter="set_axis" getter="get_axis">
diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml
index 440e1347f8..c8cbab59d4 100644
--- a/doc/classes/InputEventKey.xml
+++ b/doc/classes/InputEventKey.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventKey" inherits="InputEventWithModifiers" category="Core" version="3.0-alpha">
+<class name="InputEventKey" inherits="InputEventWithModifiers" category="Core" version="3.0-beta">
<brief_description>
Input event type for keyboard events.
</brief_description>
@@ -12,56 +12,12 @@
<demos>
</demos>
<methods>
- <method name="get_scancode" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
<method name="get_scancode_with_modifiers" qualifiers="const">
<return type="int">
</return>
<description>
</description>
</method>
- <method name="get_unicode" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_echo">
- <return type="void">
- </return>
- <argument index="0" name="echo" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pressed">
- <return type="void">
- </return>
- <argument index="0" name="pressed" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_scancode">
- <return type="void">
- </return>
- <argument index="0" name="scancode" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_unicode">
- <return type="void">
- </return>
- <argument index="0" name="unicode" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="echo" type="bool" setter="set_echo" getter="is_echo">
diff --git a/doc/classes/InputEventMagnifyGesture.xml b/doc/classes/InputEventMagnifyGesture.xml
new file mode 100644
index 0000000000..796f9e6a2f
--- /dev/null
+++ b/doc/classes/InputEventMagnifyGesture.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="InputEventMagnifyGesture" inherits="InputEventGesture" category="Core" version="3.0-beta">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <demos>
+ </demos>
+ <methods>
+ </methods>
+ <members>
+ <member name="factor" type="float" setter="set_factor" getter="get_factor">
+ </member>
+ </members>
+ <constants>
+ </constants>
+</class>
diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml
index 24a771cef3..748cc4b9f9 100644
--- a/doc/classes/InputEventMouse.xml
+++ b/doc/classes/InputEventMouse.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventMouse" inherits="InputEventWithModifiers" category="Core" version="3.0-alpha">
+<class name="InputEventMouse" inherits="InputEventWithModifiers" category="Core" version="3.0-beta">
<brief_description>
Base input event type for mouse events.
</brief_description>
@@ -12,48 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_button_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_global_position" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_position" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="set_button_mask">
- <return type="void">
- </return>
- <argument index="0" name="button_mask" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_global_position">
- <return type="void">
- </return>
- <argument index="0" name="global_position" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_position">
- <return type="void">
- </return>
- <argument index="0" name="position" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask">
diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml
index ff7c1da34e..cd1037b022 100644
--- a/doc/classes/InputEventMouseButton.xml
+++ b/doc/classes/InputEventMouseButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventMouseButton" inherits="InputEventMouse" category="Core" version="3.0-alpha">
+<class name="InputEventMouseButton" inherits="InputEventMouse" category="Core" version="3.0-beta">
<brief_description>
Input event type for mouse button events.
</brief_description>
@@ -12,56 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_button_index" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_factor">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="is_doubleclick" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_button_index">
- <return type="void">
- </return>
- <argument index="0" name="button_index" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_doubleclick">
- <return type="void">
- </return>
- <argument index="0" name="doubleclick" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_factor">
- <return type="void">
- </return>
- <argument index="0" name="factor" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pressed">
- <return type="void">
- </return>
- <argument index="0" name="pressed" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="button_index" type="int" setter="set_button_index" getter="get_button_index">
diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml
index 6c9165fea8..192c8dbe16 100644
--- a/doc/classes/InputEventMouseMotion.xml
+++ b/doc/classes/InputEventMouseMotion.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventMouseMotion" inherits="InputEventMouse" category="Core" version="3.0-alpha">
+<class name="InputEventMouseMotion" inherits="InputEventMouse" category="Core" version="3.0-beta">
<brief_description>
Input event type for mouse motion events.
</brief_description>
@@ -12,34 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_relative" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_speed" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="set_relative">
- <return type="void">
- </return>
- <argument index="0" name="relative" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_speed">
- <return type="void">
- </return>
- <argument index="0" name="speed" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="relative" type="Vector2" setter="set_relative" getter="get_relative">
diff --git a/doc/classes/InputEventPanGesture.xml b/doc/classes/InputEventPanGesture.xml
new file mode 100644
index 0000000000..a17f5823ba
--- /dev/null
+++ b/doc/classes/InputEventPanGesture.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="InputEventPanGesture" inherits="InputEventGesture" category="Core" version="3.0-beta">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <demos>
+ </demos>
+ <methods>
+ </methods>
+ <members>
+ <member name="delta" type="Vector2" setter="set_delta" getter="get_delta">
+ </member>
+ </members>
+ <constants>
+ </constants>
+</class>
diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml
index a68f444a7c..43553f97bd 100644
--- a/doc/classes/InputEventScreenDrag.xml
+++ b/doc/classes/InputEventScreenDrag.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventScreenDrag" inherits="InputEvent" category="Core" version="3.0-alpha">
+<class name="InputEventScreenDrag" inherits="InputEvent" category="Core" version="3.0-beta">
<brief_description>
Input event type for screen drag events.
(only available on mobile devices)
@@ -13,62 +13,6 @@
<demos>
</demos>
<methods>
- <method name="get_index" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_position" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_relative" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_speed" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="set_index">
- <return type="void">
- </return>
- <argument index="0" name="index" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_position">
- <return type="void">
- </return>
- <argument index="0" name="position" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_relative">
- <return type="void">
- </return>
- <argument index="0" name="relative" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_speed">
- <return type="void">
- </return>
- <argument index="0" name="speed" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="index" type="int" setter="set_index" getter="get_index">
diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml
index d0c7181e84..6f5ebc9481 100644
--- a/doc/classes/InputEventScreenTouch.xml
+++ b/doc/classes/InputEventScreenTouch.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventScreenTouch" inherits="InputEvent" category="Core" version="3.0-alpha">
+<class name="InputEventScreenTouch" inherits="InputEvent" category="Core" version="3.0-beta">
<brief_description>
Input event type for screen touch events.
(only available on mobile devices)
@@ -13,42 +13,6 @@
<demos>
</demos>
<methods>
- <method name="get_index" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_position" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="set_index">
- <return type="void">
- </return>
- <argument index="0" name="index" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_position">
- <return type="void">
- </return>
- <argument index="0" name="position" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pressed">
- <return type="void">
- </return>
- <argument index="0" name="pressed" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="index" type="int" setter="set_index" getter="get_index">
diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml
index 8e5ffed149..70d2b57e8d 100644
--- a/doc/classes/InputEventWithModifiers.xml
+++ b/doc/classes/InputEventWithModifiers.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputEventWithModifiers" inherits="InputEvent" category="Core" version="3.0-alpha">
+<class name="InputEventWithModifiers" inherits="InputEvent" category="Core" version="3.0-beta">
<brief_description>
Base class for keys events with modifiers.
</brief_description>
@@ -12,76 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_alt" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_command" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_control" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_metakey" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_shift" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_alt">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_command">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_control">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_metakey">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shift">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="alt" type="bool" setter="set_alt" getter="get_alt">
diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml
index d5a1d85def..ff5491bde2 100644
--- a/doc/classes/InputMap.xml
+++ b/doc/classes/InputMap.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InputMap" inherits="Object" category="Core" version="3.0-alpha">
+<class name="InputMap" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Singleton that manages [InputEventAction].
</brief_description>
diff --git a/doc/classes/InstancePlaceholder.xml b/doc/classes/InstancePlaceholder.xml
index 4105065cb6..570ce239ff 100644
--- a/doc/classes/InstancePlaceholder.xml
+++ b/doc/classes/InstancePlaceholder.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InstancePlaceholder" inherits="Node" category="Core" version="3.0-alpha">
+<class name="InstancePlaceholder" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Placeholder for the root [Node] of a [PackedScene].
</brief_description>
diff --git a/doc/classes/InterpolatedCamera.xml b/doc/classes/InterpolatedCamera.xml
index bd532bec85..b268825efe 100644
--- a/doc/classes/InterpolatedCamera.xml
+++ b/doc/classes/InterpolatedCamera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="InterpolatedCamera" inherits="Camera" category="Core" version="3.0-alpha">
+<class name="InterpolatedCamera" inherits="Camera" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,40 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_speed" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_target_path" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="is_interpolation_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_interpolation_enabled">
- <return type="void">
- </return>
- <argument index="0" name="target_path" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_speed">
- <return type="void">
- </return>
- <argument index="0" name="speed" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="set_target">
<return type="void">
</return>
@@ -51,14 +17,6 @@
<description>
</description>
</method>
- <method name="set_target_path">
- <return type="void">
- </return>
- <argument index="0" name="target_path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="enabled" type="bool" setter="set_interpolation_enabled" getter="is_interpolation_enabled">
diff --git a/doc/classes/ItemList.xml b/doc/classes/ItemList.xml
index 950b43417b..f3d0c271ac 100644
--- a/doc/classes/ItemList.xml
+++ b/doc/classes/ItemList.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ItemList" inherits="Control" category="Core" version="3.0-alpha">
+<class name="ItemList" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Control that provides a list of selectable items (and/or icons) in a single column, or optionally in multiple columns.
</brief_description>
@@ -53,38 +53,12 @@
Ensure selection is visible, adjusting the scroll position as necessary.
</description>
</method>
- <method name="get_allow_rmb_select" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether or not items may be selected via right mouse clicking.
- </description>
- </method>
- <method name="get_fixed_column_width" qualifiers="const">
- <return type="int">
- </return>
- <description>
- If column size has been fixed to a value, return that value.
- </description>
- </method>
<method name="get_fixed_icon_size" qualifiers="const">
<return type="Vector2">
</return>
<description>
</description>
</method>
- <method name="get_icon_mode" qualifiers="const">
- <return type="int" enum="ItemList.IconMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_icon_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_item_at_position" qualifiers="const">
<return type="int">
</return>
@@ -153,26 +127,6 @@
Return tooltip hint for specified item index.
</description>
</method>
- <method name="get_max_columns" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return total number of columns in use by the list.
- </description>
- </method>
- <method name="get_max_text_lines" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return total number of lines currently in use by the list.
- </description>
- </method>
- <method name="get_select_mode" qualifiers="const">
- <return type="int" enum="ItemList.SelectMode">
- </return>
- <description>
- </description>
- </method>
<method name="get_selected_items">
<return type="PoolIntArray">
</return>
@@ -187,12 +141,6 @@
Returns the current vertical scroll bar for the List.
</description>
</method>
- <method name="has_auto_height" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="is_item_disabled" qualifiers="const">
<return type="bool">
</return>
@@ -220,13 +168,6 @@
Returns whether the tooltip is enabled for specified item index.
</description>
</method>
- <method name="is_same_column_width" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether or not all columns of the list are of the same size.
- </description>
- </method>
<method name="is_selected" qualifiers="const">
<return type="bool">
</return>
@@ -257,32 +198,6 @@
Note: This method does not trigger the item selection signal.
</description>
</method>
- <method name="set_allow_rmb_select">
- <return type="void">
- </return>
- <argument index="0" name="allow" type="bool">
- </argument>
- <description>
- Allow (or disallow) selection of (selectable) items in the list using right mouse button.
- </description>
- </method>
- <method name="set_auto_height">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fixed_column_width">
- <return type="void">
- </return>
- <argument index="0" name="width" type="int">
- </argument>
- <description>
- Set the size (width) all columns in the list are to use.
- </description>
- </method>
<method name="set_fixed_icon_size">
<return type="void">
</return>
@@ -291,22 +206,6 @@
<description>
</description>
</method>
- <method name="set_icon_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="ItemList.IconMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_icon_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="set_item_custom_bg_color">
<return type="void">
</return>
@@ -405,41 +304,6 @@
Sets whether the tooltip is enabled for specified item index.
</description>
</method>
- <method name="set_max_columns">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- Set maximum number of columns to use for the list.
- </description>
- </method>
- <method name="set_max_text_lines">
- <return type="void">
- </return>
- <argument index="0" name="lines" type="int">
- </argument>
- <description>
- Set maximum number of lines to use for the list.
- </description>
- </method>
- <method name="set_same_column_width">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Sets a fixed size (width) to use for all columns of the list.
- </description>
- </method>
- <method name="set_select_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="ItemList.SelectMode">
- </argument>
- <description>
- </description>
- </method>
<method name="sort_items_by_text">
<return type="void">
</return>
@@ -468,8 +332,6 @@
</member>
<member name="icon_scale" type="float" setter="set_icon_scale" getter="get_icon_scale">
</member>
- <member name="items" type="Array" setter="_set_items" getter="_get_items">
- </member>
<member name="max_columns" type="int" setter="set_max_columns" getter="get_max_columns">
</member>
<member name="max_text_lines" type="int" setter="set_max_text_lines" getter="get_max_text_lines">
@@ -514,15 +376,25 @@
Fired when a multiple selection is altered on a list allowing multiple selection.
</description>
</signal>
+ <signal name="nothing_selected">
+ <description>
+ </description>
+ </signal>
+ <signal name="rmb_clicked">
+ <argument index="0" name="at_position" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </signal>
</signals>
<constants>
- <constant name="ICON_MODE_TOP" value="0">
+ <constant name="ICON_MODE_TOP" value="0" enum="IconMode">
</constant>
- <constant name="ICON_MODE_LEFT" value="1">
+ <constant name="ICON_MODE_LEFT" value="1" enum="IconMode">
</constant>
- <constant name="SELECT_SINGLE" value="0">
+ <constant name="SELECT_SINGLE" value="0" enum="SelectMode">
</constant>
- <constant name="SELECT_MULTI" value="1">
+ <constant name="SELECT_MULTI" value="1" enum="SelectMode">
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/JSON.xml b/doc/classes/JSON.xml
index e945a580db..bb48833878 100644
--- a/doc/classes/JSON.xml
+++ b/doc/classes/JSON.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="JSON" inherits="Object" category="Core" version="3.0-alpha">
+<class name="JSON" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Helper class for parsing JSON data.
</brief_description>
@@ -25,6 +25,10 @@
</return>
<argument index="0" name="value" type="Variant">
</argument>
+ <argument index="1" name="indent" type="String" default="&quot;&quot;">
+ </argument>
+ <argument index="2" name="sort_keys" type="bool" default="false">
+ </argument>
<description>
Converts a Variant var to JSON text and returns the result. Useful for serializing data to store or send over the network.
</description>
diff --git a/doc/classes/JSONParseResult.xml b/doc/classes/JSONParseResult.xml
index 5bf9298f7a..77145eff6a 100644
--- a/doc/classes/JSONParseResult.xml
+++ b/doc/classes/JSONParseResult.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="JSONParseResult" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="JSONParseResult" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Data class wrapper for decoded JSON.
</brief_description>
@@ -11,62 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_error" qualifiers="const">
- <return type="int" enum="Error">
- </return>
- <description>
- </description>
- </method>
- <method name="get_error_line" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_error_string" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_result" qualifiers="const">
- <return type="Variant">
- </return>
- <description>
- </description>
- </method>
- <method name="set_error">
- <return type="void">
- </return>
- <argument index="0" name="error" type="int" enum="Error">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_error_line">
- <return type="void">
- </return>
- <argument index="0" name="error_line" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_error_string">
- <return type="void">
- </return>
- <argument index="0" name="error_string" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_result">
- <return type="void">
- </return>
- <argument index="0" name="result" type="Variant">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="error" type="int" setter="set_error" getter="get_error" enum="Error">
diff --git a/doc/classes/JavaScript.xml b/doc/classes/JavaScript.xml
index 9dd386f08e..027e4764ac 100644
--- a/doc/classes/JavaScript.xml
+++ b/doc/classes/JavaScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="JavaScript" inherits="Object" category="Core" version="3.0-alpha">
+<class name="JavaScript" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Singleton that connects the engine with the browser's JavaScript context in HTML5 export.
</brief_description>
diff --git a/doc/classes/Joint.xml b/doc/classes/Joint.xml
index 30ece8df1f..443aec21a8 100644
--- a/doc/classes/Joint.xml
+++ b/doc/classes/Joint.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Joint" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="Joint" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Base class for all 3D joints
</brief_description>
@@ -11,62 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_exclude_nodes_from_collision" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_node_a" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_node_b" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_solver_priority" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_exclude_nodes_from_collision">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_node_a">
- <return type="void">
- </return>
- <argument index="0" name="node" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_node_b">
- <return type="void">
- </return>
- <argument index="0" name="node" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_solver_priority">
- <return type="void">
- </return>
- <argument index="0" name="priority" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="collision/exclude_nodes" type="bool" setter="set_exclude_nodes_from_collision" getter="get_exclude_nodes_from_collision">
diff --git a/doc/classes/Joint2D.xml b/doc/classes/Joint2D.xml
index df70a04f10..dec965cd09 100644
--- a/doc/classes/Joint2D.xml
+++ b/doc/classes/Joint2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Joint2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Joint2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Base node for all joint constraints in 2D physics.
</brief_description>
@@ -11,66 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_bias" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_exclude_nodes_from_collision" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_node_a" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- Return the path to the A node for the joint.
- </description>
- </method>
- <method name="get_node_b" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- Return the path to the B node for the joint.
- </description>
- </method>
- <method name="set_bias">
- <return type="void">
- </return>
- <argument index="0" name="bias" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_exclude_nodes_from_collision">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_node_a">
- <return type="void">
- </return>
- <argument index="0" name="node" type="NodePath">
- </argument>
- <description>
- Set the path to the A node for the joint. Must be of type [PhysicsBody2D].
- </description>
- </method>
- <method name="set_node_b">
- <return type="void">
- </return>
- <argument index="0" name="node" type="NodePath">
- </argument>
- <description>
- Set the path to the B node for the joint. Must be of type [PhysicsBody2D].
- </description>
- </method>
</methods>
<members>
<member name="bias" type="float" setter="set_bias" getter="get_bias">
diff --git a/doc/classes/KinematicBody.xml b/doc/classes/KinematicBody.xml
index a423974753..43db8ed43a 100644
--- a/doc/classes/KinematicBody.xml
+++ b/doc/classes/KinematicBody.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="KinematicBody" inherits="PhysicsBody" category="Core" version="3.0-alpha">
+<class name="KinematicBody" inherits="PhysicsBody" category="Core" version="3.0-beta">
<brief_description>
Kinematic body 3D node.
</brief_description>
@@ -20,12 +20,6 @@
Returns the velocity of the floor. Only updates when calling [method move_and_slide].
</description>
</method>
- <method name="get_safe_margin" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_slide_collision">
<return type="KinematicCollision">
</return>
@@ -95,14 +89,6 @@
Returns the movement that remained when the body stopped. To get more detailed information about collisions that occured, use [method get_slide_collision].
</description>
</method>
- <method name="set_safe_margin">
- <return type="void">
- </return>
- <argument index="0" name="pixels" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="test_move">
<return type="bool">
</return>
@@ -116,6 +102,12 @@
</method>
</methods>
<members>
+ <member name="axis_lock_x" type="bool" setter="set_axis_lock_x" getter="get_axis_lock_x">
+ </member>
+ <member name="axis_lock_y" type="bool" setter="set_axis_lock_y" getter="get_axis_lock_y">
+ </member>
+ <member name="axis_lock_z" type="bool" setter="set_axis_lock_z" getter="get_axis_lock_z">
+ </member>
<member name="collision/safe_margin" type="float" setter="set_safe_margin" getter="get_safe_margin">
If the body is at least this close to another body, this body will consider them to be colliding.
</member>
diff --git a/doc/classes/KinematicBody2D.xml b/doc/classes/KinematicBody2D.xml
index 7285c780e5..8563b059f2 100644
--- a/doc/classes/KinematicBody2D.xml
+++ b/doc/classes/KinematicBody2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="KinematicBody2D" inherits="PhysicsBody2D" category="Core" version="3.0-alpha">
+<class name="KinematicBody2D" inherits="PhysicsBody2D" category="Core" version="3.0-beta">
<brief_description>
Kinematic body 2D node.
</brief_description>
@@ -20,12 +20,6 @@
Returns the velocity of the floor. Only updates when calling [method move_and_slide].
</description>
</method>
- <method name="get_safe_margin" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_slide_collision">
<return type="KinematicCollision2D">
</return>
@@ -95,14 +89,6 @@
Returns the movement that remained when the body stopped. To get more detailed information about collisions that occured, use [method get_slide_collision].
</description>
</method>
- <method name="set_safe_margin">
- <return type="void">
- </return>
- <argument index="0" name="pixels" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="test_move">
<return type="bool">
</return>
diff --git a/doc/classes/KinematicCollision.xml b/doc/classes/KinematicCollision.xml
index ce82004839..9f25bece2c 100644
--- a/doc/classes/KinematicCollision.xml
+++ b/doc/classes/KinematicCollision.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="KinematicCollision" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="KinematicCollision" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
- Collision data for KinematicBody2D collisions.
+ Collision data for KinematicBody collisions.
</brief_description>
<description>
Contains collision data for KinematicBody collisions. When a [KinematicBody] is moved using [method KinematicBody.move_and_collide], it stops if it detects a collision with another body. If a collision is detected, a KinematicCollision object is returned.
@@ -12,72 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_collider" qualifiers="const">
- <return type="Object">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_id" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_metadata" qualifiers="const">
- <return type="Variant">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_shape" qualifiers="const">
- <return type="Object">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_shape_index" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_velocity" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_local_shape" qualifiers="const">
- <return type="Object">
- </return>
- <description>
- </description>
- </method>
- <method name="get_normal" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_position" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_remainder" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_travel" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="collider" type="Object" setter="" getter="get_collider">
diff --git a/doc/classes/KinematicCollision2D.xml b/doc/classes/KinematicCollision2D.xml
index e498dea7a5..01b09f1c01 100644
--- a/doc/classes/KinematicCollision2D.xml
+++ b/doc/classes/KinematicCollision2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="KinematicCollision2D" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="KinematicCollision2D" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Collision data for KinematicBody2D collisions.
</brief_description>
@@ -12,72 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_collider" qualifiers="const">
- <return type="Object">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_id" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_metadata" qualifiers="const">
- <return type="Variant">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_shape" qualifiers="const">
- <return type="Object">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_shape_index" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collider_velocity" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_local_shape" qualifiers="const">
- <return type="Object">
- </return>
- <description>
- </description>
- </method>
- <method name="get_normal" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_position" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_remainder" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_travel" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="collider" type="Object" setter="" getter="get_collider">
diff --git a/doc/classes/Label.xml b/doc/classes/Label.xml
index 93d7b20491..089b81164b 100644
--- a/doc/classes/Label.xml
+++ b/doc/classes/Label.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Label" inherits="Control" category="Core" version="3.0-alpha">
+<class name="Label" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Displays plain text in a line or wrapped inside a rectangle. For formatted text, use [RichTextLabel].
</brief_description>
@@ -11,13 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_align" qualifiers="const">
- <return type="int" enum="Label.Align">
- </return>
- <description>
- Returns the alignment mode (any of the ALIGN_* enumeration values).
- </description>
- </method>
<method name="get_line_count" qualifiers="const">
<return type="int">
</return>
@@ -32,34 +25,6 @@
Returns the font size in pixels.
</description>
</method>
- <method name="get_lines_skipped" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the the number of lines to skip before displaying.
- </description>
- </method>
- <method name="get_max_lines_visible" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the maximum number of lines to display. Returns -1 if unrestricted.
- </description>
- </method>
- <method name="get_percent_visible" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the maximum number of characters to display as a percentage of the total text.
- </description>
- </method>
- <method name="get_text" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Returns the label text. Text can contain newlines.
- </description>
- </method>
<method name="get_total_character_count" qualifiers="const">
<return type="int">
</return>
@@ -67,13 +32,6 @@
Returns the total length of the text.
</description>
</method>
- <method name="get_valign" qualifiers="const">
- <return type="int" enum="Label.VAlign">
- </return>
- <description>
- Returns the vertical alignment mode (any of the VALIGN_* enumeration values).
- </description>
- </method>
<method name="get_visible_characters" qualifiers="const">
<return type="int">
</return>
@@ -88,108 +46,6 @@
Returns the number of lines shown. Useful if the [code]Label[/code] 's height cannot currently display all lines.
</description>
</method>
- <method name="has_autowrap" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns [code]true[/code] if [i]autowrap[/i] mode (see [method set_autowrap]).
- </description>
- </method>
- <method name="is_clipping_text" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns [code]true[/code] if text would be cut off if it is too wide.
- </description>
- </method>
- <method name="is_uppercase" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns [code]true[/code] if text is displayed in all capitals.
- </description>
- </method>
- <method name="set_align">
- <return type="void">
- </return>
- <argument index="0" name="align" type="int" enum="Label.Align">
- </argument>
- <description>
- Sets the alignment mode to any of the ALIGN_* enumeration values.
- </description>
- </method>
- <method name="set_autowrap">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set [i]autowrap[/i] mode. When enabled, autowrap will fit text to the control width, breaking sentences when they exceed the available horizontal space. When disabled, the label minimum width becomes the width of the longest row, and the minimum height large enough to fit all rows.
- </description>
- </method>
- <method name="set_clip_text">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Cuts off the rest of the text if it is too wide.
- </description>
- </method>
- <method name="set_lines_skipped">
- <return type="void">
- </return>
- <argument index="0" name="lines_skipped" type="int">
- </argument>
- <description>
- Sets the number of lines to skip before displaying. Useful for scrolling text.
- </description>
- </method>
- <method name="set_max_lines_visible">
- <return type="void">
- </return>
- <argument index="0" name="lines_visible" type="int">
- </argument>
- <description>
- Restricts the number of lines to display. Set to -1 to disable.
- </description>
- </method>
- <method name="set_percent_visible">
- <return type="void">
- </return>
- <argument index="0" name="percent_visible" type="float">
- </argument>
- <description>
- Restricts the number of characters to display (as a percentage of the total text).
- </description>
- </method>
- <method name="set_text">
- <return type="void">
- </return>
- <argument index="0" name="text" type="String">
- </argument>
- <description>
- Set the label text. Text can contain newlines.
- </description>
- </method>
- <method name="set_uppercase">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Display text in all capitals.
- </description>
- </method>
- <method name="set_valign">
- <return type="void">
- </return>
- <argument index="0" name="valign" type="int" enum="Label.VAlign">
- </argument>
- <description>
- Sets the vertical alignment mode to any of the VALIGN_* enumeration values.
- </description>
- </method>
<method name="set_visible_characters">
<return type="void">
</return>
@@ -230,28 +86,28 @@
</member>
</members>
<constants>
- <constant name="ALIGN_LEFT" value="0">
+ <constant name="ALIGN_LEFT" value="0" enum="Align">
Align rows to the left (default).
</constant>
- <constant name="ALIGN_CENTER" value="1">
+ <constant name="ALIGN_CENTER" value="1" enum="Align">
Align rows centered.
</constant>
- <constant name="ALIGN_RIGHT" value="2">
+ <constant name="ALIGN_RIGHT" value="2" enum="Align">
Align rows to the right (default).
</constant>
- <constant name="ALIGN_FILL" value="3">
+ <constant name="ALIGN_FILL" value="3" enum="Align">
Expand row whitespaces to fit the width.
</constant>
- <constant name="VALIGN_TOP" value="0">
+ <constant name="VALIGN_TOP" value="0" enum="VAlign">
Align the whole text to the top.
</constant>
- <constant name="VALIGN_CENTER" value="1">
+ <constant name="VALIGN_CENTER" value="1" enum="VAlign">
Align the whole text to the center.
</constant>
- <constant name="VALIGN_BOTTOM" value="2">
+ <constant name="VALIGN_BOTTOM" value="2" enum="VAlign">
Align the whole text to the bottom.
</constant>
- <constant name="VALIGN_FILL" value="3">
+ <constant name="VALIGN_FILL" value="3" enum="VAlign">
Align the whole text by spreading the rows.
</constant>
</constants>
diff --git a/doc/classes/LargeTexture.xml b/doc/classes/LargeTexture.xml
index 6ec3c80bca..9d79034dea 100644
--- a/doc/classes/LargeTexture.xml
+++ b/doc/classes/LargeTexture.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="LargeTexture" inherits="Texture" category="Core" version="3.0-alpha">
+<class name="LargeTexture" inherits="Texture" category="Core" version="3.0-beta">
<brief_description>
A Texture capable of storing many smaller Textures with offsets.
</brief_description>
@@ -87,14 +87,6 @@
</description>
</method>
</methods>
- <members>
- <member name="_data" type="Array" setter="_set_data" getter="_get_data">
- Returns an [Array] with offsets and textures data of each added piece. Schema is [offsets1, texture1, offsets2, texture2, large_texture_size].
- [code]offsets[/code] : [Vector2] offsets of the texture piece.
- [code]second[/code] : [StreamTexture] data of the texture piece.
- [code]last entry[/code] : [Vector2] size of the entire large texture.
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/doc/classes/Light.xml b/doc/classes/Light.xml
index 1c625d59e1..e4f92cc9b3 100644
--- a/doc/classes/Light.xml
+++ b/doc/classes/Light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Light" inherits="VisualInstance" category="Core" version="3.0-alpha">
+<class name="Light" inherits="VisualInstance" category="Core" version="3.0-beta">
<brief_description>
Provides a base class for different kinds of light nodes.
</brief_description>
@@ -11,122 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_cull_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_param" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="Light.Param">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_shadow_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_shadow_reverse_cull_face" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="has_shadow" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_editor_only" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_negative" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_cull_mask">
- <return type="void">
- </return>
- <argument index="0" name="cull_mask" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_editor_only">
- <return type="void">
- </return>
- <argument index="0" name="editor_only" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_negative">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="Light.Param">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_color">
- <return type="void">
- </return>
- <argument index="0" name="shadow_color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_reverse_cull_face">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="editor_only" type="bool" setter="set_editor_only" getter="is_editor_only">
@@ -137,6 +21,8 @@
</member>
<member name="light_energy" type="float" setter="set_param" getter="get_param">
</member>
+ <member name="light_indirect_energy" type="float" setter="set_param" getter="get_param">
+ </member>
<member name="light_negative" type="bool" setter="set_negative" getter="is_negative">
</member>
<member name="light_specular" type="float" setter="set_param" getter="get_param">
@@ -153,35 +39,37 @@
</member>
</members>
<constants>
- <constant name="PARAM_ENERGY" value="0">
+ <constant name="PARAM_ENERGY" value="0" enum="Param">
+ </constant>
+ <constant name="PARAM_INDIRECT_ENERGY" value="1" enum="Param">
</constant>
- <constant name="PARAM_SPECULAR" value="1">
+ <constant name="PARAM_SPECULAR" value="2" enum="Param">
</constant>
- <constant name="PARAM_RANGE" value="2">
+ <constant name="PARAM_RANGE" value="3" enum="Param">
</constant>
- <constant name="PARAM_ATTENUATION" value="3">
+ <constant name="PARAM_ATTENUATION" value="4" enum="Param">
</constant>
- <constant name="PARAM_SPOT_ANGLE" value="4">
+ <constant name="PARAM_SPOT_ANGLE" value="5" enum="Param">
</constant>
- <constant name="PARAM_SPOT_ATTENUATION" value="5">
+ <constant name="PARAM_SPOT_ATTENUATION" value="6" enum="Param">
</constant>
- <constant name="PARAM_CONTACT_SHADOW_SIZE" value="6">
+ <constant name="PARAM_CONTACT_SHADOW_SIZE" value="7" enum="Param">
</constant>
- <constant name="PARAM_SHADOW_MAX_DISTANCE" value="7">
+ <constant name="PARAM_SHADOW_MAX_DISTANCE" value="8" enum="Param">
</constant>
- <constant name="PARAM_SHADOW_SPLIT_1_OFFSET" value="8">
+ <constant name="PARAM_SHADOW_SPLIT_1_OFFSET" value="9" enum="Param">
</constant>
- <constant name="PARAM_SHADOW_SPLIT_2_OFFSET" value="9">
+ <constant name="PARAM_SHADOW_SPLIT_2_OFFSET" value="10" enum="Param">
</constant>
- <constant name="PARAM_SHADOW_SPLIT_3_OFFSET" value="10">
+ <constant name="PARAM_SHADOW_SPLIT_3_OFFSET" value="11" enum="Param">
</constant>
- <constant name="PARAM_SHADOW_NORMAL_BIAS" value="11">
+ <constant name="PARAM_SHADOW_NORMAL_BIAS" value="12" enum="Param">
</constant>
- <constant name="PARAM_SHADOW_BIAS" value="12">
+ <constant name="PARAM_SHADOW_BIAS" value="13" enum="Param">
</constant>
- <constant name="PARAM_SHADOW_BIAS_SPLIT_SCALE" value="13">
+ <constant name="PARAM_SHADOW_BIAS_SPLIT_SCALE" value="14" enum="Param">
</constant>
- <constant name="PARAM_MAX" value="14">
+ <constant name="PARAM_MAX" value="15" enum="Param">
</constant>
</constants>
</class>
diff --git a/doc/classes/Light2D.xml b/doc/classes/Light2D.xml
index 285d302ba7..fe1f25ad9e 100644
--- a/doc/classes/Light2D.xml
+++ b/doc/classes/Light2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Light2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Light2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Casts light in a 2D environment.
</brief_description>
@@ -11,332 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- Return the color of the Light2D.
- </description>
- </method>
- <method name="get_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the energy value of the Light2D.
- </description>
- </method>
- <method name="get_height" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the height of the Light2D. Used with 2D normalmapping.
- </description>
- </method>
- <method name="get_item_cull_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_item_shadow_cull_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_layer_range_max" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Set the maximum layer value of objects of the scene that are affected by the Light2D.
- </description>
- </method>
- <method name="get_layer_range_min" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Get the minimum layer value of objects of the scene that are affected by the Light2D.
- </description>
- </method>
- <method name="get_mode" qualifiers="const">
- <return type="int" enum="Light2D.Mode">
- </return>
- <description>
- Return the current mode set to the Light2D.
- </description>
- </method>
- <method name="get_shadow_buffer_size" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the shadow buffer size.
- </description>
- </method>
- <method name="get_shadow_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- Return the color of casted shadows for this Light2D.
- </description>
- </method>
- <method name="get_shadow_filter" qualifiers="const">
- <return type="int" enum="Light2D.ShadowFilter">
- </return>
- <description>
- </description>
- </method>
- <method name="get_shadow_gradient_length" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_shadow_smooth" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- Return the texture of the Light2D.
- </description>
- </method>
- <method name="get_texture_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the offset of the light texture.
- </description>
- </method>
- <method name="get_texture_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the scale value of the light texture.
- </description>
- </method>
- <method name="get_z_range_max" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Get the maximum Z value that objects of the scene can be in order to be affected by the Light2D.
- </description>
- </method>
- <method name="get_z_range_min" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Get the minimum Z value that objects of the scene have to be in order to be affected by the Light2D.
- </description>
- </method>
- <method name="is_editor_only" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the Light2D is enabled, false if it is not.
- </description>
- </method>
- <method name="is_shadow_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if shadow casting is enabled for this Light2D, else return false.
- </description>
- </method>
- <method name="set_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- Set the color of the Light2D.
- </description>
- </method>
- <method name="set_editor_only">
- <return type="void">
- </return>
- <argument index="0" name="editor_only" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Switches the Light2D on or off, depending on the 'enabled' parameter.
- </description>
- </method>
- <method name="set_energy">
- <return type="void">
- </return>
- <argument index="0" name="energy" type="float">
- </argument>
- <description>
- Set the energy value of the Light2D. The bigger the value, the stronger the light.
- </description>
- </method>
- <method name="set_height">
- <return type="void">
- </return>
- <argument index="0" name="height" type="float">
- </argument>
- <description>
- Set the height of the Light2D. Used with 2D normalmapping.
- </description>
- </method>
- <method name="set_item_cull_mask">
- <return type="void">
- </return>
- <argument index="0" name="item_cull_mask" type="int">
- </argument>
- <description>
- Set the item mask of the Light2D to 'item_mask' value.
- </description>
- </method>
- <method name="set_item_shadow_cull_mask">
- <return type="void">
- </return>
- <argument index="0" name="item_shadow_cull_mask" type="int">
- </argument>
- <description>
- Set the item shadow mask to 'item_shadow_mask' value.
- </description>
- </method>
- <method name="set_layer_range_max">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- Set the maximum layer value of objects of the scene that are affected by the Light2D.
- </description>
- </method>
- <method name="set_layer_range_min">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- Set the minimum layer value of objects of the scene that are affected by the Light2D.
- </description>
- </method>
- <method name="set_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Light2D.Mode">
- </argument>
- <description>
- Set the behaviour mode of the Light2D. Use constants defined in the constants section.
- </description>
- </method>
- <method name="set_shadow_buffer_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="int">
- </argument>
- <description>
- Set the shadow buffer size.
- </description>
- </method>
- <method name="set_shadow_color">
- <return type="void">
- </return>
- <argument index="0" name="shadow_color" type="Color">
- </argument>
- <description>
- Set the color of casted shadows for this Light2D.
- </description>
- </method>
- <method name="set_shadow_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Enable or disable shadows casting from this Light2D according to the 'enabled' parameter.
- </description>
- </method>
- <method name="set_shadow_filter">
- <return type="void">
- </return>
- <argument index="0" name="filter" type="int" enum="Light2D.ShadowFilter">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_gradient_length">
- <return type="void">
- </return>
- <argument index="0" name="multiplier" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_smooth">
- <return type="void">
- </return>
- <argument index="0" name="smooth" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- Set the texture of the Light2D.
- </description>
- </method>
- <method name="set_texture_offset">
- <return type="void">
- </return>
- <argument index="0" name="texture_offset" type="Vector2">
- </argument>
- <description>
- Set the offset of the light texture.
- </description>
- </method>
- <method name="set_texture_scale">
- <return type="void">
- </return>
- <argument index="0" name="texture_scale" type="float">
- </argument>
- <description>
- Set the scale value of the light texture.
- </description>
- </method>
- <method name="set_z_range_max">
- <return type="void">
- </return>
- <argument index="0" name="z" type="int">
- </argument>
- <description>
- Set the maximum Z value that objects of the scene can be in order to be affected by the Light2D.
- </description>
- </method>
- <method name="set_z_range_min">
- <return type="void">
- </return>
- <argument index="0" name="z" type="int">
- </argument>
- <description>
- Set the minimum Z value that objects of the scene have to be in order to be affected by the Light2D.
- </description>
- </method>
</methods>
<members>
<member name="color" type="Color" setter="set_color" getter="get_color">
@@ -404,34 +78,34 @@
</member>
</members>
<constants>
- <constant name="MODE_ADD" value="0">
+ <constant name="MODE_ADD" value="0" enum="Mode">
Adds the value of pixels corresponding to the Light2D to the values of pixels under it. This is the common behaviour of a light.
</constant>
- <constant name="MODE_SUB" value="1">
+ <constant name="MODE_SUB" value="1" enum="Mode">
Subtracts the value of pixels corresponding to the Light2D to the values of pixels under it, resulting in inversed light effect.
</constant>
- <constant name="MODE_MIX" value="2">
+ <constant name="MODE_MIX" value="2" enum="Mode">
Mix the value of pixels corresponding to the Light2D to the values of pixels under it by linear interpolation.
</constant>
- <constant name="MODE_MASK" value="3">
+ <constant name="MODE_MASK" value="3" enum="Mode">
The light texture of the Light2D is used as a mask, hiding or revealing parts of the screen underneath depending on the value of each pixel of the light (mask) texture.
</constant>
- <constant name="SHADOW_FILTER_NONE" value="0">
+ <constant name="SHADOW_FILTER_NONE" value="0" enum="ShadowFilter">
No filter applies to the shadow map. See [method shadow_filter].
</constant>
- <constant name="SHADOW_FILTER_PCF3" value="1">
+ <constant name="SHADOW_FILTER_PCF3" value="1" enum="ShadowFilter">
Percentage closer filtering (3 samples) applies to the shadow map. See [method shadow_filter].
</constant>
- <constant name="SHADOW_FILTER_PCF5" value="2">
+ <constant name="SHADOW_FILTER_PCF5" value="2" enum="ShadowFilter">
Percentage closer filtering (5 samples) applies to the shadow map. See [method shadow_filter].
</constant>
- <constant name="SHADOW_FILTER_PCF7" value="3">
+ <constant name="SHADOW_FILTER_PCF7" value="3" enum="ShadowFilter">
Percentage closer filtering (7 samples) applies to the shadow map. See [method shadow_filter].
</constant>
- <constant name="SHADOW_FILTER_PCF9" value="4">
+ <constant name="SHADOW_FILTER_PCF9" value="4" enum="ShadowFilter">
Percentage closer filtering (9 samples) applies to the shadow map. See [method shadow_filter].
</constant>
- <constant name="SHADOW_FILTER_PCF13" value="5">
+ <constant name="SHADOW_FILTER_PCF13" value="5" enum="ShadowFilter">
Percentage closer filtering (13 samples) applies to the shadow map. See [method shadow_filter].
</constant>
</constants>
diff --git a/doc/classes/LightOccluder2D.xml b/doc/classes/LightOccluder2D.xml
index 9a1b84158b..de42b2812c 100644
--- a/doc/classes/LightOccluder2D.xml
+++ b/doc/classes/LightOccluder2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="LightOccluder2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="LightOccluder2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Occludes light cast by a Light2D, casting shadows.
</brief_description>
@@ -11,38 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_occluder_light_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the light mask of the LightOccluder2D.
- </description>
- </method>
- <method name="get_occluder_polygon" qualifiers="const">
- <return type="OccluderPolygon2D">
- </return>
- <description>
- Return the OccluderPolygon2D that defines the LightOccluder2D.
- </description>
- </method>
- <method name="set_occluder_light_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- Set the LightOccluder2D light mask. The LightOccluder2D will cast shadows only from Light2Ds that belong to the same light mask(s).
- </description>
- </method>
- <method name="set_occluder_polygon">
- <return type="void">
- </return>
- <argument index="0" name="polygon" type="OccluderPolygon2D">
- </argument>
- <description>
- Set the OccluderPolygon2D that defines the LightOccluder2D.
- </description>
- </method>
</methods>
<members>
<member name="light_mask" type="int" setter="set_occluder_light_mask" getter="get_occluder_light_mask">
diff --git a/doc/classes/Line2D.xml b/doc/classes/Line2D.xml
index 7b76d94c95..9455882f02 100644
--- a/doc/classes/Line2D.xml
+++ b/doc/classes/Line2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Line2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Line2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
A 2D line.
</brief_description>
@@ -20,36 +20,6 @@
Add a point at the [code]position[/code]. Appends the point at the end of the line.
</description>
</method>
- <method name="get_begin_cap_mode" qualifiers="const">
- <return type="int" enum="Line2D.LineCapMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_default_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_end_cap_mode" qualifiers="const">
- <return type="int" enum="Line2D.LineCapMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_gradient" qualifiers="const">
- <return type="Gradient">
- </return>
- <description>
- </description>
- </method>
- <method name="get_joint_mode" qualifiers="const">
- <return type="int" enum="Line2D.LineJointMode">
- </return>
- <description>
- </description>
- </method>
<method name="get_point_count" qualifiers="const">
<return type="int">
</return>
@@ -66,42 +36,6 @@
Returns point [code]i[/code]'s position.
</description>
</method>
- <method name="get_points" qualifiers="const">
- <return type="PoolVector2Array">
- </return>
- <description>
- </description>
- </method>
- <method name="get_round_precision" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sharp_limit" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture_mode" qualifiers="const">
- <return type="int" enum="Line2D.LineTextureMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_width" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="remove_point">
<return type="void">
</return>
@@ -111,46 +45,6 @@
Remove the point at index [code]i[/code] from the line.
</description>
</method>
- <method name="set_begin_cap_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Line2D.LineCapMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_default_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_end_cap_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Line2D.LineCapMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_gradient">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Gradient">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_joint_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Line2D.LineJointMode">
- </argument>
- <description>
- </description>
- </method>
<method name="set_point_position">
<return type="void">
</return>
@@ -162,54 +56,6 @@
Overwites the position in point [code]i[/code] with the supplied [code]position[/code].
</description>
</method>
- <method name="set_points">
- <return type="void">
- </return>
- <argument index="0" name="points" type="PoolVector2Array">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_round_precision">
- <return type="void">
- </return>
- <argument index="0" name="precision" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sharp_limit">
- <return type="void">
- </return>
- <argument index="0" name="limit" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Line2D.LineTextureMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_width">
- <return type="void">
- </return>
- <argument index="0" name="width" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="begin_cap_mode" type="int" setter="set_begin_cap_mode" getter="get_begin_cap_mode" enum="Line2D.LineCapMode">
@@ -247,28 +93,28 @@
</member>
</members>
<constants>
- <constant name="LINE_JOINT_SHARP" value="0">
+ <constant name="LINE_JOINT_SHARP" value="0" enum="LineJointMode">
The line's joints will be pointy. If [code]sharp_limit[/code] is greater than the rotation of a joint, it becomes a bevel joint instead.
</constant>
- <constant name="LINE_JOINT_BEVEL" value="1">
+ <constant name="LINE_JOINT_BEVEL" value="1" enum="LineJointMode">
The line's joints will be bevelled/chamfered.
</constant>
- <constant name="LINE_JOINT_ROUND" value="2">
+ <constant name="LINE_JOINT_ROUND" value="2" enum="LineJointMode">
The line's joints will be rounded.
</constant>
- <constant name="LINE_CAP_NONE" value="0">
+ <constant name="LINE_CAP_NONE" value="0" enum="LineCapMode">
Don't have a line cap.
</constant>
- <constant name="LINE_CAP_BOX" value="1">
+ <constant name="LINE_CAP_BOX" value="1" enum="LineCapMode">
Draws the line cap as a box.
</constant>
- <constant name="LINE_CAP_ROUND" value="2">
+ <constant name="LINE_CAP_ROUND" value="2" enum="LineCapMode">
Draws the line cap as a circle.
</constant>
- <constant name="LINE_TEXTURE_NONE" value="0">
+ <constant name="LINE_TEXTURE_NONE" value="0" enum="LineTextureMode">
Takes the left pixels of the texture and renders it over the whole line.
</constant>
- <constant name="LINE_TEXTURE_TILE" value="1">
+ <constant name="LINE_TEXTURE_TILE" value="1" enum="LineTextureMode">
Tiles the texture over the line. The texture need to be imported with Repeat Enabled for it to work properly.
</constant>
</constants>
diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml
index 432f583566..9a03d4e0c1 100644
--- a/doc/classes/LineEdit.xml
+++ b/doc/classes/LineEdit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="LineEdit" inherits="Control" category="Core" version="3.0-alpha">
+<class name="LineEdit" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Control that provides single line string editing.
</brief_description>
@@ -27,45 +27,6 @@
Erases the [LineEdit] text.
</description>
</method>
- <method name="cursor_get_blink_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Gets whether the line edit caret is blinking.
- </description>
- </method>
- <method name="cursor_get_blink_speed" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Gets the line edit caret blink speed.
- </description>
- </method>
- <method name="cursor_set_blink_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set the line edit caret to blink.
- </description>
- </method>
- <method name="cursor_set_blink_speed">
- <return type="void">
- </return>
- <argument index="0" name="blink_speed" type="float">
- </argument>
- <description>
- Set the line edit caret blink speed. Cannot be less then or equal to 0.
- </description>
- </method>
- <method name="get_align" qualifiers="const">
- <return type="int" enum="LineEdit.Align">
- </return>
- <description>
- Return the align mode of the [code]LineEdit[/code].
- </description>
- </method>
<method name="get_cursor_position" qualifiers="const">
<return type="int">
</return>
@@ -73,19 +34,6 @@
Returns the cursor position inside the [code]LineEdit[/code].
</description>
</method>
- <method name="get_expand_to_text_length" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_max_length" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the maximum amount of characters the [code]LineEdit[/code] can edit. If 0 is returned, no limit exists.
- </description>
- </method>
<method name="get_menu" qualifiers="const">
<return type="PopupMenu">
</return>
@@ -93,48 +41,6 @@
Returns the [PopupMenu] of this [code]LineEdit[/code]. By default, this menu is displayed when right-clicking on the [LineEdit].
</description>
</method>
- <method name="get_placeholder" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the placeholder text.
- </description>
- </method>
- <method name="get_placeholder_alpha" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return transparency of the placeholder text.
- </description>
- </method>
- <method name="get_text" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the text in the [code]LineEdit[/code].
- </description>
- </method>
- <method name="is_context_menu_enabled">
- <return type="bool">
- </return>
- <description>
- Returns true if the context menu is enabled.
- </description>
- </method>
- <method name="is_editable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return the [i]editable[/i] status of the [code]LineEdit[/code] (see [method set_editable]).
- </description>
- </method>
- <method name="is_secret" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return the [i]secret[/i] status of the [code]LineEdit[/code] (see [method set_secret]).
- </description>
- </method>
<method name="menu_option">
<return type="void">
</return>
@@ -168,24 +74,6 @@
Selects the whole [String].
</description>
</method>
- <method name="set_align">
- <return type="void">
- </return>
- <argument index="0" name="align" type="int" enum="LineEdit.Align">
- </argument>
- <description>
- Set text alignment of the [code]LineEdit[/code].
- </description>
- </method>
- <method name="set_context_menu_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set the status of the context menu. When enabled, the context menu will appear when the [code]LineEdit[/code] is right clicked.
- </description>
- </method>
<method name="set_cursor_position">
<return type="void">
</return>
@@ -195,68 +83,6 @@
Sets the cursor position inside the [code]LineEdit[/code]. The text may scroll if needed.
</description>
</method>
- <method name="set_editable">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set the [i]editable[/i] status of the [code]LineEdit[/code]. When disabled, existing text can't be modified and new text can't be added.
- </description>
- </method>
- <method name="set_expand_to_text_length">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_max_length">
- <return type="void">
- </return>
- <argument index="0" name="chars" type="int">
- </argument>
- <description>
- Set the maximum amount of characters the [code]LineEdit[/code] can edit, and cropping existing text in case it exceeds that limit. Setting 0 removes the limit.
- </description>
- </method>
- <method name="set_placeholder">
- <return type="void">
- </return>
- <argument index="0" name="text" type="String">
- </argument>
- <description>
- Set the placeholder text.
- </description>
- </method>
- <method name="set_placeholder_alpha">
- <return type="void">
- </return>
- <argument index="0" name="alpha" type="float">
- </argument>
- <description>
- Set transparency of the placeholder text.
- </description>
- </method>
- <method name="set_secret">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set the [i]secret[/i] status of the [code]LineEdit[/code]. When enabled, every character is displayed as "*".
- </description>
- </method>
- <method name="set_text">
- <return type="void">
- </return>
- <argument index="0" name="text" type="String">
- </argument>
- <description>
- Set the text in the [code]LineEdit[/code], clearing the existing one and the selection.
- </description>
- </method>
</methods>
<members>
<member name="align" type="int" setter="set_align" getter="get_align" enum="LineEdit.Align">
@@ -274,7 +100,7 @@
<member name="editable" type="bool" setter="set_editable" getter="is_editable">
If [code]false[/code] existing text cannot be modified and new text cannot be added.
</member>
- <member name="expand_to_len" type="bool" setter="set_expand_to_text_length" getter="get_expand_to_text_length">
+ <member name="expand_to_text_length" type="bool" setter="set_expand_to_text_length" getter="get_expand_to_text_length">
If [code]true[/code] the [LineEdit] width will increase to stay longer than the [member text]. It will [b]not[/b] compress if the [member text] is shortened.
</member>
<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" enum="Control.FocusMode">
@@ -313,39 +139,39 @@
</signal>
</signals>
<constants>
- <constant name="ALIGN_LEFT" value="0">
+ <constant name="ALIGN_LEFT" value="0" enum="Align">
Aligns the text on the left hand side of the [LineEdit].
</constant>
- <constant name="ALIGN_CENTER" value="1">
+ <constant name="ALIGN_CENTER" value="1" enum="Align">
Centers the text in the middle of the [LineEdit].
</constant>
- <constant name="ALIGN_RIGHT" value="2">
+ <constant name="ALIGN_RIGHT" value="2" enum="Align">
Aligns the text on the right hand side of the [LineEdit].
</constant>
- <constant name="ALIGN_FILL" value="3">
+ <constant name="ALIGN_FILL" value="3" enum="Align">
Stretches whitespaces to fit the [LineEdit]'s width.
</constant>
- <constant name="MENU_CUT" value="0">
+ <constant name="MENU_CUT" value="0" enum="MenuItems">
Cuts (Copies and clears) the selected text.
</constant>
- <constant name="MENU_COPY" value="1">
+ <constant name="MENU_COPY" value="1" enum="MenuItems">
Copies the selected text.
</constant>
- <constant name="MENU_PASTE" value="2">
+ <constant name="MENU_PASTE" value="2" enum="MenuItems">
Pastes the clipboard text over the selected text (or at the cursor's position).
</constant>
- <constant name="MENU_CLEAR" value="3">
+ <constant name="MENU_CLEAR" value="3" enum="MenuItems">
Erases the whole [Linedit] text.
</constant>
- <constant name="MENU_SELECT_ALL" value="4">
+ <constant name="MENU_SELECT_ALL" value="4" enum="MenuItems">
Selects the whole [Linedit] text.
</constant>
- <constant name="MENU_UNDO" value="5">
+ <constant name="MENU_UNDO" value="5" enum="MenuItems">
Undoes the previous action.
</constant>
- <constant name="MENU_REDO" value="6">
+ <constant name="MENU_REDO" value="6" enum="MenuItems">
</constant>
- <constant name="MENU_MAX" value="7">
+ <constant name="MENU_MAX" value="7" enum="MenuItems">
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/LineShape2D.xml b/doc/classes/LineShape2D.xml
index 6ae6fad6f4..e55676fd59 100644
--- a/doc/classes/LineShape2D.xml
+++ b/doc/classes/LineShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="LineShape2D" inherits="Shape2D" category="Core" version="3.0-alpha">
+<class name="LineShape2D" inherits="Shape2D" category="Core" version="3.0-beta">
<brief_description>
Line shape for 2D collisions.
</brief_description>
@@ -11,38 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_d" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the line distance from the origin.
- </description>
- </method>
- <method name="get_normal" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the line normal.
- </description>
- </method>
- <method name="set_d">
- <return type="void">
- </return>
- <argument index="0" name="d" type="float">
- </argument>
- <description>
- Set the line distance from the origin.
- </description>
- </method>
- <method name="set_normal">
- <return type="void">
- </return>
- <argument index="0" name="normal" type="Vector2">
- </argument>
- <description>
- Set the line normal.
- </description>
- </method>
</methods>
<members>
<member name="d" type="float" setter="set_d" getter="get_d">
diff --git a/doc/classes/LinkButton.xml b/doc/classes/LinkButton.xml
index d13a0d7be6..82b3a90180 100644
--- a/doc/classes/LinkButton.xml
+++ b/doc/classes/LinkButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="LinkButton" inherits="BaseButton" category="Core" version="3.0-alpha">
+<class name="LinkButton" inherits="BaseButton" category="Core" version="3.0-beta">
<brief_description>
Simple button used to represent a link to some resource
</brief_description>
@@ -11,38 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_text" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Returns the text of the button.
- </description>
- </method>
- <method name="get_underline_mode" qualifiers="const">
- <return type="int" enum="LinkButton.UnderlineMode">
- </return>
- <description>
- Returns the underline mode for this button.
- </description>
- </method>
- <method name="set_text">
- <return type="void">
- </return>
- <argument index="0" name="text" type="String">
- </argument>
- <description>
- Sets the text of the button.
- </description>
- </method>
- <method name="set_underline_mode">
- <return type="void">
- </return>
- <argument index="0" name="underline_mode" type="int" enum="LinkButton.UnderlineMode">
- </argument>
- <description>
- Sets the underline mode for this button, the argument must be one of the [code]LinkButton[/code] constants (see constants section).
- </description>
- </method>
</methods>
<members>
<member name="text" type="String" setter="set_text" getter="get_text">
@@ -51,17 +19,19 @@
</member>
</members>
<constants>
- <constant name="UNDERLINE_MODE_ALWAYS" value="0">
+ <constant name="UNDERLINE_MODE_ALWAYS" value="0" enum="UnderlineMode">
The LinkButton will always show an underline at the bottom of its text
</constant>
- <constant name="UNDERLINE_MODE_ON_HOVER" value="1">
+ <constant name="UNDERLINE_MODE_ON_HOVER" value="1" enum="UnderlineMode">
The LinkButton will show an underline at the bottom of its text when the mouse cursor is over it.
</constant>
- <constant name="UNDERLINE_MODE_NEVER" value="2">
+ <constant name="UNDERLINE_MODE_NEVER" value="2" enum="UnderlineMode">
The LinkButton will never show an underline at the bottom of its text.
</constant>
</constants>
<theme_items>
+ <theme_item name="focus" type="StyleBox">
+ </theme_item>
<theme_item name="font" type="Font">
</theme_item>
<theme_item name="font_color" type="Color">
diff --git a/doc/classes/Listener.xml b/doc/classes/Listener.xml
index 742198acd0..3b21e3fdac 100644
--- a/doc/classes/Listener.xml
+++ b/doc/classes/Listener.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Listener" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="Listener" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/MainLoop.xml b/doc/classes/MainLoop.xml
index 048b13a7ca..c5a4e53907 100644
--- a/doc/classes/MainLoop.xml
+++ b/doc/classes/MainLoop.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MainLoop" inherits="Object" category="Core" version="3.0-alpha">
+<class name="MainLoop" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Main loop is the abstract main loop base class.
</brief_description>
@@ -114,25 +114,25 @@
</method>
</methods>
<constants>
- <constant name="NOTIFICATION_WM_MOUSE_ENTER" value="2" enum="">
+ <constant name="NOTIFICATION_WM_MOUSE_ENTER" value="2">
</constant>
- <constant name="NOTIFICATION_WM_MOUSE_EXIT" value="3" enum="">
+ <constant name="NOTIFICATION_WM_MOUSE_EXIT" value="3">
</constant>
- <constant name="NOTIFICATION_WM_FOCUS_IN" value="4" enum="">
+ <constant name="NOTIFICATION_WM_FOCUS_IN" value="4">
</constant>
- <constant name="NOTIFICATION_WM_FOCUS_OUT" value="5" enum="">
+ <constant name="NOTIFICATION_WM_FOCUS_OUT" value="5">
</constant>
- <constant name="NOTIFICATION_WM_QUIT_REQUEST" value="6" enum="">
+ <constant name="NOTIFICATION_WM_QUIT_REQUEST" value="6">
</constant>
- <constant name="NOTIFICATION_WM_GO_BACK_REQUEST" value="7" enum="">
+ <constant name="NOTIFICATION_WM_GO_BACK_REQUEST" value="7">
</constant>
- <constant name="NOTIFICATION_WM_UNFOCUS_REQUEST" value="8" enum="">
+ <constant name="NOTIFICATION_WM_UNFOCUS_REQUEST" value="8">
</constant>
- <constant name="NOTIFICATION_OS_MEMORY_WARNING" value="9" enum="">
+ <constant name="NOTIFICATION_OS_MEMORY_WARNING" value="9">
</constant>
- <constant name="NOTIFICATION_TRANSLATION_CHANGED" value="90" enum="">
+ <constant name="NOTIFICATION_TRANSLATION_CHANGED" value="90">
</constant>
- <constant name="NOTIFICATION_WM_ABOUT" value="91" enum="">
+ <constant name="NOTIFICATION_WM_ABOUT" value="91">
</constant>
</constants>
</class>
diff --git a/doc/classes/MarginContainer.xml b/doc/classes/MarginContainer.xml
index 1c748de229..c56f9a5c58 100644
--- a/doc/classes/MarginContainer.xml
+++ b/doc/classes/MarginContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MarginContainer" inherits="Container" category="Core" version="3.0-alpha">
+<class name="MarginContainer" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
Simple margin container.
</brief_description>
diff --git a/doc/classes/Marshalls.xml b/doc/classes/Marshalls.xml
index 0e561ab374..d83c81a960 100644
--- a/doc/classes/Marshalls.xml
+++ b/doc/classes/Marshalls.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Marshalls" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Marshalls" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Data transformation (marshalling) and encoding helpers.
</brief_description>
diff --git a/doc/classes/Material.xml b/doc/classes/Material.xml
index 87c2e51003..2b2f45e8be 100644
--- a/doc/classes/Material.xml
+++ b/doc/classes/Material.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Material" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Material" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Abstract base [Resource] for coloring and shading geometry.
</brief_description>
@@ -11,34 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_next_pass" qualifiers="const">
- <return type="Material">
- </return>
- <description>
- </description>
- </method>
- <method name="get_render_priority" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_next_pass">
- <return type="void">
- </return>
- <argument index="0" name="next_pass" type="Material">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_render_priority">
- <return type="void">
- </return>
- <argument index="0" name="priority" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="next_pass" type="Material" setter="set_next_pass" getter="get_next_pass">
@@ -47,9 +19,9 @@
</member>
</members>
<constants>
- <constant name="RENDER_PRIORITY_MAX" value="127" enum="">
+ <constant name="RENDER_PRIORITY_MAX" value="127">
</constant>
- <constant name="RENDER_PRIORITY_MIN" value="-128" enum="">
+ <constant name="RENDER_PRIORITY_MIN" value="-128">
</constant>
</constants>
</class>
diff --git a/doc/classes/MenuButton.xml b/doc/classes/MenuButton.xml
index 54be44d3d8..c41c86d693 100644
--- a/doc/classes/MenuButton.xml
+++ b/doc/classes/MenuButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MenuButton" inherits="Button" category="Core" version="3.0-alpha">
+<class name="MenuButton" inherits="Button" category="Core" version="3.0-beta">
<brief_description>
Special button that brings up a [PopupMenu] when clicked.
</brief_description>
@@ -19,10 +19,6 @@
</description>
</method>
</methods>
- <members>
- <member name="items" type="Array" setter="_set_items" getter="_get_items">
- </member>
- </members>
<signals>
<signal name="about_to_show">
<description>
diff --git a/doc/classes/Mesh.xml b/doc/classes/Mesh.xml
index 733f76728c..465b68171e 100644
--- a/doc/classes/Mesh.xml
+++ b/doc/classes/Mesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Mesh" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Mesh" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
A [Resource] that contains vertex-array based geometry.
</brief_description>
@@ -49,95 +49,99 @@
</description>
</method>
</methods>
+ <members>
+ <member name="lightmap_size_hint" type="Vector2" setter="set_lightmap_size_hint" getter="get_lightmap_size_hint">
+ </member>
+ </members>
<constants>
- <constant name="PRIMITIVE_POINTS" value="0">
+ <constant name="PRIMITIVE_POINTS" value="0" enum="PrimitiveType">
Render array as points (one vertex equals one point).
</constant>
- <constant name="PRIMITIVE_LINES" value="1">
+ <constant name="PRIMITIVE_LINES" value="1" enum="PrimitiveType">
Render array as lines (every two vertices a line is created).
</constant>
- <constant name="PRIMITIVE_LINE_STRIP" value="2">
+ <constant name="PRIMITIVE_LINE_STRIP" value="2" enum="PrimitiveType">
Render array as line strip.
</constant>
- <constant name="PRIMITIVE_LINE_LOOP" value="3">
+ <constant name="PRIMITIVE_LINE_LOOP" value="3" enum="PrimitiveType">
Render array as line loop (like line strip, but closed).
</constant>
- <constant name="PRIMITIVE_TRIANGLES" value="4">
+ <constant name="PRIMITIVE_TRIANGLES" value="4" enum="PrimitiveType">
Render array as triangles (every three vertices a triangle is created).
</constant>
- <constant name="PRIMITIVE_TRIANGLE_STRIP" value="5">
+ <constant name="PRIMITIVE_TRIANGLE_STRIP" value="5" enum="PrimitiveType">
Render array as triangle strips.
</constant>
- <constant name="PRIMITIVE_TRIANGLE_FAN" value="6">
+ <constant name="PRIMITIVE_TRIANGLE_FAN" value="6" enum="PrimitiveType">
Render array as triangle fans.
</constant>
- <constant name="BLEND_SHAPE_MODE_NORMALIZED" value="0">
+ <constant name="BLEND_SHAPE_MODE_NORMALIZED" value="0" enum="BlendShapeMode">
</constant>
- <constant name="BLEND_SHAPE_MODE_RELATIVE" value="1">
+ <constant name="BLEND_SHAPE_MODE_RELATIVE" value="1" enum="BlendShapeMode">
</constant>
- <constant name="ARRAY_FORMAT_VERTEX" value="1">
+ <constant name="ARRAY_FORMAT_VERTEX" value="1" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FORMAT_NORMAL" value="2">
+ <constant name="ARRAY_FORMAT_NORMAL" value="2" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FORMAT_TANGENT" value="4">
+ <constant name="ARRAY_FORMAT_TANGENT" value="4" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FORMAT_COLOR" value="8">
+ <constant name="ARRAY_FORMAT_COLOR" value="8" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FORMAT_TEX_UV" value="16">
+ <constant name="ARRAY_FORMAT_TEX_UV" value="16" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FORMAT_TEX_UV2" value="32">
+ <constant name="ARRAY_FORMAT_TEX_UV2" value="32" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FORMAT_BONES" value="64">
+ <constant name="ARRAY_FORMAT_BONES" value="64" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FORMAT_WEIGHTS" value="128">
+ <constant name="ARRAY_FORMAT_WEIGHTS" value="128" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FORMAT_INDEX" value="256">
+ <constant name="ARRAY_FORMAT_INDEX" value="256" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_BASE" value="9">
+ <constant name="ARRAY_COMPRESS_BASE" value="9" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_VERTEX" value="512">
+ <constant name="ARRAY_COMPRESS_VERTEX" value="512" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_NORMAL" value="1024">
+ <constant name="ARRAY_COMPRESS_NORMAL" value="1024" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_TANGENT" value="2048">
+ <constant name="ARRAY_COMPRESS_TANGENT" value="2048" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_COLOR" value="4096">
+ <constant name="ARRAY_COMPRESS_COLOR" value="4096" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_TEX_UV" value="8192">
+ <constant name="ARRAY_COMPRESS_TEX_UV" value="8192" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_TEX_UV2" value="16384">
+ <constant name="ARRAY_COMPRESS_TEX_UV2" value="16384" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_BONES" value="32768">
+ <constant name="ARRAY_COMPRESS_BONES" value="32768" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_WEIGHTS" value="65536">
+ <constant name="ARRAY_COMPRESS_WEIGHTS" value="65536" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_INDEX" value="131072">
+ <constant name="ARRAY_COMPRESS_INDEX" value="131072" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FLAG_USE_2D_VERTICES" value="262144">
+ <constant name="ARRAY_FLAG_USE_2D_VERTICES" value="262144" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FLAG_USE_16_BIT_BONES" value="524288">
+ <constant name="ARRAY_FLAG_USE_16_BIT_BONES" value="524288" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_DEFAULT" value="97792">
+ <constant name="ARRAY_COMPRESS_DEFAULT" value="97792" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_VERTEX" value="0">
+ <constant name="ARRAY_VERTEX" value="0" enum="ArrayType">
</constant>
- <constant name="ARRAY_NORMAL" value="1">
+ <constant name="ARRAY_NORMAL" value="1" enum="ArrayType">
</constant>
- <constant name="ARRAY_TANGENT" value="2">
+ <constant name="ARRAY_TANGENT" value="2" enum="ArrayType">
</constant>
- <constant name="ARRAY_COLOR" value="3">
+ <constant name="ARRAY_COLOR" value="3" enum="ArrayType">
</constant>
- <constant name="ARRAY_TEX_UV" value="4">
+ <constant name="ARRAY_TEX_UV" value="4" enum="ArrayType">
</constant>
- <constant name="ARRAY_TEX_UV2" value="5">
+ <constant name="ARRAY_TEX_UV2" value="5" enum="ArrayType">
</constant>
- <constant name="ARRAY_BONES" value="6">
+ <constant name="ARRAY_BONES" value="6" enum="ArrayType">
</constant>
- <constant name="ARRAY_WEIGHTS" value="7">
+ <constant name="ARRAY_WEIGHTS" value="7" enum="ArrayType">
</constant>
- <constant name="ARRAY_INDEX" value="8">
+ <constant name="ARRAY_INDEX" value="8" enum="ArrayType">
</constant>
- <constant name="ARRAY_MAX" value="9">
+ <constant name="ARRAY_MAX" value="9" enum="ArrayType">
</constant>
</constants>
</class>
diff --git a/doc/classes/MeshDataTool.xml b/doc/classes/MeshDataTool.xml
index f433d7a753..db20179116 100644
--- a/doc/classes/MeshDataTool.xml
+++ b/doc/classes/MeshDataTool.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MeshDataTool" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="MeshDataTool" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/MeshInstance.xml b/doc/classes/MeshInstance.xml
index 5bd6bedf7e..9273e87430 100644
--- a/doc/classes/MeshInstance.xml
+++ b/doc/classes/MeshInstance.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MeshInstance" inherits="GeometryInstance" category="Core" version="3.0-alpha">
+<class name="MeshInstance" inherits="GeometryInstance" category="Core" version="3.0-beta">
<brief_description>
Node that instances meshes into a scenario.
</brief_description>
<description>
- MeshInstance is a [Node] that takes a [Mesh] resource and adds it to the current scenario by creating an instance of it. This is the class most often used to get 3D geometry rendered and can be used to instance a single [Mesh] in many places. This allows to reuse geometry and save on resources. When a [Mesh] has to be instanced more than thousands of times at close proximity, consider using a [MultiMesh] in a [MultiMeshInstance] instead.
+ MeshInstance is a node that takes a [Mesh] resource and adds it to the current scenario by creating an instance of it. This is the class most often used to get 3D geometry rendered and can be used to instance a single [Mesh] in many places. This allows to reuse geometry and save on resources. When a [Mesh] has to be instanced more than thousands of times at close proximity, consider using a [MultiMesh] in a [MultiMeshInstance] instead.
</description>
<tutorials>
</tutorials>
@@ -15,33 +15,21 @@
<return type="void">
</return>
<description>
- This helper creates a [StaticBody] child [Node] with a [ConvexPolygonShape] [CollisionShape] calculated from the mesh geometry. It's mainly used for testing.
+ This helper creates a [StaticBody] child node with a [ConvexPolygonShape] collision shape calculated from the mesh geometry. It's mainly used for testing.
</description>
</method>
<method name="create_debug_tangents">
<return type="void">
</return>
<description>
+ This helper creates a [MeshInstance] child node with gizmos at every vertex calculated from the mesh geometry. It's mainly used for testing.
</description>
</method>
<method name="create_trimesh_collision">
<return type="void">
</return>
<description>
- This helper creates a [StaticBody] child [Node] with a [ConcavePolygonShape] [CollisionShape] calculated from the mesh geometry. It's mainly used for testing.
- </description>
- </method>
- <method name="get_mesh" qualifiers="const">
- <return type="Mesh">
- </return>
- <description>
- Returns the current [Mesh] resource for the instance.
- </description>
- </method>
- <method name="get_skeleton_path">
- <return type="NodePath">
- </return>
- <description>
+ This helper creates a [StaticBody] child node with a [ConcavePolygonShape] collision shape calculated from the mesh geometry. It's mainly used for testing.
</description>
</method>
<method name="get_surface_material" qualifiers="const">
@@ -53,22 +41,6 @@
Returns the [Material] for a surface of the [Mesh] resource.
</description>
</method>
- <method name="set_mesh">
- <return type="void">
- </return>
- <argument index="0" name="mesh" type="Mesh">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_skeleton_path">
- <return type="void">
- </return>
- <argument index="0" name="skeleton_path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
<method name="set_surface_material">
<return type="void">
</return>
diff --git a/doc/classes/MeshLibrary.xml b/doc/classes/MeshLibrary.xml
index 54a8228d02..3275969e78 100644
--- a/doc/classes/MeshLibrary.xml
+++ b/doc/classes/MeshLibrary.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MeshLibrary" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="MeshLibrary" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Library of meshes.
</brief_description>
diff --git a/doc/classes/MultiMesh.xml b/doc/classes/MultiMesh.xml
index b6a89d09f4..ff2d89b2ca 100644
--- a/doc/classes/MultiMesh.xml
+++ b/doc/classes/MultiMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MultiMesh" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="MultiMesh" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Provides high performance mesh instancing.
</brief_description>
@@ -21,12 +21,6 @@
Return the visibility AABB.
</description>
</method>
- <method name="get_color_format" qualifiers="const">
- <return type="int" enum="MultiMesh.ColorFormat">
- </return>
- <description>
- </description>
- </method>
<method name="get_instance_color" qualifiers="const">
<return type="Color">
</return>
@@ -36,13 +30,6 @@
Get the color of a specific instance.
</description>
</method>
- <method name="get_instance_count" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the amount of instances that is going to be drawn.
- </description>
- </method>
<method name="get_instance_transform" qualifiers="const">
<return type="Transform">
</return>
@@ -52,27 +39,6 @@
Return the transform of a specific instance.
</description>
</method>
- <method name="get_mesh" qualifiers="const">
- <return type="Mesh">
- </return>
- <description>
- Return the [Mesh] resource drawn as multiple instances.
- </description>
- </method>
- <method name="get_transform_format" qualifiers="const">
- <return type="int" enum="MultiMesh.TransformFormat">
- </return>
- <description>
- </description>
- </method>
- <method name="set_color_format">
- <return type="void">
- </return>
- <argument index="0" name="format" type="int" enum="MultiMesh.ColorFormat">
- </argument>
- <description>
- </description>
- </method>
<method name="set_instance_color">
<return type="void">
</return>
@@ -84,15 +50,6 @@
Set the color of a specific instance.
</description>
</method>
- <method name="set_instance_count">
- <return type="void">
- </return>
- <argument index="0" name="count" type="int">
- </argument>
- <description>
- Set the amount of instances that is going to be drawn. Changing this number will erase all the existing instance transform and color data.
- </description>
- </method>
<method name="set_instance_transform">
<return type="void">
</return>
@@ -104,48 +61,27 @@
Set the transform for a specific instance.
</description>
</method>
- <method name="set_mesh">
- <return type="void">
- </return>
- <argument index="0" name="mesh" type="Mesh">
- </argument>
- <description>
- Set the [Mesh] resource to be drawn in multiple instances.
- </description>
- </method>
- <method name="set_transform_format">
- <return type="void">
- </return>
- <argument index="0" name="format" type="int" enum="MultiMesh.TransformFormat">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
- <member name="color_array" type="PoolColorArray" setter="_set_color_array" getter="_get_color_array">
- </member>
<member name="color_format" type="int" setter="set_color_format" getter="get_color_format" enum="MultiMesh.ColorFormat">
</member>
<member name="instance_count" type="int" setter="set_instance_count" getter="get_instance_count">
</member>
<member name="mesh" type="Mesh" setter="set_mesh" getter="get_mesh">
</member>
- <member name="transform_array" type="PoolVector3Array" setter="_set_transform_array" getter="_get_transform_array">
- </member>
<member name="transform_format" type="int" setter="set_transform_format" getter="get_transform_format" enum="MultiMesh.TransformFormat">
</member>
</members>
<constants>
- <constant name="TRANSFORM_2D" value="0">
+ <constant name="TRANSFORM_2D" value="0" enum="TransformFormat">
</constant>
- <constant name="TRANSFORM_3D" value="1">
+ <constant name="TRANSFORM_3D" value="1" enum="TransformFormat">
</constant>
- <constant name="COLOR_NONE" value="0">
+ <constant name="COLOR_NONE" value="0" enum="ColorFormat">
</constant>
- <constant name="COLOR_8BIT" value="1">
+ <constant name="COLOR_8BIT" value="1" enum="ColorFormat">
</constant>
- <constant name="COLOR_FLOAT" value="2">
+ <constant name="COLOR_FLOAT" value="2" enum="ColorFormat">
</constant>
</constants>
</class>
diff --git a/doc/classes/MultiMeshInstance.xml b/doc/classes/MultiMeshInstance.xml
index 11e22c2581..bad61fa254 100644
--- a/doc/classes/MultiMeshInstance.xml
+++ b/doc/classes/MultiMeshInstance.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MultiMeshInstance" inherits="GeometryInstance" category="Core" version="3.0-alpha">
+<class name="MultiMeshInstance" inherits="GeometryInstance" category="Core" version="3.0-beta">
<brief_description>
Node that instances a [MultiMesh].
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_multimesh" qualifiers="const">
- <return type="MultiMesh">
- </return>
- <description>
- Return the [MultiMesh] that is used for instancing.
- </description>
- </method>
- <method name="set_multimesh">
- <return type="void">
- </return>
- <argument index="0" name="multimesh" type="MultiMesh">
- </argument>
- <description>
- Set the [MultiMesh] to be instanced.
- </description>
- </method>
</methods>
<members>
<member name="multimesh" type="MultiMesh" setter="set_multimesh" getter="get_multimesh">
diff --git a/doc/classes/Mutex.xml b/doc/classes/Mutex.xml
index d36dbb64c1..4b845c05ad 100644
--- a/doc/classes/Mutex.xml
+++ b/doc/classes/Mutex.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Mutex" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Mutex" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
A synchronization Mutex.
</brief_description>
diff --git a/doc/classes/Navigation.xml b/doc/classes/Navigation.xml
index c83e81b197..4bfe964a4d 100644
--- a/doc/classes/Navigation.xml
+++ b/doc/classes/Navigation.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Navigation" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="Navigation" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -57,12 +57,6 @@
<description>
</description>
</method>
- <method name="get_up_vector" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
<method name="navmesh_create">
<return type="int">
</return>
@@ -93,14 +87,6 @@
<description>
</description>
</method>
- <method name="set_up_vector">
- <return type="void">
- </return>
- <argument index="0" name="up" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="up_vector" type="Vector3" setter="set_up_vector" getter="get_up_vector">
diff --git a/doc/classes/Navigation2D.xml b/doc/classes/Navigation2D.xml
index ac2e0d88d8..8868348cf9 100644
--- a/doc/classes/Navigation2D.xml
+++ b/doc/classes/Navigation2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Navigation2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Navigation2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/NavigationMesh.xml b/doc/classes/NavigationMesh.xml
index dd49b0a593..55a3771d79 100644
--- a/doc/classes/NavigationMesh.xml
+++ b/doc/classes/NavigationMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NavigationMesh" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="NavigationMesh" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -31,84 +31,6 @@
<description>
</description>
</method>
- <method name="get_agent_height" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_agent_max_climb" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_agent_max_slope" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_agent_radius">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_cell_height" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_cell_size" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_detail_sample_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_detail_sample_max_error" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_edge_max_error" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_edge_max_length" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_filter_ledge_spans" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_filter_low_hanging_obstacles" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_filter_walkable_low_height_spans" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="get_polygon">
<return type="PoolIntArray">
</return>
@@ -123,164 +45,12 @@
<description>
</description>
</method>
- <method name="get_region_merge_size" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_region_min_size" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sample_partition_type" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
<method name="get_vertices" qualifiers="const">
<return type="PoolVector3Array">
</return>
<description>
</description>
</method>
- <method name="get_verts_per_poly" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_agent_height">
- <return type="void">
- </return>
- <argument index="0" name="agent_height" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_agent_max_climb">
- <return type="void">
- </return>
- <argument index="0" name="agent_max_climb" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_agent_max_slope">
- <return type="void">
- </return>
- <argument index="0" name="agent_max_slope" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_agent_radius">
- <return type="void">
- </return>
- <argument index="0" name="agent_radius" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_cell_height">
- <return type="void">
- </return>
- <argument index="0" name="cell_height" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_cell_size">
- <return type="void">
- </return>
- <argument index="0" name="cell_size" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_detail_sample_distance">
- <return type="void">
- </return>
- <argument index="0" name="detail_sample_dist" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_detail_sample_max_error">
- <return type="void">
- </return>
- <argument index="0" name="detail_sample_max_error" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_edge_max_error">
- <return type="void">
- </return>
- <argument index="0" name="edge_max_error" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_edge_max_length">
- <return type="void">
- </return>
- <argument index="0" name="edge_max_length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_filter_ledge_spans">
- <return type="void">
- </return>
- <argument index="0" name="filter_ledge_spans" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_filter_low_hanging_obstacles">
- <return type="void">
- </return>
- <argument index="0" name="filter_low_hanging_obstacles" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_filter_walkable_low_height_spans">
- <return type="void">
- </return>
- <argument index="0" name="filter_walkable_low_height_spans" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_region_merge_size">
- <return type="void">
- </return>
- <argument index="0" name="region_merge_size" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_region_min_size">
- <return type="void">
- </return>
- <argument index="0" name="region_min_size" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sample_partition_type">
- <return type="void">
- </return>
- <argument index="0" name="sample_partition_type" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="set_vertices">
<return type="void">
</return>
@@ -289,14 +59,6 @@
<description>
</description>
</method>
- <method name="set_verts_per_poly">
- <return type="void">
- </return>
- <argument index="0" name="verts_per_poly" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="agent/height" type="float" setter="set_agent_height" getter="get_agent_height">
@@ -327,23 +89,19 @@
</member>
<member name="polygon/verts_per_poly" type="float" setter="set_verts_per_poly" getter="get_verts_per_poly">
</member>
- <member name="polygons" type="Array" setter="_set_polygons" getter="_get_polygons">
- </member>
<member name="region/merge_size" type="float" setter="set_region_merge_size" getter="get_region_merge_size">
</member>
<member name="region/min_size" type="float" setter="set_region_min_size" getter="get_region_min_size">
</member>
<member name="sample_partition_type/sample_partition_type" type="int" setter="set_sample_partition_type" getter="get_sample_partition_type">
</member>
- <member name="vertices" type="PoolVector3Array" setter="set_vertices" getter="get_vertices">
- </member>
</members>
<constants>
- <constant name="SAMPLE_PARTITION_WATERSHED" value="0" enum="">
+ <constant name="SAMPLE_PARTITION_WATERSHED" value="0">
</constant>
- <constant name="SAMPLE_PARTITION_MONOTONE" value="1" enum="">
+ <constant name="SAMPLE_PARTITION_MONOTONE" value="1">
</constant>
- <constant name="SAMPLE_PARTITION_LAYERS" value="2" enum="">
+ <constant name="SAMPLE_PARTITION_LAYERS" value="2">
</constant>
</constants>
</class>
diff --git a/doc/classes/NavigationMeshInstance.xml b/doc/classes/NavigationMeshInstance.xml
index 1e8998009e..ddca9d747e 100644
--- a/doc/classes/NavigationMeshInstance.xml
+++ b/doc/classes/NavigationMeshInstance.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NavigationMeshInstance" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="NavigationMeshInstance" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,34 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_navigation_mesh" qualifiers="const">
- <return type="NavigationMesh">
- </return>
- <description>
- </description>
- </method>
- <method name="is_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_navigation_mesh">
- <return type="void">
- </return>
- <argument index="0" name="navmesh" type="NavigationMesh">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled">
diff --git a/doc/classes/NavigationPolygon.xml b/doc/classes/NavigationPolygon.xml
index fd7238114e..663ac4cd67 100644
--- a/doc/classes/NavigationPolygon.xml
+++ b/doc/classes/NavigationPolygon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NavigationPolygon" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="NavigationPolygon" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -114,14 +114,6 @@
</description>
</method>
</methods>
- <members>
- <member name="outlines" type="Array" setter="_set_outlines" getter="_get_outlines">
- </member>
- <member name="polygons" type="Array" setter="_set_polygons" getter="_get_polygons">
- </member>
- <member name="vertices" type="PoolVector2Array" setter="set_vertices" getter="get_vertices">
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/doc/classes/NavigationPolygonInstance.xml b/doc/classes/NavigationPolygonInstance.xml
index ac56b03002..ea314667ca 100644
--- a/doc/classes/NavigationPolygonInstance.xml
+++ b/doc/classes/NavigationPolygonInstance.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NavigationPolygonInstance" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="NavigationPolygonInstance" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,34 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_navigation_polygon" qualifiers="const">
- <return type="NavigationPolygon">
- </return>
- <description>
- </description>
- </method>
- <method name="is_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_navigation_polygon">
- <return type="void">
- </return>
- <argument index="0" name="navpoly" type="NavigationPolygon">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled">
diff --git a/doc/classes/NetworkedMultiplayerPeer.xml b/doc/classes/NetworkedMultiplayerPeer.xml
index 4333c3d28a..a7350b3863 100644
--- a/doc/classes/NetworkedMultiplayerPeer.xml
+++ b/doc/classes/NetworkedMultiplayerPeer.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NetworkedMultiplayerPeer" inherits="PacketPeer" category="Core" version="3.0-alpha">
+<class name="NetworkedMultiplayerPeer" inherits="PacketPeer" category="Core" version="3.0-beta">
<brief_description>
+ A high-level network interface to simplify multiplayer interactions.
</brief_description>
<description>
+ Manages the connection to network peers. Assigns unique IDs to each client connected to the server.
</description>
<tutorials>
</tutorials>
@@ -13,31 +15,35 @@
<return type="int" enum="NetworkedMultiplayerPeer.ConnectionStatus">
</return>
<description>
+ Returns the current state of the connection. See [enum ConnectionStatus].
</description>
</method>
<method name="get_packet_peer" qualifiers="const">
<return type="int">
</return>
<description>
+ Returns the ID of the [code]NetworkedMultiplayerPeer[/code] who sent the most recent packet.
</description>
</method>
<method name="get_unique_id" qualifiers="const">
<return type="int">
</return>
<description>
+ Returns the ID of this [code]NetworkedMultiplayerPeer[/code].
</description>
</method>
<method name="is_refusing_new_connections" qualifiers="const">
<return type="bool">
</return>
<description>
- Return whether this [code]NetworkedMultiplayerPeer[/code] is refusing new connections.
+ Returns [code]true[/code] if this [code]NetworkedMultiplayerPeer[/code] refuses new connections. Default value: [code]false[/code].
</description>
</method>
<method name="poll">
<return type="void">
</return>
<description>
+ Waits up to 1 second to receive a new network event.
</description>
</method>
<method name="set_refuse_new_connections">
@@ -46,7 +52,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
- If [code]endable[/code] is true, this [code]NetworkedMultiplayerPeer[/code] will refuse new connections.
+ If [code]true[/code] this [code]NetworkedMultiplayerPeer[/code] refuses new connections. Default value: [code]false[/code].
</description>
</method>
<method name="set_target_peer">
@@ -55,6 +61,7 @@
<argument index="0" name="id" type="int">
</argument>
<description>
+ The peer to which packets will be sent. Default value: [code]0[/code].
</description>
</method>
<method name="set_transfer_mode">
@@ -63,56 +70,65 @@
<argument index="0" name="mode" type="int" enum="NetworkedMultiplayerPeer.TransferMode">
</argument>
<description>
+ The manner in which to send packets to the [code]target_peer[/code]. See [enum TransferMode].
</description>
</method>
</methods>
<signals>
<signal name="connection_failed">
<description>
- Emitted when failed to connect to server.
+ Emitted when a connection attempt fails.
</description>
</signal>
<signal name="connection_succeeded">
<description>
- Emitted when successfully connected to server.
+ Emitted when a connection attempt succeeds.
</description>
</signal>
<signal name="peer_connected">
<argument index="0" name="id" type="int">
</argument>
<description>
- Emitted by the server when a client is connected.
+ Emitted by the server when a client connects.
</description>
</signal>
<signal name="peer_disconnected">
<argument index="0" name="id" type="int">
</argument>
<description>
- Emitted by the server when a client is disconnected.
+ Emitted by the server when a client disconnects.
</description>
</signal>
<signal name="server_disconnected">
<description>
- Emitted by clients when server is disconnected.
+ Emitted by clients when the server disconnects.
</description>
</signal>
</signals>
<constants>
- <constant name="TRANSFER_MODE_UNRELIABLE" value="0">
+ <constant name="TRANSFER_MODE_UNRELIABLE" value="0" enum="TransferMode">
+ Packets are sent via unordered UDP packets.
</constant>
- <constant name="TRANSFER_MODE_UNRELIABLE_ORDERED" value="1">
+ <constant name="TRANSFER_MODE_UNRELIABLE_ORDERED" value="1" enum="TransferMode">
+ Packets are sent via ordered UDP packets.
</constant>
- <constant name="TRANSFER_MODE_RELIABLE" value="2">
+ <constant name="TRANSFER_MODE_RELIABLE" value="2" enum="TransferMode">
+ Packets are sent via TCP packets.
</constant>
- <constant name="CONNECTION_DISCONNECTED" value="0">
+ <constant name="CONNECTION_DISCONNECTED" value="0" enum="ConnectionStatus">
+ The ongoing connection disconnected.
</constant>
- <constant name="CONNECTION_CONNECTING" value="1">
+ <constant name="CONNECTION_CONNECTING" value="1" enum="ConnectionStatus">
+ A connection attempt is ongoing.
</constant>
- <constant name="CONNECTION_CONNECTED" value="2">
+ <constant name="CONNECTION_CONNECTED" value="2" enum="ConnectionStatus">
+ The connection attempt succeeded.
</constant>
- <constant name="TARGET_PEER_BROADCAST" value="0" enum="">
+ <constant name="TARGET_PEER_BROADCAST" value="0">
+ Packets are sent to the server and then redistributed to other peers.
</constant>
- <constant name="TARGET_PEER_SERVER" value="1" enum="">
+ <constant name="TARGET_PEER_SERVER" value="1">
+ Packets are sent to the server alone.
</constant>
</constants>
</class>
diff --git a/doc/classes/Nil.xml b/doc/classes/Nil.xml
index a4bd60d53e..a30dae8af1 100644
--- a/doc/classes/Nil.xml
+++ b/doc/classes/Nil.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Nil" category="Built-In Types" version="3.0-alpha">
+<class name="Nil" category="Built-In Types" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/NinePatchRect.xml b/doc/classes/NinePatchRect.xml
index 2c8bce52a0..b7440137c8 100644
--- a/doc/classes/NinePatchRect.xml
+++ b/doc/classes/NinePatchRect.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NinePatchRect" inherits="Control" category="Core" version="3.0-alpha">
+<class name="NinePatchRect" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Scalable texture-based frame that tiles the texture's centers and sides, but keeps the corners' original size. Perfect for panels and dialog boxes.
</brief_description>
@@ -11,94 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_h_axis_stretch_mode" qualifiers="const">
- <return type="int" enum="NinePatchRect.AxisStretchMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_patch_margin" qualifiers="const">
- <return type="int">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_region_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_v_axis_stretch_mode" qualifiers="const">
- <return type="int" enum="NinePatchRect.AxisStretchMode">
- </return>
- <description>
- </description>
- </method>
- <method name="is_draw_center_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_draw_center">
- <return type="void">
- </return>
- <argument index="0" name="draw_center" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_h_axis_stretch_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="NinePatchRect.AxisStretchMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_patch_margin">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="value" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_region_rect">
- <return type="void">
- </return>
- <argument index="0" name="rect" type="Rect2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_v_axis_stretch_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="NinePatchRect.AxisStretchMode">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="axis_stretch_horizontal" type="int" setter="set_h_axis_stretch_mode" getter="get_h_axis_stretch_mode" enum="NinePatchRect.AxisStretchMode">
@@ -137,13 +49,13 @@
</signal>
</signals>
<constants>
- <constant name="AXIS_STRETCH_MODE_STRETCH" value="0">
+ <constant name="AXIS_STRETCH_MODE_STRETCH" value="0" enum="AxisStretchMode">
Doesn't do anything at the time of writing. Default value for [code]axis_stretch_horizontal[/code] and [code]axis_stretch_vertical[/code].
</constant>
- <constant name="AXIS_STRETCH_MODE_TILE" value="1">
+ <constant name="AXIS_STRETCH_MODE_TILE" value="1" enum="AxisStretchMode">
Doesn't do anything at the time of writing.
</constant>
- <constant name="AXIS_STRETCH_MODE_TILE_FIT" value="2">
+ <constant name="AXIS_STRETCH_MODE_TILE_FIT" value="2" enum="AxisStretchMode">
Doesn't do anything at the time of writing.
</constant>
</constants>
diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml
index a103d0eba0..78591e2bf8 100644
--- a/doc/classes/Node.xml
+++ b/doc/classes/Node.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Node" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Node" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Base class for all the [i]scene[/i] elements.
</brief_description>
@@ -43,6 +43,7 @@
</argument>
<description>
Called when there is a change to input devices. Propagated through the node tree until a Node consumes it.
+ It is only called if input processing is enabled, which is done automatically if this method is overriden, and can be toggled with [method set_process_input].
</description>
</method>
<method name="_physics_process" qualifiers="virtual">
@@ -52,7 +53,7 @@
</argument>
<description>
Called during the physics processing step of the main loop. Physics processing means that the frame rate is synced to the physics, i.e. the [code]delta[/code] variable should be constant.
- It is only called if physics processing has been enabled with [method set_physics_process].
+ It is only called if physics processing is enabled, which is done automatically if this method is overriden, and can be toggled with [method set_physics_process].
Corresponds to the NOTIFICATION_PHYSICS_PROCESS notification in [method Object._notification].
</description>
</method>
@@ -63,7 +64,7 @@
</argument>
<description>
Called during the processing step of the main loop. Processing happens at every frame and as fast as possible, so the [code]delta[/code] time since the previous frame is not constant.
- It is only called if processing has been enabled with [method set_process].
+ It is only called if processing is enabled, which is done automatically if this method is overriden, and can be toggled with [method set_process].
Corresponds to the NOTIFICATION_PROCESS notification in [method Object._notification].
</description>
</method>
@@ -82,6 +83,7 @@
</argument>
<description>
Propagated to all nodes when the previous InputEvent is not consumed by any nodes.
+ It is only called if unhandled input processing is enabled, which is done automatically if this method is overriden, and can be toggled with [method set_process_unhandled_input].
</description>
</method>
<method name="_unhandled_key_input" qualifiers="virtual">
@@ -154,7 +156,7 @@
<argument index="2" name="owned" type="bool" default="true">
</argument>
<description>
- Find a descendant of this node whose name matches [code]mask[/code] as in [method String.match] (i.e. case sensitive, but '*' matches zero or more characters and '?' matches any single character except '.'). Note that it does not match against the full path, just against individual node names.
+ Finds a descendant of this node whose name matches [code]mask[/code] as in [method String.match] (i.e. case sensitive, but '*' matches zero or more characters and '?' matches any single character except '.'). Note that it does not match against the full path, just against individual node names.
</description>
</method>
<method name="get_child" qualifiers="const">
@@ -163,55 +165,56 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
- Return a child node by its index (see [method get_child_count]). This method is often used for iterating all children of a node.
+ Returns a child node by its index (see [method get_child_count]). This method is often used for iterating all children of a node.
</description>
</method>
<method name="get_child_count" qualifiers="const">
<return type="int">
</return>
<description>
- Return the amount of child nodes.
+ Returns the amount of child nodes.
</description>
</method>
<method name="get_children" qualifiers="const">
<return type="Array">
</return>
<description>
- Return an array of references ([code]Node[/code]) to the child nodes.
+ Returns an array of references ([code]Node[/code]) to the child nodes.
</description>
</method>
<method name="get_filename" qualifiers="const">
<return type="String">
</return>
<description>
- Return a filename that may be contained by the node. When a scene is instanced from a file, it topmost node contains the filename from where it was loaded (see [method set_filename]).
+ Returns a filename that may be contained by the node. When a scene is instanced from a file, it topmost node contains the filename from where it was loaded (see [method set_filename]).
</description>
</method>
<method name="get_groups" qualifiers="const">
<return type="Array">
</return>
<description>
- Return an array listing the groups that the node is part of.
+ Returns an array listing the groups that the node is part of.
</description>
</method>
<method name="get_index" qualifiers="const">
<return type="int">
</return>
<description>
- Get the node index, i.e. its position among the siblings of its parent.
+ Returns the node index, i.e. its position among the siblings of its parent.
</description>
</method>
<method name="get_name" qualifiers="const">
<return type="String">
</return>
<description>
- Return the name of the node. This name is unique among the siblings (other child nodes from the same parent).
+ Returns the name of the node. This name is unique among the siblings (other child nodes from the same parent).
</description>
</method>
<method name="get_network_master" qualifiers="const">
<return type="int">
</return>
<description>
+ Returns the peer ID of the network master for this node.
</description>
</method>
<method name="get_node" qualifiers="const">
@@ -220,7 +223,7 @@
<argument index="0" name="path" type="NodePath">
</argument>
<description>
- Fetch a node. The [NodePath] must be valid (or else an error will be raised) and can be either the path to child node, a relative path (from the current node to another node), or an absolute path to a node.
+ Fetches a node. The [NodePath] must be valid (or else an error will be raised) and can be either the path to child node, a relative path (from the current node to another node), or an absolute path to a node.
Note: fetching absolute paths only works when the node is inside the scene tree (see [method is_inside_tree]).
[i]Example:[/i] Assume your current node is Character and the following tree:
[codeblock]
@@ -254,21 +257,21 @@
<return type="Node">
</return>
<description>
- Get the node owner (see [method set_owner]).
+ Returns the node owner (see [method set_owner]).
</description>
</method>
<method name="get_parent" qualifiers="const">
<return type="Node">
</return>
<description>
- Return the parent node of the current node, or an empty [code]Node[/code] if the node lacks a parent.
+ Returns the parent node of the current node, or an empty [code]Node[/code] if the node lacks a parent.
</description>
</method>
<method name="get_path" qualifiers="const">
<return type="NodePath">
</return>
<description>
- Return the absolute path of the current node. This only works if the current node is inside the scene tree (see [method is_inside_tree]).
+ Returns the absolute path of the current node. This only works if the current node is inside the scene tree (see [method is_inside_tree]).
</description>
</method>
<method name="get_path_to" qualifiers="const">
@@ -277,35 +280,28 @@
<argument index="0" name="node" type="Node">
</argument>
<description>
- Return the relative path from the current node to the specified node in "node" argument. Both nodes must be in the same scene, or else the function will fail.
- </description>
- </method>
- <method name="get_pause_mode" qualifiers="const">
- <return type="int" enum="Node.PauseMode">
- </return>
- <description>
- Return the pause mode (PAUSE_MODE_*) of this Node.
+ Returns the relative path from the current node to the specified node in "node" argument. Both nodes must be in the same scene, or else the function will fail.
</description>
</method>
<method name="get_physics_process_delta_time" qualifiers="const">
<return type="float">
</return>
<description>
- Return the time elapsed since the last physics-bound frame (see [method _physics_process]). This is always a constant value in physics processing unless the frames per second is changed in [OS].
+ Returns the time elapsed since the last physics-bound frame (see [method _physics_process]). This is always a constant value in physics processing unless the frames per second is changed in [OS].
</description>
</method>
<method name="get_position_in_parent" qualifiers="const">
<return type="int">
</return>
<description>
- Return the order in the node tree branch, i.e. if called by the first child Node, return 0.
+ Returns the order in the node tree branch, i.e. if called by the first child Node, return 0.
</description>
</method>
<method name="get_process_delta_time" qualifiers="const">
<return type="float">
</return>
<description>
- Return the time elapsed (in seconds) since the last process callback. This is almost always different each time.
+ Returns the time elapsed (in seconds) since the last process callback. This is almost always different each time.
</description>
</method>
<method name="get_scene_instance_load_placeholder" qualifiers="const">
@@ -318,13 +314,14 @@
<return type="SceneTree">
</return>
<description>
- Return a [SceneTree] that this node is inside.
+ Returns the [SceneTree] that this node is inside.
</description>
</method>
<method name="get_viewport" qualifiers="const">
<return type="Viewport">
</return>
<description>
+ Returns the [Viewport] for this node.
</description>
</method>
<method name="has_node" qualifiers="const">
@@ -333,7 +330,7 @@
<argument index="0" name="path" type="NodePath">
</argument>
<description>
- Return whether the node that a given [NodePath] points too exists.
+ Returns [code]true[/code] if the node that the [NodePath] points to exists.
</description>
</method>
<method name="has_node_and_resource" qualifiers="const">
@@ -350,7 +347,7 @@
<argument index="0" name="node" type="Node">
</argument>
<description>
- Return [i]true[/i] if the "node" argument is a direct or indirect child of the current node, otherwise return [i]false[/i].
+ Returns [code]true[/code] if the "node" argument is a direct or indirect child of the current node, otherwise return [code]false[code].
</description>
</method>
<method name="is_displayed_folded" qualifiers="const">
@@ -365,7 +362,7 @@
<argument index="0" name="node" type="Node">
</argument>
<description>
- Return [i]true[/i] if "node" occurs later in the scene hierarchy than the current node, otherwise return [i]false[/i].
+ Returns [code]true[/code] if [code]node[/code] occurs later in the scene hierarchy than the current node, otherwise return [code]false[/code].
</description>
</method>
<method name="is_in_group" qualifiers="const">
@@ -374,14 +371,14 @@
<argument index="0" name="group" type="String">
</argument>
<description>
- Return whether this Node is in the specified group.
+ Returns [code]true[/code] if this Node is in the specified group.
</description>
</method>
<method name="is_inside_tree" qualifiers="const">
<return type="bool">
</return>
<description>
- Return whether this Node is inside a [SceneTree].
+ Returns [code]true[/code] if this Node is currently inside a [SceneTree].
</description>
</method>
<method name="is_network_master" qualifiers="const">
@@ -394,7 +391,7 @@
<return type="bool">
</return>
<description>
- Return true if physics processing is enabled (see [method set_physics_process]).
+ Returns [code]true[/code] if physics processing is enabled (see [method set_physics_process]).
</description>
</method>
<method name="is_physics_processing_internal" qualifiers="const">
@@ -407,14 +404,14 @@
<return type="bool">
</return>
<description>
- Return whether processing is enabled in the current node (see [method set_process]).
+ Returns [code]true[/code] if processing is enabled (see [method set_process]).
</description>
</method>
<method name="is_processing_input" qualifiers="const">
<return type="bool">
</return>
<description>
- Return true if the node is processing input (see [method set_process_input]).
+ Returns [code]true[/code] if the node is processing input (see [method set_process_input]).
</description>
</method>
<method name="is_processing_internal" qualifiers="const">
@@ -427,13 +424,14 @@
<return type="bool">
</return>
<description>
- Return true if the node is processing unhandled input (see [method set_process_unhandled_input]).
+ Returns [code]true[/code] if the node is processing unhandled input (see [method set_process_unhandled_input]).
</description>
</method>
<method name="is_processing_unhandled_key_input" qualifiers="const">
<return type="bool">
</return>
<description>
+ Returns [code]true[/code] if the node is processing unhandled key input (see [method set_process_unhandled_key_input]).
</description>
</method>
<method name="move_child">
@@ -444,7 +442,7 @@
<argument index="1" name="to_position" type="int">
</argument>
<description>
- Move a child node to a different position (order) amongst the other children. Since calls, signals, etc are performed by tree order, changing the order of children nodes may be useful.
+ Moves a child node to a different position (order) amongst the other children. Since calls, signals, etc are performed by tree order, changing the order of children nodes may be useful.
</description>
</method>
<method name="print_stray_nodes">
@@ -457,7 +455,7 @@
<return type="void">
</return>
<description>
- Print the scene to stdout. Used mainly for debugging purposes.
+ Prints the scene to stdout. Used mainly for debugging purposes.
</description>
</method>
<method name="propagate_call">
@@ -493,14 +491,14 @@
<return type="void">
</return>
<description>
- Move this node to the top of the array of nodes of the parent node. This is often useful on GUIs ([Control]), because their order of drawing fully depends on their order in the tree.
+ Moves this node to the top of the array of nodes of the parent node. This is often useful on GUIs ([Control]), because their order of drawing fully depends on their order in the tree.
</description>
</method>
<method name="remove_and_skip">
<return type="void">
</return>
<description>
- Remove a node and set all its children as children of the parent node (if exists). All even subscriptions that pass by the removed node will be unsubscribed.
+ Removes a node and set all its children as children of the parent node (if exists). All event subscriptions that pass by the removed node will be unsubscribed.
</description>
</method>
<method name="remove_child">
@@ -509,7 +507,7 @@
<argument index="0" name="node" type="Node">
</argument>
<description>
- Remove a child [code]Node[/code]. Node is NOT deleted and will have to be deleted manually.
+ Removes a child [code]Node[/code]. Node is NOT deleted and will have to be deleted manually.
</description>
</method>
<method name="remove_from_group">
@@ -518,7 +516,7 @@
<argument index="0" name="group" type="String">
</argument>
<description>
- Remove a node from a group.
+ Removes a node from a group.
</description>
</method>
<method name="replace_by">
@@ -529,14 +527,14 @@
<argument index="1" name="keep_data" type="bool" default="false">
</argument>
<description>
- Replace a node in a scene by a given one. Subscriptions that pass through this node will be lost.
+ Replaces a node in a scene by a given one. Subscriptions that pass through this node will be lost.
</description>
</method>
<method name="request_ready">
<return type="void">
</return>
<description>
- Request that [code]_ready[/code] be called again.
+ Requests that [code]_ready[/code] be called again.
</description>
</method>
<method name="rpc" qualifiers="vararg">
@@ -545,7 +543,7 @@
<argument index="0" name="method" type="String">
</argument>
<description>
- Send a remote procedure call request to all peers on the network (and locally), optionally sending additional data as arguments. Call request will be received by nodes with the same [NodePath].
+ Sends a remote procedure call request to all peers on the network (and locally), optionally sending additional data as arguments. Call request will be received by nodes with the same [NodePath].
</description>
</method>
<method name="rpc_config">
@@ -556,7 +554,7 @@
<argument index="1" name="mode" type="int" enum="Node.RPCMode">
</argument>
<description>
- Change the method's RPC mode (one of RPC_MODE_* constants).
+ Changes the method's RPC mode (one of RPC_MODE_* constants).
</description>
</method>
<method name="rpc_id" qualifiers="vararg">
@@ -567,7 +565,7 @@
<argument index="1" name="method" type="String">
</argument>
<description>
- Send a [method rpc] to a specific peer identified by [i]peer_id[/i].
+ Sends a [method rpc] to a specific peer identified by [i]peer_id[/i].
</description>
</method>
<method name="rpc_unreliable" qualifiers="vararg">
@@ -576,7 +574,7 @@
<argument index="0" name="method" type="String">
</argument>
<description>
- Send a [method rpc] using an unreliable protocol.
+ Sends a [method rpc] using an unreliable protocol.
</description>
</method>
<method name="rpc_unreliable_id" qualifiers="vararg">
@@ -587,7 +585,7 @@
<argument index="1" name="method" type="String">
</argument>
<description>
- Send a [method rpc] to a specific peer identified by [i]peer_id[/i] using an unreliable protocol.
+ Sends a [method rpc] to a specific peer identified by [i]peer_id[/i] using an unreliable protocol.
</description>
</method>
<method name="rset">
@@ -598,7 +596,7 @@
<argument index="1" name="value" type="Variant">
</argument>
<description>
- Remotely change property's value on other peers (and locally).
+ Remotely changes property's value on other peers (and locally).
</description>
</method>
<method name="rset_config">
@@ -609,7 +607,7 @@
<argument index="1" name="mode" type="int" enum="Node.RPCMode">
</argument>
<description>
- Change the property's RPC mode (one of RPC_MODE_* constants).
+ Changes the property's RPC mode (one of RPC_MODE_* constants).
</description>
</method>
<method name="rset_id">
@@ -622,7 +620,7 @@
<argument index="2" name="value" type="Variant">
</argument>
<description>
- Remotely change property's value on a specific peer identified by [i]peer_id[/i].
+ Remotely changes property's value on a specific peer identified by [i]peer_id[/i].
</description>
</method>
<method name="rset_unreliable">
@@ -633,7 +631,7 @@
<argument index="1" name="value" type="Variant">
</argument>
<description>
- Remotely change property's value on other peers (and locally) using an unreliable protocol.
+ Remotely changes property's value on other peers (and locally) using an unreliable protocol.
</description>
</method>
<method name="rset_unreliable_id">
@@ -646,7 +644,7 @@
<argument index="2" name="value" type="Variant">
</argument>
<description>
- Remotely change property's value on a specific peer identified by [i]peer_id[/i] using an unreliable protocol.
+ Remotely changes property's value on a specific peer identified by [i]peer_id[/i] using an unreliable protocol.
</description>
</method>
<method name="set_display_folded">
@@ -672,7 +670,7 @@
<argument index="0" name="name" type="String">
</argument>
<description>
- Set the name of the [code]Node[/code]. Name must be unique within parent, and setting an already existing name will cause for the node to be automatically renamed.
+ Sets the name of the [code]Node[/code]. Name must be unique within parent, and setting an already existing name will cause for the node to be automatically renamed.
</description>
</method>
<method name="set_network_master">
@@ -683,6 +681,7 @@
<argument index="1" name="recursive" type="bool" default="true">
</argument>
<description>
+ Sets the node network master to the peer with the given peer ID. The network master is the peer that has authority over it on the network. Inherited from the parent node by default, which ultimately defaults to peer ID 1 (the server).
</description>
</method>
<method name="set_owner">
@@ -691,16 +690,7 @@
<argument index="0" name="owner" type="Node">
</argument>
<description>
- Set the node owner. A node can have any other node as owner (as long as a valid parent, grandparent, etc ascending in the tree). When saving a node (using SceneSaver) all the nodes it owns will be saved with it. This allows to create complex SceneTrees, with instancing and subinstancing.
- </description>
- </method>
- <method name="set_pause_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Node.PauseMode">
- </argument>
- <description>
- Set pause mode (PAUSE_MODE_*) of this Node.
+ Sets the node owner. A node can have any other node as owner (as long as a valid parent, grandparent, etc ascending in the tree). When saving a node (using SceneSaver) all the nodes it owns will be saved with it. This allows to create complex SceneTrees, with instancing and subinstancing.
</description>
</method>
<method name="set_physics_process">
@@ -709,7 +699,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Enables or disables the node's physics (alias fixed framerate) processing. When a node is being processed, it will receive a NOTIFICATION_PHYSICS_PROCESS at a fixed (usually 60 fps, check [OS] to change that) interval (and the [method _physics_process] callback will be called if exists). It is common to check how much time was elapsed since the previous frame by calling [method get_physics_process_delta_time].
+ Enables or disables the node's physics (alias fixed framerate) processing. When a node is being processed, it will receive a NOTIFICATION_PHYSICS_PROCESS at a fixed (usually 60 fps, check [OS] to change that) interval (and the [method _physics_process] callback will be called if exists). Enabled automatically if [method _physics_process] is overriden. Any calls to this before [method _ready] will be ignored.
</description>
</method>
<method name="set_physics_process_internal">
@@ -726,7 +716,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Enables or disables node processing. When a node is being processed, it will receive a NOTIFICATION_PROCESS on every drawn frame (and the [method _process] callback will be called if exists). It is common to check how much time was elapsed since the previous frame by calling [method get_process_delta_time].
+ Enables or disables node processing. When a node is being processed, it will receive a NOTIFICATION_PROCESS on every drawn frame (and the [method _process] callback will be called if exists). Enabled automatically if [method _process] is overriden. Any calls to this before [method _ready] will be ignored.
</description>
</method>
<method name="set_process_input">
@@ -735,7 +725,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Enable input processing for node. This is not required for GUI controls! It hooks up the node to receive all input (see [method _input]).
+ Enables input processing for node. This is not required for GUI controls! It hooks up the node to receive all input (see [method _input]). Enabled automatically if [method _input] is overriden. Any calls to this before [method _ready] will be ignored.
</description>
</method>
<method name="set_process_internal">
@@ -752,7 +742,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Enable unhandled input processing for node. This is not required for GUI controls! It hooks up the node to receive all input that was not previously handled before (usually by a [Control]). (see [method _unhandled_input]).
+ Enables unhandled input processing for node. This is not required for GUI controls! It hooks up the node to receive all input that was not previously handled before (usually by a [Control]). Enabled automatically if [method _unhandled_input] is overriden. Any calls to this before [method _ready] will be ignored.
</description>
</method>
<method name="set_process_unhandled_key_input">
@@ -761,6 +751,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Enables unhandled key input processing for node. Enabled automatically if [method _unhandled_key_input] is overriden. Any calls to this before [method _ready] will be ignored.
</description>
</method>
<method name="set_scene_instance_load_placeholder">
@@ -773,10 +764,6 @@
</method>
</methods>
<members>
- <member name="_import_path" type="NodePath" setter="_set_import_path" getter="_get_import_path">
- </member>
- <member name="editor/display_folded" type="bool" setter="set_display_folded" getter="is_displayed_folded">
- </member>
<member name="pause_mode" type="int" setter="set_pause_mode" getter="get_pause_mode" enum="Node.PauseMode">
</member>
</members>
@@ -798,74 +785,88 @@
</signal>
</signals>
<constants>
- <constant name="NOTIFICATION_ENTER_TREE" value="10" enum="">
+ <constant name="NOTIFICATION_ENTER_TREE" value="10">
+ Notification received when the node enters a [SceneTree].
</constant>
- <constant name="NOTIFICATION_EXIT_TREE" value="11" enum="">
+ <constant name="NOTIFICATION_EXIT_TREE" value="11">
+ Notification received when the node exits a [SceneTree].
</constant>
- <constant name="NOTIFICATION_MOVED_IN_PARENT" value="12" enum="">
+ <constant name="NOTIFICATION_MOVED_IN_PARENT" value="12">
+ Notification received when the node is moved in the parent.
</constant>
- <constant name="NOTIFICATION_READY" value="13" enum="">
+ <constant name="NOTIFICATION_READY" value="13">
+ Notification received when the node is ready. See [method _ready].
</constant>
- <constant name="NOTIFICATION_PAUSED" value="14" enum="">
+ <constant name="NOTIFICATION_PAUSED" value="14">
+ Notification received when the node is paused.
</constant>
- <constant name="NOTIFICATION_UNPAUSED" value="15" enum="">
+ <constant name="NOTIFICATION_UNPAUSED" value="15">
+ Notification received when the node is unpaused.
</constant>
- <constant name="NOTIFICATION_PHYSICS_PROCESS" value="16" enum="">
+ <constant name="NOTIFICATION_PHYSICS_PROCESS" value="16">
Notification received every frame when the physics process flag is set (see [method set_physics_process]).
</constant>
- <constant name="NOTIFICATION_PROCESS" value="17" enum="">
+ <constant name="NOTIFICATION_PROCESS" value="17">
Notification received every frame when the process flag is set (see [method set_process]).
</constant>
- <constant name="NOTIFICATION_PARENTED" value="18" enum="">
+ <constant name="NOTIFICATION_PARENTED" value="18">
Notification received when a node is set as a child of another node. Note that this doesn't mean that a node entered the Scene Tree.
</constant>
- <constant name="NOTIFICATION_UNPARENTED" value="19" enum="">
+ <constant name="NOTIFICATION_UNPARENTED" value="19">
Notification received when a node is unparented (parent removed it from the list of children).
</constant>
- <constant name="NOTIFICATION_INSTANCED" value="20" enum="">
+ <constant name="NOTIFICATION_INSTANCED" value="20">
+ Notification received when the node is instanced.
</constant>
- <constant name="NOTIFICATION_DRAG_BEGIN" value="21" enum="">
+ <constant name="NOTIFICATION_DRAG_BEGIN" value="21">
+ Notification received when a drag begins.
</constant>
- <constant name="NOTIFICATION_DRAG_END" value="22" enum="">
+ <constant name="NOTIFICATION_DRAG_END" value="22">
+ Notification received when a drag ends.
</constant>
- <constant name="NOTIFICATION_PATH_CHANGED" value="23" enum="">
+ <constant name="NOTIFICATION_PATH_CHANGED" value="23">
+ Notification received when the node's [NodePath] changed.
</constant>
- <constant name="NOTIFICATION_TRANSLATION_CHANGED" value="24" enum="">
+ <constant name="NOTIFICATION_TRANSLATION_CHANGED" value="24">
</constant>
- <constant name="NOTIFICATION_INTERNAL_PROCESS" value="25" enum="">
+ <constant name="NOTIFICATION_INTERNAL_PROCESS" value="25">
</constant>
- <constant name="NOTIFICATION_INTERNAL_PHYSICS_PROCESS" value="26" enum="">
+ <constant name="NOTIFICATION_INTERNAL_PHYSICS_PROCESS" value="26">
</constant>
- <constant name="RPC_MODE_DISABLED" value="0">
+ <constant name="RPC_MODE_DISABLED" value="0" enum="RPCMode">
</constant>
- <constant name="RPC_MODE_REMOTE" value="1">
+ <constant name="RPC_MODE_REMOTE" value="1" enum="RPCMode">
Call a method remotely.
</constant>
- <constant name="RPC_MODE_SYNC" value="2">
+ <constant name="RPC_MODE_SYNC" value="2" enum="RPCMode">
Call a method both remotely and locally.
</constant>
- <constant name="RPC_MODE_MASTER" value="3">
+ <constant name="RPC_MODE_MASTER" value="3" enum="RPCMode">
Call a method if the Node is Master.
</constant>
- <constant name="RPC_MODE_SLAVE" value="4">
+ <constant name="RPC_MODE_SLAVE" value="4" enum="RPCMode">
Call a method if the Node is Slave.
</constant>
- <constant name="PAUSE_MODE_INHERIT" value="0">
+ <constant name="PAUSE_MODE_INHERIT" value="0" enum="PauseMode">
Inherits pause mode from parent. For root node, it is equivalent to PAUSE_MODE_STOP.
</constant>
- <constant name="PAUSE_MODE_STOP" value="1">
+ <constant name="PAUSE_MODE_STOP" value="1" enum="PauseMode">
Stop processing when SceneTree is paused.
</constant>
- <constant name="PAUSE_MODE_PROCESS" value="2">
+ <constant name="PAUSE_MODE_PROCESS" value="2" enum="PauseMode">
Continue to process regardless of SceneTree pause state.
</constant>
- <constant name="DUPLICATE_SIGNALS" value="1">
+ <constant name="DUPLICATE_SIGNALS" value="1" enum="DuplicateFlags">
+ Duplicate the node's signals.
</constant>
- <constant name="DUPLICATE_GROUPS" value="2">
+ <constant name="DUPLICATE_GROUPS" value="2" enum="DuplicateFlags">
+ Duplicate the node's groups.
</constant>
- <constant name="DUPLICATE_SCRIPTS" value="4">
+ <constant name="DUPLICATE_SCRIPTS" value="4" enum="DuplicateFlags">
+ Duplicate the node's scripts.
</constant>
- <constant name="DUPLICATE_USE_INSTANCING" value="8">
+ <constant name="DUPLICATE_USE_INSTANCING" value="8" enum="DuplicateFlags">
+ Duplicate using instancing.
</constant>
</constants>
</class>
diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml
index 195dd9265f..81978809d7 100644
--- a/doc/classes/Node2D.xml
+++ b/doc/classes/Node2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Node2D" inherits="CanvasItem" category="Core" version="3.0-alpha">
+<class name="Node2D" inherits="CanvasItem" category="Core" version="3.0-beta">
<brief_description>
A 2D game object, parent of all 2D related nodes. Has a position, rotation, scale and Z-index.
</brief_description>
@@ -20,15 +20,6 @@
Multiplies the current scale by the 'ratio' vector.
</description>
</method>
- <method name="edit_set_pivot">
- <return type="void">
- </return>
- <argument index="0" name="pivot" type="Vector2">
- </argument>
- <description>
- Sets the node's pivot position.
- </description>
- </method>
<method name="get_angle_to" qualifiers="const">
<return type="float">
</return>
@@ -38,41 +29,6 @@
Returns the angle between the node and the 'point' in radians.
</description>
</method>
- <method name="get_global_position" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Returns the node's global position.
- </description>
- </method>
- <method name="get_global_rotation" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the node's global rotation in radians.
- </description>
- </method>
- <method name="get_global_rotation_degrees" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the node's global rotation in degrees.
- </description>
- </method>
- <method name="get_global_scale" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Returns the node's global scale.
- </description>
- </method>
- <method name="get_position" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Returns the node's position.
- </description>
- </method>
<method name="get_relative_transform_to_parent" qualifiers="const">
<return type="Transform2D">
</return>
@@ -86,28 +42,6 @@
<return type="float">
</return>
<description>
- Returns the node's rotation in radians.
- </description>
- </method>
- <method name="get_rotation_degrees" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the node's rotation in degrees.
- </description>
- </method>
- <method name="get_scale" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Returns the node's scale.
- </description>
- </method>
- <method name="get_z" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the node's Z-index.
</description>
</method>
<method name="global_translate">
@@ -119,13 +53,6 @@
Adds the 'offset' vector to the node's global position.
</description>
</method>
- <method name="is_z_relative" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns true if this node's Z-index is relative to its parent's. Else, returns false.
- </description>
- </method>
<method name="look_at">
<return type="void">
</return>
@@ -166,112 +93,12 @@
Applies a rotation to the node, in radians, starting from its current rotation.
</description>
</method>
- <method name="set_global_position">
- <return type="void">
- </return>
- <argument index="0" name="position" type="Vector2">
- </argument>
- <description>
- Sets the node's global position.
- </description>
- </method>
- <method name="set_global_rotation">
- <return type="void">
- </return>
- <argument index="0" name="radians" type="float">
- </argument>
- <description>
- Sets the node's global rotation in radians.
- </description>
- </method>
- <method name="set_global_rotation_degrees">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- Sets the node's global rotation in degrees.
- </description>
- </method>
- <method name="set_global_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector2">
- </argument>
- <description>
- Sets the node's global scale.
- </description>
- </method>
- <method name="set_global_transform">
- <return type="void">
- </return>
- <argument index="0" name="xform" type="Transform2D">
- </argument>
- <description>
- Sets the node's global [Transform2D].
- </description>
- </method>
- <method name="set_position">
- <return type="void">
- </return>
- <argument index="0" name="position" type="Vector2">
- </argument>
- <description>
- Sets the node's position.
- </description>
- </method>
<method name="set_rotation">
<return type="void">
</return>
<argument index="0" name="radians" type="float">
</argument>
<description>
- Sets the node's rotation in radians.
- </description>
- </method>
- <method name="set_rotation_degrees">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- Sets the node's rotation in degrees.
- </description>
- </method>
- <method name="set_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector2">
- </argument>
- <description>
- Sets the node's scale.
- </description>
- </method>
- <method name="set_transform">
- <return type="void">
- </return>
- <argument index="0" name="xform" type="Transform2D">
- </argument>
- <description>
- Sets the node's local [Transform2D].
- </description>
- </method>
- <method name="set_z">
- <return type="void">
- </return>
- <argument index="0" name="z" type="int">
- </argument>
- <description>
- Sets the node's Z-index.
- </description>
- </method>
- <method name="set_z_as_relative">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Makes the node's Z-index relative to its parent's Z-index. If this node's Z-index is 2 and its parent's effective Z-index is 3, then this node's effective Z-index will be 2 + 3 = 5.
</description>
</method>
<method name="to_global" qualifiers="const">
@@ -321,9 +148,6 @@
<member name="position" type="Vector2" setter="set_position" getter="get_position">
Position, relative to the node's parent.
</member>
- <member name="rotation" type="float" setter="set_rotation" getter="get_rotation">
- Rotation in radians, relative to the node's parent.
- </member>
<member name="rotation_degrees" type="float" setter="set_rotation_degrees" getter="get_rotation_degrees">
Rotation in degrees, relative to the node's parent.
</member>
diff --git a/doc/classes/NodePath.xml b/doc/classes/NodePath.xml
index c706864379..8d5de705b5 100644
--- a/doc/classes/NodePath.xml
+++ b/doc/classes/NodePath.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NodePath" category="Built-In Types" version="3.0-alpha">
+<class name="NodePath" category="Built-In Types" version="3.0-beta">
<brief_description>
Pre-parsed scene tree path.
</brief_description>
@@ -22,6 +22,18 @@
Create a NodePath from a string, e.g. "Path2D/PathFollow2D/Sprite:texture:size". A path is absolute if it starts with a slash. Absolute paths are only valid in the global scene tree, not within individual scenes. In a relative path, [code]"."[/code] and [code]".."[/code] indicate the current node and its parent.
</description>
</method>
+ <method name="get_as_property_path">
+ <return type="NodePath">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_concatenated_subnames">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_name">
<return type="String">
</return>
@@ -38,13 +50,6 @@
Get the number of node names which make up the path.
</description>
</method>
- <method name="get_property">
- <return type="String">
- </return>
- <description>
- Get the path's property name, or an empty string if the path doesn't have a property.
- </description>
- </method>
<method name="get_subname">
<return type="String">
</return>
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index 8f82040eca..902bf4ebfa 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="OS" inherits="Object" category="Core" version="3.0-alpha">
+<class name="OS" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Operating System functions.
</brief_description>
@@ -127,13 +127,6 @@
Returns the current screen index (0 padded).
</description>
</method>
- <method name="get_user_data_dir" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Returns the absolute directory path where user data is written ([code]user://[/code]).
- </description>
- </method>
<method name="get_date" qualifiers="const">
<return type="Dictionary">
</return>
@@ -397,6 +390,13 @@
You can pass the output from [method get_datetime_from_unix_time] directly into this function. Daylight savings time (dst), if present, is ignored.
</description>
</method>
+ <method name="get_user_data_dir" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ Returns the absolute directory path where user data is written ([code]user://[/code]).
+ </description>
+ </method>
<method name="get_virtual_keyboard_height">
<return type="int">
</return>
@@ -828,83 +828,83 @@
</method>
</methods>
<constants>
- <constant name="DAY_SUNDAY" value="0">
+ <constant name="DAY_SUNDAY" value="0" enum="Weekday">
</constant>
- <constant name="DAY_MONDAY" value="1">
+ <constant name="DAY_MONDAY" value="1" enum="Weekday">
</constant>
- <constant name="DAY_TUESDAY" value="2">
+ <constant name="DAY_TUESDAY" value="2" enum="Weekday">
</constant>
- <constant name="DAY_WEDNESDAY" value="3">
+ <constant name="DAY_WEDNESDAY" value="3" enum="Weekday">
</constant>
- <constant name="DAY_THURSDAY" value="4">
+ <constant name="DAY_THURSDAY" value="4" enum="Weekday">
</constant>
- <constant name="DAY_FRIDAY" value="5">
+ <constant name="DAY_FRIDAY" value="5" enum="Weekday">
</constant>
- <constant name="DAY_SATURDAY" value="6">
+ <constant name="DAY_SATURDAY" value="6" enum="Weekday">
</constant>
- <constant name="MONTH_JANUARY" value="1">
+ <constant name="MONTH_JANUARY" value="1" enum="Month">
</constant>
- <constant name="MONTH_FEBRUARY" value="2">
+ <constant name="MONTH_FEBRUARY" value="2" enum="Month">
</constant>
- <constant name="MONTH_MARCH" value="3">
+ <constant name="MONTH_MARCH" value="3" enum="Month">
</constant>
- <constant name="MONTH_APRIL" value="4">
+ <constant name="MONTH_APRIL" value="4" enum="Month">
</constant>
- <constant name="MONTH_MAY" value="5">
+ <constant name="MONTH_MAY" value="5" enum="Month">
</constant>
- <constant name="MONTH_JUNE" value="6">
+ <constant name="MONTH_JUNE" value="6" enum="Month">
</constant>
- <constant name="MONTH_JULY" value="7">
+ <constant name="MONTH_JULY" value="7" enum="Month">
</constant>
- <constant name="MONTH_AUGUST" value="8">
+ <constant name="MONTH_AUGUST" value="8" enum="Month">
</constant>
- <constant name="MONTH_SEPTEMBER" value="9">
+ <constant name="MONTH_SEPTEMBER" value="9" enum="Month">
</constant>
- <constant name="MONTH_OCTOBER" value="10">
+ <constant name="MONTH_OCTOBER" value="10" enum="Month">
</constant>
- <constant name="MONTH_NOVEMBER" value="11">
+ <constant name="MONTH_NOVEMBER" value="11" enum="Month">
</constant>
- <constant name="MONTH_DECEMBER" value="12">
+ <constant name="MONTH_DECEMBER" value="12" enum="Month">
</constant>
- <constant name="SCREEN_ORIENTATION_LANDSCAPE" value="0">
+ <constant name="SCREEN_ORIENTATION_LANDSCAPE" value="0" enum="ScreenOrientation">
</constant>
- <constant name="SCREEN_ORIENTATION_PORTRAIT" value="1">
+ <constant name="SCREEN_ORIENTATION_PORTRAIT" value="1" enum="ScreenOrientation">
</constant>
- <constant name="SCREEN_ORIENTATION_REVERSE_LANDSCAPE" value="2">
+ <constant name="SCREEN_ORIENTATION_REVERSE_LANDSCAPE" value="2" enum="ScreenOrientation">
</constant>
- <constant name="SCREEN_ORIENTATION_REVERSE_PORTRAIT" value="3">
+ <constant name="SCREEN_ORIENTATION_REVERSE_PORTRAIT" value="3" enum="ScreenOrientation">
</constant>
- <constant name="SCREEN_ORIENTATION_SENSOR_LANDSCAPE" value="4">
+ <constant name="SCREEN_ORIENTATION_SENSOR_LANDSCAPE" value="4" enum="ScreenOrientation">
</constant>
- <constant name="SCREEN_ORIENTATION_SENSOR_PORTRAIT" value="5">
+ <constant name="SCREEN_ORIENTATION_SENSOR_PORTRAIT" value="5" enum="ScreenOrientation">
</constant>
- <constant name="SCREEN_ORIENTATION_SENSOR" value="6">
+ <constant name="SCREEN_ORIENTATION_SENSOR" value="6" enum="ScreenOrientation">
</constant>
- <constant name="SYSTEM_DIR_DESKTOP" value="0">
+ <constant name="SYSTEM_DIR_DESKTOP" value="0" enum="SystemDir">
</constant>
- <constant name="SYSTEM_DIR_DCIM" value="1">
+ <constant name="SYSTEM_DIR_DCIM" value="1" enum="SystemDir">
</constant>
- <constant name="SYSTEM_DIR_DOCUMENTS" value="2">
+ <constant name="SYSTEM_DIR_DOCUMENTS" value="2" enum="SystemDir">
</constant>
- <constant name="SYSTEM_DIR_DOWNLOADS" value="3">
+ <constant name="SYSTEM_DIR_DOWNLOADS" value="3" enum="SystemDir">
</constant>
- <constant name="SYSTEM_DIR_MOVIES" value="4">
+ <constant name="SYSTEM_DIR_MOVIES" value="4" enum="SystemDir">
</constant>
- <constant name="SYSTEM_DIR_MUSIC" value="5">
+ <constant name="SYSTEM_DIR_MUSIC" value="5" enum="SystemDir">
</constant>
- <constant name="SYSTEM_DIR_PICTURES" value="6">
+ <constant name="SYSTEM_DIR_PICTURES" value="6" enum="SystemDir">
</constant>
- <constant name="SYSTEM_DIR_RINGTONES" value="7">
+ <constant name="SYSTEM_DIR_RINGTONES" value="7" enum="SystemDir">
</constant>
- <constant name="POWERSTATE_UNKNOWN" value="0">
+ <constant name="POWERSTATE_UNKNOWN" value="0" enum="PowerState">
</constant>
- <constant name="POWERSTATE_ON_BATTERY" value="1">
+ <constant name="POWERSTATE_ON_BATTERY" value="1" enum="PowerState">
</constant>
- <constant name="POWERSTATE_NO_BATTERY" value="2">
+ <constant name="POWERSTATE_NO_BATTERY" value="2" enum="PowerState">
</constant>
- <constant name="POWERSTATE_CHARGING" value="3">
+ <constant name="POWERSTATE_CHARGING" value="3" enum="PowerState">
</constant>
- <constant name="POWERSTATE_CHARGED" value="4">
+ <constant name="POWERSTATE_CHARGED" value="4" enum="PowerState">
</constant>
</constants>
</class>
diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml
index bea4c14a3c..5d0e51c481 100644
--- a/doc/classes/Object.xml
+++ b/doc/classes/Object.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Object" category="Core" version="3.0-alpha">
+<class name="Object" category="Core" version="3.0-beta">
<brief_description>
Base class for all non built-in types.
</brief_description>
@@ -178,6 +178,14 @@
- "method_name" is a name of method to which signal is connected.
</description>
</method>
+ <method name="get_indexed" qualifiers="const">
+ <return type="Variant">
+ </return>
+ <argument index="0" name="property" type="NodePath">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="get_instance_id" qualifiers="const">
<return type="int">
</return>
@@ -338,6 +346,16 @@
If set to true, signal emission is blocked.
</description>
</method>
+ <method name="set_indexed">
+ <return type="void">
+ </return>
+ <argument index="0" name="property" type="NodePath">
+ </argument>
+ <argument index="1" name="value" type="Variant">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_message_translation">
<return type="void">
</return>
@@ -384,19 +402,19 @@
</signal>
</signals>
<constants>
- <constant name="NOTIFICATION_POSTINITIALIZE" value="0" enum="">
+ <constant name="NOTIFICATION_POSTINITIALIZE" value="0">
Called right when the object is initialized. Not available in script.
</constant>
- <constant name="NOTIFICATION_PREDELETE" value="1" enum="">
+ <constant name="NOTIFICATION_PREDELETE" value="1">
Called before the object is about to be deleted.
</constant>
- <constant name="CONNECT_DEFERRED" value="1">
+ <constant name="CONNECT_DEFERRED" value="1" enum="ConnectFlags">
Connect a signal in deferred mode. This way, signal emissions are stored in a queue, then set on idle time.
</constant>
- <constant name="CONNECT_PERSIST" value="2">
+ <constant name="CONNECT_PERSIST" value="2" enum="ConnectFlags">
Persisting connections are saved when the object is serialized to file.
</constant>
- <constant name="CONNECT_ONESHOT" value="4">
+ <constant name="CONNECT_ONESHOT" value="4" enum="ConnectFlags">
One shot connections disconnect themselves after emission.
</constant>
</constants>
diff --git a/doc/classes/OccluderPolygon2D.xml b/doc/classes/OccluderPolygon2D.xml
index e86aa999ad..f11f82c7de 100644
--- a/doc/classes/OccluderPolygon2D.xml
+++ b/doc/classes/OccluderPolygon2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="OccluderPolygon2D" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="OccluderPolygon2D" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Defines a 2D polygon for LightOccluder2D.
</brief_description>
@@ -11,48 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_cull_mode" qualifiers="const">
- <return type="int" enum="OccluderPolygon2D.CullMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_polygon" qualifiers="const">
- <return type="PoolVector2Array">
- </return>
- <description>
- </description>
- </method>
- <method name="is_closed" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_closed">
- <return type="void">
- </return>
- <argument index="0" name="closed" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_cull_mode">
- <return type="void">
- </return>
- <argument index="0" name="cull_mode" type="int" enum="OccluderPolygon2D.CullMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_polygon">
- <return type="void">
- </return>
- <argument index="0" name="polygon" type="PoolVector2Array">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="closed" type="bool" setter="set_closed" getter="is_closed">
@@ -66,13 +24,13 @@
</member>
</members>
<constants>
- <constant name="CULL_DISABLED" value="0">
+ <constant name="CULL_DISABLED" value="0" enum="CullMode">
Culling mode for the occlusion. Disabled means no culling. See [member cull_mode].
</constant>
- <constant name="CULL_CLOCKWISE" value="1">
+ <constant name="CULL_CLOCKWISE" value="1" enum="CullMode">
Culling mode for the occlusion. Sets the culling to be in clockwise direction. See [member cull_mode].
</constant>
- <constant name="CULL_COUNTER_CLOCKWISE" value="2">
+ <constant name="CULL_COUNTER_CLOCKWISE" value="2" enum="CullMode">
Culling mode for the occlusion. Sets the culling to be in counter clockwise direction. See [member cull_mode].
</constant>
</constants>
diff --git a/doc/classes/OmniLight.xml b/doc/classes/OmniLight.xml
index 7c8b1d4756..f0c5c81a47 100644
--- a/doc/classes/OmniLight.xml
+++ b/doc/classes/OmniLight.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="OmniLight" inherits="Light" category="Core" version="3.0-alpha">
+<class name="OmniLight" inherits="Light" category="Core" version="3.0-beta">
<brief_description>
OmniDirectional Light, such as a light bulb or a candle.
</brief_description>
@@ -11,34 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_shadow_detail" qualifiers="const">
- <return type="int" enum="OmniLight.ShadowDetail">
- </return>
- <description>
- </description>
- </method>
- <method name="get_shadow_mode" qualifiers="const">
- <return type="int" enum="OmniLight.ShadowMode">
- </return>
- <description>
- </description>
- </method>
- <method name="set_shadow_detail">
- <return type="void">
- </return>
- <argument index="0" name="detail" type="int" enum="OmniLight.ShadowDetail">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="OmniLight.ShadowMode">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="omni_attenuation" type="float" setter="set_param" getter="get_param">
@@ -51,13 +23,13 @@
</member>
</members>
<constants>
- <constant name="SHADOW_DUAL_PARABOLOID" value="0">
+ <constant name="SHADOW_DUAL_PARABOLOID" value="0" enum="ShadowMode">
</constant>
- <constant name="SHADOW_CUBE" value="1">
+ <constant name="SHADOW_CUBE" value="1" enum="ShadowMode">
</constant>
- <constant name="SHADOW_DETAIL_VERTICAL" value="0">
+ <constant name="SHADOW_DETAIL_VERTICAL" value="0" enum="ShadowDetail">
</constant>
- <constant name="SHADOW_DETAIL_HORIZONTAL" value="1">
+ <constant name="SHADOW_DETAIL_HORIZONTAL" value="1" enum="ShadowDetail">
</constant>
</constants>
</class>
diff --git a/doc/classes/OptionButton.xml b/doc/classes/OptionButton.xml
index e08b5cac16..76265e700a 100644
--- a/doc/classes/OptionButton.xml
+++ b/doc/classes/OptionButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="OptionButton" inherits="Button" category="Core" version="3.0-alpha">
+<class name="OptionButton" inherits="Button" category="Core" version="3.0-beta">
<brief_description>
Button control that provides selectable options when pressed.
</brief_description>
@@ -91,13 +91,6 @@
Return the text of the item at index "idx".
</description>
</method>
- <method name="get_selected" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the current item index
- </description>
- </method>
<method name="get_selected_id" qualifiers="const">
<return type="int">
</return>
@@ -190,8 +183,6 @@
</method>
</methods>
<members>
- <member name="items" type="Array" setter="_set_items" getter="_get_items">
- </member>
<member name="selected" type="int" setter="_select_int" getter="get_selected">
</member>
</members>
diff --git a/doc/classes/PCKPacker.xml b/doc/classes/PCKPacker.xml
index 4677c15b7b..0e297ba875 100644
--- a/doc/classes/PCKPacker.xml
+++ b/doc/classes/PCKPacker.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PCKPacker" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="PCKPacker" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/PHashTranslation.xml b/doc/classes/PHashTranslation.xml
index c74cc8793f..04220e5155 100644
--- a/doc/classes/PHashTranslation.xml
+++ b/doc/classes/PHashTranslation.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PHashTranslation" inherits="Translation" category="Core" version="3.0-alpha">
+<class name="PHashTranslation" inherits="Translation" category="Core" version="3.0-beta">
<brief_description>
Optimized translation.
</brief_description>
diff --git a/doc/classes/PackedDataContainer.xml b/doc/classes/PackedDataContainer.xml
index 6e660b983a..d4b7bc36c6 100644
--- a/doc/classes/PackedDataContainer.xml
+++ b/doc/classes/PackedDataContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PackedDataContainer" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="PackedDataContainer" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/PackedDataContainerRef.xml b/doc/classes/PackedDataContainerRef.xml
index 9d44307afe..93a5bbb627 100644
--- a/doc/classes/PackedDataContainerRef.xml
+++ b/doc/classes/PackedDataContainerRef.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PackedDataContainerRef" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="PackedDataContainerRef" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/PackedScene.xml b/doc/classes/PackedScene.xml
index a226a2bc28..80ef3afdb1 100644
--- a/doc/classes/PackedScene.xml
+++ b/doc/classes/PackedScene.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PackedScene" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="PackedScene" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
+ An abstraction of a serialized scene.
</brief_description>
<description>
+ A simplified interface to a scene file. Provides access to operations and checks that can be performed on the scene resource itself.
TODO: explain ownership, and that node does not need to own itself
</description>
<tutorials>
@@ -14,12 +16,14 @@
<return type="bool">
</return>
<description>
+ Returns [code]true[/code] if the scene file has nodes.
</description>
</method>
<method name="get_state">
<return type="SceneState">
</return>
<description>
+ Returns the [code]SceneState[/code] representing the scene file contents.
</description>
</method>
<method name="instance" qualifiers="const">
@@ -28,6 +32,7 @@
<argument index="0" name="edit_state" type="int" enum="PackedScene.GenEditState" default="0">
</argument>
<description>
+ Instantiates the scene's node hierarchy. Triggers child scene instantiation(s). Triggers the [enum Object.NOTIFICATION_INSTANCED] notification on the root node.
</description>
</method>
<method name="pack">
@@ -42,14 +47,19 @@
</methods>
<members>
<member name="_bundled" type="Dictionary" setter="_set_bundled_scene" getter="_get_bundled_scene">
+ A dictionary representation of the scene contents.
+ Available keys include "rnames" and "variants" for resources, "node_count", "nodes", "node_paths" for nodes, "editable_instances" for base scene children overrides, "conn_count" and "conns" for signal connections, and "version" for the format style of the PackedScene.
</member>
</members>
<constants>
- <constant name="GEN_EDIT_STATE_DISABLED" value="0">
+ <constant name="GEN_EDIT_STATE_DISABLED" value="0" enum="GenEditState">
+ If passed to [method instance], blocks edits to the scene state.
</constant>
- <constant name="GEN_EDIT_STATE_INSTANCE" value="1">
+ <constant name="GEN_EDIT_STATE_INSTANCE" value="1" enum="GenEditState">
+ If passed to [method instance], provides local scene resources to the local scene. Requires tools compiled.
</constant>
- <constant name="GEN_EDIT_STATE_MAIN" value="2">
+ <constant name="GEN_EDIT_STATE_MAIN" value="2" enum="GenEditState">
+ If passed to [method instance], provides local scene resources to the local scene. Only the main scene should receive the main edit state. Requires tools compiled.
</constant>
</constants>
</class>
diff --git a/doc/classes/PacketPeer.xml b/doc/classes/PacketPeer.xml
index b99d5dc5e9..891f0c9ffc 100644
--- a/doc/classes/PacketPeer.xml
+++ b/doc/classes/PacketPeer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PacketPeer" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="PacketPeer" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Abstraction and base class for packet-based protocols.
</brief_description>
diff --git a/doc/classes/PacketPeerStream.xml b/doc/classes/PacketPeerStream.xml
index 38e2d9c1a1..5d320a09f8 100644
--- a/doc/classes/PacketPeerStream.xml
+++ b/doc/classes/PacketPeerStream.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PacketPeerStream" inherits="PacketPeer" category="Core" version="3.0-alpha">
+<class name="PacketPeerStream" inherits="PacketPeer" category="Core" version="3.0-beta">
<brief_description>
Wrapper to use a PacketPeer over a StreamPeer.
</brief_description>
diff --git a/doc/classes/PacketPeerUDP.xml b/doc/classes/PacketPeerUDP.xml
index 758ad35365..838365bc87 100644
--- a/doc/classes/PacketPeerUDP.xml
+++ b/doc/classes/PacketPeerUDP.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PacketPeerUDP" inherits="PacketPeer" category="Core" version="3.0-alpha">
+<class name="PacketPeerUDP" inherits="PacketPeer" category="Core" version="3.0-beta">
<brief_description>
UDP packet peer.
</brief_description>
diff --git a/doc/classes/Panel.xml b/doc/classes/Panel.xml
index 28a1e304aa..e0dc2cafce 100644
--- a/doc/classes/Panel.xml
+++ b/doc/classes/Panel.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Panel" inherits="Control" category="Core" version="3.0-alpha">
+<class name="Panel" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Provides an opaque background for [Control] children.
</brief_description>
diff --git a/doc/classes/PanelContainer.xml b/doc/classes/PanelContainer.xml
index 415d71c8e7..2a3fb2eeb9 100644
--- a/doc/classes/PanelContainer.xml
+++ b/doc/classes/PanelContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PanelContainer" inherits="Container" category="Core" version="3.0-alpha">
+<class name="PanelContainer" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
Panel container type.
</brief_description>
diff --git a/doc/classes/PanoramaSky.xml b/doc/classes/PanoramaSky.xml
index 7f24bb294b..6a26347120 100644
--- a/doc/classes/PanoramaSky.xml
+++ b/doc/classes/PanoramaSky.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PanoramaSky" inherits="Sky" category="Core" version="3.0-alpha">
+<class name="PanoramaSky" inherits="Sky" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,20 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_panorama" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="set_panorama">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="panorama" type="Texture" setter="set_panorama" getter="get_panorama">
diff --git a/doc/classes/ParallaxBackground.xml b/doc/classes/ParallaxBackground.xml
index 3186f6b972..da22f03845 100644
--- a/doc/classes/ParallaxBackground.xml
+++ b/doc/classes/ParallaxBackground.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ParallaxBackground" inherits="CanvasLayer" category="Core" version="3.0-alpha">
+<class name="ParallaxBackground" inherits="CanvasLayer" category="Core" version="3.0-beta">
<brief_description>
A node used to create a parallax scrolling background.
</brief_description>
@@ -11,100 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_limit_begin" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the beginning limit.
- </description>
- </method>
- <method name="get_limit_end" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the ending limit.
- </description>
- </method>
- <method name="get_scroll_base_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the base offset.
- </description>
- </method>
- <method name="get_scroll_base_scale" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the base motion scale.
- </description>
- </method>
- <method name="get_scroll_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="is_ignore_camera_zoom">
- <return type="bool">
- </return>
- <description>
- Return ignoring camera zoom.
- </description>
- </method>
- <method name="set_ignore_camera_zoom">
- <return type="void">
- </return>
- <argument index="0" name="ignore" type="bool">
- </argument>
- <description>
- Set to true for all child [ParallaxLayer] nodes to not be affected by the zoom level of the camera.
- </description>
- </method>
- <method name="set_limit_begin">
- <return type="void">
- </return>
- <argument index="0" name="ofs" type="Vector2">
- </argument>
- <description>
- Set the left and top limits in pixels for scrolling to begin. If the camera is outside of this limit the background will not continue to scroll. If an axis is greater than or equal to the corresponding axis of limit_end, then it will not limit scrolling for that axis.
- </description>
- </method>
- <method name="set_limit_end">
- <return type="void">
- </return>
- <argument index="0" name="ofs" type="Vector2">
- </argument>
- <description>
- Set the right and bottom limits in pixels for scrolling to end. If the camera is outside of this limit the background will not continue to scroll. If an axis is less than or equal to the corresponding axis of limit_begin, then it will not limit scrolling for that axis.
- </description>
- </method>
- <method name="set_scroll_base_offset">
- <return type="void">
- </return>
- <argument index="0" name="ofs" type="Vector2">
- </argument>
- <description>
- Set the base offset in pixels of all children [ParallaxLayer] nodes.
- </description>
- </method>
- <method name="set_scroll_base_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector2">
- </argument>
- <description>
- Set the base motion scale of all children [ParallaxLayer] nodes.
- </description>
- </method>
- <method name="set_scroll_offset">
- <return type="void">
- </return>
- <argument index="0" name="ofs" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="scroll_base_offset" type="Vector2" setter="set_scroll_base_offset" getter="get_scroll_base_offset">
diff --git a/doc/classes/ParallaxLayer.xml b/doc/classes/ParallaxLayer.xml
index 784395b1ec..c70e6befc4 100644
--- a/doc/classes/ParallaxLayer.xml
+++ b/doc/classes/ParallaxLayer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ParallaxLayer" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="ParallaxLayer" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
A parallax scrolling layer to be used with [ParallaxBackground].
</brief_description>
@@ -12,52 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_mirroring" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the mirroring of the ParallaxLayer.
- </description>
- </method>
- <method name="get_motion_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_motion_scale" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the motion scale of the ParallaxLayer.
- </description>
- </method>
- <method name="set_mirroring">
- <return type="void">
- </return>
- <argument index="0" name="mirror" type="Vector2">
- </argument>
- <description>
- Set the mirroring of the ParallaxLayer. If an axis is set to 0 then that axis will have no mirroring.
- </description>
- </method>
- <method name="set_motion_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_motion_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector2">
- </argument>
- <description>
- Set the motion scale of the ParallaxLayer. If an axis is set to 0 then it will not move at all, it will stick with the camera.
- </description>
- </method>
</methods>
<members>
<member name="motion_mirroring" type="Vector2" setter="set_mirroring" getter="get_mirroring">
diff --git a/doc/classes/Particles.xml b/doc/classes/Particles.xml
index 9a9279b0a7..2a5dcb26e8 100644
--- a/doc/classes/Particles.xml
+++ b/doc/classes/Particles.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Particles" inherits="GeometryInstance" category="Core" version="3.0-alpha">
+<class name="Particles" inherits="GeometryInstance" category="Core" version="3.0-beta">
<brief_description>
3D particle emitter.
</brief_description>
@@ -18,240 +18,12 @@
<description>
</description>
</method>
- <method name="get_amount" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_draw_order" qualifiers="const">
- <return type="int" enum="Particles.DrawOrder">
- </return>
- <description>
- </description>
- </method>
- <method name="get_draw_pass_mesh" qualifiers="const">
- <return type="Mesh">
- </return>
- <argument index="0" name="pass" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_draw_passes" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_explosiveness_ratio" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fixed_fps" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fractional_delta" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_lifetime" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_one_shot" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_pre_process_time" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_process_material" qualifiers="const">
- <return type="Material">
- </return>
- <description>
- </description>
- </method>
- <method name="get_randomness_ratio" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_speed_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_use_local_coordinates" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_visibility_aabb" qualifiers="const">
- <return type="AABB">
- </return>
- <description>
- </description>
- </method>
- <method name="is_emitting" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="restart">
<return type="void">
</return>
<description>
</description>
</method>
- <method name="set_amount">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_draw_order">
- <return type="void">
- </return>
- <argument index="0" name="order" type="int" enum="Particles.DrawOrder">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_draw_pass_mesh">
- <return type="void">
- </return>
- <argument index="0" name="pass" type="int">
- </argument>
- <argument index="1" name="mesh" type="Mesh">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_draw_passes">
- <return type="void">
- </return>
- <argument index="0" name="passes" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emitting">
- <return type="void">
- </return>
- <argument index="0" name="emitting" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_explosiveness_ratio">
- <return type="void">
- </return>
- <argument index="0" name="ratio" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fixed_fps">
- <return type="void">
- </return>
- <argument index="0" name="fps" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fractional_delta">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_lifetime">
- <return type="void">
- </return>
- <argument index="0" name="secs" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_one_shot">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pre_process_time">
- <return type="void">
- </return>
- <argument index="0" name="secs" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_process_material">
- <return type="void">
- </return>
- <argument index="0" name="material" type="Material">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_randomness_ratio">
- <return type="void">
- </return>
- <argument index="0" name="ratio" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_speed_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_use_local_coordinates">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_visibility_aabb">
- <return type="void">
- </return>
- <argument index="0" name="aabb" type="AABB">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="amount" type="int" setter="set_amount" getter="get_amount">
@@ -304,16 +76,16 @@
</member>
</members>
<constants>
- <constant name="DRAW_ORDER_INDEX" value="0">
+ <constant name="DRAW_ORDER_INDEX" value="0" enum="DrawOrder">
Particles are drawn in the order emitted.
</constant>
- <constant name="DRAW_ORDER_LIFETIME" value="1">
+ <constant name="DRAW_ORDER_LIFETIME" value="1" enum="DrawOrder">
Particles are drawn in order of remaining lifetime.
</constant>
- <constant name="DRAW_ORDER_VIEW_DEPTH" value="2">
+ <constant name="DRAW_ORDER_VIEW_DEPTH" value="2" enum="DrawOrder">
Particles are drawn in order of depth.
</constant>
- <constant name="MAX_DRAW_PASSES" value="4" enum="">
+ <constant name="MAX_DRAW_PASSES" value="4">
</constant>
</constants>
</class>
diff --git a/doc/classes/Particles2D.xml b/doc/classes/Particles2D.xml
index be69e03d56..8b908a1fa2 100644
--- a/doc/classes/Particles2D.xml
+++ b/doc/classes/Particles2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Particles2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Particles2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
2D particle emitter.
</brief_description>
@@ -18,271 +18,12 @@
<description>
</description>
</method>
- <method name="get_amount" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the amount of particles spawned at each emission
- </description>
- </method>
- <method name="get_draw_order" qualifiers="const">
- <return type="int" enum="Particles2D.DrawOrder">
- </return>
- <description>
- </description>
- </method>
- <method name="get_explosiveness_ratio" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fixed_fps" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fractional_delta" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_h_frames" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_lifetime" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Gets the amount of seconds that each particle will be visible.
- </description>
- </method>
- <method name="get_normal_map" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_one_shot" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_pre_process_time" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_process_material" qualifiers="const">
- <return type="Material">
- </return>
- <description>
- </description>
- </method>
- <method name="get_randomness_ratio" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_speed_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- Returns the texture for emitted particles
- </description>
- </method>
- <method name="get_use_local_coordinates" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_v_frames" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_visibility_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- </description>
- </method>
- <method name="is_emitting" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether this emitter is currently emitting or not
- </description>
- </method>
<method name="restart">
<return type="void">
</return>
<description>
</description>
</method>
- <method name="set_amount">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- Sets the amount of particles spawned at each emission
- </description>
- </method>
- <method name="set_draw_order">
- <return type="void">
- </return>
- <argument index="0" name="order" type="int" enum="Particles2D.DrawOrder">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emitting">
- <return type="void">
- </return>
- <argument index="0" name="emitting" type="bool">
- </argument>
- <description>
- If this is set to true then the particle emitter will emit particles, if its false it will not.
- </description>
- </method>
- <method name="set_explosiveness_ratio">
- <return type="void">
- </return>
- <argument index="0" name="ratio" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fixed_fps">
- <return type="void">
- </return>
- <argument index="0" name="fps" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fractional_delta">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_h_frames">
- <return type="void">
- </return>
- <argument index="0" name="frames" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_lifetime">
- <return type="void">
- </return>
- <argument index="0" name="secs" type="float">
- </argument>
- <description>
- Sets the amount of seconds that each particle will be visible.
- </description>
- </method>
- <method name="set_normal_map">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_one_shot">
- <return type="void">
- </return>
- <argument index="0" name="secs" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pre_process_time">
- <return type="void">
- </return>
- <argument index="0" name="secs" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_process_material">
- <return type="void">
- </return>
- <argument index="0" name="material" type="Material">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_randomness_ratio">
- <return type="void">
- </return>
- <argument index="0" name="ratio" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_speed_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_use_local_coordinates">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_v_frames">
- <return type="void">
- </return>
- <argument index="0" name="frames" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_visibility_rect">
- <return type="void">
- </return>
- <argument index="0" name="aabb" type="Rect2">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="amount" type="int" setter="set_amount" getter="get_amount">
@@ -338,10 +79,10 @@
</member>
</members>
<constants>
- <constant name="DRAW_ORDER_INDEX" value="0">
+ <constant name="DRAW_ORDER_INDEX" value="0" enum="DrawOrder">
Particles are drawn in the order emitted.
</constant>
- <constant name="DRAW_ORDER_LIFETIME" value="1">
+ <constant name="DRAW_ORDER_LIFETIME" value="1" enum="DrawOrder">
Particles are drawn in order of remaining lifetime.
</constant>
</constants>
diff --git a/doc/classes/ParticlesMaterial.xml b/doc/classes/ParticlesMaterial.xml
index 2428d1880d..42bc1b2d05 100644
--- a/doc/classes/ParticlesMaterial.xml
+++ b/doc/classes/ParticlesMaterial.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ParticlesMaterial" inherits="Material" category="Core" version="3.0-alpha">
+<class name="ParticlesMaterial" inherits="Material" category="Core" version="3.0-beta">
<brief_description>
Particle properties for [Particles] and [Particles2D] nodes.
</brief_description>
@@ -12,288 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_color_ramp" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_box_extents" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_color_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_normal_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_point_count" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_point_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_shape" qualifiers="const">
- <return type="int" enum="ParticlesMaterial.EmissionShape">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_sphere_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_flag" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="flag" type="int" enum="ParticlesMaterial.Flags">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_flatness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_gravity" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_param" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="ParticlesMaterial.Parameter">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_param_randomness" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="ParticlesMaterial.Parameter">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_param_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <argument index="0" name="param" type="int" enum="ParticlesMaterial.Parameter">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_spread" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_trail_color_modifier" qualifiers="const">
- <return type="GradientTexture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_trail_divisor" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_trail_size_modifier" qualifiers="const">
- <return type="CurveTexture">
- </return>
- <description>
- </description>
- </method>
- <method name="set_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_color_ramp">
- <return type="void">
- </return>
- <argument index="0" name="ramp" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_box_extents">
- <return type="void">
- </return>
- <argument index="0" name="extents" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_color_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_normal_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_point_count">
- <return type="void">
- </return>
- <argument index="0" name="point_count" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_point_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_shape">
- <return type="void">
- </return>
- <argument index="0" name="shape" type="int" enum="ParticlesMaterial.EmissionShape">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_sphere_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flag">
- <return type="void">
- </return>
- <argument index="0" name="flag" type="int" enum="ParticlesMaterial.Flags">
- </argument>
- <argument index="1" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flatness">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_gravity">
- <return type="void">
- </return>
- <argument index="0" name="accel_vec" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="ParticlesMaterial.Parameter">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param_randomness">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="ParticlesMaterial.Parameter">
- </argument>
- <argument index="1" name="randomness" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param_texture">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="ParticlesMaterial.Parameter">
- </argument>
- <argument index="1" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_spread">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_trail_color_modifier">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="GradientTexture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_trail_divisor">
- <return type="void">
- </return>
- <argument index="0" name="divisor" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_trail_size_modifier">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="CurveTexture">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="angle" type="float" setter="set_param" getter="get_param">
@@ -454,64 +172,64 @@
</member>
</members>
<constants>
- <constant name="PARAM_INITIAL_LINEAR_VELOCITY" value="0">
+ <constant name="PARAM_INITIAL_LINEAR_VELOCITY" value="0" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set initial velocity properties.
</constant>
- <constant name="PARAM_ANGULAR_VELOCITY" value="1">
+ <constant name="PARAM_ANGULAR_VELOCITY" value="1" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set angular velocity properties.
</constant>
- <constant name="PARAM_ORBIT_VELOCITY" value="2">
+ <constant name="PARAM_ORBIT_VELOCITY" value="2" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set orbital_velocity properties.
</constant>
- <constant name="PARAM_LINEAR_ACCEL" value="3">
+ <constant name="PARAM_LINEAR_ACCEL" value="3" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set linear acceleration properties.
</constant>
- <constant name="PARAM_RADIAL_ACCEL" value="4">
+ <constant name="PARAM_RADIAL_ACCEL" value="4" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set radial acceleration properties.
</constant>
- <constant name="PARAM_TANGENTIAL_ACCEL" value="5">
+ <constant name="PARAM_TANGENTIAL_ACCEL" value="5" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set tangential acceleration properties.
</constant>
- <constant name="PARAM_DAMPING" value="6">
+ <constant name="PARAM_DAMPING" value="6" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set damping properties.
</constant>
- <constant name="PARAM_ANGLE" value="7">
+ <constant name="PARAM_ANGLE" value="7" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set angle properties.
</constant>
- <constant name="PARAM_SCALE" value="8">
+ <constant name="PARAM_SCALE" value="8" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set scale properties.
</constant>
- <constant name="PARAM_HUE_VARIATION" value="9">
+ <constant name="PARAM_HUE_VARIATION" value="9" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set hue_variation properties.
</constant>
- <constant name="PARAM_ANIM_SPEED" value="10">
+ <constant name="PARAM_ANIM_SPEED" value="10" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set animation speed properties.
</constant>
- <constant name="PARAM_ANIM_OFFSET" value="11">
+ <constant name="PARAM_ANIM_OFFSET" value="11" enum="Parameter">
Use with [method set_param], [method set_param_randomness], and [method set_param_texture] to set animation offset properties.
</constant>
- <constant name="PARAM_MAX" value="12">
+ <constant name="PARAM_MAX" value="12" enum="Parameter">
</constant>
- <constant name="FLAG_ALIGN_Y_TO_VELOCITY" value="0">
+ <constant name="FLAG_ALIGN_Y_TO_VELOCITY" value="0" enum="Flags">
Use with [method set_flag] to set [member flag_align_y].
</constant>
- <constant name="FLAG_ROTATE_Y" value="1">
+ <constant name="FLAG_ROTATE_Y" value="1" enum="Flags">
Use with [method set_flag] to set [member flag_rotate_y]
</constant>
- <constant name="FLAG_MAX" value="4">
+ <constant name="FLAG_MAX" value="4" enum="Flags">
</constant>
- <constant name="EMISSION_SHAPE_POINT" value="0">
+ <constant name="EMISSION_SHAPE_POINT" value="0" enum="EmissionShape">
All particles will be emitted from a single point.
</constant>
- <constant name="EMISSION_SHAPE_SPHERE" value="1">
+ <constant name="EMISSION_SHAPE_SPHERE" value="1" enum="EmissionShape">
Particles will be emitted in the volume of a sphere.
</constant>
- <constant name="EMISSION_SHAPE_BOX" value="2">
+ <constant name="EMISSION_SHAPE_BOX" value="2" enum="EmissionShape">
Particles will be emitted in the volume of a box.
</constant>
- <constant name="EMISSION_SHAPE_POINTS" value="3">
+ <constant name="EMISSION_SHAPE_POINTS" value="3" enum="EmissionShape">
</constant>
- <constant name="EMISSION_SHAPE_DIRECTED_POINTS" value="4">
+ <constant name="EMISSION_SHAPE_DIRECTED_POINTS" value="4" enum="EmissionShape">
</constant>
</constants>
</class>
diff --git a/doc/classes/Path.xml b/doc/classes/Path.xml
index 8138a92dcc..a5e690e121 100644
--- a/doc/classes/Path.xml
+++ b/doc/classes/Path.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Path" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="Path" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Container for a [Curve3D].
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_curve" qualifiers="const">
- <return type="Curve3D">
- </return>
- <description>
- Returns the [Curve3D] contained.
- </description>
- </method>
- <method name="set_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="Curve3D">
- </argument>
- <description>
- Sets the [Curve3D].
- </description>
- </method>
</methods>
<members>
<member name="curve" type="Curve3D" setter="set_curve" getter="get_curve">
diff --git a/doc/classes/Path2D.xml b/doc/classes/Path2D.xml
index 8172fc2c4b..832b86f516 100644
--- a/doc/classes/Path2D.xml
+++ b/doc/classes/Path2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Path2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Path2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Contains a [Curve2D] path for [PathFollow2D] nodes to follow.
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_curve" qualifiers="const">
- <return type="Curve2D">
- </return>
- <description>
- Returns the [Curve2D] contained.
- </description>
- </method>
- <method name="set_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="Curve2D">
- </argument>
- <description>
- Sets the [Curve2D].
- </description>
- </method>
</methods>
<members>
<member name="curve" type="Curve2D" setter="set_curve" getter="get_curve">
diff --git a/doc/classes/PathFollow.xml b/doc/classes/PathFollow.xml
index bdf2a082e0..de7bb8715c 100644
--- a/doc/classes/PathFollow.xml
+++ b/doc/classes/PathFollow.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PathFollow" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="PathFollow" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Point sampler for a [Path].
</brief_description>
@@ -129,16 +129,16 @@
</method>
</methods>
<constants>
- <constant name="ROTATION_NONE" value="0">
+ <constant name="ROTATION_NONE" value="0" enum="RotationMode">
Forbids the PathFollow to rotate.
</constant>
- <constant name="ROTATION_Y" value="1">
+ <constant name="ROTATION_Y" value="1" enum="RotationMode">
Allows the PathFollow to rotate in the Y axis only.
</constant>
- <constant name="ROTATION_XY" value="2">
+ <constant name="ROTATION_XY" value="2" enum="RotationMode">
Allows the PathFollow to rotate in both the X, and Y axes.
</constant>
- <constant name="ROTATION_XYZ" value="3">
+ <constant name="ROTATION_XYZ" value="3" enum="RotationMode">
Allows the PathFollow to rotate in any axis.
</constant>
</constants>
diff --git a/doc/classes/PathFollow2D.xml b/doc/classes/PathFollow2D.xml
index 01137d01d0..56bec3d719 100644
--- a/doc/classes/PathFollow2D.xml
+++ b/doc/classes/PathFollow2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PathFollow2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="PathFollow2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Point sampler for a [Path2D].
</brief_description>
diff --git a/doc/classes/Performance.xml b/doc/classes/Performance.xml
index daf1bd62ed..5781d6c604 100644
--- a/doc/classes/Performance.xml
+++ b/doc/classes/Performance.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Performance" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Performance" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Exposes performance related data.
</brief_description>
@@ -26,87 +26,87 @@
</method>
</methods>
<constants>
- <constant name="TIME_FPS" value="0">
+ <constant name="TIME_FPS" value="0" enum="Monitor">
Frames per second.
</constant>
- <constant name="TIME_PROCESS" value="1">
+ <constant name="TIME_PROCESS" value="1" enum="Monitor">
Time it took to complete one frame.
</constant>
- <constant name="TIME_PHYSICS_PROCESS" value="2">
+ <constant name="TIME_PHYSICS_PROCESS" value="2" enum="Monitor">
Time it took to complete one physics frame.
</constant>
- <constant name="MEMORY_STATIC" value="3">
+ <constant name="MEMORY_STATIC" value="3" enum="Monitor">
Static memory currently used, in bytes. Not available in release builds.
</constant>
- <constant name="MEMORY_DYNAMIC" value="4">
+ <constant name="MEMORY_DYNAMIC" value="4" enum="Monitor">
Dynamic memory currently used, in bytes. Not available in release builds.
</constant>
- <constant name="MEMORY_STATIC_MAX" value="5">
+ <constant name="MEMORY_STATIC_MAX" value="5" enum="Monitor">
Available static memory. Not available in release builds.
</constant>
- <constant name="MEMORY_DYNAMIC_MAX" value="6">
+ <constant name="MEMORY_DYNAMIC_MAX" value="6" enum="Monitor">
Available dynamic memory. Not available in release builds.
</constant>
- <constant name="MEMORY_MESSAGE_BUFFER_MAX" value="7">
+ <constant name="MEMORY_MESSAGE_BUFFER_MAX" value="7" enum="Monitor">
Largest amount of memory the message queue buffer has used, in bytes. The message queue is used for deferred functions calls and notifications.
</constant>
- <constant name="OBJECT_COUNT" value="8">
+ <constant name="OBJECT_COUNT" value="8" enum="Monitor">
Number of objects currently instanced (including nodes).
</constant>
- <constant name="OBJECT_RESOURCE_COUNT" value="9">
+ <constant name="OBJECT_RESOURCE_COUNT" value="9" enum="Monitor">
Number of resources currently used.
</constant>
- <constant name="OBJECT_NODE_COUNT" value="10">
+ <constant name="OBJECT_NODE_COUNT" value="10" enum="Monitor">
Number of nodes currently instanced. This also includes the root node, as well as any nodes not in the scene tree.
</constant>
- <constant name="RENDER_OBJECTS_IN_FRAME" value="11">
+ <constant name="RENDER_OBJECTS_IN_FRAME" value="11" enum="Monitor">
3D objects drawn per frame.
</constant>
- <constant name="RENDER_VERTICES_IN_FRAME" value="12">
+ <constant name="RENDER_VERTICES_IN_FRAME" value="12" enum="Monitor">
Vertices drawn per frame. 3D only.
</constant>
- <constant name="RENDER_MATERIAL_CHANGES_IN_FRAME" value="13">
+ <constant name="RENDER_MATERIAL_CHANGES_IN_FRAME" value="13" enum="Monitor">
Material changes per frame. 3D only
</constant>
- <constant name="RENDER_SHADER_CHANGES_IN_FRAME" value="14">
+ <constant name="RENDER_SHADER_CHANGES_IN_FRAME" value="14" enum="Monitor">
Shader changes per frame. 3D only.
</constant>
- <constant name="RENDER_SURFACE_CHANGES_IN_FRAME" value="15">
+ <constant name="RENDER_SURFACE_CHANGES_IN_FRAME" value="15" enum="Monitor">
Render surface changes per frame. 3D only.
</constant>
- <constant name="RENDER_DRAW_CALLS_IN_FRAME" value="16">
+ <constant name="RENDER_DRAW_CALLS_IN_FRAME" value="16" enum="Monitor">
Draw calls per frame. 3D only.
</constant>
- <constant name="RENDER_VIDEO_MEM_USED" value="17">
+ <constant name="RENDER_VIDEO_MEM_USED" value="17" enum="Monitor">
Video memory used. Includes both texture and vertex memory.
</constant>
- <constant name="RENDER_TEXTURE_MEM_USED" value="18">
+ <constant name="RENDER_TEXTURE_MEM_USED" value="18" enum="Monitor">
Texture memory used.
</constant>
- <constant name="RENDER_VERTEX_MEM_USED" value="19">
+ <constant name="RENDER_VERTEX_MEM_USED" value="19" enum="Monitor">
Vertex memory used.
</constant>
- <constant name="RENDER_USAGE_VIDEO_MEM_TOTAL" value="20">
+ <constant name="RENDER_USAGE_VIDEO_MEM_TOTAL" value="20" enum="Monitor">
</constant>
- <constant name="PHYSICS_2D_ACTIVE_OBJECTS" value="21">
+ <constant name="PHYSICS_2D_ACTIVE_OBJECTS" value="21" enum="Monitor">
Number of active [RigidBody2D] nodes in the game.
</constant>
- <constant name="PHYSICS_2D_COLLISION_PAIRS" value="22">
+ <constant name="PHYSICS_2D_COLLISION_PAIRS" value="22" enum="Monitor">
Number of collision pairs in the 2D physics engine.
</constant>
- <constant name="PHYSICS_2D_ISLAND_COUNT" value="23">
+ <constant name="PHYSICS_2D_ISLAND_COUNT" value="23" enum="Monitor">
Number of islands in the 2D physics engine.
</constant>
- <constant name="PHYSICS_3D_ACTIVE_OBJECTS" value="24">
+ <constant name="PHYSICS_3D_ACTIVE_OBJECTS" value="24" enum="Monitor">
Number of active [RigidBody] and [VehicleBody] nodes in the game.
</constant>
- <constant name="PHYSICS_3D_COLLISION_PAIRS" value="25">
+ <constant name="PHYSICS_3D_COLLISION_PAIRS" value="25" enum="Monitor">
Number of collision pairs in the 3D physics engine.
</constant>
- <constant name="PHYSICS_3D_ISLAND_COUNT" value="26">
+ <constant name="PHYSICS_3D_ISLAND_COUNT" value="26" enum="Monitor">
Number of islands in the 3D physics engine.
</constant>
- <constant name="MONITOR_MAX" value="27">
+ <constant name="MONITOR_MAX" value="27" enum="Monitor">
</constant>
</constants>
</class>
diff --git a/doc/classes/Physics2DDirectBodyState.xml b/doc/classes/Physics2DDirectBodyState.xml
index 40666d8330..a229ca494d 100644
--- a/doc/classes/Physics2DDirectBodyState.xml
+++ b/doc/classes/Physics2DDirectBodyState.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Physics2DDirectBodyState" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Physics2DDirectBodyState" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Direct access object to a physics body in the [Physics2DServer].
</brief_description>
diff --git a/doc/classes/Physics2DDirectBodyStateSW.xml b/doc/classes/Physics2DDirectBodyStateSW.xml
index 865fb6a347..0ce51e2cf5 100644
--- a/doc/classes/Physics2DDirectBodyStateSW.xml
+++ b/doc/classes/Physics2DDirectBodyStateSW.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Physics2DDirectBodyStateSW" inherits="Physics2DDirectBodyState" category="Core" version="3.0-alpha">
+<class name="Physics2DDirectBodyStateSW" inherits="Physics2DDirectBodyState" category="Core" version="3.0-beta">
<brief_description>
Software implementation of [Physics2DDirectBodyState].
</brief_description>
diff --git a/doc/classes/Physics2DDirectSpaceState.xml b/doc/classes/Physics2DDirectSpaceState.xml
index ca7dbab8b8..f63b8f17bc 100644
--- a/doc/classes/Physics2DDirectSpaceState.xml
+++ b/doc/classes/Physics2DDirectSpaceState.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Physics2DDirectSpaceState" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Physics2DDirectSpaceState" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Direct access object to a space in the [Physics2DServer].
</brief_description>
@@ -18,7 +18,7 @@
</argument>
<description>
Check whether the shape can travel to a point. If it can, the method will return an array with two floats: The first is the distance the shape can move in that direction without colliding, and the second is the distance at which it will collide.
- If the shape can not move, the array will be empty.
+ If the shape can not move, the array will be empty.
</description>
</method>
<method name="collide_shape">
@@ -61,8 +61,6 @@
</argument>
<argument index="3" name="collision_layer" type="int" default="2147483647">
</argument>
- <argument index="4" name="type_mask" type="int" default="15">
- </argument>
<description>
Check whether a point is inside any shape. The shapes the point is inside of are returned in an array containing dictionaries with the following fields:
shape: Shape index within the object the point is in.
@@ -70,7 +68,7 @@
collider_id: Id of the object the point is in.
collider: Object the point is inside of.
rid: [RID] of the object the point is in.
- Additionally, the method can take an array of objects or [RID]s that are to be excluded from collisions, a bitmask representing the physics layers to check in, and another bitmask for the types of objects to check (see TYPE_MASK_* constants).
+ Additionally, the method can take an array of objects or [RID]s that are to be excluded from collisions, or a bitmask representing the physics layers to check in.
</description>
</method>
<method name="intersect_ray">
@@ -84,8 +82,6 @@
</argument>
<argument index="3" name="collision_layer" type="int" default="2147483647">
</argument>
- <argument index="4" name="type_mask" type="int" default="15">
- </argument>
<description>
Intersect a ray in a given space. The returned object is a dictionary with the following fields:
position: Place where ray is stopped.
@@ -96,7 +92,7 @@
collider: Object against which the ray was stopped.
rid: [RID] of the object against which the ray was stopped.
If the ray did not intersect anything, then an empty dictionary (dir.empty()==true) is returned instead.
- Additionally, the method can take an array of objects or [RID]s that are to be excluded from collisions, a bitmask representing the physics layers to check in, and another bitmask for the types of objects to check (see TYPE_MASK_* constants).
+ Additionally, the method can take an array of objects or [RID]s that are to be excluded from collisions, or a bitmask representing the physics layers to check in.
</description>
</method>
<method name="intersect_shape">
@@ -118,23 +114,5 @@
</method>
</methods>
<constants>
- <constant name="TYPE_MASK_STATIC_BODY" value="1">
- Check for collisions with static bodies.
- </constant>
- <constant name="TYPE_MASK_KINEMATIC_BODY" value="2">
- Check for collisions with kinematic bodies.
- </constant>
- <constant name="TYPE_MASK_RIGID_BODY" value="4">
- Check for collisions with rigid bodies.
- </constant>
- <constant name="TYPE_MASK_CHARACTER_BODY" value="8">
- Check for collisions with rigid bodies in character mode.
- </constant>
- <constant name="TYPE_MASK_COLLISION" value="15">
- Check for collisions with any kind of bodies (but not areas).
- </constant>
- <constant name="TYPE_MASK_AREA" value="16">
- Check for collisions with areas.
- </constant>
</constants>
</class>
diff --git a/doc/classes/Physics2DServer.xml b/doc/classes/Physics2DServer.xml
index f3115144fa..67f5f84a49 100644
--- a/doc/classes/Physics2DServer.xml
+++ b/doc/classes/Physics2DServer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Physics2DServer" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Physics2DServer" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Physics 2D Server.
</brief_description>
@@ -989,183 +989,183 @@
</method>
</methods>
<constants>
- <constant name="SPACE_PARAM_CONTACT_RECYCLE_RADIUS" value="0">
+ <constant name="SPACE_PARAM_CONTACT_RECYCLE_RADIUS" value="0" enum="SpaceParameter">
Constant to set/get the maximum distance a pair of bodies has to move before their collision status has to be recalculated.
</constant>
- <constant name="SPACE_PARAM_CONTACT_MAX_SEPARATION" value="1">
+ <constant name="SPACE_PARAM_CONTACT_MAX_SEPARATION" value="1" enum="SpaceParameter">
Constant to set/get the maximum distance a shape can be from another before they are considered separated.
</constant>
- <constant name="SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION" value="2">
+ <constant name="SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION" value="2" enum="SpaceParameter">
Constant to set/get the maximum distance a shape can penetrate another shape before it is considered a collision.
</constant>
- <constant name="SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD" value="3">
+ <constant name="SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD" value="3" enum="SpaceParameter">
Constant to set/get the threshold linear velocity of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after the time given.
</constant>
- <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD" value="4">
+ <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD" value="4" enum="SpaceParameter">
Constant to set/get the threshold angular velocity of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after the time given.
</constant>
- <constant name="SPACE_PARAM_BODY_TIME_TO_SLEEP" value="5">
+ <constant name="SPACE_PARAM_BODY_TIME_TO_SLEEP" value="5" enum="SpaceParameter">
Constant to set/get the maximum time of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after this time.
</constant>
- <constant name="SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS" value="6">
+ <constant name="SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS" value="6" enum="SpaceParameter">
Constant to set/get the default solver bias for all physics constraints. A solver bias is a factor controlling how much two objects "rebound", after violating a constraint, to avoid leaving them in that state because of numerical imprecision.
</constant>
- <constant name="SHAPE_LINE" value="0">
+ <constant name="SHAPE_LINE" value="0" enum="ShapeType">
This is the constant for creating line shapes. A line shape is an infinite line with an origin point, and a normal. Thus, it can be used for front/behind checks.
</constant>
- <constant name="SHAPE_RAY" value="1">
+ <constant name="SHAPE_RAY" value="1" enum="ShapeType">
</constant>
- <constant name="SHAPE_SEGMENT" value="2">
+ <constant name="SHAPE_SEGMENT" value="2" enum="ShapeType">
This is the constant for creating segment shapes. A segment shape is a line from a point A to a point B. It can be checked for intersections.
</constant>
- <constant name="SHAPE_CIRCLE" value="3">
+ <constant name="SHAPE_CIRCLE" value="3" enum="ShapeType">
This is the constant for creating circle shapes. A circle shape only has a radius. It can be used for intersections and inside/outside checks.
</constant>
- <constant name="SHAPE_RECTANGLE" value="4">
+ <constant name="SHAPE_RECTANGLE" value="4" enum="ShapeType">
This is the constant for creating rectangle shapes. A rectangle shape is defined by a width and a height. It can be used for intersections and inside/outside checks.
</constant>
- <constant name="SHAPE_CAPSULE" value="5">
+ <constant name="SHAPE_CAPSULE" value="5" enum="ShapeType">
This is the constant for creating capsule shapes. A capsule shape is defined by a radius and a length. It can be used for intersections and inside/outside checks.
</constant>
- <constant name="SHAPE_CONVEX_POLYGON" value="6">
+ <constant name="SHAPE_CONVEX_POLYGON" value="6" enum="ShapeType">
This is the constant for creating convex polygon shapes. A polygon is defined by a list of points. It can be used for intersections and inside/outside checks. Unlike the method [method CollisionPolygon2D.set_polygon], polygons modified with [method shape_set_data] do not verify that the points supplied form is a convex polygon.
</constant>
- <constant name="SHAPE_CONCAVE_POLYGON" value="7">
+ <constant name="SHAPE_CONCAVE_POLYGON" value="7" enum="ShapeType">
This is the constant for creating concave polygon shapes. A polygon is defined by a list of points. It can be used for intersections checks, but not for inside/outside checks.
</constant>
- <constant name="SHAPE_CUSTOM" value="8">
+ <constant name="SHAPE_CUSTOM" value="8" enum="ShapeType">
This constant is used internally by the engine. Any attempt to create this kind of shape results in an error.
</constant>
- <constant name="AREA_PARAM_GRAVITY" value="0">
+ <constant name="AREA_PARAM_GRAVITY" value="0" enum="AreaParameter">
Constant to set/get gravity strength in an area.
</constant>
- <constant name="AREA_PARAM_GRAVITY_VECTOR" value="1">
+ <constant name="AREA_PARAM_GRAVITY_VECTOR" value="1" enum="AreaParameter">
Constant to set/get gravity vector/center in an area.
</constant>
- <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="2">
+ <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="2" enum="AreaParameter">
Constant to set/get whether the gravity vector of an area is a direction, or a center point.
</constant>
- <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="3">
+ <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="3" enum="AreaParameter">
Constant to set/get the falloff factor for point gravity of an area. The greater this value is, the faster the strength of gravity decreases with the square of distance.
</constant>
- <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="4">
+ <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="4" enum="AreaParameter">
This constant was used to set/get the falloff factor for point gravity. It has been superseded by AREA_PARAM_GRAVITY_DISTANCE_SCALE.
</constant>
- <constant name="AREA_PARAM_LINEAR_DAMP" value="5">
+ <constant name="AREA_PARAM_LINEAR_DAMP" value="5" enum="AreaParameter">
Constant to set/get the linear dampening factor of an area.
</constant>
- <constant name="AREA_PARAM_ANGULAR_DAMP" value="6">
+ <constant name="AREA_PARAM_ANGULAR_DAMP" value="6" enum="AreaParameter">
Constant to set/get the angular dampening factor of an area.
</constant>
- <constant name="AREA_PARAM_PRIORITY" value="7">
+ <constant name="AREA_PARAM_PRIORITY" value="7" enum="AreaParameter">
Constant to set/get the priority (order of processing) of an area.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_DISABLED" value="0">
+ <constant name="AREA_SPACE_OVERRIDE_DISABLED" value="0" enum="AreaSpaceOverrideMode">
This area does not affect gravity/damp. These are generally areas that exist only to detect collisions, and objects entering or exiting them.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_COMBINE" value="1">
+ <constant name="AREA_SPACE_OVERRIDE_COMBINE" value="1" enum="AreaSpaceOverrideMode">
This area adds its gravity/damp values to whatever has been calculated so far. This way, many overlapping areas can combine their physics to make interesting effects.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_COMBINE_REPLACE" value="2">
+ <constant name="AREA_SPACE_OVERRIDE_COMBINE_REPLACE" value="2" enum="AreaSpaceOverrideMode">
This area adds its gravity/damp values to whatever has been calculated so far. Then stops taking into account the rest of the areas, even the default one.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_REPLACE" value="3">
+ <constant name="AREA_SPACE_OVERRIDE_REPLACE" value="3" enum="AreaSpaceOverrideMode">
This area replaces any gravity/damp, even the default one, and stops taking into account the rest of the areas.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_REPLACE_COMBINE" value="4">
+ <constant name="AREA_SPACE_OVERRIDE_REPLACE_COMBINE" value="4" enum="AreaSpaceOverrideMode">
This area replaces any gravity/damp calculated so far, but keeps calculating the rest of the areas, down to the default one.
</constant>
- <constant name="BODY_MODE_STATIC" value="0">
+ <constant name="BODY_MODE_STATIC" value="0" enum="BodyMode">
Constant for static bodies.
</constant>
- <constant name="BODY_MODE_KINEMATIC" value="1">
+ <constant name="BODY_MODE_KINEMATIC" value="1" enum="BodyMode">
Constant for kinematic bodies.
</constant>
- <constant name="BODY_MODE_RIGID" value="2">
+ <constant name="BODY_MODE_RIGID" value="2" enum="BodyMode">
Constant for rigid bodies.
</constant>
- <constant name="BODY_MODE_CHARACTER" value="3">
+ <constant name="BODY_MODE_CHARACTER" value="3" enum="BodyMode">
Constant for rigid bodies in character mode. In this mode, a body can not rotate, and only its linear velocity is affected by physics.
</constant>
- <constant name="BODY_PARAM_BOUNCE" value="0">
+ <constant name="BODY_PARAM_BOUNCE" value="0" enum="BodyParameter">
Constant to set/get a body's bounce factor.
</constant>
- <constant name="BODY_PARAM_FRICTION" value="1">
+ <constant name="BODY_PARAM_FRICTION" value="1" enum="BodyParameter">
Constant to set/get a body's friction.
</constant>
- <constant name="BODY_PARAM_MASS" value="2">
+ <constant name="BODY_PARAM_MASS" value="2" enum="BodyParameter">
Constant to set/get a body's mass.
</constant>
- <constant name="BODY_PARAM_INERTIA" value="3">
+ <constant name="BODY_PARAM_INERTIA" value="3" enum="BodyParameter">
Constant to set/get a body's inertia.
</constant>
- <constant name="BODY_PARAM_GRAVITY_SCALE" value="4">
+ <constant name="BODY_PARAM_GRAVITY_SCALE" value="4" enum="BodyParameter">
Constant to set/get a body's gravity multiplier.
</constant>
- <constant name="BODY_PARAM_LINEAR_DAMP" value="5">
+ <constant name="BODY_PARAM_LINEAR_DAMP" value="5" enum="BodyParameter">
Constant to set/get a body's linear dampening factor.
</constant>
- <constant name="BODY_PARAM_ANGULAR_DAMP" value="6">
+ <constant name="BODY_PARAM_ANGULAR_DAMP" value="6" enum="BodyParameter">
Constant to set/get a body's angular dampening factor.
</constant>
- <constant name="BODY_PARAM_MAX" value="7">
+ <constant name="BODY_PARAM_MAX" value="7" enum="BodyParameter">
This is the last ID for body parameters. Any attempt to set this property is ignored. Any attempt to get it returns 0.
</constant>
- <constant name="BODY_STATE_TRANSFORM" value="0">
+ <constant name="BODY_STATE_TRANSFORM" value="0" enum="BodyState">
Constant to set/get the current transform matrix of the body.
</constant>
- <constant name="BODY_STATE_LINEAR_VELOCITY" value="1">
+ <constant name="BODY_STATE_LINEAR_VELOCITY" value="1" enum="BodyState">
Constant to set/get the current linear velocity of the body.
</constant>
- <constant name="BODY_STATE_ANGULAR_VELOCITY" value="2">
+ <constant name="BODY_STATE_ANGULAR_VELOCITY" value="2" enum="BodyState">
Constant to set/get the current angular velocity of the body.
</constant>
- <constant name="BODY_STATE_SLEEPING" value="3">
+ <constant name="BODY_STATE_SLEEPING" value="3" enum="BodyState">
Constant to sleep/wake up a body, or to get whether it is sleeping.
</constant>
- <constant name="BODY_STATE_CAN_SLEEP" value="4">
+ <constant name="BODY_STATE_CAN_SLEEP" value="4" enum="BodyState">
Constant to set/get whether the body can sleep.
</constant>
- <constant name="JOINT_PIN" value="0">
+ <constant name="JOINT_PIN" value="0" enum="JointType">
Constant to create pin joints.
</constant>
- <constant name="JOINT_GROOVE" value="1">
+ <constant name="JOINT_GROOVE" value="1" enum="JointType">
Constant to create groove joints.
</constant>
- <constant name="JOINT_DAMPED_SPRING" value="2">
+ <constant name="JOINT_DAMPED_SPRING" value="2" enum="JointType">
Constant to create damped spring joints.
</constant>
- <constant name="DAMPED_STRING_REST_LENGTH" value="0">
+ <constant name="DAMPED_STRING_REST_LENGTH" value="0" enum="DampedStringParam">
Set the resting length of the spring joint. The joint will always try to go to back this length when pulled apart.
</constant>
- <constant name="DAMPED_STRING_STIFFNESS" value="1">
+ <constant name="DAMPED_STRING_STIFFNESS" value="1" enum="DampedStringParam">
Set the stiffness of the spring joint. The joint applies a force equal to the stiffness times the distance from its resting length.
</constant>
- <constant name="DAMPED_STRING_DAMPING" value="2">
+ <constant name="DAMPED_STRING_DAMPING" value="2" enum="DampedStringParam">
Set the damping ratio of the spring joint. A value of 0 indicates an undamped spring, while 1 causes the system to reach equilibrium as fast as possible (critical damping).
</constant>
- <constant name="CCD_MODE_DISABLED" value="0">
+ <constant name="CCD_MODE_DISABLED" value="0" enum="CCDMode">
Disables continuous collision detection. This is the fastest way to detect body collisions, but can miss small, fast-moving objects.
</constant>
- <constant name="CCD_MODE_CAST_RAY" value="1">
+ <constant name="CCD_MODE_CAST_RAY" value="1" enum="CCDMode">
Enables continuous collision detection by raycasting. It is faster than shapecasting, but less precise.
</constant>
- <constant name="CCD_MODE_CAST_SHAPE" value="2">
+ <constant name="CCD_MODE_CAST_SHAPE" value="2" enum="CCDMode">
Enables continuous collision detection by shapecasting. It is the slowest CCD method, and the most precise.
</constant>
- <constant name="AREA_BODY_ADDED" value="0">
+ <constant name="AREA_BODY_ADDED" value="0" enum="AreaBodyStatus">
The value of the first parameter and area callback function receives, when an object enters one of its shapes.
</constant>
- <constant name="AREA_BODY_REMOVED" value="1">
+ <constant name="AREA_BODY_REMOVED" value="1" enum="AreaBodyStatus">
The value of the first parameter and area callback function receives, when an object exits one of its shapes.
</constant>
- <constant name="INFO_ACTIVE_OBJECTS" value="0">
+ <constant name="INFO_ACTIVE_OBJECTS" value="0" enum="ProcessInfo">
Constant to get the number of objects that are not sleeping.
</constant>
- <constant name="INFO_COLLISION_PAIRS" value="1">
+ <constant name="INFO_COLLISION_PAIRS" value="1" enum="ProcessInfo">
Constant to get the number of possible collisions.
</constant>
- <constant name="INFO_ISLAND_COUNT" value="2">
+ <constant name="INFO_ISLAND_COUNT" value="2" enum="ProcessInfo">
Constant to get the number of space regions where a collision could occur.
</constant>
</constants>
diff --git a/doc/classes/Physics2DServerSW.xml b/doc/classes/Physics2DServerSW.xml
index 6764f1a4f6..09fed88082 100644
--- a/doc/classes/Physics2DServerSW.xml
+++ b/doc/classes/Physics2DServerSW.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Physics2DServerSW" inherits="Physics2DServer" category="Core" version="3.0-alpha">
+<class name="Physics2DServerSW" inherits="Physics2DServer" category="Core" version="3.0-beta">
<brief_description>
Software implementation of [Physics2DServer].
</brief_description>
diff --git a/doc/classes/Physics2DShapeQueryParameters.xml b/doc/classes/Physics2DShapeQueryParameters.xml
index 829aec7a25..93165afe60 100644
--- a/doc/classes/Physics2DShapeQueryParameters.xml
+++ b/doc/classes/Physics2DShapeQueryParameters.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Physics2DShapeQueryParameters" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Physics2DShapeQueryParameters" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Parameters to be sent to a 2D shape physics query.
</brief_description>
@@ -39,13 +39,6 @@
Return the current movement speed of the shape.
</description>
</method>
- <method name="get_object_type_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the type of object the shape belongs to.
- </description>
- </method>
<method name="get_shape_rid" qualifiers="const">
<return type="RID">
</return>
@@ -96,15 +89,6 @@
Set the current movement speed of the shape.
</description>
</method>
- <method name="set_object_type_mask">
- <return type="void">
- </return>
- <argument index="0" name="object_type_mask" type="int">
- </argument>
- <description>
- Set the type of object the shape belongs to (see Physics2DDirectSpaceState.TYPE_MASK_*).
- </description>
- </method>
<method name="set_shape">
<return type="void">
</return>
diff --git a/doc/classes/Physics2DShapeQueryResult.xml b/doc/classes/Physics2DShapeQueryResult.xml
index d5a29e79fa..5345ad161f 100644
--- a/doc/classes/Physics2DShapeQueryResult.xml
+++ b/doc/classes/Physics2DShapeQueryResult.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Physics2DShapeQueryResult" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Physics2DShapeQueryResult" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/Physics2DTestMotionResult.xml b/doc/classes/Physics2DTestMotionResult.xml
index 6bc4849184..bc7cb68bc9 100644
--- a/doc/classes/Physics2DTestMotionResult.xml
+++ b/doc/classes/Physics2DTestMotionResult.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Physics2DTestMotionResult" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Physics2DTestMotionResult" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/PhysicsBody.xml b/doc/classes/PhysicsBody.xml
index 579a074731..79164215c8 100644
--- a/doc/classes/PhysicsBody.xml
+++ b/doc/classes/PhysicsBody.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PhysicsBody" inherits="CollisionObject" category="Core" version="3.0-alpha">
+<class name="PhysicsBody" inherits="CollisionObject" category="Core" version="3.0-beta">
<brief_description>
Base class for all objects affected by physics in 3D space.
</brief_description>
@@ -20,12 +20,6 @@
Adds a body to the list of bodies that this body can't collide with.
</description>
</method>
- <method name="get_collision_layer" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
<method name="get_collision_layer_bit" qualifiers="const">
<return type="bool">
</return>
@@ -34,12 +28,6 @@
<description>
</description>
</method>
- <method name="get_collision_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
<method name="get_collision_mask_bit" qualifiers="const">
<return type="bool">
</return>
@@ -57,14 +45,6 @@
Removes a body from the list of bodies that this body can't collide with.
</description>
</method>
- <method name="set_collision_layer">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="set_collision_layer_bit">
<return type="void">
</return>
@@ -75,14 +55,6 @@
<description>
</description>
</method>
- <method name="set_collision_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="set_collision_mask_bit">
<return type="void">
</return>
diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml
index bf341692bf..aaf782c245 100644
--- a/doc/classes/PhysicsBody2D.xml
+++ b/doc/classes/PhysicsBody2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PhysicsBody2D" inherits="CollisionObject2D" category="Core" version="3.0-alpha">
+<class name="PhysicsBody2D" inherits="CollisionObject2D" category="Core" version="3.0-beta">
<brief_description>
Base class for all objects affected by physics in 2D space.
</brief_description>
@@ -20,13 +20,6 @@
Adds a body to the list of bodies that this body can't collide with.
</description>
</method>
- <method name="get_collision_layer" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the physics layer this area is in.
- </description>
- </method>
<method name="get_collision_layer_bit" qualifiers="const">
<return type="bool">
</return>
@@ -36,13 +29,6 @@
Return an individual bit on the collision mask.
</description>
</method>
- <method name="get_collision_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the physics layers this area can scan for collisions.
- </description>
- </method>
<method name="get_collision_mask_bit" qualifiers="const">
<return type="bool">
</return>
@@ -61,17 +47,6 @@
Removes a body from the list of bodies that this body can't collide with.
</description>
</method>
- <method name="set_collision_layer">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- Set the physics layers this area is in.
- Collidable objects can exist in any of 32 different layers. These layers are not visual, but more of a tagging system instead. A collidable can use these layers/tags to select with which objects it can collide, using [method set_collision_mask].
- A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A.
- </description>
- </method>
<method name="set_collision_layer_bit">
<return type="void">
</return>
@@ -83,15 +58,6 @@
Set/clear individual bits on the layer mask. This makes getting a body in/out of only one layer easier.
</description>
</method>
- <method name="set_collision_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- Set the physics layers this area can scan for collisions.
- </description>
- </method>
<method name="set_collision_mask_bit">
<return type="void">
</return>
diff --git a/doc/classes/PhysicsDirectBodyState.xml b/doc/classes/PhysicsDirectBodyState.xml
index 33dafa29f6..1d588ecfff 100644
--- a/doc/classes/PhysicsDirectBodyState.xml
+++ b/doc/classes/PhysicsDirectBodyState.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PhysicsDirectBodyState" inherits="Object" category="Core" version="3.0-alpha">
+<class name="PhysicsDirectBodyState" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/PhysicsDirectSpaceState.xml b/doc/classes/PhysicsDirectSpaceState.xml
index b5765b6421..21576646f9 100644
--- a/doc/classes/PhysicsDirectSpaceState.xml
+++ b/doc/classes/PhysicsDirectSpaceState.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PhysicsDirectSpaceState" inherits="Object" category="Core" version="3.0-alpha">
+<class name="PhysicsDirectSpaceState" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -48,8 +48,6 @@
</argument>
<argument index="3" name="collision_layer" type="int" default="2147483647">
</argument>
- <argument index="4" name="type_mask" type="int" default="15">
- </argument>
<description>
</description>
</method>
@@ -65,17 +63,5 @@
</method>
</methods>
<constants>
- <constant name="TYPE_MASK_STATIC_BODY" value="1">
- </constant>
- <constant name="TYPE_MASK_KINEMATIC_BODY" value="2">
- </constant>
- <constant name="TYPE_MASK_RIGID_BODY" value="4">
- </constant>
- <constant name="TYPE_MASK_CHARACTER_BODY" value="8">
- </constant>
- <constant name="TYPE_MASK_COLLISION" value="15">
- </constant>
- <constant name="TYPE_MASK_AREA" value="16">
- </constant>
</constants>
</class>
diff --git a/doc/classes/PhysicsServer.xml b/doc/classes/PhysicsServer.xml
index 76dabd12ba..8f3d77d841 100644
--- a/doc/classes/PhysicsServer.xml
+++ b/doc/classes/PhysicsServer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PhysicsServer" inherits="Object" category="Core" version="3.0-alpha">
+<class name="PhysicsServer" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Server interface for low level physics access.
</brief_description>
@@ -352,7 +352,7 @@
</description>
</method>
<method name="body_get_axis_lock" qualifiers="const">
- <return type="int" enum="PhysicsServer.BodyAxisLock">
+ <return type="bool">
</return>
<argument index="0" name="body" type="RID">
</argument>
@@ -540,10 +540,11 @@
</return>
<argument index="0" name="body" type="RID">
</argument>
- <argument index="1" name="axis" type="int" enum="PhysicsServer.BodyAxisLock">
+ <argument index="1" name="axis" type="int">
+ </argument>
+ <argument index="2" name="lock" type="bool">
</argument>
<description>
- Locks velocity along one axis to 0 and only allows rotation along this axis, can also be set to disabled which disables this functionality.
</description>
</method>
<method name="body_set_axis_velocity">
@@ -1170,366 +1171,354 @@
</method>
</methods>
<constants>
- <constant name="JOINT_PIN" value="0">
+ <constant name="JOINT_PIN" value="0" enum="JointType">
The [Joint] is a [PinJoint].
</constant>
- <constant name="JOINT_HINGE" value="1">
+ <constant name="JOINT_HINGE" value="1" enum="JointType">
The [Joint] is a [HingeJoint].
</constant>
- <constant name="JOINT_SLIDER" value="2">
+ <constant name="JOINT_SLIDER" value="2" enum="JointType">
The [Joint] is a [SliderJoint].
</constant>
- <constant name="JOINT_CONE_TWIST" value="3">
+ <constant name="JOINT_CONE_TWIST" value="3" enum="JointType">
The [Joint] is a [ConeTwistJoint].
</constant>
- <constant name="JOINT_6DOF" value="4">
+ <constant name="JOINT_6DOF" value="4" enum="JointType">
The [Joint] is a [Generic6DOFJoint].
</constant>
- <constant name="PIN_JOINT_BIAS" value="0">
+ <constant name="PIN_JOINT_BIAS" value="0" enum="PinJointParam">
The strength with which the pinned objects try to stay in positional relation to each other.
The higher, the stronger.
</constant>
- <constant name="PIN_JOINT_DAMPING" value="1">
+ <constant name="PIN_JOINT_DAMPING" value="1" enum="PinJointParam">
The strength with which the pinned objects try to stay in velocity relation to each other.
The higher, the stronger.
</constant>
- <constant name="PIN_JOINT_IMPULSE_CLAMP" value="2">
+ <constant name="PIN_JOINT_IMPULSE_CLAMP" value="2" enum="PinJointParam">
If above 0, this value is the maximum value for an impulse that this Joint puts on it's ends.
</constant>
- <constant name="HINGE_JOINT_BIAS" value="0">
+ <constant name="HINGE_JOINT_BIAS" value="0" enum="HingeJointParam">
The speed with wich the two bodies get pulled together when they move in different directions.
</constant>
- <constant name="HINGE_JOINT_LIMIT_UPPER" value="1">
+ <constant name="HINGE_JOINT_LIMIT_UPPER" value="1" enum="HingeJointParam">
The maximum rotation across the Hinge.
</constant>
- <constant name="HINGE_JOINT_LIMIT_LOWER" value="2">
+ <constant name="HINGE_JOINT_LIMIT_LOWER" value="2" enum="HingeJointParam">
The minimum rotation across the Hinge.
</constant>
- <constant name="HINGE_JOINT_LIMIT_BIAS" value="3">
+ <constant name="HINGE_JOINT_LIMIT_BIAS" value="3" enum="HingeJointParam">
The speed with which the rotation across the axis perpendicular to the hinge gets corrected.
</constant>
- <constant name="HINGE_JOINT_LIMIT_SOFTNESS" value="4">
+ <constant name="HINGE_JOINT_LIMIT_SOFTNESS" value="4" enum="HingeJointParam">
</constant>
- <constant name="HINGE_JOINT_LIMIT_RELAXATION" value="5">
+ <constant name="HINGE_JOINT_LIMIT_RELAXATION" value="5" enum="HingeJointParam">
The lower this value, the more the rotation gets slowed down.
</constant>
- <constant name="HINGE_JOINT_MOTOR_TARGET_VELOCITY" value="6">
+ <constant name="HINGE_JOINT_MOTOR_TARGET_VELOCITY" value="6" enum="HingeJointParam">
Target speed for the motor.
</constant>
- <constant name="HINGE_JOINT_MOTOR_MAX_IMPULSE" value="7">
+ <constant name="HINGE_JOINT_MOTOR_MAX_IMPULSE" value="7" enum="HingeJointParam">
Maximum acceleration for the motor.
</constant>
- <constant name="HINGE_JOINT_FLAG_USE_LIMIT" value="0">
+ <constant name="HINGE_JOINT_FLAG_USE_LIMIT" value="0" enum="HingeJointFlag">
If [code]true[/code] the Hinge has a maximum and a minimum rotation.
</constant>
- <constant name="HINGE_JOINT_FLAG_ENABLE_MOTOR" value="1">
+ <constant name="HINGE_JOINT_FLAG_ENABLE_MOTOR" value="1" enum="HingeJointFlag">
If [code]true[/code] a motor turns the Hinge
</constant>
- <constant name="SLIDER_JOINT_LINEAR_LIMIT_UPPER" value="0">
+ <constant name="SLIDER_JOINT_LINEAR_LIMIT_UPPER" value="0" enum="SliderJointParam">
The maximum difference between the pivot points on their x-axis before damping happens.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_LIMIT_LOWER" value="1">
+ <constant name="SLIDER_JOINT_LINEAR_LIMIT_LOWER" value="1" enum="SliderJointParam">
The minimum difference between the pivot points on their x-axis before damping happens.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_LIMIT_SOFTNESS" value="2">
+ <constant name="SLIDER_JOINT_LINEAR_LIMIT_SOFTNESS" value="2" enum="SliderJointParam">
A factor applied to the movement accross the slider axis once the limits get surpassed. The lower, the slower the movement.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_LIMIT_RESTITUTION" value="3">
+ <constant name="SLIDER_JOINT_LINEAR_LIMIT_RESTITUTION" value="3" enum="SliderJointParam">
The amount of restitution once the limits are surpassed. The lower, the more velocityenergy gets lost.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_LIMIT_DAMPING" value="4">
+ <constant name="SLIDER_JOINT_LINEAR_LIMIT_DAMPING" value="4" enum="SliderJointParam">
The amount of damping once the slider limits are surpassed.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_MOTION_SOFTNESS" value="5">
+ <constant name="SLIDER_JOINT_LINEAR_MOTION_SOFTNESS" value="5" enum="SliderJointParam">
A factor applied to the movement accross the slider axis as long as the slider is in the limits. The lower, the slower the movement.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_MOTION_RESTITUTION" value="6">
+ <constant name="SLIDER_JOINT_LINEAR_MOTION_RESTITUTION" value="6" enum="SliderJointParam">
The amount of restitution inside the slider limits.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_MOTION_DAMPING" value="7">
+ <constant name="SLIDER_JOINT_LINEAR_MOTION_DAMPING" value="7" enum="SliderJointParam">
The amount of damping inside the slider limits.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_SOFTNESS" value="8">
+ <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_SOFTNESS" value="8" enum="SliderJointParam">
A factor applied to the movement accross axes orthogonal to the slider.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_RESTITUTION" value="9">
+ <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_RESTITUTION" value="9" enum="SliderJointParam">
The amount of restitution when movement is accross axes orthogonal to the slider.
</constant>
- <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_DAMPING" value="10">
+ <constant name="SLIDER_JOINT_LINEAR_ORTHOGONAL_DAMPING" value="10" enum="SliderJointParam">
The amount of damping when movement is accross axes orthogonal to the slider.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_LIMIT_UPPER" value="11">
+ <constant name="SLIDER_JOINT_ANGULAR_LIMIT_UPPER" value="11" enum="SliderJointParam">
The upper limit of rotation in the slider.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_LIMIT_LOWER" value="12">
+ <constant name="SLIDER_JOINT_ANGULAR_LIMIT_LOWER" value="12" enum="SliderJointParam">
The lower limit of rotation in the slider.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_LIMIT_SOFTNESS" value="13">
+ <constant name="SLIDER_JOINT_ANGULAR_LIMIT_SOFTNESS" value="13" enum="SliderJointParam">
A factor applied to the all rotation once the limit is surpassed.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_LIMIT_RESTITUTION" value="14">
+ <constant name="SLIDER_JOINT_ANGULAR_LIMIT_RESTITUTION" value="14" enum="SliderJointParam">
The amount of restitution of the rotation when the limit is surpassed.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_LIMIT_DAMPING" value="15">
+ <constant name="SLIDER_JOINT_ANGULAR_LIMIT_DAMPING" value="15" enum="SliderJointParam">
The amount of damping of the rotation when the limit is surpassed.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_MOTION_SOFTNESS" value="16">
+ <constant name="SLIDER_JOINT_ANGULAR_MOTION_SOFTNESS" value="16" enum="SliderJointParam">
A factor that gets applied to the all rotation in the limits.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_MOTION_RESTITUTION" value="17">
+ <constant name="SLIDER_JOINT_ANGULAR_MOTION_RESTITUTION" value="17" enum="SliderJointParam">
The amount of restitution of the rotation in the limits.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_MOTION_DAMPING" value="18">
+ <constant name="SLIDER_JOINT_ANGULAR_MOTION_DAMPING" value="18" enum="SliderJointParam">
The amount of damping of the rotation in the limits.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_SOFTNESS" value="19">
+ <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_SOFTNESS" value="19" enum="SliderJointParam">
A factor that gets applied to the all rotation across axes orthogonal to the slider.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_RESTITUTION" value="20">
+ <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_RESTITUTION" value="20" enum="SliderJointParam">
The amount of restitution of the rotation across axes orthogonal to the slider.
</constant>
- <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_DAMPING" value="21">
+ <constant name="SLIDER_JOINT_ANGULAR_ORTHOGONAL_DAMPING" value="21" enum="SliderJointParam">
The amount of damping of the rotation across axes orthogonal to the slider.
</constant>
- <constant name="SLIDER_JOINT_MAX" value="22">
+ <constant name="SLIDER_JOINT_MAX" value="22" enum="SliderJointParam">
End flag of SLIDER_JOINT_* constants, used internally.
</constant>
- <constant name="CONE_TWIST_JOINT_SWING_SPAN" value="0">
+ <constant name="CONE_TWIST_JOINT_SWING_SPAN" value="0" enum="ConeTwistJointParam">
Swing is rotation from side to side, around the axis perpendicular to the twist axis.
The swing span defines, how much rotation will not get corrected allong the swing axis.
Could be defined as looseness in the [ConeTwistJoint].
If below 0.05, this behaviour is locked. Default value: [code]PI/4[/code].
</constant>
- <constant name="CONE_TWIST_JOINT_TWIST_SPAN" value="1">
+ <constant name="CONE_TWIST_JOINT_TWIST_SPAN" value="1" enum="ConeTwistJointParam">
Twist is the rotation around the twist axis, this value defined how far the joint can twist.
Twist is locked if below 0.05.
</constant>
- <constant name="CONE_TWIST_JOINT_BIAS" value="2">
+ <constant name="CONE_TWIST_JOINT_BIAS" value="2" enum="ConeTwistJointParam">
The speed with which the swing or twist will take place.
The higher, the faster.
</constant>
- <constant name="CONE_TWIST_JOINT_SOFTNESS" value="3">
+ <constant name="CONE_TWIST_JOINT_SOFTNESS" value="3" enum="ConeTwistJointParam">
The ease with which the Joint twists, if it's too low, it takes more force to twist the joint.
</constant>
- <constant name="CONE_TWIST_JOINT_RELAXATION" value="4">
+ <constant name="CONE_TWIST_JOINT_RELAXATION" value="4" enum="ConeTwistJointParam">
Defines, how fast the swing- and twist-speed-difference on both sides gets synced.
</constant>
- <constant name="G6DOF_JOINT_LINEAR_LOWER_LIMIT" value="0">
+ <constant name="G6DOF_JOINT_LINEAR_LOWER_LIMIT" value="0" enum="G6DOFJointAxisParam">
The minimum difference between the pivot points' axes.
</constant>
- <constant name="G6DOF_JOINT_LINEAR_UPPER_LIMIT" value="1">
+ <constant name="G6DOF_JOINT_LINEAR_UPPER_LIMIT" value="1" enum="G6DOFJointAxisParam">
The maximum difference between the pivot points' axes.
</constant>
- <constant name="G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS" value="2">
+ <constant name="G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS" value="2" enum="G6DOFJointAxisParam">
A factor that gets applied to the movement accross the axes. The lower, the slower the movement.
</constant>
- <constant name="G6DOF_JOINT_LINEAR_RESTITUTION" value="3">
+ <constant name="G6DOF_JOINT_LINEAR_RESTITUTION" value="3" enum="G6DOFJointAxisParam">
The amount of restitution on the axes movement. The lower, the more velocity-energy gets lost.
</constant>
- <constant name="G6DOF_JOINT_LINEAR_DAMPING" value="4">
+ <constant name="G6DOF_JOINT_LINEAR_DAMPING" value="4" enum="G6DOFJointAxisParam">
The amount of damping that happens at the linear motion across the axes.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_LOWER_LIMIT" value="5">
+ <constant name="G6DOF_JOINT_ANGULAR_LOWER_LIMIT" value="5" enum="G6DOFJointAxisParam">
The minimum rotation in negative direction to break loose and rotate arround the axes.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_UPPER_LIMIT" value="6">
+ <constant name="G6DOF_JOINT_ANGULAR_UPPER_LIMIT" value="6" enum="G6DOFJointAxisParam">
The minimum rotation in positive direction to break loose and rotate arround the axes.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS" value="7">
+ <constant name="G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS" value="7" enum="G6DOFJointAxisParam">
A factor that gets multiplied onto all rotations accross the axes.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_DAMPING" value="8">
+ <constant name="G6DOF_JOINT_ANGULAR_DAMPING" value="8" enum="G6DOFJointAxisParam">
The amount of rotational damping accross the axes. The lower, the more dampening occurs.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_RESTITUTION" value="9">
+ <constant name="G6DOF_JOINT_ANGULAR_RESTITUTION" value="9" enum="G6DOFJointAxisParam">
The amount of rotational restitution accross the axes. The lower, the more restitution occurs.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_FORCE_LIMIT" value="10">
+ <constant name="G6DOF_JOINT_ANGULAR_FORCE_LIMIT" value="10" enum="G6DOFJointAxisParam">
The maximum amount of force that can occur, when rotating arround the axes.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_ERP" value="11">
+ <constant name="G6DOF_JOINT_ANGULAR_ERP" value="11" enum="G6DOFJointAxisParam">
When correcting the crossing of limits in rotation accross the axes, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_MOTOR_TARGET_VELOCITY" value="12">
+ <constant name="G6DOF_JOINT_ANGULAR_MOTOR_TARGET_VELOCITY" value="12" enum="G6DOFJointAxisParam">
Target speed for the motor at the axes.
</constant>
- <constant name="G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT" value="13">
+ <constant name="G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT" value="13" enum="G6DOFJointAxisParam">
Maximum acceleration for the motor at the axes.
</constant>
- <constant name="G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT" value="0">
+ <constant name="G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT" value="0" enum="G6DOFJointAxisFlag">
If [code]set[/code] there is linear motion possible within the given limits.
</constant>
- <constant name="G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT" value="1">
+ <constant name="G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT" value="1" enum="G6DOFJointAxisFlag">
If [code]set[/code] there is rotational motion possible.
</constant>
- <constant name="G6DOF_JOINT_FLAG_ENABLE_MOTOR" value="2">
+ <constant name="G6DOF_JOINT_FLAG_ENABLE_MOTOR" value="2" enum="G6DOFJointAxisFlag">
If [code]set[/code] there is a rotational motor across these axes.
</constant>
- <constant name="SHAPE_PLANE" value="0">
+ <constant name="SHAPE_PLANE" value="0" enum="ShapeType">
The [Shape] is a [PlaneShape].
</constant>
- <constant name="SHAPE_RAY" value="1">
+ <constant name="SHAPE_RAY" value="1" enum="ShapeType">
The [Shape] is a [RayShape].
</constant>
- <constant name="SHAPE_SPHERE" value="2">
+ <constant name="SHAPE_SPHERE" value="2" enum="ShapeType">
The [Shape] is a [SphereShape].
</constant>
- <constant name="SHAPE_BOX" value="3">
+ <constant name="SHAPE_BOX" value="3" enum="ShapeType">
The [Shape] is a [BoxShape].
</constant>
- <constant name="SHAPE_CAPSULE" value="4">
+ <constant name="SHAPE_CAPSULE" value="4" enum="ShapeType">
The [Shape] is a [CapsuleShape].
</constant>
- <constant name="SHAPE_CONVEX_POLYGON" value="5">
+ <constant name="SHAPE_CONVEX_POLYGON" value="5" enum="ShapeType">
The [Shape] is a [ConvexPolygonShape].
</constant>
- <constant name="SHAPE_CONCAVE_POLYGON" value="6">
+ <constant name="SHAPE_CONCAVE_POLYGON" value="6" enum="ShapeType">
The [Shape] is a [ConcavePolygonShape].
</constant>
- <constant name="SHAPE_HEIGHTMAP" value="7">
+ <constant name="SHAPE_HEIGHTMAP" value="7" enum="ShapeType">
The [Shape] is a [HeightMapShape].
</constant>
- <constant name="SHAPE_CUSTOM" value="8">
+ <constant name="SHAPE_CUSTOM" value="8" enum="ShapeType">
This constant is used internally by the engine. Any attempt to create this kind of shape results in an error.
</constant>
- <constant name="AREA_PARAM_GRAVITY" value="0">
+ <constant name="AREA_PARAM_GRAVITY" value="0" enum="AreaParameter">
Constant to set/get gravity strength in an area.
</constant>
- <constant name="AREA_PARAM_GRAVITY_VECTOR" value="1">
+ <constant name="AREA_PARAM_GRAVITY_VECTOR" value="1" enum="AreaParameter">
Constant to set/get gravity vector/center in an area.
</constant>
- <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="2">
+ <constant name="AREA_PARAM_GRAVITY_IS_POINT" value="2" enum="AreaParameter">
Constant to set/get whether the gravity vector of an area is a direction, or a center point.
</constant>
- <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="3">
+ <constant name="AREA_PARAM_GRAVITY_DISTANCE_SCALE" value="3" enum="AreaParameter">
Constant to set/get the falloff factor for point gravity of an area. The greater this value is, the faster the strength of gravity decreases with the square of distance.
</constant>
- <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="4">
+ <constant name="AREA_PARAM_GRAVITY_POINT_ATTENUATION" value="4" enum="AreaParameter">
This constant was used to set/get the falloff factor for point gravity. It has been superseded by AREA_PARAM_GRAVITY_DISTANCE_SCALE.
</constant>
- <constant name="AREA_PARAM_LINEAR_DAMP" value="5">
+ <constant name="AREA_PARAM_LINEAR_DAMP" value="5" enum="AreaParameter">
Constant to set/get the linear dampening factor of an area.
</constant>
- <constant name="AREA_PARAM_ANGULAR_DAMP" value="6">
+ <constant name="AREA_PARAM_ANGULAR_DAMP" value="6" enum="AreaParameter">
Constant to set/get the angular dampening factor of an area.
</constant>
- <constant name="AREA_PARAM_PRIORITY" value="7">
+ <constant name="AREA_PARAM_PRIORITY" value="7" enum="AreaParameter">
Constant to set/get the priority (order of processing) of an area.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_DISABLED" value="0">
+ <constant name="AREA_SPACE_OVERRIDE_DISABLED" value="0" enum="AreaSpaceOverrideMode">
This area does not affect gravity/damp. These are generally areas that exist only to detect collisions, and objects entering or exiting them.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_COMBINE" value="1">
+ <constant name="AREA_SPACE_OVERRIDE_COMBINE" value="1" enum="AreaSpaceOverrideMode">
This area adds its gravity/damp values to whatever has been calculated so far. This way, many overlapping areas can combine their physics to make interesting effects.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_COMBINE_REPLACE" value="2">
+ <constant name="AREA_SPACE_OVERRIDE_COMBINE_REPLACE" value="2" enum="AreaSpaceOverrideMode">
This area adds its gravity/damp values to whatever has been calculated so far. Then stops taking into account the rest of the areas, even the default one.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_REPLACE" value="3">
+ <constant name="AREA_SPACE_OVERRIDE_REPLACE" value="3" enum="AreaSpaceOverrideMode">
This area replaces any gravity/damp, even the default one, and stops taking into account the rest of the areas.
</constant>
- <constant name="AREA_SPACE_OVERRIDE_REPLACE_COMBINE" value="4">
+ <constant name="AREA_SPACE_OVERRIDE_REPLACE_COMBINE" value="4" enum="AreaSpaceOverrideMode">
This area replaces any gravity/damp calculated so far, but keeps calculating the rest of the areas, down to the default one.
</constant>
- <constant name="BODY_MODE_STATIC" value="0">
+ <constant name="BODY_MODE_STATIC" value="0" enum="BodyMode">
Constant for static bodies.
</constant>
- <constant name="BODY_MODE_KINEMATIC" value="1">
+ <constant name="BODY_MODE_KINEMATIC" value="1" enum="BodyMode">
Constant for kinematic bodies.
</constant>
- <constant name="BODY_MODE_RIGID" value="2">
+ <constant name="BODY_MODE_RIGID" value="2" enum="BodyMode">
Constant for rigid bodies.
</constant>
- <constant name="BODY_MODE_SOFT" value="3">
+ <constant name="BODY_MODE_SOFT" value="3" enum="BodyMode">
</constant>
- <constant name="BODY_MODE_CHARACTER" value="4">
+ <constant name="BODY_MODE_CHARACTER" value="4" enum="BodyMode">
Constant for rigid bodies in character mode. In this mode, a body can not rotate, and only its linear velocity is affected by physics.
</constant>
- <constant name="BODY_PARAM_BOUNCE" value="0">
+ <constant name="BODY_PARAM_BOUNCE" value="0" enum="BodyParameter">
Constant to set/get a body's bounce factor.
</constant>
- <constant name="BODY_PARAM_FRICTION" value="1">
+ <constant name="BODY_PARAM_FRICTION" value="1" enum="BodyParameter">
Constant to set/get a body's friction.
</constant>
- <constant name="BODY_PARAM_MASS" value="2">
+ <constant name="BODY_PARAM_MASS" value="2" enum="BodyParameter">
Constant to set/get a body's mass.
</constant>
- <constant name="BODY_PARAM_GRAVITY_SCALE" value="3">
+ <constant name="BODY_PARAM_GRAVITY_SCALE" value="3" enum="BodyParameter">
Constant to set/get a body's gravity multiplier.
</constant>
- <constant name="BODY_PARAM_LINEAR_DAMP" value="4">
+ <constant name="BODY_PARAM_LINEAR_DAMP" value="4" enum="BodyParameter">
Constant to set/get a body's linear dampening factor.
</constant>
- <constant name="BODY_PARAM_ANGULAR_DAMP" value="5">
+ <constant name="BODY_PARAM_ANGULAR_DAMP" value="5" enum="BodyParameter">
Constant to set/get a body's angular dampening factor.
</constant>
- <constant name="BODY_PARAM_MAX" value="6">
+ <constant name="BODY_PARAM_MAX" value="6" enum="BodyParameter">
This is the last ID for body parameters. Any attempt to set this property is ignored. Any attempt to get it returns 0.
</constant>
- <constant name="BODY_STATE_TRANSFORM" value="0">
+ <constant name="BODY_STATE_TRANSFORM" value="0" enum="BodyState">
Constant to set/get the current transform matrix of the body.
</constant>
- <constant name="BODY_STATE_LINEAR_VELOCITY" value="1">
+ <constant name="BODY_STATE_LINEAR_VELOCITY" value="1" enum="BodyState">
Constant to set/get the current linear velocity of the body.
</constant>
- <constant name="BODY_STATE_ANGULAR_VELOCITY" value="2">
+ <constant name="BODY_STATE_ANGULAR_VELOCITY" value="2" enum="BodyState">
Constant to set/get the current angular velocity of the body.
</constant>
- <constant name="BODY_STATE_SLEEPING" value="3">
+ <constant name="BODY_STATE_SLEEPING" value="3" enum="BodyState">
Constant to sleep/wake up a body, or to get whether it is sleeping.
</constant>
- <constant name="BODY_STATE_CAN_SLEEP" value="4">
+ <constant name="BODY_STATE_CAN_SLEEP" value="4" enum="BodyState">
Constant to set/get whether the body can sleep.
</constant>
- <constant name="AREA_BODY_ADDED" value="0">
+ <constant name="AREA_BODY_ADDED" value="0" enum="AreaBodyStatus">
The value of the first parameter and area callback function receives, when an object enters one of its shapes.
</constant>
- <constant name="AREA_BODY_REMOVED" value="1">
+ <constant name="AREA_BODY_REMOVED" value="1" enum="AreaBodyStatus">
The value of the first parameter and area callback function receives, when an object exits one of its shapes.
</constant>
- <constant name="INFO_ACTIVE_OBJECTS" value="0">
+ <constant name="INFO_ACTIVE_OBJECTS" value="0" enum="ProcessInfo">
Constant to get the number of objects that are not sleeping.
</constant>
- <constant name="INFO_COLLISION_PAIRS" value="1">
+ <constant name="INFO_COLLISION_PAIRS" value="1" enum="ProcessInfo">
Constant to get the number of possible collisions.
</constant>
- <constant name="INFO_ISLAND_COUNT" value="2">
+ <constant name="INFO_ISLAND_COUNT" value="2" enum="ProcessInfo">
Constant to get the number of space regions where a collision could occur.
</constant>
- <constant name="SPACE_PARAM_CONTACT_RECYCLE_RADIUS" value="0">
+ <constant name="SPACE_PARAM_CONTACT_RECYCLE_RADIUS" value="0" enum="SpaceParameter">
Constant to set/get the maximum distance a pair of bodies has to move before their collision status has to be recalculated.
</constant>
- <constant name="SPACE_PARAM_CONTACT_MAX_SEPARATION" value="1">
+ <constant name="SPACE_PARAM_CONTACT_MAX_SEPARATION" value="1" enum="SpaceParameter">
Constant to set/get the maximum distance a shape can be from another before they are considered separated.
</constant>
- <constant name="SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION" value="2">
+ <constant name="SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION" value="2" enum="SpaceParameter">
Constant to set/get the maximum distance a shape can penetrate another shape before it is considered a collision.
</constant>
- <constant name="SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD" value="3">
+ <constant name="SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD" value="3" enum="SpaceParameter">
Constant to set/get the threshold linear velocity of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after the time given.
</constant>
- <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD" value="4">
+ <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD" value="4" enum="SpaceParameter">
Constant to set/get the threshold angular velocity of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after the time given.
</constant>
- <constant name="SPACE_PARAM_BODY_TIME_TO_SLEEP" value="5">
+ <constant name="SPACE_PARAM_BODY_TIME_TO_SLEEP" value="5" enum="SpaceParameter">
Constant to set/get the maximum time of activity. A body marked as potentially inactive for both linear and angular velocity will be put to sleep after this time.
</constant>
- <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_DAMP_RATIO" value="6">
+ <constant name="SPACE_PARAM_BODY_ANGULAR_VELOCITY_DAMP_RATIO" value="6" enum="SpaceParameter">
</constant>
- <constant name="SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS" value="7">
+ <constant name="SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS" value="7" enum="SpaceParameter">
Constant to set/get the default solver bias for all physics constraints. A solver bias is a factor controlling how much two objects "rebound", after violating a constraint, to avoid leaving them in that state because of numerical imprecision.
</constant>
- <constant name="BODY_AXIS_LOCK_DISABLED" value="0">
- The [Body] can rotate and move freely.
- </constant>
- <constant name="BODY_AXIS_LOCK_X" value="1">
- The [Body] cannot move across x axis can only rotate across x axis.
- </constant>
- <constant name="BODY_AXIS_LOCK_Y" value="2">
- The [Body] cannot move across y axis can only rotate across y axis.
- </constant>
- <constant name="BODY_AXIS_LOCK_Z" value="3">
- The [Body] cannot move across z axis can only rotate across z axis.
- </constant>
</constants>
</class>
diff --git a/doc/classes/PhysicsShapeQueryParameters.xml b/doc/classes/PhysicsShapeQueryParameters.xml
index b9023194d7..98d6846b13 100644
--- a/doc/classes/PhysicsShapeQueryParameters.xml
+++ b/doc/classes/PhysicsShapeQueryParameters.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PhysicsShapeQueryParameters" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="PhysicsShapeQueryParameters" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,7 +9,7 @@
<demos>
</demos>
<methods>
- <method name="get_collision_layer" qualifiers="const">
+ <method name="get_collision_mask" qualifiers="const">
<return type="int">
</return>
<description>
@@ -27,12 +27,6 @@
<description>
</description>
</method>
- <method name="get_object_type_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
<method name="get_shape_rid" qualifiers="const">
<return type="RID">
</return>
@@ -45,10 +39,10 @@
<description>
</description>
</method>
- <method name="set_collision_layer">
+ <method name="set_collision_mask">
<return type="void">
</return>
- <argument index="0" name="collision_layer" type="int">
+ <argument index="0" name="collision_mask" type="int">
</argument>
<description>
</description>
@@ -69,14 +63,6 @@
<description>
</description>
</method>
- <method name="set_object_type_mask">
- <return type="void">
- </return>
- <argument index="0" name="object_type_mask" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="set_shape">
<return type="void">
</return>
diff --git a/doc/classes/PhysicsShapeQueryResult.xml b/doc/classes/PhysicsShapeQueryResult.xml
index 2e723e96df..d18d09b612 100644
--- a/doc/classes/PhysicsShapeQueryResult.xml
+++ b/doc/classes/PhysicsShapeQueryResult.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PhysicsShapeQueryResult" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="PhysicsShapeQueryResult" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Result of a shape query in Physics2DServer.
</brief_description>
diff --git a/doc/classes/PinJoint.xml b/doc/classes/PinJoint.xml
index bcf69df816..46e3d3c512 100644
--- a/doc/classes/PinJoint.xml
+++ b/doc/classes/PinJoint.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PinJoint" inherits="Joint" category="Core" version="3.0-alpha">
+<class name="PinJoint" inherits="Joint" category="Core" version="3.0-beta">
<brief_description>
Pin Joint for 3D Shapes.
</brief_description>
@@ -11,24 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_param" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="PinJoint.Param">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="PinJoint.Param">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="params/bias" type="float" setter="set_param" getter="get_param">
@@ -44,15 +26,15 @@
</member>
</members>
<constants>
- <constant name="PARAM_BIAS" value="0">
+ <constant name="PARAM_BIAS" value="0" enum="Param">
The force with wich the pinned objects stay in positional relation to each other.
The higher, the stronger.
</constant>
- <constant name="PARAM_DAMPING" value="1">
+ <constant name="PARAM_DAMPING" value="1" enum="Param">
The force with wich the pinned objects stay in velocity relation to each other.
The higher, the stronger.
</constant>
- <constant name="PARAM_IMPULSE_CLAMP" value="2">
+ <constant name="PARAM_IMPULSE_CLAMP" value="2" enum="Param">
If above 0, this value is the maximum value for an impulse that this Joint produces.
</constant>
</constants>
diff --git a/doc/classes/PinJoint2D.xml b/doc/classes/PinJoint2D.xml
index 7f92567ae4..c8a886896e 100644
--- a/doc/classes/PinJoint2D.xml
+++ b/doc/classes/PinJoint2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PinJoint2D" inherits="Joint2D" category="Core" version="3.0-alpha">
+<class name="PinJoint2D" inherits="Joint2D" category="Core" version="3.0-beta">
<brief_description>
Pin Joint for 2D Shapes.
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_softness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_softness">
- <return type="void">
- </return>
- <argument index="0" name="softness" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="softness" type="float" setter="set_softness" getter="get_softness">
diff --git a/doc/classes/Plane.xml b/doc/classes/Plane.xml
index 2fd02a56c6..c895850a64 100644
--- a/doc/classes/Plane.xml
+++ b/doc/classes/Plane.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Plane" category="Built-In Types" version="3.0-alpha">
+<class name="Plane" category="Built-In Types" version="3.0-beta">
<brief_description>
Plane in hessian form.
</brief_description>
diff --git a/doc/classes/PlaneMesh.xml b/doc/classes/PlaneMesh.xml
index 93bc191e45..760d64d2de 100644
--- a/doc/classes/PlaneMesh.xml
+++ b/doc/classes/PlaneMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PlaneMesh" inherits="PrimitiveMesh" category="Core" version="3.0-alpha">
+<class name="PlaneMesh" inherits="PrimitiveMesh" category="Core" version="3.0-beta">
<brief_description>
Class representing a planar [PrimitiveMesh].
</brief_description>
@@ -11,48 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_size" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdivide_depth" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdivide_width" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdivide_depth">
- <return type="void">
- </return>
- <argument index="0" name="subdivide" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdivide_width">
- <return type="void">
- </return>
- <argument index="0" name="subdivide" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="size" type="Vector2" setter="set_size" getter="get_size">
diff --git a/doc/classes/PlaneShape.xml b/doc/classes/PlaneShape.xml
index d394f781e3..b3adf61d68 100644
--- a/doc/classes/PlaneShape.xml
+++ b/doc/classes/PlaneShape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PlaneShape" inherits="Shape" category="Core" version="3.0-alpha">
+<class name="PlaneShape" inherits="Shape" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,20 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_plane" qualifiers="const">
- <return type="Plane">
- </return>
- <description>
- </description>
- </method>
- <method name="set_plane">
- <return type="void">
- </return>
- <argument index="0" name="plane" type="Plane">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="plane" type="Plane" setter="set_plane" getter="get_plane">
diff --git a/doc/classes/Polygon2D.xml b/doc/classes/Polygon2D.xml
index ccf60e4d49..f69010458e 100644
--- a/doc/classes/Polygon2D.xml
+++ b/doc/classes/Polygon2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Polygon2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Polygon2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
A 2D polygon.
</brief_description>
@@ -11,61 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_antialiased" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- Return the polygon fill color.
- </description>
- </method>
- <method name="get_invert" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether this polygon is inverted or not.
- </description>
- </method>
- <method name="get_invert_border" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the added padding around the bounding box.
- </description>
- </method>
- <method name="get_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the offset for the polygon vertices.
- </description>
- </method>
- <method name="get_polygon" qualifiers="const">
- <return type="PoolVector2Array">
- </return>
- <description>
- Return the set of vertices that defines this polygon.
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- Return the polygon texture
- </description>
- </method>
- <method name="get_texture_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the polygon texture offset.
- </description>
- </method>
<method name="get_texture_rotation" qualifiers="const">
<return type="float">
</return>
@@ -73,103 +18,6 @@
Return the rotation in radians of the texture polygon.
</description>
</method>
- <method name="get_texture_rotation_degrees" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture_scale" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the uv coordinate multiplier.
- </description>
- </method>
- <method name="get_uv" qualifiers="const">
- <return type="PoolVector2Array">
- </return>
- <description>
- Return the texture coordinates associated with every vertex of the polygon.
- </description>
- </method>
- <method name="get_vertex_colors" qualifiers="const">
- <return type="PoolColorArray">
- </return>
- <description>
- Return the list of vertex colors.
- </description>
- </method>
- <method name="set_antialiased">
- <return type="void">
- </return>
- <argument index="0" name="antialiased" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- Set the polygon fill color. If the polygon has a texture defined, the defined texture will be multiplied by the polygon fill color. This, also, is the default color for those vertices that are not defined by [method get_vertex_colors].
- </description>
- </method>
- <method name="set_invert">
- <return type="void">
- </return>
- <argument index="0" name="invert" type="bool">
- </argument>
- <description>
- Set the polygon as the defined polygon bounding box minus the defined polygon (the defined polygon will appear as a hole on the square that contains the defined polygon).
- </description>
- </method>
- <method name="set_invert_border">
- <return type="void">
- </return>
- <argument index="0" name="invert_border" type="float">
- </argument>
- <description>
- Add extra padding around the bounding box, making it bigger. Too small a value can make the polygon triangulate strangely, due to numerical imprecision.
- </description>
- </method>
- <method name="set_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector2">
- </argument>
- <description>
- Set the an offset that will be added to the vertices' position. E.g. if the offset is set to (10,10) then all the polygon points will move 10 units to the right and 10 units to the bottom.
- </description>
- </method>
- <method name="set_polygon">
- <return type="void">
- </return>
- <argument index="0" name="polygon" type="PoolVector2Array">
- </argument>
- <description>
- Define the set of vertices that will represent the polygon.
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture_offset">
- <return type="void">
- </return>
- <argument index="0" name="texture_offset" type="Vector2">
- </argument>
- <description>
- Set the offset of the polygon texture. Initially the texture will appear anchored to the polygon position, the offset is used to move the texture location away from that point (notice that the texture origin is set to its top left corner, so when offset is 0,0 the top left corner of the texture is at the polygon position), for example setting the offset to 10, 10 will move the texture 10 units to the left and 10 units to the top.
- </description>
- </method>
<method name="set_texture_rotation">
<return type="void">
</return>
@@ -179,42 +27,6 @@
Set the amount of rotation of the polygon texture, [code]texture_rotation[/code] is specified in radians and clockwise rotation.
</description>
</method>
- <method name="set_texture_rotation_degrees">
- <return type="void">
- </return>
- <argument index="0" name="texture_rotation" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture_scale">
- <return type="void">
- </return>
- <argument index="0" name="texture_scale" type="Vector2">
- </argument>
- <description>
- Set the value that will multiply the uv coordinates ([method get_uv]) when applying the texture. Larger values make the texture smaller, and vice versa.
- </description>
- </method>
- <method name="set_uv">
- <return type="void">
- </return>
- <argument index="0" name="uv" type="PoolVector2Array">
- </argument>
- <description>
- Set the texture coordinates for every vertex of the polygon. There should be one uv vertex for every vertex in the polygon. If there are less, the undefined ones will be assumed to be (0,0). Extra uv vertices are ignored.
- </description>
- </method>
- <method name="set_vertex_colors">
- <return type="void">
- </return>
- <argument index="0" name="vertex_colors" type="PoolColorArray">
- </argument>
- <description>
- Set the color for each vertex of the polygon. There should be one color for every vertex in the polygon. If there are less, the undefined ones will be assumed to be [method get_color]. Extra color entries are ignored.
- Colors are interpolated between vertices, resulting in smooth gradients when they differ.
- </description>
- </method>
</methods>
<members>
<member name="antialiased" type="bool" setter="set_antialiased" getter="get_antialiased">
diff --git a/doc/classes/PolygonPathFinder.xml b/doc/classes/PolygonPathFinder.xml
index 213d7c0981..48c5625e6b 100644
--- a/doc/classes/PolygonPathFinder.xml
+++ b/doc/classes/PolygonPathFinder.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PolygonPathFinder" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="PolygonPathFinder" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -80,10 +80,6 @@
</description>
</method>
</methods>
- <members>
- <member name="data" type="Dictionary" setter="_set_data" getter="_get_data">
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/doc/classes/PoolByteArray.xml b/doc/classes/PoolByteArray.xml
index 54efc24725..653ea958a3 100644
--- a/doc/classes/PoolByteArray.xml
+++ b/doc/classes/PoolByteArray.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PoolByteArray" category="Built-In Types" version="3.0-alpha">
+<class name="PoolByteArray" category="Built-In Types" version="3.0-beta">
<brief_description>
Raw byte array.
</brief_description>
diff --git a/doc/classes/PoolColorArray.xml b/doc/classes/PoolColorArray.xml
index f7cf389577..04267e0935 100644
--- a/doc/classes/PoolColorArray.xml
+++ b/doc/classes/PoolColorArray.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PoolColorArray" category="Built-In Types" version="3.0-alpha">
+<class name="PoolColorArray" category="Built-In Types" version="3.0-beta">
<brief_description>
Array of Colors
</brief_description>
diff --git a/doc/classes/PoolIntArray.xml b/doc/classes/PoolIntArray.xml
index 53b2258c58..0baf194b52 100644
--- a/doc/classes/PoolIntArray.xml
+++ b/doc/classes/PoolIntArray.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PoolIntArray" category="Built-In Types" version="3.0-alpha">
+<class name="PoolIntArray" category="Built-In Types" version="3.0-beta">
<brief_description>
Integer Array.
</brief_description>
diff --git a/doc/classes/PoolRealArray.xml b/doc/classes/PoolRealArray.xml
index cc22c256e7..0a6c855647 100644
--- a/doc/classes/PoolRealArray.xml
+++ b/doc/classes/PoolRealArray.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PoolRealArray" category="Built-In Types" version="3.0-alpha">
+<class name="PoolRealArray" category="Built-In Types" version="3.0-beta">
<brief_description>
Real Array.
</brief_description>
diff --git a/doc/classes/PoolStringArray.xml b/doc/classes/PoolStringArray.xml
index 47928281cf..37842c1c85 100644
--- a/doc/classes/PoolStringArray.xml
+++ b/doc/classes/PoolStringArray.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PoolStringArray" category="Built-In Types" version="3.0-alpha">
+<class name="PoolStringArray" category="Built-In Types" version="3.0-beta">
<brief_description>
String Array.
</brief_description>
diff --git a/doc/classes/PoolVector2Array.xml b/doc/classes/PoolVector2Array.xml
index 2ece5a6486..a98f3d6d7e 100644
--- a/doc/classes/PoolVector2Array.xml
+++ b/doc/classes/PoolVector2Array.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PoolVector2Array" category="Built-In Types" version="3.0-alpha">
+<class name="PoolVector2Array" category="Built-In Types" version="3.0-beta">
<brief_description>
An Array of Vector2.
</brief_description>
diff --git a/doc/classes/PoolVector3Array.xml b/doc/classes/PoolVector3Array.xml
index 59f1c36a9e..f3b3274e47 100644
--- a/doc/classes/PoolVector3Array.xml
+++ b/doc/classes/PoolVector3Array.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PoolVector3Array" category="Built-In Types" version="3.0-alpha">
+<class name="PoolVector3Array" category="Built-In Types" version="3.0-beta">
<brief_description>
An Array of Vector3.
</brief_description>
diff --git a/doc/classes/Popup.xml b/doc/classes/Popup.xml
index 7a93c32ea8..930e646dee 100644
--- a/doc/classes/Popup.xml
+++ b/doc/classes/Popup.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Popup" inherits="Control" category="Core" version="3.0-alpha">
+<class name="Popup" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Base container control for popups and dialogs.
</brief_description>
@@ -11,13 +11,6 @@
<demos>
</demos>
<methods>
- <method name="is_exclusive" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether the popup will hide other popups when shown on the screen.
- </description>
- </method>
<method name="popup">
<return type="void">
</return>
@@ -54,15 +47,6 @@
Popup (show the control in modal form) in the center of the screen, scaled at a ratio of size of the screen.
</description>
</method>
- <method name="set_exclusive">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Make the popup hide other popups when shown on the screen.
- </description>
- </method>
</methods>
<members>
<member name="popup_exclusive" type="bool" setter="set_exclusive" getter="is_exclusive">
@@ -81,10 +65,10 @@
</signal>
</signals>
<constants>
- <constant name="NOTIFICATION_POST_POPUP" value="80" enum="">
+ <constant name="NOTIFICATION_POST_POPUP" value="80">
Notification sent right after the popup is shown.
</constant>
- <constant name="NOTIFICATION_POPUP_HIDE" value="81" enum="">
+ <constant name="NOTIFICATION_POPUP_HIDE" value="81">
Notification sent right after the popup is hidden.
</constant>
</constants>
diff --git a/doc/classes/PopupDialog.xml b/doc/classes/PopupDialog.xml
index 82439e9d74..15df0e4ad2 100644
--- a/doc/classes/PopupDialog.xml
+++ b/doc/classes/PopupDialog.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PopupDialog" inherits="Popup" category="Core" version="3.0-alpha">
+<class name="PopupDialog" inherits="Popup" category="Core" version="3.0-beta">
<brief_description>
Base class for Popup Dialogs.
</brief_description>
diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml
index f3cd7df796..7071d64f2e 100644
--- a/doc/classes/PopupMenu.xml
+++ b/doc/classes/PopupMenu.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PopupMenu" inherits="Popup" category="Core" version="3.0-alpha">
+<class name="PopupMenu" inherits="Popup" category="Core" version="3.0-beta">
<brief_description>
PopupMenu displays a list of options.
</brief_description>
@@ -233,20 +233,6 @@
<description>
</description>
</method>
- <method name="is_hide_on_checkable_item_selection">
- <return type="bool">
- </return>
- <description>
- Returns a boolean that indicates whether or not the PopupMenu will hide on checkable item selection.
- </description>
- </method>
- <method name="is_hide_on_item_selection">
- <return type="bool">
- </return>
- <description>
- Returns a boolean that indicates whether or not the PopupMenu will hide on item selection.
- </description>
- </method>
<method name="is_item_checkable" qualifiers="const">
<return type="bool">
</return>
@@ -292,24 +278,6 @@
Removes the item at index "idx" from the menu. Note that the indexes of items after the removed item are going to be shifted by one.
</description>
</method>
- <method name="set_hide_on_checkable_item_selection">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Sets whether or not the PopupMenu will hide on checkable item selection.
- </description>
- </method>
- <method name="set_hide_on_item_selection">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Sets whether or not the PopupMenu will hide on item selection.
- </description>
- </method>
<method name="set_item_accelerator">
<return type="void">
</return>
@@ -455,8 +423,6 @@
</member>
<member name="hide_on_item_selection" type="bool" setter="set_hide_on_item_selection" getter="is_hide_on_item_selection">
</member>
- <member name="items" type="Array" setter="_set_items" getter="_get_items">
- </member>
</members>
<signals>
<signal name="id_pressed">
diff --git a/doc/classes/PopupPanel.xml b/doc/classes/PopupPanel.xml
index 3878e345c9..179f91e74b 100644
--- a/doc/classes/PopupPanel.xml
+++ b/doc/classes/PopupPanel.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PopupPanel" inherits="Popup" category="Core" version="3.0-alpha">
+<class name="PopupPanel" inherits="Popup" category="Core" version="3.0-beta">
<brief_description>
Class for displaying popups with a panel background.
</brief_description>
diff --git a/doc/classes/Position2D.xml b/doc/classes/Position2D.xml
index 6d282370d4..d222a5dc04 100644
--- a/doc/classes/Position2D.xml
+++ b/doc/classes/Position2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Position2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Position2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Generic 2D Position hint for editing.
</brief_description>
diff --git a/doc/classes/Position3D.xml b/doc/classes/Position3D.xml
index cd4c1293ca..a5b8a119ff 100644
--- a/doc/classes/Position3D.xml
+++ b/doc/classes/Position3D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Position3D" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="Position3D" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Generic 3D Position hint for editing
</brief_description>
diff --git a/doc/classes/PrimitiveMesh.xml b/doc/classes/PrimitiveMesh.xml
index 5c8d467927..e8ad23524f 100644
--- a/doc/classes/PrimitiveMesh.xml
+++ b/doc/classes/PrimitiveMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PrimitiveMesh" inherits="Mesh" category="Core" version="3.0-alpha">
+<class name="PrimitiveMesh" inherits="Mesh" category="Core" version="3.0-beta">
<brief_description>
Base class for all primitive meshes. Handles applying a [Material] to a primitive mesh.
</brief_description>
@@ -11,26 +11,12 @@
<demos>
</demos>
<methods>
- <method name="get_material" qualifiers="const">
- <return type="Material">
- </return>
- <description>
- </description>
- </method>
<method name="get_mesh_arrays" qualifiers="const">
<return type="Array">
</return>
<description>
</description>
</method>
- <method name="set_material">
- <return type="void">
- </return>
- <argument index="0" name="material" type="Material">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="material" type="Material" setter="set_material" getter="get_material">
diff --git a/doc/classes/PrismMesh.xml b/doc/classes/PrismMesh.xml
index fa53717111..38bb3a4eb6 100644
--- a/doc/classes/PrismMesh.xml
+++ b/doc/classes/PrismMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PrismMesh" inherits="PrimitiveMesh" category="Core" version="3.0-alpha">
+<class name="PrismMesh" inherits="PrimitiveMesh" category="Core" version="3.0-beta">
<brief_description>
Class representing a prism-shaped [PrimitiveMesh].
</brief_description>
@@ -11,76 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_left_to_right" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_size" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdivide_depth" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdivide_height" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subdivide_width" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_left_to_right">
- <return type="void">
- </return>
- <argument index="0" name="left_to_right" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdivide_depth">
- <return type="void">
- </return>
- <argument index="0" name="segments" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdivide_height">
- <return type="void">
- </return>
- <argument index="0" name="segments" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subdivide_width">
- <return type="void">
- </return>
- <argument index="0" name="segments" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="left_to_right" type="float" setter="set_left_to_right" getter="get_left_to_right">
diff --git a/doc/classes/ProceduralSky.xml b/doc/classes/ProceduralSky.xml
index 70e9388058..2abd1104ce 100644
--- a/doc/classes/ProceduralSky.xml
+++ b/doc/classes/ProceduralSky.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ProceduralSky" inherits="Sky" category="Core" version="3.0-alpha">
+<class name="ProceduralSky" inherits="Sky" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,230 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_ground_bottom_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ground_curve" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ground_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ground_horizon_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sky_curve" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sky_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sky_horizon_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sky_top_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sun_angle_max" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sun_angle_min" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sun_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sun_curve" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sun_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sun_latitude" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_sun_longitude" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture_size" qualifiers="const">
- <return type="int" enum="ProceduralSky.TextureSize">
- </return>
- <description>
- </description>
- </method>
- <method name="set_ground_bottom_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ground_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ground_energy">
- <return type="void">
- </return>
- <argument index="0" name="energy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ground_horizon_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sky_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sky_energy">
- <return type="void">
- </return>
- <argument index="0" name="energy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sky_horizon_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sky_top_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sun_angle_max">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sun_angle_min">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sun_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sun_curve">
- <return type="void">
- </return>
- <argument index="0" name="curve" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sun_energy">
- <return type="void">
- </return>
- <argument index="0" name="energy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sun_latitude">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_sun_longitude">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="int" enum="ProceduralSky.TextureSize">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="ground_bottom_color" type="Color" setter="set_ground_bottom_color" getter="get_ground_bottom_color">
@@ -269,17 +45,17 @@
</member>
</members>
<constants>
- <constant name="TEXTURE_SIZE_256" value="0">
+ <constant name="TEXTURE_SIZE_256" value="0" enum="TextureSize">
</constant>
- <constant name="TEXTURE_SIZE_512" value="1">
+ <constant name="TEXTURE_SIZE_512" value="1" enum="TextureSize">
</constant>
- <constant name="TEXTURE_SIZE_1024" value="2">
+ <constant name="TEXTURE_SIZE_1024" value="2" enum="TextureSize">
</constant>
- <constant name="TEXTURE_SIZE_2048" value="3">
+ <constant name="TEXTURE_SIZE_2048" value="3" enum="TextureSize">
</constant>
- <constant name="TEXTURE_SIZE_4096" value="4">
+ <constant name="TEXTURE_SIZE_4096" value="4" enum="TextureSize">
</constant>
- <constant name="TEXTURE_SIZE_MAX" value="5">
+ <constant name="TEXTURE_SIZE_MAX" value="5" enum="TextureSize">
</constant>
</constants>
</class>
diff --git a/doc/classes/ProgressBar.xml b/doc/classes/ProgressBar.xml
index d72b28efc5..7417ddb53e 100644
--- a/doc/classes/ProgressBar.xml
+++ b/doc/classes/ProgressBar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ProgressBar" inherits="Range" category="Core" version="3.0-alpha">
+<class name="ProgressBar" inherits="Range" category="Core" version="3.0-beta">
<brief_description>
General purpose progress bar.
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="is_percent_visible" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_percent_visible">
- <return type="void">
- </return>
- <argument index="0" name="visible" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="percent_visible" type="bool" setter="set_percent_visible" getter="is_percent_visible">
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 6f670ded64..e28860a577 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ProjectSettings" inherits="Object" category="Core" version="3.0-alpha">
+<class name="ProjectSettings" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Contains global variables accessible from everywhere.
</brief_description>
diff --git a/doc/classes/ProximityGroup.xml b/doc/classes/ProximityGroup.xml
index b05d5b95dd..42e2c5e690 100644
--- a/doc/classes/ProximityGroup.xml
+++ b/doc/classes/ProximityGroup.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ProximityGroup" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="ProximityGroup" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
General purpose proximity-detection node.
</brief_description>
@@ -21,12 +21,6 @@
<description>
</description>
</method>
- <method name="get_grid_radius" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
<method name="set_dispatch_mode">
<return type="void">
</return>
@@ -35,14 +29,6 @@
<description>
</description>
</method>
- <method name="set_grid_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
<method name="set_group_name">
<return type="void">
</return>
diff --git a/doc/classes/ProxyTexture.xml b/doc/classes/ProxyTexture.xml
new file mode 100644
index 0000000000..2cdcac8775
--- /dev/null
+++ b/doc/classes/ProxyTexture.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="ProxyTexture" inherits="Texture" category="Core" version="3.0-beta">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <demos>
+ </demos>
+ <methods>
+ </methods>
+ <members>
+ <member name="base" type="Texture" setter="set_base" getter="get_base">
+ </member>
+ </members>
+ <constants>
+ </constants>
+</class>
diff --git a/doc/classes/QuadMesh.xml b/doc/classes/QuadMesh.xml
index 807141a284..78884d5492 100644
--- a/doc/classes/QuadMesh.xml
+++ b/doc/classes/QuadMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="QuadMesh" inherits="PrimitiveMesh" category="Core" version="3.0-alpha">
+<class name="QuadMesh" inherits="PrimitiveMesh" category="Core" version="3.0-beta">
<brief_description>
Class representing a square mesh.
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_size" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="set_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="size" type="Vector2" setter="set_size" getter="get_size">
diff --git a/doc/classes/Quat.xml b/doc/classes/Quat.xml
index 1aa30075e4..9fab28c6c8 100644
--- a/doc/classes/Quat.xml
+++ b/doc/classes/Quat.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Quat" category="Built-In Types" version="3.0-alpha">
+<class name="Quat" category="Built-In Types" version="3.0-beta">
<brief_description>
Quaternion.
</brief_description>
diff --git a/doc/classes/RID.xml b/doc/classes/RID.xml
index 831a4665c4..0796e654c1 100644
--- a/doc/classes/RID.xml
+++ b/doc/classes/RID.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RID" category="Built-In Types" version="3.0-alpha">
+<class name="RID" category="Built-In Types" version="3.0-beta">
<brief_description>
Handle for a [Resource]'s unique ID.
</brief_description>
diff --git a/doc/classes/Range.xml b/doc/classes/Range.xml
index d2ea59cbeb..d86ff57661 100644
--- a/doc/classes/Range.xml
+++ b/doc/classes/Range.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Range" inherits="Control" category="Core" version="3.0-alpha">
+<class name="Range" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Abstract base class for range-based controls.
</brief_description>
@@ -18,52 +18,6 @@
Return value mapped to 0 to 1 range.
</description>
</method>
- <method name="get_max" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the maximum value.
- </description>
- </method>
- <method name="get_min" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the minimum value.
- </description>
- </method>
- <method name="get_page" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the page size, if page is 0, paging is disabled.
- </description>
- </method>
- <method name="get_step" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the stepping, if step is 0, stepping is disabled.
- </description>
- </method>
- <method name="get_value" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="is_ratio_exp" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_using_rounded_values" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="set_as_ratio">
<return type="void">
</return>
@@ -73,65 +27,6 @@
Set value mapped to 0 to 1 (unit) range, it will then be converted to the actual value within min and max.
</description>
</method>
- <method name="set_exp_ratio">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_max">
- <return type="void">
- </return>
- <argument index="0" name="maximum" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_min">
- <return type="void">
- </return>
- <argument index="0" name="minimum" type="float">
- </argument>
- <description>
- Set minimum value, clamped range value to it if it's less.
- </description>
- </method>
- <method name="set_page">
- <return type="void">
- </return>
- <argument index="0" name="pagesize" type="float">
- </argument>
- <description>
- Set page size. Page is mainly used for scrollbars or anything that controls text scrolling.
- </description>
- </method>
- <method name="set_step">
- <return type="void">
- </return>
- <argument index="0" name="step" type="float">
- </argument>
- <description>
- Set step value. If step is 0, stepping will be disabled.
- </description>
- </method>
- <method name="set_use_rounded_values">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_value">
- <return type="void">
- </return>
- <argument index="0" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="share">
<return type="void">
</return>
diff --git a/doc/classes/RayCast.xml b/doc/classes/RayCast.xml
index d5f57c43c8..20e262b664 100644
--- a/doc/classes/RayCast.xml
+++ b/doc/classes/RayCast.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RayCast" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="RayCast" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Query the closest object intersecting a ray.
</brief_description>
@@ -47,13 +47,6 @@
Use this method to update the collision information immediately instead of waiting for the next [code]_physics_process[/code] call, for example if the ray or its parent has changed state. Note: [code]enabled == true[/code] is not required for this to work.
</description>
</method>
- <method name="get_cast_to" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Return the destination point of this ray object.
- </description>
- </method>
<method name="get_collider" qualifiers="const">
<return type="Object">
</return>
@@ -78,19 +71,13 @@
[/codeblock]
</description>
</method>
- <method name="get_collision_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the collision mask for this ray.
- </description>
- </method>
<method name="get_collision_mask_bit" qualifiers="const">
<return type="bool">
</return>
<argument index="0" name="bit" type="int">
</argument>
<description>
+ Returns [code]true[/code] if the bit index passed is turned on. Note that bit indexes range from 0-19.
</description>
</method>
<method name="get_collision_normal" qualifiers="const">
@@ -107,13 +94,6 @@
Returns the collision point at which the ray intersects the closest object. Note: this point is in the [b]global[/b] coordinate system.
</description>
</method>
- <method name="get_type_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the type mask (types of objects to detect) for this ray. The value is a sum (bitwise OR'd) of constants available for [PhysicsDirectSpaceState].
- </description>
- </method>
<method name="is_colliding" qualifiers="const">
<return type="bool">
</return>
@@ -121,13 +101,6 @@
Return whether the closest object the ray is pointing to is colliding with the vector (considering the vector length).
</description>
</method>
- <method name="is_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether the ray is enabled or not.
- </description>
- </method>
<method name="remove_exception">
<return type="void">
</return>
@@ -146,24 +119,6 @@
Removes a collision exception so the ray does report collisions with the specified [RID].
</description>
</method>
- <method name="set_cast_to">
- <return type="void">
- </return>
- <argument index="0" name="local_point" type="Vector3">
- </argument>
- <description>
- Sets the ray destination point, so that the ray will test from the ray's origin to [code]local_point[/code].
- </description>
- </method>
- <method name="set_collision_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- Set the mask to filter objects. Only objects in at least one collision layer enabled in the mask will be detected.
- </description>
- </method>
<method name="set_collision_mask_bit">
<return type="void">
</return>
@@ -172,24 +127,7 @@
<argument index="1" name="value" type="bool">
</argument>
<description>
- </description>
- </method>
- <method name="set_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Enables the RayCast2D. Only enabled raycasts will be able to query the space and report collisions.
- </description>
- </method>
- <method name="set_type_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- Set the types of objects to detect. For [code]mask[/code] use a logic sum (OR operation) of constants defined in [PhysicsDirectSpaceState], eg. [code]PhysicsDirectSpaceState.TYPE_MASK_STATIC_BODY | PhysicsDirectSpaceState.TYPE_MASK_KINEMATIC_BODY[/code] to detect only those two types.
+ Sets the bit index passed to the [code]value[/code] passed. Note that bit indexes range from 0-19.
</description>
</method>
</methods>
@@ -201,14 +139,10 @@
The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected.
</member>
<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled">
- If [code]true[/code], collisions will be reported. Default value: [code]false[/code].
+ If [code]true[/code] collisions will be reported. Default value: [code]false[/code].
</member>
- <member name="type_mask" type="int" setter="set_type_mask" getter="get_type_mask">
- Object types to detect using a logical sum (OR operation) of type constants defined in [Physics2DDirectSpaceState].
- Example:
- [codeblock]
- RayCast.type_mask = Physics2DDirectSpaceState.TYPE_MASK_STATIC_BODY | Physics2DDirectSpaceState.TYPE_MASK_KINEMATIC_BODY
- [/codeblock]
+ <member name="exclude_parent" type="bool" setter="set_exclude_parent_body" getter="get_exclude_parent_body">
+ If [code]true[/code] collisions will be ignored for this RayCast's immediate parent. Default value: [code]true[/code].
</member>
</members>
<constants>
diff --git a/doc/classes/RayCast2D.xml b/doc/classes/RayCast2D.xml
index f5828da796..4e93260549 100644
--- a/doc/classes/RayCast2D.xml
+++ b/doc/classes/RayCast2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RayCast2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="RayCast2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Query the closest object intersecting a ray.
</brief_description>
@@ -46,13 +46,6 @@
Updates the collision information for the ray. Use this method to update the collision information immediately instead of waiting for the next [code]_physics_process[/code] call, for example if the ray or its parent has changed state. Note: [code]enabled == true[/code] is not required for this to work.
</description>
</method>
- <method name="get_cast_to" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the destination point of this ray object.
- </description>
- </method>
<method name="get_collider" qualifiers="const">
<return type="Object">
</return>
@@ -77,13 +70,6 @@
[/codeblock]
</description>
</method>
- <method name="get_collision_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the collision mask for this ray.
- </description>
- </method>
<method name="get_collision_mask_bit" qualifiers="const">
<return type="bool">
</return>
@@ -106,20 +92,6 @@
Returns the collision point at which the ray intersects the closest object. Note: this point is in the [b]global[/b] coordinate system.
</description>
</method>
- <method name="get_exclude_parent_body" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether this ray should hit your parent node, if it's a body.
- </description>
- </method>
- <method name="get_type_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the type mask (types of objects to detect) for this ray. The value is a sum (bitwise OR'd) of constants available for [Physics2DDirectSpaceState].
- </description>
- </method>
<method name="is_colliding" qualifiers="const">
<return type="bool">
</return>
@@ -127,13 +99,6 @@
Return whether the closest object the ray is pointing to is colliding with the vector (considering the vector length).
</description>
</method>
- <method name="is_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether this raycast is enabled or not.
- </description>
- </method>
<method name="remove_exception">
<return type="void">
</return>
@@ -152,24 +117,6 @@
Removes a collision exception so the ray does report collisions with the specified [RID].
</description>
</method>
- <method name="set_cast_to">
- <return type="void">
- </return>
- <argument index="0" name="local_point" type="Vector2">
- </argument>
- <description>
- Sets the ray destination point, so that the ray will test from the ray's origin to [code]local_point[/code]
- </description>
- </method>
- <method name="set_collision_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- Set the mask to filter objects. Only objects in at least one collision layer enabled in the mask will be detected.
- </description>
- </method>
<method name="set_collision_mask_bit">
<return type="void">
</return>
@@ -180,33 +127,6 @@
<description>
</description>
</method>
- <method name="set_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Enables the RayCast2D. Only enabled raycasts will be able to query the space and report collisions.
- </description>
- </method>
- <method name="set_exclude_parent_body">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="bool">
- </argument>
- <description>
- Toggle whether this ray should hit your parent node, if it's a body.
- </description>
- </method>
- <method name="set_type_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- Set the types of objects to detect. For [code]mask[/code] use a logic sum (OR operation) of constants defined in [Physics2DDirectSpaceState], eg. [code]Physics2DDirectSpaceState.TYPE_MASK_STATIC_BODY | Physics2DDirectSpaceState.TYPE_MASK_KINEMATIC_BODY[/code] to detect only those two types.
- </description>
- </method>
</methods>
<members>
<member name="cast_to" type="Vector2" setter="set_cast_to" getter="get_cast_to">
@@ -221,13 +141,6 @@
<member name="exclude_parent" type="bool" setter="set_exclude_parent_body" getter="get_exclude_parent_body">
If [code]true[/code], the parent node will be excluded from collision detection. Default value: [code]true[/code].
</member>
- <member name="type_mask" type="int" setter="set_type_mask" getter="get_type_mask">
- Object types to detect using a logical sum (OR operation) of type constants defined in [Physics2DDirectSpaceState].
- Example:
- [codeblock]
- RayCast.type_mask = Physics2DDirectSpaceState.TYPE_MASK_STATIC_BODY | Physics2DDirectSpaceState.TYPE_MASK_KINEMATIC_BODY
- [/codeblock]
- </member>
</members>
<constants>
</constants>
diff --git a/doc/classes/RayShape.xml b/doc/classes/RayShape.xml
index d4826141e8..94129dbafe 100644
--- a/doc/classes/RayShape.xml
+++ b/doc/classes/RayShape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RayShape" inherits="Shape" category="Core" version="3.0-alpha">
+<class name="RayShape" inherits="Shape" category="Core" version="3.0-beta">
<brief_description>
Ray shape for 3D collisions.
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_length" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_length">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="length" type="float" setter="set_length" getter="get_length">
diff --git a/doc/classes/RayShape2D.xml b/doc/classes/RayShape2D.xml
index c9779a4307..748f5ea8b1 100644
--- a/doc/classes/RayShape2D.xml
+++ b/doc/classes/RayShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RayShape2D" inherits="Shape2D" category="Core" version="3.0-alpha">
+<class name="RayShape2D" inherits="Shape2D" category="Core" version="3.0-beta">
<brief_description>
Ray shape for 2D collisions.
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_length" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the length of the ray.
- </description>
- </method>
- <method name="set_length">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- Set the length of the ray.
- </description>
- </method>
</methods>
<members>
<member name="length" type="float" setter="set_length" getter="get_length">
diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml
index e0b8b6ec75..4fc9e5bd71 100644
--- a/doc/classes/Rect2.xml
+++ b/doc/classes/Rect2.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Rect2" category="Built-In Types" version="3.0-alpha">
+<class name="Rect2" category="Built-In Types" version="3.0-beta">
<brief_description>
2D Axis-aligned bounding box.
</brief_description>
@@ -37,6 +37,12 @@
Constructs a [code]Rect2[/code] by x, y, width, and height.
</description>
</method>
+ <method name="abs">
+ <return type="Rect2">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="clip">
<return type="Rect2">
</return>
diff --git a/doc/classes/RectangleShape2D.xml b/doc/classes/RectangleShape2D.xml
index b61344d86f..13994edddf 100644
--- a/doc/classes/RectangleShape2D.xml
+++ b/doc/classes/RectangleShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RectangleShape2D" inherits="Shape2D" category="Core" version="3.0-alpha">
+<class name="RectangleShape2D" inherits="Shape2D" category="Core" version="3.0-beta">
<brief_description>
Rectangle shape for 2D collisions.
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_extents" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the half extents, the actual width and height of this shape is twice the half extents.
- </description>
- </method>
- <method name="set_extents">
- <return type="void">
- </return>
- <argument index="0" name="extents" type="Vector2">
- </argument>
- <description>
- Set the half extents, the actual width and height of this shape is twice the half extents.
- </description>
- </method>
</methods>
<members>
<member name="extents" type="Vector2" setter="set_extents" getter="get_extents">
diff --git a/doc/classes/Reference.xml b/doc/classes/Reference.xml
index 18bd51f675..ec05b43bb0 100644
--- a/doc/classes/Reference.xml
+++ b/doc/classes/Reference.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Reference" inherits="Object" category="Core" version="3.0-alpha">
+<class name="Reference" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Base class for anything that keeps a reference count.
</brief_description>
diff --git a/doc/classes/ReferenceRect.xml b/doc/classes/ReferenceRect.xml
index 75b513a147..a0f56e078e 100644
--- a/doc/classes/ReferenceRect.xml
+++ b/doc/classes/ReferenceRect.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ReferenceRect" inherits="Control" category="Core" version="3.0-alpha">
+<class name="ReferenceRect" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Reference frame for GUI.
</brief_description>
diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml
index 1508323207..21bd087407 100644
--- a/doc/classes/ReflectionProbe.xml
+++ b/doc/classes/ReflectionProbe.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ReflectionProbe" inherits="VisualInstance" category="Core" version="3.0-alpha">
+<class name="ReflectionProbe" inherits="VisualInstance" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,174 +9,6 @@
<demos>
</demos>
<methods>
- <method name="are_shadows_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_cull_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_extents" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_intensity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_interior_ambient" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_interior_ambient_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_interior_ambient_probe_contribution" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_max_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_origin_offset" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_update_mode" qualifiers="const">
- <return type="int" enum="ReflectionProbe.UpdateMode">
- </return>
- <description>
- </description>
- </method>
- <method name="is_box_projection_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_set_as_interior" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_as_interior">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_cull_mask">
- <return type="void">
- </return>
- <argument index="0" name="layers" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_enable_box_projection">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_enable_shadows">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_extents">
- <return type="void">
- </return>
- <argument index="0" name="extents" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_intensity">
- <return type="void">
- </return>
- <argument index="0" name="intensity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_interior_ambient">
- <return type="void">
- </return>
- <argument index="0" name="ambient" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_interior_ambient_energy">
- <return type="void">
- </return>
- <argument index="0" name="ambient_energy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_interior_ambient_probe_contribution">
- <return type="void">
- </return>
- <argument index="0" name="ambient_probe_contribution" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_max_distance">
- <return type="void">
- </return>
- <argument index="0" name="max_distance" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_origin_offset">
- <return type="void">
- </return>
- <argument index="0" name="origin_offset" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_update_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="ReflectionProbe.UpdateMode">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="box_projection" type="bool" setter="set_enable_box_projection" getter="is_box_projection_enabled">
@@ -205,9 +37,9 @@
</member>
</members>
<constants>
- <constant name="UPDATE_ONCE" value="0">
+ <constant name="UPDATE_ONCE" value="0" enum="UpdateMode">
</constant>
- <constant name="UPDATE_ALWAYS" value="1">
+ <constant name="UPDATE_ALWAYS" value="1" enum="UpdateMode">
</constant>
</constants>
</class>
diff --git a/doc/classes/RemoteTransform.xml b/doc/classes/RemoteTransform.xml
index 76caea1a94..c5643409ce 100644
--- a/doc/classes/RemoteTransform.xml
+++ b/doc/classes/RemoteTransform.xml
@@ -1,100 +1,30 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RemoteTransform" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="RemoteTransform" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
- RemoteTransform mirrors the [Transform] of another [Spatial] derived Node in the scene.
+ RemoteTransform leads the [Transform] of another [Spatial] derived Node in the scene.
</brief_description>
<description>
- RemoteTransform mirrors the [Transform] of another [Spatial] derived Node (called the remote node) in the scene.
- It can be set to track another Node's position, rotation and/or scale and update its own accordingly, using either global or local coordinates.
+ RemoteTransform leads the [Transform] of another [Spatial] derived Node (called the remote node) in the scene.
+ It can be set to track another Node's position, rotation and/or scale. It can update using either global or local coordinates.
</description>
<tutorials>
</tutorials>
<demos>
</demos>
<methods>
- <method name="get_remote_node" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_update_position" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_update_rotation" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_update_scale" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_use_global_coordinates" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_remote_node">
- <return type="void">
- </return>
- <argument index="0" name="path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_update_position">
- <return type="void">
- </return>
- <argument index="0" name="update_remote_position" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_update_rotation">
- <return type="void">
- </return>
- <argument index="0" name="update_remote_rotation" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_update_scale">
- <return type="void">
- </return>
- <argument index="0" name="update_remote_scale" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_use_global_coordinates">
- <return type="void">
- </return>
- <argument index="0" name="use_global_coordinates" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="remote_path" type="NodePath" setter="set_remote_node" getter="get_remote_node">
- The remote node's [NodePath].
+ The [NodePath] to the remote node, relative to the RemoteTransform's position in the scene.
</member>
<member name="update_position" type="bool" setter="set_update_position" getter="get_update_position">
- If [code]true[/code] the remote node's position is mirrored.
+ If [code]true[/code] the remote node's position is tracked. Default value: [code]true[/code].
</member>
<member name="update_rotation" type="bool" setter="set_update_rotation" getter="get_update_rotation">
- If [code]true[/code] the remote node's rotation is mirrored.
+ If [code]true[/code] the remote node's rotation is tracked. Default value: [code]true[/code].
</member>
<member name="update_scale" type="bool" setter="set_update_scale" getter="get_update_scale">
- If [code]true[/code] the remote node's scale is mirrored.
+ If [code]true[/code] the remote node's scale is tracked. Default value: [code]true[/code].
</member>
<member name="use_global_coordinates" type="bool" setter="set_use_global_coordinates" getter="get_use_global_coordinates">
If [code]true[/code] global coordinates are used. If [code]false[/code] local coordinates are used. Default value: [code]true[/code].
diff --git a/doc/classes/RemoteTransform2D.xml b/doc/classes/RemoteTransform2D.xml
index d6dcde5742..77308209ea 100644
--- a/doc/classes/RemoteTransform2D.xml
+++ b/doc/classes/RemoteTransform2D.xml
@@ -1,100 +1,30 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RemoteTransform2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="RemoteTransform2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
- RemoteTransform2D mirrors the [Transform2D] of another [CanvasItem] derived Node in the scene.
+ RemoteTransform2D leads the [Transform2D] of another [CanvasItem] derived Node in the scene.
</brief_description>
<description>
- RemoteTransform2D mirrors the [Transform2D] of another [CanvasItem] derived Node (called the remote node) in the scene.
- It can be set to track another Node's position, rotation and/or and update its own accordingly, using either global or local coordinates.
+ RemoteTransform2D leads the [Transform2D] of another [CanvasItem] derived Node (called the remote node) in the scene.
+ It can be set to track another Node's position, rotation and/or scale. It can update using either global or local coordinates.
</description>
<tutorials>
</tutorials>
<demos>
</demos>
<methods>
- <method name="get_remote_node" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_update_position" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_update_rotation" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_update_scale" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_use_global_coordinates" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_remote_node">
- <return type="void">
- </return>
- <argument index="0" name="path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_update_position">
- <return type="void">
- </return>
- <argument index="0" name="update_remote_position" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_update_rotation">
- <return type="void">
- </return>
- <argument index="0" name="update_remote_rotation" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_update_scale">
- <return type="void">
- </return>
- <argument index="0" name="update_remote_scale" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_use_global_coordinates">
- <return type="void">
- </return>
- <argument index="0" name="use_global_coordinates" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="remote_path" type="NodePath" setter="set_remote_node" getter="get_remote_node">
- The remote node's [NodePath].
+ The [NodePath] to the remote node, relative to the RemoteTransform2D's position in the scene.
</member>
<member name="update_position" type="bool" setter="set_update_position" getter="get_update_position">
- If [code]true[/code] the remote node's position is mirrored.
+ If [code]true[/code] the remote node's position is tracked. Default value: [code]true[/code].
</member>
<member name="update_rotation" type="bool" setter="set_update_rotation" getter="get_update_rotation">
- If [code]true[/code] the remote node's rotation is mirrored.
+ If [code]true[/code] the remote node's rotation is tracked. Default value: [code]true[/code].
</member>
<member name="update_scale" type="bool" setter="set_update_scale" getter="get_update_scale">
- If [code]true[/code] the remote node's scale is mirrored.
+ If [code]true[/code] the remote node's scale is tracked. Default value: [code]true[/code].
</member>
<member name="use_global_coordinates" type="bool" setter="set_use_global_coordinates" getter="get_use_global_coordinates">
If [code]true[/code] global coordinates are used. If [code]false[/code] local coordinates are used. Default value: [code]true[/code].
diff --git a/doc/classes/Resource.xml b/doc/classes/Resource.xml
index 0044756003..713fcab573 100644
--- a/doc/classes/Resource.xml
+++ b/doc/classes/Resource.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Resource" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Resource" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Base class for all resources.
</brief_description>
@@ -31,20 +31,6 @@
<description>
</description>
</method>
- <method name="get_name" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the name of the resources, any name is valid (it doesn't have to be unique). Name is for descriptive purposes only.
- </description>
- </method>
- <method name="get_path" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the path of the resource. This is useful mainly for editors when saving/loading, and shouldn't be changed by anything else.
- </description>
- </method>
<method name="get_rid" qualifiers="const">
<return type="RID">
</return>
@@ -52,38 +38,6 @@
Return the RID of the resource (or an empty RID). Many resources (such as [Texture], [Mesh], etc) are high level abstractions of resources stored in a server, so this function will return the original RID.
</description>
</method>
- <method name="is_local_to_scene" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_local_to_scene">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_name">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- Set the name of the resources, any name is valid (it doesn't have to be unique). Name is for descriptive purposes only.
- </description>
- </method>
- <method name="set_path">
- <return type="void">
- </return>
- <argument index="0" name="path" type="String">
- </argument>
- <description>
- Set the path of the resource. This is useful mainly for editors when saving/loading, and shouldn't be changed by anything else. Fails if another [code]Resource[/code] already has path "path".
- </description>
- </method>
<method name="setup_local_to_scene">
<return type="void">
</return>
diff --git a/doc/classes/ResourceImporter.xml b/doc/classes/ResourceImporter.xml
index b627438c89..5474f09a7c 100644
--- a/doc/classes/ResourceImporter.xml
+++ b/doc/classes/ResourceImporter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ResourceImporter" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="ResourceImporter" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/ResourceInteractiveLoader.xml b/doc/classes/ResourceInteractiveLoader.xml
index 866347c0bb..13d701f3c6 100644
--- a/doc/classes/ResourceInteractiveLoader.xml
+++ b/doc/classes/ResourceInteractiveLoader.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ResourceInteractiveLoader" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="ResourceInteractiveLoader" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Interactive Resource Loader.
</brief_description>
diff --git a/doc/classes/ResourceLoader.xml b/doc/classes/ResourceLoader.xml
index 5940031a76..8d1ab1cd80 100644
--- a/doc/classes/ResourceLoader.xml
+++ b/doc/classes/ResourceLoader.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ResourceLoader" inherits="Object" category="Core" version="3.0-alpha">
+<class name="ResourceLoader" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Resource Loader.
</brief_description>
diff --git a/doc/classes/ResourcePreloader.xml b/doc/classes/ResourcePreloader.xml
index f4c3334107..c749529a19 100644
--- a/doc/classes/ResourcePreloader.xml
+++ b/doc/classes/ResourcePreloader.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ResourcePreloader" inherits="Node" category="Core" version="3.0-alpha">
+<class name="ResourcePreloader" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Resource Preloader Node.
</brief_description>
@@ -67,10 +67,6 @@
</description>
</method>
</methods>
- <members>
- <member name="resources" type="Array" setter="_set_resources" getter="_get_resources">
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/doc/classes/ResourceSaver.xml b/doc/classes/ResourceSaver.xml
index af9c592ded..c1a5921071 100644
--- a/doc/classes/ResourceSaver.xml
+++ b/doc/classes/ResourceSaver.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ResourceSaver" inherits="Object" category="Core" version="3.0-alpha">
+<class name="ResourceSaver" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Resource Saving Interface.
</brief_description>
@@ -35,17 +35,17 @@
</method>
</methods>
<constants>
- <constant name="FLAG_RELATIVE_PATHS" value="1">
+ <constant name="FLAG_RELATIVE_PATHS" value="1" enum="SaverFlags">
</constant>
- <constant name="FLAG_BUNDLE_RESOURCES" value="2">
+ <constant name="FLAG_BUNDLE_RESOURCES" value="2" enum="SaverFlags">
</constant>
- <constant name="FLAG_CHANGE_PATH" value="4">
+ <constant name="FLAG_CHANGE_PATH" value="4" enum="SaverFlags">
</constant>
- <constant name="FLAG_OMIT_EDITOR_PROPERTIES" value="8">
+ <constant name="FLAG_OMIT_EDITOR_PROPERTIES" value="8" enum="SaverFlags">
</constant>
- <constant name="FLAG_SAVE_BIG_ENDIAN" value="16">
+ <constant name="FLAG_SAVE_BIG_ENDIAN" value="16" enum="SaverFlags">
</constant>
- <constant name="FLAG_COMPRESS" value="32">
+ <constant name="FLAG_COMPRESS" value="32" enum="SaverFlags">
</constant>
</constants>
</class>
diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml
index 18e77ff5e3..5c04d3406e 100644
--- a/doc/classes/RichTextLabel.xml
+++ b/doc/classes/RichTextLabel.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RichTextLabel" inherits="Control" category="Core" version="3.0-alpha">
+<class name="RichTextLabel" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Label that displays rich text.
</brief_description>
@@ -46,13 +46,6 @@
Clears the tag stack and sets [member bbcode_text] to an empty string.
</description>
</method>
- <method name="get_bbcode" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Returns the bbcode-parsed [member bbcode_text].
- </description>
- </method>
<method name="get_line_count" qualifiers="const">
<return type="int">
</return>
@@ -60,13 +53,6 @@
Returns the total number of newlines in the tag stack's text tags. Considers wrapped text as one line.
</description>
</method>
- <method name="get_percent_visible" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the text's visibility as a floating point value between 0.0 and 1.0.
- </description>
- </method>
<method name="get_tab_size" qualifiers="const">
<return type="int">
</return>
@@ -95,12 +81,6 @@
Returns the vertical scrollbar.
</description>
</method>
- <method name="get_visible_characters" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
<method name="get_visible_line_count" qualifiers="const">
<return type="int">
</return>
@@ -115,12 +95,6 @@
Returns [code]true[/code] if the label underlines meta tags such as [url]{text}[/url].
</description>
</method>
- <method name="is_overriding_selected_font_color" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="is_scroll_active" qualifiers="const">
<return type="bool">
</return>
@@ -142,12 +116,6 @@
Returns [code]true[/code] if the label allows text selection.
</description>
</method>
- <method name="is_using_bbcode" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="newline">
<return type="void">
</return>
@@ -266,15 +234,6 @@
Scrolls the window's top line to match [code]line[/code].
</description>
</method>
- <method name="set_bbcode">
- <return type="void">
- </return>
- <argument index="0" name="text" type="String">
- </argument>
- <description>
- Sets the BBCode text to the label.
- </description>
- </method>
<method name="set_meta_underline">
<return type="void">
</return>
@@ -284,23 +243,6 @@
If [code]true[/code] will underline meta tags such as the [url] bbcode. Default value: [code]true[/code].
</description>
</method>
- <method name="set_override_selected_font_color">
- <return type="void">
- </return>
- <argument index="0" name="override" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_percent_visible">
- <return type="void">
- </return>
- <argument index="0" name="percent_visible" type="float">
- </argument>
- <description>
- Sets the text's visibility. Takes a floating point value between 0.0 and 1.0.
- </description>
- </method>
<method name="set_scroll_active">
<return type="void">
</return>
@@ -361,22 +303,6 @@
Clears the tag stack and adds a raw text tag to the top of it. Does not parse bbcodes. Does not modify [member bbcode_text].
</description>
</method>
- <method name="set_use_bbcode">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_visible_characters">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="bbcode_enabled" type="bool" setter="set_use_bbcode" getter="is_using_bbcode">
@@ -403,59 +329,59 @@
Triggered when the user clicks on content between [url] tags. If the meta is defined in text, e.g. [code][url={"data"="hi"}]hi[/url][/code], then the parameter for this signal will be a [String] type. If a particular type or an object is desired, the [method push_meta] method must be used to manually insert the data into the tag stack.
</description>
</signal>
- <signal name="meta_hover_started">
+ <signal name="meta_hover_ended">
<argument index="0" name="meta" type="Nil">
</argument>
<description>
- Triggers when the mouse enters a meta tag.
+ Triggers when the mouse exits a meta tag.
</description>
</signal>
- <signal name="meta_hover_ended">
+ <signal name="meta_hover_started">
<argument index="0" name="meta" type="Nil">
</argument>
<description>
- Triggers when the mouse exits a meta tag.
+ Triggers when the mouse enters a meta tag.
</description>
</signal>
</signals>
<constants>
- <constant name="ALIGN_LEFT" value="0">
+ <constant name="ALIGN_LEFT" value="0" enum="Align">
</constant>
- <constant name="ALIGN_CENTER" value="1">
+ <constant name="ALIGN_CENTER" value="1" enum="Align">
</constant>
- <constant name="ALIGN_RIGHT" value="2">
+ <constant name="ALIGN_RIGHT" value="2" enum="Align">
</constant>
- <constant name="ALIGN_FILL" value="3">
+ <constant name="ALIGN_FILL" value="3" enum="Align">
</constant>
- <constant name="LIST_NUMBERS" value="0">
+ <constant name="LIST_NUMBERS" value="0" enum="ListType">
</constant>
- <constant name="LIST_LETTERS" value="1">
+ <constant name="LIST_LETTERS" value="1" enum="ListType">
</constant>
- <constant name="LIST_DOTS" value="2">
+ <constant name="LIST_DOTS" value="2" enum="ListType">
</constant>
- <constant name="ITEM_FRAME" value="0">
+ <constant name="ITEM_FRAME" value="0" enum="ItemType">
</constant>
- <constant name="ITEM_TEXT" value="1">
+ <constant name="ITEM_TEXT" value="1" enum="ItemType">
</constant>
- <constant name="ITEM_IMAGE" value="2">
+ <constant name="ITEM_IMAGE" value="2" enum="ItemType">
</constant>
- <constant name="ITEM_NEWLINE" value="3">
+ <constant name="ITEM_NEWLINE" value="3" enum="ItemType">
</constant>
- <constant name="ITEM_FONT" value="4">
+ <constant name="ITEM_FONT" value="4" enum="ItemType">
</constant>
- <constant name="ITEM_COLOR" value="5">
+ <constant name="ITEM_COLOR" value="5" enum="ItemType">
</constant>
- <constant name="ITEM_UNDERLINE" value="6">
+ <constant name="ITEM_UNDERLINE" value="6" enum="ItemType">
</constant>
- <constant name="ITEM_ALIGN" value="7">
+ <constant name="ITEM_ALIGN" value="7" enum="ItemType">
</constant>
- <constant name="ITEM_INDENT" value="8">
+ <constant name="ITEM_INDENT" value="8" enum="ItemType">
</constant>
- <constant name="ITEM_LIST" value="9">
+ <constant name="ITEM_LIST" value="9" enum="ItemType">
</constant>
- <constant name="ITEM_TABLE" value="10">
+ <constant name="ITEM_TABLE" value="10" enum="ItemType">
</constant>
- <constant name="ITEM_META" value="11">
+ <constant name="ITEM_META" value="11" enum="ItemType">
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/RigidBody.xml b/doc/classes/RigidBody.xml
index d40f7b4429..77e27cefcc 100644
--- a/doc/classes/RigidBody.xml
+++ b/doc/classes/RigidBody.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RigidBody" inherits="PhysicsBody" category="Core" version="3.0-alpha">
+<class name="RigidBody" inherits="PhysicsBody" category="Core" version="3.0-beta">
<brief_description>
Physics Body whose position is determined through physics simulation in 3D space.
</brief_description>
@@ -35,34 +35,6 @@
Apply a positioned impulse (which will be affected by the body mass and shape). This is the equivalent of hitting a billiard ball with a cue: a force that is applied once, and only once. Both the impulse and the offset from the body origin are in global coordinates.
</description>
</method>
- <method name="get_angular_damp" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the current body angular damp. Default is -1.
- </description>
- </method>
- <method name="get_angular_velocity" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Return the current body angular velocity.
- </description>
- </method>
- <method name="get_axis_lock" qualifiers="const">
- <return type="int" enum="RigidBody.AxisLock">
- </return>
- <description>
- Return the current axis lock of the body. One of AXIS_LOCK_* enum.
- </description>
- </method>
- <method name="get_bounce" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the current body bounciness.
- </description>
- </method>
<method name="get_colliding_bodies" qualifiers="const">
<return type="Array">
</return>
@@ -70,124 +42,6 @@
Return a list of the bodies colliding with this one. By default, number of max contacts reported is at 0 , see [method set_max_contacts_reported] to increase it.
</description>
</method>
- <method name="get_friction" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the current body friction, from 0 (frictionless) to 1 (max friction).
- </description>
- </method>
- <method name="get_gravity_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the current body gravity scale.
- </description>
- </method>
- <method name="get_linear_damp" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the current body linear damp. Default is -1.
- </description>
- </method>
- <method name="get_linear_velocity" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Return the current body linear velocity.
- </description>
- </method>
- <method name="get_mass" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the current body mass.
- </description>
- </method>
- <method name="get_max_contacts_reported" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the maximum contacts that can be reported. See [method set_max_contacts_reported].
- </description>
- </method>
- <method name="get_mode" qualifiers="const">
- <return type="int" enum="RigidBody.Mode">
- </return>
- <description>
- Return the current body mode, see [method set_mode].
- </description>
- </method>
- <method name="get_weight" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the current body weight, given standard earth-weight (gravity 9.8).
- </description>
- </method>
- <method name="is_able_to_sleep" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether the body has the ability to fall asleep when not moving. See [method set_can_sleep].
- </description>
- </method>
- <method name="is_contact_monitor_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether contact monitoring is enabled.
- </description>
- </method>
- <method name="is_sleeping" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether the body is sleeping.
- </description>
- </method>
- <method name="is_using_continuous_collision_detection" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether this body is using continuous collision detection.
- </description>
- </method>
- <method name="is_using_custom_integrator">
- <return type="bool">
- </return>
- <description>
- Return whether the body is using a custom integrator.
- </description>
- </method>
- <method name="set_angular_damp">
- <return type="void">
- </return>
- <argument index="0" name="angular_damp" type="float">
- </argument>
- <description>
- Set the angular damp for this body. Default of -1, cannot be less than -1. If this value is different from -1, any angular damp derived from the world or areas will be overridden.
- </description>
- </method>
- <method name="set_angular_velocity">
- <return type="void">
- </return>
- <argument index="0" name="angular_velocity" type="Vector3">
- </argument>
- <description>
- Set the body angular velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may be running in another thread and definitely runs at a different granularity. Use [method _integrate_forces] as your process loop if you want to have precise control of the body state.
- </description>
- </method>
- <method name="set_axis_lock">
- <return type="void">
- </return>
- <argument index="0" name="axis_lock" type="int" enum="RigidBody.AxisLock">
- </argument>
- <description>
- Set the axis lock of the body, from the AXIS_LOCK_* enum. Axis lock stops the body from moving along the specified axis(X/Y/Z) and rotating along the other two axes.
- </description>
- </method>
<method name="set_axis_velocity">
<return type="void">
</return>
@@ -197,134 +51,6 @@
Set an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior.
</description>
</method>
- <method name="set_bounce">
- <return type="void">
- </return>
- <argument index="0" name="bounce" type="float">
- </argument>
- <description>
- Set the body bounciness, from 0 (no bounciness) to 1 (max bounciness).
- </description>
- </method>
- <method name="set_can_sleep">
- <return type="void">
- </return>
- <argument index="0" name="able_to_sleep" type="bool">
- </argument>
- <description>
- Set the body ability to fall asleep when not moving. This saves an enormous amount of processor time when there are plenty of rigid bodies (non static) in a scene.
- Sleeping bodies are not affected by forces until a collision or an [method apply_impulse] / [method set_applied_force] wakes them up. Until then, they behave like a static body.
- </description>
- </method>
- <method name="set_contact_monitor">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Enable contact monitoring. This allows the body to emit signals when it collides with another.
- </description>
- </method>
- <method name="set_friction">
- <return type="void">
- </return>
- <argument index="0" name="friction" type="float">
- </argument>
- <description>
- Set the body friction, from 0 (frictionless) to 1 (max friction).
- </description>
- </method>
- <method name="set_gravity_scale">
- <return type="void">
- </return>
- <argument index="0" name="gravity_scale" type="float">
- </argument>
- <description>
- Set the gravity factor. This factor multiplies gravity intensity just for this body.
- </description>
- </method>
- <method name="set_linear_damp">
- <return type="void">
- </return>
- <argument index="0" name="linear_damp" type="float">
- </argument>
- <description>
- Set the linear damp for this body. Default of -1, cannot be less than -1. If this value is different from -1, any linear damp derived from the world or areas will be overridden.
- </description>
- </method>
- <method name="set_linear_velocity">
- <return type="void">
- </return>
- <argument index="0" name="linear_velocity" type="Vector3">
- </argument>
- <description>
- Set the body linear velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may be running in another thread and definitely runs at a different granularity. Use [method _integrate_forces] as your process loop if you want to have precise control of the body state.
- </description>
- </method>
- <method name="set_mass">
- <return type="void">
- </return>
- <argument index="0" name="mass" type="float">
- </argument>
- <description>
- Set the body mass.
- </description>
- </method>
- <method name="set_max_contacts_reported">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- Set the maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0.
- </description>
- </method>
- <method name="set_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="RigidBody.Mode">
- </argument>
- <description>
- Set the body mode, from the MODE_* enum. This allows to change to a static body or a character body.
- </description>
- </method>
- <method name="set_sleeping">
- <return type="void">
- </return>
- <argument index="0" name="sleeping" type="bool">
- </argument>
- <description>
- Set whether a body is sleeping or not. Sleeping bodies are not affected by forces until a collision or an [method apply_impulse] wakes them up. Until then, they behave like a static body.
- </description>
- </method>
- <method name="set_use_continuous_collision_detection">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set the continuous collision detection mode from the enum CCD_MODE_*.
- Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. The first is more precise, and misses less impacts by small, fast-moving objects. The second is faster to compute, but can miss small, fast-moving objects.
- </description>
- </method>
- <method name="set_use_custom_integrator">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Pass true to disable the internal force integration (like gravity or air friction) for this body. Other than collision response, the body will only move as determined by the [method _integrate_forces] function, if defined.
- </description>
- </method>
- <method name="set_weight">
- <return type="void">
- </return>
- <argument index="0" name="weight" type="float">
- </argument>
- <description>
- Set the body weight given standard earth-weight (gravity 9.8).
- </description>
- </method>
</methods>
<members>
<member name="angular_damp" type="float" setter="set_angular_damp" getter="get_angular_damp">
@@ -333,8 +59,11 @@
<member name="angular_velocity" type="Vector3" setter="set_angular_velocity" getter="get_angular_velocity">
RigidBody's rotational velocity.
</member>
- <member name="axis_lock" type="int" setter="set_axis_lock" getter="get_axis_lock" enum="RigidBody.AxisLock">
- Locks the rotational forces to a particular axis, preventing rotations on other axes.
+ <member name="axis_lock_x" type="bool" setter="set_axis_lock_x" getter="get_axis_lock_x">
+ </member>
+ <member name="axis_lock_y" type="bool" setter="set_axis_lock_y" getter="get_axis_lock_y">
+ </member>
+ <member name="axis_lock_z" type="bool" setter="set_axis_lock_z" getter="get_axis_lock_z">
</member>
<member name="bounce" type="float" setter="set_bounce" getter="get_bounce">
RigidBody's bounciness.
@@ -430,25 +159,17 @@
</signal>
</signals>
<constants>
- <constant name="MODE_RIGID" value="0">
+ <constant name="MODE_RIGID" value="0" enum="Mode">
Rigid body. This is the "natural" state of a rigid body. It is affected by forces, and can move, rotate, and be affected by user code.
</constant>
- <constant name="MODE_STATIC" value="1">
+ <constant name="MODE_STATIC" value="1" enum="Mode">
Static mode. The body behaves like a [StaticBody], and can only move by user code.
</constant>
- <constant name="MODE_CHARACTER" value="2">
+ <constant name="MODE_CHARACTER" value="2" enum="Mode">
Character body. This behaves like a rigid body, but can not rotate.
</constant>
- <constant name="MODE_KINEMATIC" value="3">
+ <constant name="MODE_KINEMATIC" value="3" enum="Mode">
Kinematic body. The body behaves like a [KinematicBody], and can only move by user code.
</constant>
- <constant name="AXIS_LOCK_DISABLED" value="0">
- </constant>
- <constant name="AXIS_LOCK_X" value="1">
- </constant>
- <constant name="AXIS_LOCK_Y" value="2">
- </constant>
- <constant name="AXIS_LOCK_Z" value="3">
- </constant>
</constants>
</class>
diff --git a/doc/classes/RigidBody2D.xml b/doc/classes/RigidBody2D.xml
index af8e59c83b..c11e118df5 100644
--- a/doc/classes/RigidBody2D.xml
+++ b/doc/classes/RigidBody2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RigidBody2D" inherits="PhysicsBody2D" category="Core" version="3.0-alpha">
+<class name="RigidBody2D" inherits="PhysicsBody2D" category="Core" version="3.0-beta">
<brief_description>
A body that is controlled by the 2D physics engine.
</brief_description>
@@ -49,20 +49,6 @@
Applies a positioned impulse to the body (which will be affected by the body mass and shape). This is the equivalent of hitting a billiard ball with a cue: a force that is applied instantaneously. Both the impulse and the offset from the body origin are in global coordinates.
</description>
</method>
- <method name="get_angular_damp" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the angular damp for this body.
- </description>
- </method>
- <method name="get_angular_velocity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body angular velocity. This changes by physics granularity. See [method set_angular_velocity].
- </description>
- </method>
<method name="get_applied_force" qualifiers="const">
<return type="Vector2">
</return>
@@ -77,13 +63,6 @@
Returns the body's total applied torque.
</description>
</method>
- <method name="get_bounce" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body bounciness.
- </description>
- </method>
<method name="get_colliding_bodies" qualifiers="const">
<return type="Array">
</return>
@@ -91,27 +70,6 @@
Returns a list of the bodies colliding with this one. Use [member contacts_reported] to set the maximum number reported. You must also set [member contact_monitor] to [code]true[/code].
</description>
</method>
- <method name="get_continuous_collision_detection_mode" qualifiers="const">
- <return type="int" enum="RigidBody2D.CCDMode">
- </return>
- <description>
- Return whether this body is using continuous collision detection.
- </description>
- </method>
- <method name="get_friction" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body friction.
- </description>
- </method>
- <method name="get_gravity_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the gravity factor.
- </description>
- </method>
<method name="get_inertia" qualifiers="const">
<return type="float">
</return>
@@ -119,94 +77,6 @@
Returns the body's moment of inertia, which is computed automatically from the body's mass and assigned [Shape2D]s during the physics frame. Note that it will not yet have a value in the [code]_ready()[/code] function.
</description>
</method>
- <method name="get_linear_damp" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the linear damp for this body.
- </description>
- </method>
- <method name="get_linear_velocity" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Returns the body's linear velocity. This changes when a physics frame has passed, not during a normal update. See [method set_linear_velocity].
- </description>
- </method>
- <method name="get_mass" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body mass.
- </description>
- </method>
- <method name="get_max_contacts_reported" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the maximum contacts that can be reported. See [method set_max_contacts_reported].
- </description>
- </method>
- <method name="get_mode" qualifiers="const">
- <return type="int" enum="RigidBody2D.Mode">
- </return>
- <description>
- Return the current body mode, see [method set_mode].
- </description>
- </method>
- <method name="get_weight" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body weight given standard earth-weight (gravity 9.8).
- </description>
- </method>
- <method name="is_able_to_sleep" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the body has the ability to fall asleep when not moving. See [method set_can_sleep].
- </description>
- </method>
- <method name="is_contact_monitor_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether contact monitoring is enabled.
- </description>
- </method>
- <method name="is_sleeping" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether the body is sleeping.
- </description>
- </method>
- <method name="is_using_custom_integrator">
- <return type="bool">
- </return>
- <description>
- Return true if the body is not doing any built-in force integration.
- </description>
- </method>
- <method name="set_angular_damp">
- <return type="void">
- </return>
- <argument index="0" name="angular_damp" type="float">
- </argument>
- <description>
- Set the angular damp for this body. If this value is different from -1, any angular damp derived from the world or areas will be overridden.
- </description>
- </method>
- <method name="set_angular_velocity">
- <return type="void">
- </return>
- <argument index="0" name="angular_velocity" type="float">
- </argument>
- <description>
- Set the body angular velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may be running in another thread and definitely runs at a different granularity. Use [method _integrate_forces] as your process loop if you want to have precise control of the body state.
- </description>
- </method>
<method name="set_applied_force">
<return type="void">
</return>
@@ -234,62 +104,6 @@
Sets the body's velocity on the given axis. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior.
</description>
</method>
- <method name="set_bounce">
- <return type="void">
- </return>
- <argument index="0" name="bounce" type="float">
- </argument>
- <description>
- Set the body bounciness, from 0 (no bounce) to 1 (full bounce).
- </description>
- </method>
- <method name="set_can_sleep">
- <return type="void">
- </return>
- <argument index="0" name="able_to_sleep" type="bool">
- </argument>
- <description>
- Set the body ability to fall asleep when not moving. This saves an enormous amount of processor time when there are plenty of rigid bodies (non static) in a scene.
- Sleeping bodies are not affected by forces until a collision or an [method apply_impulse] / [method set_applied_force] wakes them up. Until then, they behave like a static body.
- </description>
- </method>
- <method name="set_contact_monitor">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Enable contact monitoring. This allows the body to emit signals when it collides with another.
- </description>
- </method>
- <method name="set_continuous_collision_detection_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="RigidBody2D.CCDMode">
- </argument>
- <description>
- Set the continuous collision detection mode from the enum CCD_MODE_*.
- Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. The first is more precise, and misses less impacts by small, fast-moving objects. The second is faster to compute, but can miss small, fast-moving objects.
- </description>
- </method>
- <method name="set_friction">
- <return type="void">
- </return>
- <argument index="0" name="friction" type="float">
- </argument>
- <description>
- Set the body friction, from 0 (frictionless) to 1 (full friction).
- </description>
- </method>
- <method name="set_gravity_scale">
- <return type="void">
- </return>
- <argument index="0" name="gravity_scale" type="float">
- </argument>
- <description>
- Set the gravity factor. This factor multiplies gravity intensity just for this body.
- </description>
- </method>
<method name="set_inertia">
<return type="void">
</return>
@@ -299,78 +113,6 @@
Set the body's moment of inertia. This is like mass, but for rotation: it determines how much torque it takes to rotate the body. The moment of inertia is usually computed automatically from the mass and the shapes, but this function allows you to set a custom value. Set 0 (or negative) inertia to return to automatically computing it.
</description>
</method>
- <method name="set_linear_damp">
- <return type="void">
- </return>
- <argument index="0" name="linear_damp" type="float">
- </argument>
- <description>
- Set the linear damp for this body. If this value is different from -1, any linear damp derived from the world or areas will be overridden.
- </description>
- </method>
- <method name="set_linear_velocity">
- <return type="void">
- </return>
- <argument index="0" name="linear_velocity" type="Vector2">
- </argument>
- <description>
- Set the body linear velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may be running in another thread and definitely runs at a different granularity. Use [method _integrate_forces] as your process loop if you want to have precise control of the body state.
- </description>
- </method>
- <method name="set_mass">
- <return type="void">
- </return>
- <argument index="0" name="mass" type="float">
- </argument>
- <description>
- Set the body mass.
- </description>
- </method>
- <method name="set_max_contacts_reported">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- Set the maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0.
- </description>
- </method>
- <method name="set_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="RigidBody2D.Mode">
- </argument>
- <description>
- Set the body mode, from the MODE_* enum. This allows to change to a static body or a character body.
- </description>
- </method>
- <method name="set_sleeping">
- <return type="void">
- </return>
- <argument index="0" name="sleeping" type="bool">
- </argument>
- <description>
- Set whether a body is sleeping or not. Sleeping bodies are not affected by forces until a collision or an [method apply_impulse] / [method set_applied_force] wakes them up. Until then, they behave like a static body.
- </description>
- </method>
- <method name="set_use_custom_integrator">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Pass true to disable the internal force integration (like gravity or air friction) for this body. Other than collision response, the body will only move as determined by the [method _integrate_forces] function, if defined.
- </description>
- </method>
- <method name="set_weight">
- <return type="void">
- </return>
- <argument index="0" name="weight" type="float">
- </argument>
- <description>
- Set the body weight given standard earth-weight (gravity 9.8). Not really useful for 2D since most measures for this node are in pixels.
- </description>
- </method>
<method name="test_motion">
<return type="bool">
</return>
@@ -484,25 +226,25 @@
</signal>
</signals>
<constants>
- <constant name="MODE_RIGID" value="0">
+ <constant name="MODE_RIGID" value="0" enum="Mode">
Rigid mode. The body behaves as a physical object. It collides with other bodies and responds to forces applied to it. This is the default mode.
</constant>
- <constant name="MODE_STATIC" value="1">
+ <constant name="MODE_STATIC" value="1" enum="Mode">
Static mode. The body behaves like a [StaticBody2D] and does not move.
</constant>
- <constant name="MODE_CHARACTER" value="2">
+ <constant name="MODE_CHARACTER" value="2" enum="Mode">
Character mode. Similar to [code]MODE_RIGID[/code], but the body can not rotate.
</constant>
- <constant name="MODE_KINEMATIC" value="3">
+ <constant name="MODE_KINEMATIC" value="3" enum="Mode">
Kinematic mode. The body behaves like a [KinematicBody2D], and must be moved by code.
</constant>
- <constant name="CCD_MODE_DISABLED" value="0">
+ <constant name="CCD_MODE_DISABLED" value="0" enum="CCDMode">
Continuous collision detection disabled. This is the fastest way to detect body collisions, but can miss small, fast-moving objects.
</constant>
- <constant name="CCD_MODE_CAST_RAY" value="1">
+ <constant name="CCD_MODE_CAST_RAY" value="1" enum="CCDMode">
Continuous collision detection enabled using raycasting. This is faster than shapecasting but less precise.
</constant>
- <constant name="CCD_MODE_CAST_SHAPE" value="2">
+ <constant name="CCD_MODE_CAST_SHAPE" value="2" enum="CCDMode">
Continuous collision detection enabled using shapecasting. This is the slowest CCD method and the most precise.
</constant>
</constants>
diff --git a/doc/classes/SceneState.xml b/doc/classes/SceneState.xml
index 61e08336db..4fcaaa23dc 100644
--- a/doc/classes/SceneState.xml
+++ b/doc/classes/SceneState.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SceneState" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="SceneState" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
+ A script interface to a scene file's data.
</brief_description>
<description>
+ Maintains a list of resources, nodes, exported and overridden properties, and built-in scripts associated with a scene.
</description>
<tutorials>
</tutorials>
@@ -15,12 +17,14 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the list of bound parameters for the signal at [code]idx[/code].
</description>
</method>
<method name="get_connection_count" qualifiers="const">
<return type="int">
</return>
<description>
+ Returns the number of signal connections in the scene.
</description>
</method>
<method name="get_connection_flags" qualifiers="const">
@@ -29,6 +33,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the flags for the signal at [code]idx[/code]. See [Object]'s [code]CONNECT_*[/code] flags.
</description>
</method>
<method name="get_connection_method" qualifiers="const">
@@ -37,6 +42,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the method connected to the signal at [code]idx[/code].
</description>
</method>
<method name="get_connection_signal" qualifiers="const">
@@ -45,6 +51,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the name of the signal at [code]idx[/code].
</description>
</method>
<method name="get_connection_source" qualifiers="const">
@@ -53,6 +60,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the path to the node that owns the signal at [code]idx[/code], relative to the root node.
</description>
</method>
<method name="get_connection_target" qualifiers="const">
@@ -61,12 +69,14 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the path to the node that owns the method connected to the signal at [code]idx[/code], relative to the root node.
</description>
</method>
<method name="get_node_count" qualifiers="const">
<return type="int">
</return>
<description>
+ Returns the number of nodes in the scene.
</description>
</method>
<method name="get_node_groups" qualifiers="const">
@@ -75,6 +85,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the list of group names associated with the node at [code]idx[/code].
</description>
</method>
<method name="get_node_instance" qualifiers="const">
@@ -83,6 +94,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the scene for the node at [code]idx[/code] or [code]null[/code] if the node is not an instance.
</description>
</method>
<method name="get_node_instance_placeholder" qualifiers="const">
@@ -91,6 +103,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the path to the represented scene file if the node at [code]idx[/code] is an [InstancePlaceholder].
</description>
</method>
<method name="get_node_name" qualifiers="const">
@@ -99,6 +112,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the name of the node at [code]idx[/code].
</description>
</method>
<method name="get_node_owner_path" qualifiers="const">
@@ -107,6 +121,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the path to the owner of the node at [code]idx[/code], relative to the root node.
</description>
</method>
<method name="get_node_path" qualifiers="const">
@@ -117,6 +132,7 @@
<argument index="1" name="for_parent" type="bool" default="false">
</argument>
<description>
+ Returns the path to the node at [code]idx[/code].
</description>
</method>
<method name="get_node_property_count" qualifiers="const">
@@ -125,6 +141,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the number of exported or overridden properties for the node at [code]idx[/code].
</description>
</method>
<method name="get_node_property_name" qualifiers="const">
@@ -135,6 +152,7 @@
<argument index="1" name="prop_idx" type="int">
</argument>
<description>
+ Returns the name of the property at [code]prop_idx[/code] for the node at [code]idx[/code].
</description>
</method>
<method name="get_node_property_value" qualifiers="const">
@@ -145,6 +163,7 @@
<argument index="1" name="prop_idx" type="int">
</argument>
<description>
+ Returns the value of the property at [code]prop_idx[/code] for the node at [code]idx[/code].
</description>
</method>
<method name="get_node_type" qualifiers="const">
@@ -153,6 +172,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns the type of the node at [code]idx[/code].
</description>
</method>
<method name="is_node_instance_placeholder" qualifiers="const">
@@ -161,15 +181,19 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns [code]true[/code] if the node at [code]idx[/code] is an [InstancePlaceholder].
</description>
</method>
</methods>
<constants>
- <constant name="GEN_EDIT_STATE_DISABLED" value="0">
+ <constant name="GEN_EDIT_STATE_DISABLED" value="0" enum="GenEditState">
+ If passed to [method PackedScene.instance], blocks edits to the scene state.
</constant>
- <constant name="GEN_EDIT_STATE_INSTANCE" value="1">
+ <constant name="GEN_EDIT_STATE_INSTANCE" value="1" enum="GenEditState">
+ If passed to [method PackedScene.instance], provides inherited scene resources to the local scene. Requires tools compiled.
</constant>
- <constant name="GEN_EDIT_STATE_MAIN" value="2">
+ <constant name="GEN_EDIT_STATE_MAIN" value="2" enum="GenEditState">
+ If passed to [method PackedScene.instance], provides local scene resources to the local scene. Only the main scene should receive the main edit state. Requires tools compiled.
</constant>
</constants>
</class>
diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml
index 7cfacc737d..f3dd953c6f 100644
--- a/doc/classes/SceneTree.xml
+++ b/doc/classes/SceneTree.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SceneTree" inherits="MainLoop" category="Core" version="3.0-alpha">
+<class name="SceneTree" inherits="MainLoop" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -388,29 +388,29 @@
</signal>
</signals>
<constants>
- <constant name="GROUP_CALL_DEFAULT" value="0">
+ <constant name="GROUP_CALL_DEFAULT" value="0" enum="CallGroupFlags">
</constant>
- <constant name="GROUP_CALL_REVERSE" value="1">
+ <constant name="GROUP_CALL_REVERSE" value="1" enum="CallGroupFlags">
</constant>
- <constant name="GROUP_CALL_REALTIME" value="2">
+ <constant name="GROUP_CALL_REALTIME" value="2" enum="CallGroupFlags">
</constant>
- <constant name="GROUP_CALL_UNIQUE" value="4">
+ <constant name="GROUP_CALL_UNIQUE" value="4" enum="CallGroupFlags">
</constant>
- <constant name="STRETCH_MODE_DISABLED" value="0">
+ <constant name="STRETCH_MODE_DISABLED" value="0" enum="StretchMode">
</constant>
- <constant name="STRETCH_MODE_2D" value="1">
+ <constant name="STRETCH_MODE_2D" value="1" enum="StretchMode">
</constant>
- <constant name="STRETCH_MODE_VIEWPORT" value="2">
+ <constant name="STRETCH_MODE_VIEWPORT" value="2" enum="StretchMode">
</constant>
- <constant name="STRETCH_ASPECT_IGNORE" value="0">
+ <constant name="STRETCH_ASPECT_IGNORE" value="0" enum="StretchAspect">
</constant>
- <constant name="STRETCH_ASPECT_KEEP" value="1">
+ <constant name="STRETCH_ASPECT_KEEP" value="1" enum="StretchAspect">
</constant>
- <constant name="STRETCH_ASPECT_KEEP_WIDTH" value="2">
+ <constant name="STRETCH_ASPECT_KEEP_WIDTH" value="2" enum="StretchAspect">
</constant>
- <constant name="STRETCH_ASPECT_KEEP_HEIGHT" value="3">
+ <constant name="STRETCH_ASPECT_KEEP_HEIGHT" value="3" enum="StretchAspect">
</constant>
- <constant name="STRETCH_ASPECT_EXPAND" value="4">
+ <constant name="STRETCH_ASPECT_EXPAND" value="4" enum="StretchAspect">
</constant>
</constants>
</class>
diff --git a/doc/classes/SceneTreeTimer.xml b/doc/classes/SceneTreeTimer.xml
index 6c540396e5..0fdcb26e6e 100644
--- a/doc/classes/SceneTreeTimer.xml
+++ b/doc/classes/SceneTreeTimer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SceneTreeTimer" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="SceneTreeTimer" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml
index 83e33c4764..d45283c10c 100644
--- a/doc/classes/Script.xml
+++ b/doc/classes/Script.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Script" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Script" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
A class stored as a resource.
</brief_description>
diff --git a/doc/classes/ScriptEditor.xml b/doc/classes/ScriptEditor.xml
index 7a95f1276e..0b035f90d2 100644
--- a/doc/classes/ScriptEditor.xml
+++ b/doc/classes/ScriptEditor.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ScriptEditor" inherits="PanelContainer" category="Core" version="3.0-alpha">
+<class name="ScriptEditor" inherits="PanelContainer" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/ScrollBar.xml b/doc/classes/ScrollBar.xml
index 312baf3bb6..f3c124b1ff 100644
--- a/doc/classes/ScrollBar.xml
+++ b/doc/classes/ScrollBar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ScrollBar" inherits="Range" category="Core" version="3.0-alpha">
+<class name="ScrollBar" inherits="Range" category="Core" version="3.0-beta">
<brief_description>
Base class for scroll bars.
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_custom_step" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_custom_step">
- <return type="void">
- </return>
- <argument index="0" name="step" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="custom_step" type="float" setter="set_custom_step" getter="get_custom_step">
diff --git a/doc/classes/ScrollContainer.xml b/doc/classes/ScrollContainer.xml
index 51bd950cd9..87ad7d57f5 100644
--- a/doc/classes/ScrollContainer.xml
+++ b/doc/classes/ScrollContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ScrollContainer" inherits="Container" category="Core" version="3.0-alpha">
+<class name="ScrollContainer" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
A helper node for displaying scrollable elements (e.g. lists).
</brief_description>
@@ -25,38 +25,6 @@
Return current vertical scroll value.
</description>
</method>
- <method name="is_h_scroll_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if horizontal scroll is allowed.
- </description>
- </method>
- <method name="is_v_scroll_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if vertical scroll is allowed.
- </description>
- </method>
- <method name="set_enable_h_scroll">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set allows horizontal scroll.
- </description>
- </method>
- <method name="set_enable_v_scroll">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set allows vertical scroll.
- </description>
- </method>
<method name="set_h_scroll">
<return type="void">
</return>
diff --git a/doc/classes/SegmentShape2D.xml b/doc/classes/SegmentShape2D.xml
index c59370018d..dc02859251 100644
--- a/doc/classes/SegmentShape2D.xml
+++ b/doc/classes/SegmentShape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SegmentShape2D" inherits="Shape2D" category="Core" version="3.0-alpha">
+<class name="SegmentShape2D" inherits="Shape2D" category="Core" version="3.0-beta">
<brief_description>
Segment shape for 2D collisions.
</brief_description>
@@ -11,38 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_a" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the first point's position.
- </description>
- </method>
- <method name="get_b" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the second point's position.
- </description>
- </method>
- <method name="set_a">
- <return type="void">
- </return>
- <argument index="0" name="a" type="Vector2">
- </argument>
- <description>
- Set the first point's position.
- </description>
- </method>
- <method name="set_b">
- <return type="void">
- </return>
- <argument index="0" name="b" type="Vector2">
- </argument>
- <description>
- Set the second point's position.
- </description>
- </method>
</methods>
<members>
<member name="a" type="Vector2" setter="set_a" getter="get_a">
diff --git a/doc/classes/Semaphore.xml b/doc/classes/Semaphore.xml
index 0f70ec1bd2..d8deb9651a 100644
--- a/doc/classes/Semaphore.xml
+++ b/doc/classes/Semaphore.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Semaphore" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Semaphore" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
A synchronization Semaphore.
</brief_description>
diff --git a/doc/classes/Separator.xml b/doc/classes/Separator.xml
index 8754eb566d..ead641f860 100644
--- a/doc/classes/Separator.xml
+++ b/doc/classes/Separator.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Separator" inherits="Control" category="Core" version="3.0-alpha">
+<class name="Separator" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Base class for separators.
</brief_description>
diff --git a/doc/classes/Shader.xml b/doc/classes/Shader.xml
index 53b67c9d38..082c48dfce 100644
--- a/doc/classes/Shader.xml
+++ b/doc/classes/Shader.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Shader" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Shader" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
To be changed, ignore.
</brief_description>
@@ -58,16 +58,12 @@
</description>
</method>
</methods>
- <members>
- <member name="code" type="String" setter="set_code" getter="get_code">
- </member>
- </members>
<constants>
- <constant name="MODE_SPATIAL" value="0">
+ <constant name="MODE_SPATIAL" value="0" enum="Mode">
</constant>
- <constant name="MODE_CANVAS_ITEM" value="1">
+ <constant name="MODE_CANVAS_ITEM" value="1" enum="Mode">
</constant>
- <constant name="MODE_PARTICLES" value="2">
+ <constant name="MODE_PARTICLES" value="2" enum="Mode">
</constant>
</constants>
</class>
diff --git a/doc/classes/ShaderMaterial.xml b/doc/classes/ShaderMaterial.xml
index 81dec0cc14..096d6d4332 100644
--- a/doc/classes/ShaderMaterial.xml
+++ b/doc/classes/ShaderMaterial.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ShaderMaterial" inherits="Material" category="Core" version="3.0-alpha">
+<class name="ShaderMaterial" inherits="Material" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/Shape.xml b/doc/classes/Shape.xml
index df39988a35..512961ed75 100644
--- a/doc/classes/Shape.xml
+++ b/doc/classes/Shape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Shape" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Shape" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Base class for all 3D shape resources.
</brief_description>
diff --git a/doc/classes/Shape2D.xml b/doc/classes/Shape2D.xml
index fcc1ded4f7..d4d043dfd8 100644
--- a/doc/classes/Shape2D.xml
+++ b/doc/classes/Shape2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Shape2D" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Shape2D" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Base class for all 2D Shapes.
</brief_description>
@@ -75,23 +75,6 @@
This method needs the transformation matrix for this shape ([code]local_xform[/code]), the movement to test on this shape ([code]local_motion[/code]), the shape to check collisions with ([code]with_shape[/code]), the transformation matrix of that shape ([code]shape_xform[/code]), and the movement to test onto the other object ([code]shape_motion[/code]).
</description>
</method>
- <method name="get_custom_solver_bias" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the custom solver bias.
- </description>
- </method>
- <method name="set_custom_solver_bias">
- <return type="void">
- </return>
- <argument index="0" name="bias" type="float">
- </argument>
- <description>
- Use a custom solver bias. No need to change this unless you really know what you are doing.
- The solver bias is a factor controlling how much two objects "rebound" off each other, when colliding, to avoid them getting into each other because of numerical imprecision.
- </description>
- </method>
</methods>
<members>
<member name="custom_solver_bias" type="float" setter="set_custom_solver_bias" getter="get_custom_solver_bias">
diff --git a/doc/classes/ShortCut.xml b/doc/classes/ShortCut.xml
index b89c3a65bd..ce6a001279 100644
--- a/doc/classes/ShortCut.xml
+++ b/doc/classes/ShortCut.xml
@@ -1,8 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ShortCut" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="ShortCut" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
+ A shortcut for binding input.
</brief_description>
<description>
+ A shortcut for binding input.
+ Shortcuts are commonly used for interacting with a [Control] element from a [InputEvent].
</description>
<tutorials>
</tutorials>
@@ -13,12 +16,7 @@
<return type="String">
</return>
<description>
- </description>
- </method>
- <method name="get_shortcut" qualifiers="const">
- <return type="InputEvent">
- </return>
- <description>
+ Returns the Shortcut's [InputEvent] as a [String].
</description>
</method>
<method name="is_shortcut" qualifiers="const">
@@ -27,25 +25,21 @@
<argument index="0" name="event" type="InputEvent">
</argument>
<description>
+ Returns [code]true[/code] if the Shortcut's [InputEvent] equals [code]event[/code].
</description>
</method>
<method name="is_valid" qualifiers="const">
<return type="bool">
</return>
<description>
- </description>
- </method>
- <method name="set_shortcut">
- <return type="void">
- </return>
- <argument index="0" name="event" type="InputEvent">
- </argument>
- <description>
+ If [code]true[/code] this Shortcut is valid.
</description>
</method>
</methods>
<members>
<member name="shortcut" type="InputEvent" setter="set_shortcut" getter="get_shortcut">
+ The Shortcut's [InputEvent].
+ Generally the [InputEvent] is a keyboard key, though it can be any [InputEvent].
</member>
</members>
<constants>
diff --git a/doc/classes/Skeleton.xml b/doc/classes/Skeleton.xml
index b32f8bf7f0..8bcc80de32 100644
--- a/doc/classes/Skeleton.xml
+++ b/doc/classes/Skeleton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Skeleton" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="Skeleton" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Skeleton for characters and animated objects.
</brief_description>
@@ -215,7 +215,7 @@
</method>
</methods>
<constants>
- <constant name="NOTIFICATION_UPDATE_SKELETON" value="50" enum="">
+ <constant name="NOTIFICATION_UPDATE_SKELETON" value="50">
</constant>
</constants>
</class>
diff --git a/doc/classes/Sky.xml b/doc/classes/Sky.xml
index a2259df42a..33f4a6059c 100644
--- a/doc/classes/Sky.xml
+++ b/doc/classes/Sky.xml
@@ -1,49 +1,48 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Sky" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Sky" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
+ The base class for [PanoramaSky] and [ProceduralSky].
</brief_description>
<description>
+ The base class for [PanoramaSky] and [ProceduralSky].
</description>
<tutorials>
</tutorials>
<demos>
</demos>
<methods>
- <method name="get_radiance_size" qualifiers="const">
- <return type="int" enum="Sky.RadianceSize">
- </return>
- <description>
- </description>
- </method>
- <method name="set_radiance_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="int" enum="Sky.RadianceSize">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="radiance_size" type="int" setter="set_radiance_size" getter="get_radiance_size" enum="Sky.RadianceSize">
+ The Sky's radiance map size.
+ The higher the radiance map size, the more detailed the lighting from the Sky will be.
+ See RADIANCE_SIZE_* constants for values. Default size is RADIANCE_SIZE_512.
</member>
</members>
<constants>
- <constant name="RADIANCE_SIZE_32" value="0">
+ <constant name="RADIANCE_SIZE_32" value="0" enum="RadianceSize">
+ Radiance texture size is 32x32 pixels.
</constant>
- <constant name="RADIANCE_SIZE_64" value="1">
+ <constant name="RADIANCE_SIZE_64" value="1" enum="RadianceSize">
+ Radiance texture size is 64x64 pixels.
</constant>
- <constant name="RADIANCE_SIZE_128" value="2">
+ <constant name="RADIANCE_SIZE_128" value="2" enum="RadianceSize">
+ Radiance texture size is 128x128 pixels.
</constant>
- <constant name="RADIANCE_SIZE_256" value="3">
+ <constant name="RADIANCE_SIZE_256" value="3" enum="RadianceSize">
+ Radiance texture size is 256x256 pixels.
</constant>
- <constant name="RADIANCE_SIZE_512" value="4">
+ <constant name="RADIANCE_SIZE_512" value="4" enum="RadianceSize">
+ Radiance texture size is 512x512 pixels.
</constant>
- <constant name="RADIANCE_SIZE_1024" value="5">
+ <constant name="RADIANCE_SIZE_1024" value="5" enum="RadianceSize">
+ Radiance texture size is 1024x1024 pixels.
</constant>
- <constant name="RADIANCE_SIZE_2048" value="6">
+ <constant name="RADIANCE_SIZE_2048" value="6" enum="RadianceSize">
+ Radiance texture size is 2048x2048 pixels.
</constant>
- <constant name="RADIANCE_SIZE_MAX" value="7">
+ <constant name="RADIANCE_SIZE_MAX" value="7" enum="RadianceSize">
+ Radiance texture size is the largest size it can be.
</constant>
</constants>
</class>
diff --git a/doc/classes/Slider.xml b/doc/classes/Slider.xml
index 649752a8a2..565d10497b 100644
--- a/doc/classes/Slider.xml
+++ b/doc/classes/Slider.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Slider" inherits="Range" category="Core" version="3.0-alpha">
+<class name="Slider" inherits="Range" category="Core" version="3.0-beta">
<brief_description>
Base class for GUI Sliders.
</brief_description>
@@ -11,52 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_ticks" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return amounts of ticks to display on slider.
- </description>
- </method>
- <method name="get_ticks_on_borders" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if ticks are visible on borders.
- </description>
- </method>
- <method name="is_editable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_editable">
- <return type="void">
- </return>
- <argument index="0" name="editable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ticks">
- <return type="void">
- </return>
- <argument index="0" name="count" type="int">
- </argument>
- <description>
- Set amount of ticks to display in slider.
- </description>
- </method>
- <method name="set_ticks_on_borders">
- <return type="void">
- </return>
- <argument index="0" name="ticks_on_border" type="bool">
- </argument>
- <description>
- Set true if ticks are visible on borders.
- </description>
- </method>
</methods>
<members>
<member name="editable" type="bool" setter="set_editable" getter="is_editable">
diff --git a/doc/classes/SliderJoint.xml b/doc/classes/SliderJoint.xml
index 69cdf79c53..4c794306e4 100644
--- a/doc/classes/SliderJoint.xml
+++ b/doc/classes/SliderJoint.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SliderJoint" inherits="Joint" category="Core" version="3.0-alpha">
+<class name="SliderJoint" inherits="Joint" category="Core" version="3.0-beta">
<brief_description>
Piston kind of slider between two bodies in 3D.
</brief_description>
@@ -11,24 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_param" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="param" type="int" enum="SliderJoint.Param">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_param">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="SliderJoint.Param">
- </argument>
- <argument index="1" name="value" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="angular_limit/damping" type="float" setter="set_param" getter="get_param">
@@ -102,73 +84,73 @@
</member>
</members>
<constants>
- <constant name="PARAM_LINEAR_LIMIT_UPPER" value="0">
+ <constant name="PARAM_LINEAR_LIMIT_UPPER" value="0" enum="Param">
The maximum difference between the pivot points on their x-axis before damping happens.
</constant>
- <constant name="PARAM_LINEAR_LIMIT_LOWER" value="1">
+ <constant name="PARAM_LINEAR_LIMIT_LOWER" value="1" enum="Param">
The minimum difference between the pivot points on their x-axis before damping happens.
</constant>
- <constant name="PARAM_LINEAR_LIMIT_SOFTNESS" value="2">
+ <constant name="PARAM_LINEAR_LIMIT_SOFTNESS" value="2" enum="Param">
A factor applied to the movement accross the slider axis once the limits get surpassed. The lower, the slower the movement.
</constant>
- <constant name="PARAM_LINEAR_LIMIT_RESTITUTION" value="3">
+ <constant name="PARAM_LINEAR_LIMIT_RESTITUTION" value="3" enum="Param">
The amount of restitution once the limits are surpassed. The lower, the more velocityenergy gets lost.
</constant>
- <constant name="PARAM_LINEAR_LIMIT_DAMPING" value="4">
+ <constant name="PARAM_LINEAR_LIMIT_DAMPING" value="4" enum="Param">
The amount of damping once the slider limits are surpassed.
</constant>
- <constant name="PARAM_LINEAR_MOTION_SOFTNESS" value="5">
+ <constant name="PARAM_LINEAR_MOTION_SOFTNESS" value="5" enum="Param">
A factor applied to the movement accross the slider axis as long as the slider is in the limits. The lower, the slower the movement.
</constant>
- <constant name="PARAM_LINEAR_MOTION_RESTITUTION" value="6">
+ <constant name="PARAM_LINEAR_MOTION_RESTITUTION" value="6" enum="Param">
The amount of restitution inside the slider limits.
</constant>
- <constant name="PARAM_LINEAR_MOTION_DAMPING" value="7">
+ <constant name="PARAM_LINEAR_MOTION_DAMPING" value="7" enum="Param">
The amount of damping inside the slider limits.
</constant>
- <constant name="PARAM_LINEAR_ORTHOGONAL_SOFTNESS" value="8">
+ <constant name="PARAM_LINEAR_ORTHOGONAL_SOFTNESS" value="8" enum="Param">
A factor applied to the movement accross axes orthogonal to the slider.
</constant>
- <constant name="PARAM_LINEAR_ORTHOGONAL_RESTITUTION" value="9">
+ <constant name="PARAM_LINEAR_ORTHOGONAL_RESTITUTION" value="9" enum="Param">
The amount of restitution when movement is accross axes orthogonal to the slider.
</constant>
- <constant name="PARAM_LINEAR_ORTHOGONAL_DAMPING" value="10">
+ <constant name="PARAM_LINEAR_ORTHOGONAL_DAMPING" value="10" enum="Param">
The amount of damping when movement is accross axes orthogonal to the slider.
</constant>
- <constant name="PARAM_ANGULAR_LIMIT_UPPER" value="11">
+ <constant name="PARAM_ANGULAR_LIMIT_UPPER" value="11" enum="Param">
The upper limit of rotation in the slider.
</constant>
- <constant name="PARAM_ANGULAR_LIMIT_LOWER" value="12">
+ <constant name="PARAM_ANGULAR_LIMIT_LOWER" value="12" enum="Param">
The lower limit of rotation in the slider.
</constant>
- <constant name="PARAM_ANGULAR_LIMIT_SOFTNESS" value="13">
+ <constant name="PARAM_ANGULAR_LIMIT_SOFTNESS" value="13" enum="Param">
A factor applied to the all rotation once the limit is surpassed.
</constant>
- <constant name="PARAM_ANGULAR_LIMIT_RESTITUTION" value="14">
+ <constant name="PARAM_ANGULAR_LIMIT_RESTITUTION" value="14" enum="Param">
The amount of restitution of the rotation when the limit is surpassed.
</constant>
- <constant name="PARAM_ANGULAR_LIMIT_DAMPING" value="15">
+ <constant name="PARAM_ANGULAR_LIMIT_DAMPING" value="15" enum="Param">
The amount of damping of the rotation when the limit is surpassed.
</constant>
- <constant name="PARAM_ANGULAR_MOTION_SOFTNESS" value="16">
+ <constant name="PARAM_ANGULAR_MOTION_SOFTNESS" value="16" enum="Param">
A factor applied to the all rotation in the limits.
</constant>
- <constant name="PARAM_ANGULAR_MOTION_RESTITUTION" value="17">
+ <constant name="PARAM_ANGULAR_MOTION_RESTITUTION" value="17" enum="Param">
The amount of restitution of the rotation in the limits.
</constant>
- <constant name="PARAM_ANGULAR_MOTION_DAMPING" value="18">
+ <constant name="PARAM_ANGULAR_MOTION_DAMPING" value="18" enum="Param">
The amount of damping of the rotation in the limits.
</constant>
- <constant name="PARAM_ANGULAR_ORTHOGONAL_SOFTNESS" value="19">
+ <constant name="PARAM_ANGULAR_ORTHOGONAL_SOFTNESS" value="19" enum="Param">
A factor applied to the all rotation across axes orthogonal to the slider.
</constant>
- <constant name="PARAM_ANGULAR_ORTHOGONAL_RESTITUTION" value="20">
+ <constant name="PARAM_ANGULAR_ORTHOGONAL_RESTITUTION" value="20" enum="Param">
The amount of restitution of the rotation across axes orthogonal to the slider.
</constant>
- <constant name="PARAM_ANGULAR_ORTHOGONAL_DAMPING" value="21">
+ <constant name="PARAM_ANGULAR_ORTHOGONAL_DAMPING" value="21" enum="Param">
The amount of damping of the rotation across axes orthogonal to the slider.
</constant>
- <constant name="PARAM_MAX" value="22">
+ <constant name="PARAM_MAX" value="22" enum="Param">
End flag of PARAM_* constants, used internally.
</constant>
</constants>
diff --git a/doc/classes/Spatial.xml b/doc/classes/Spatial.xml
index 726654f91f..ea04192a5e 100644
--- a/doc/classes/Spatial.xml
+++ b/doc/classes/Spatial.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Spatial" inherits="Node" category="Core" version="3.0-alpha">
+<class name="Spatial" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Most basic 3D game object, parent of all 3D related nodes.
</brief_description>
@@ -18,13 +18,6 @@
Returns the SpatialGizmo for this node. Used for example in [EditorSpatialGizmo] as custom visualization and editing handles in Editor.
</description>
</method>
- <method name="get_global_transform" qualifiers="const">
- <return type="Transform">
- </return>
- <description>
- Returns the global transform, relative to worldspace.
- </description>
- </method>
<method name="get_parent_spatial" qualifiers="const">
<return type="Spatial">
</return>
@@ -32,39 +25,6 @@
Returns the parent [code]Spatial[/code], or an empty [Object] if no parent exists or parent is not of type [code]Spatial[/code].
</description>
</method>
- <method name="get_rotation" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Returns the rotation (in radians).
- </description>
- </method>
- <method name="get_rotation_degrees" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Returns the rotation (in degrees).
- </description>
- </method>
- <method name="get_scale" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_transform" qualifiers="const">
- <return type="Transform">
- </return>
- <description>
- Returns the local transform, relative to the bone parent.
- </description>
- </method>
- <method name="get_translation" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
<method name="get_world" qualifiers="const">
<return type="World">
</return>
@@ -120,13 +80,6 @@
Returns whether the node notifies about its global and local transformation changes. Spatial will not propagate this by default.
</description>
</method>
- <method name="is_visible" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether the node is set to be visible.
- </description>
- </method>
<method name="is_visible_in_tree" qualifiers="const">
<return type="bool">
</return>
@@ -221,15 +174,6 @@
Set [SpatialGizmo] for this node. Used for example in [EditorSpatialGizmo] as custom visualization and editing handles in Editor.
</description>
</method>
- <method name="set_global_transform">
- <return type="void">
- </return>
- <argument index="0" name="global" type="Transform">
- </argument>
- <description>
- Set the transform globally, relative to world space.
- </description>
- </method>
<method name="set_identity">
<return type="void">
</return>
@@ -264,58 +208,6 @@
Set whether the node notifies about its global and local transformation changes. Spatial will not propagate this by default.
</description>
</method>
- <method name="set_rotation">
- <return type="void">
- </return>
- <argument index="0" name="radians" type="Vector3">
- </argument>
- <description>
- Set the rotation (in radians).
- </description>
- </method>
- <method name="set_rotation_degrees">
- <return type="void">
- </return>
- <argument index="0" name="degrees" type="Vector3">
- </argument>
- <description>
- Set the rotation (in degrees).
- </description>
- </method>
- <method name="set_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector3">
- </argument>
- <description>
- Set the scale.
- </description>
- </method>
- <method name="set_transform">
- <return type="void">
- </return>
- <argument index="0" name="local" type="Transform">
- </argument>
- <description>
- Set the transform locally, relative to the parent spatial node.
- </description>
- </method>
- <method name="set_translation">
- <return type="void">
- </return>
- <argument index="0" name="translation" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_visible">
- <return type="void">
- </return>
- <argument index="0" name="visible" type="bool">
- </argument>
- <description>
- </description>
- </method>
<method name="show">
<return type="void">
</return>
@@ -389,17 +281,17 @@
</signal>
</signals>
<constants>
- <constant name="NOTIFICATION_TRANSFORM_CHANGED" value="29" enum="">
+ <constant name="NOTIFICATION_TRANSFORM_CHANGED" value="29">
Spatial nodes receives this notification when their global transform changes. This means that either the current or a parent node changed its transform.
In order for NOTIFICATION_TRANSFORM_CHANGED to work user first needs to ask for it, with set_notify_transform(true).
</constant>
- <constant name="NOTIFICATION_ENTER_WORLD" value="41" enum="">
+ <constant name="NOTIFICATION_ENTER_WORLD" value="41">
Spatial nodes receives this notification when they are registered to new [World] resource.
</constant>
- <constant name="NOTIFICATION_EXIT_WORLD" value="42" enum="">
+ <constant name="NOTIFICATION_EXIT_WORLD" value="42">
Spatial nodes receives this notification when they are unregistered from current [World] resource.
</constant>
- <constant name="NOTIFICATION_VISIBILITY_CHANGED" value="43" enum="">
+ <constant name="NOTIFICATION_VISIBILITY_CHANGED" value="43">
Spatial nodes receives this notification when their visibility changes.
</constant>
</constants>
diff --git a/doc/classes/SpatialGizmo.xml b/doc/classes/SpatialGizmo.xml
index eaac74fe10..8f614c6737 100644
--- a/doc/classes/SpatialGizmo.xml
+++ b/doc/classes/SpatialGizmo.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SpatialGizmo" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="SpatialGizmo" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/SpatialMaterial.xml b/doc/classes/SpatialMaterial.xml
index 9f8b563373..cf08b0daae 100644
--- a/doc/classes/SpatialMaterial.xml
+++ b/doc/classes/SpatialMaterial.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SpatialMaterial" inherits="Material" category="Core" version="3.0-alpha">
+<class name="SpatialMaterial" inherits="Material" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,788 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_albedo" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_alpha_scissor_threshold" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_anisotropy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ao_light_affect" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_ao_texture_channel" qualifiers="const">
- <return type="int" enum="SpatialMaterial.TextureChannel">
- </return>
- <description>
- </description>
- </method>
- <method name="get_billboard_mode" qualifiers="const">
- <return type="int" enum="SpatialMaterial.BillboardMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_blend_mode" qualifiers="const">
- <return type="int" enum="SpatialMaterial.BlendMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_clearcoat" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_clearcoat_gloss" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_cull_mode" qualifiers="const">
- <return type="int" enum="SpatialMaterial.CullMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_depth_deep_parallax_max_layers" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_depth_deep_parallax_min_layers" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_depth_draw_mode" qualifiers="const">
- <return type="int" enum="SpatialMaterial.DepthDrawMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_depth_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_detail_blend_mode" qualifiers="const">
- <return type="int" enum="SpatialMaterial.BlendMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_detail_uv" qualifiers="const">
- <return type="int" enum="SpatialMaterial.DetailUV">
- </return>
- <description>
- </description>
- </method>
- <method name="get_diffuse_mode" qualifiers="const">
- <return type="int" enum="SpatialMaterial.DiffuseMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_distance_fade_max_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_distance_fade_min_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_energy" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_emission_operator" qualifiers="const">
- <return type="int" enum="SpatialMaterial.EmissionOperator">
- </return>
- <description>
- </description>
- </method>
- <method name="get_feature" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="feature" type="int" enum="SpatialMaterial.Feature">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_flag" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="flag" type="int" enum="SpatialMaterial.Flags">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_grow" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_line_width" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_metallic" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_metallic_texture_channel" qualifiers="const">
- <return type="int" enum="SpatialMaterial.TextureChannel">
- </return>
- <description>
- </description>
- </method>
- <method name="get_normal_scale" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_particles_anim_h_frames" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_particles_anim_loop" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_particles_anim_v_frames" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_point_size" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_proximity_fade_distance" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_refraction" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_refraction_texture_channel" qualifiers="const">
- <return type="int" enum="SpatialMaterial.TextureChannel">
- </return>
- <description>
- </description>
- </method>
- <method name="get_rim" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_rim_tint" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_roughness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_roughness_texture_channel" qualifiers="const">
- <return type="int" enum="SpatialMaterial.TextureChannel">
- </return>
- <description>
- </description>
- </method>
- <method name="get_specular" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_specular_mode" qualifiers="const">
- <return type="int" enum="SpatialMaterial.SpecularMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_subsurface_scattering_strength" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <argument index="0" name="param" type="int" enum="SpatialMaterial.TextureParam">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_transmission" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_uv1_offset" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_uv1_scale" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_uv1_triplanar_blend_sharpness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_uv2_offset" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_uv2_scale" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- </description>
- </method>
- <method name="get_uv2_triplanar_blend_sharpness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="is_depth_deep_parallax_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_distance_fade_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_grow_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_proximity_fade_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_albedo">
- <return type="void">
- </return>
- <argument index="0" name="albedo" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_alpha_scissor_threshold">
- <return type="void">
- </return>
- <argument index="0" name="threshold" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_anisotropy">
- <return type="void">
- </return>
- <argument index="0" name="anisotropy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ao_light_affect">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_ao_texture_channel">
- <return type="void">
- </return>
- <argument index="0" name="channel" type="int" enum="SpatialMaterial.TextureChannel">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_billboard_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="SpatialMaterial.BillboardMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_blend_mode">
- <return type="void">
- </return>
- <argument index="0" name="blend_mode" type="int" enum="SpatialMaterial.BlendMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_clearcoat">
- <return type="void">
- </return>
- <argument index="0" name="clearcoat" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_clearcoat_gloss">
- <return type="void">
- </return>
- <argument index="0" name="clearcoat_gloss" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_cull_mode">
- <return type="void">
- </return>
- <argument index="0" name="cull_mode" type="int" enum="SpatialMaterial.CullMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_depth_deep_parallax">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_depth_deep_parallax_max_layers">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_depth_deep_parallax_min_layers">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_depth_draw_mode">
- <return type="void">
- </return>
- <argument index="0" name="depth_draw_mode" type="int" enum="SpatialMaterial.DepthDrawMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_depth_scale">
- <return type="void">
- </return>
- <argument index="0" name="depth_scale" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_detail_blend_mode">
- <return type="void">
- </return>
- <argument index="0" name="detail_blend_mode" type="int" enum="SpatialMaterial.BlendMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_detail_uv">
- <return type="void">
- </return>
- <argument index="0" name="detail_uv" type="int" enum="SpatialMaterial.DetailUV">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_diffuse_mode">
- <return type="void">
- </return>
- <argument index="0" name="diffuse_mode" type="int" enum="SpatialMaterial.DiffuseMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_distance_fade">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_distance_fade_max_distance">
- <return type="void">
- </return>
- <argument index="0" name="distance" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_distance_fade_min_distance">
- <return type="void">
- </return>
- <argument index="0" name="distance" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission">
- <return type="void">
- </return>
- <argument index="0" name="emission" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_energy">
- <return type="void">
- </return>
- <argument index="0" name="emission_energy" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_emission_operator">
- <return type="void">
- </return>
- <argument index="0" name="operator" type="int" enum="SpatialMaterial.EmissionOperator">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_feature">
- <return type="void">
- </return>
- <argument index="0" name="feature" type="int" enum="SpatialMaterial.Feature">
- </argument>
- <argument index="1" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flag">
- <return type="void">
- </return>
- <argument index="0" name="flag" type="int" enum="SpatialMaterial.Flags">
- </argument>
- <argument index="1" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_grow">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_grow_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_line_width">
- <return type="void">
- </return>
- <argument index="0" name="line_width" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_metallic">
- <return type="void">
- </return>
- <argument index="0" name="metallic" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_metallic_texture_channel">
- <return type="void">
- </return>
- <argument index="0" name="channel" type="int" enum="SpatialMaterial.TextureChannel">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_normal_scale">
- <return type="void">
- </return>
- <argument index="0" name="normal_scale" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_particles_anim_h_frames">
- <return type="void">
- </return>
- <argument index="0" name="frames" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_particles_anim_loop">
- <return type="void">
- </return>
- <argument index="0" name="frames" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_particles_anim_v_frames">
- <return type="void">
- </return>
- <argument index="0" name="frames" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_point_size">
- <return type="void">
- </return>
- <argument index="0" name="point_size" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_proximity_fade">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_proximity_fade_distance">
- <return type="void">
- </return>
- <argument index="0" name="distance" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_refraction">
- <return type="void">
- </return>
- <argument index="0" name="refraction" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_refraction_texture_channel">
- <return type="void">
- </return>
- <argument index="0" name="channel" type="int" enum="SpatialMaterial.TextureChannel">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_rim">
- <return type="void">
- </return>
- <argument index="0" name="rim" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_rim_tint">
- <return type="void">
- </return>
- <argument index="0" name="rim_tint" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_roughness">
- <return type="void">
- </return>
- <argument index="0" name="roughness" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_roughness_texture_channel">
- <return type="void">
- </return>
- <argument index="0" name="channel" type="int" enum="SpatialMaterial.TextureChannel">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_specular">
- <return type="void">
- </return>
- <argument index="0" name="specular" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_specular_mode">
- <return type="void">
- </return>
- <argument index="0" name="specular_mode" type="int" enum="SpatialMaterial.SpecularMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_subsurface_scattering_strength">
- <return type="void">
- </return>
- <argument index="0" name="strength" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="param" type="int" enum="SpatialMaterial.TextureParam">
- </argument>
- <argument index="1" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_transmission">
- <return type="void">
- </return>
- <argument index="0" name="transmission" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_uv1_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_uv1_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_uv1_triplanar_blend_sharpness">
- <return type="void">
- </return>
- <argument index="0" name="sharpness" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_uv2_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_uv2_scale">
- <return type="void">
- </return>
- <argument index="0" name="scale" type="Vector3">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_uv2_triplanar_blend_sharpness">
- <return type="void">
- </return>
- <argument index="0" name="sharpness" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="albedo_color" type="Color" setter="set_albedo" getter="get_albedo">
@@ -861,6 +79,8 @@
</member>
<member name="emission_texture" type="Texture" setter="set_texture" getter="get_texture">
</member>
+ <member name="flags_albedo_tex_force_srgb" type="bool" setter="set_flag" getter="get_flag">
+ </member>
<member name="flags_fixed_size" type="bool" setter="set_flag" getter="get_flag">
</member>
<member name="flags_no_depth_test" type="bool" setter="set_flag" getter="get_flag">
@@ -979,159 +199,161 @@
</member>
</members>
<constants>
- <constant name="TEXTURE_ALBEDO" value="0">
+ <constant name="TEXTURE_ALBEDO" value="0" enum="TextureParam">
+ </constant>
+ <constant name="TEXTURE_METALLIC" value="1" enum="TextureParam">
</constant>
- <constant name="TEXTURE_METALLIC" value="1">
+ <constant name="TEXTURE_ROUGHNESS" value="2" enum="TextureParam">
</constant>
- <constant name="TEXTURE_ROUGHNESS" value="2">
+ <constant name="TEXTURE_EMISSION" value="3" enum="TextureParam">
</constant>
- <constant name="TEXTURE_EMISSION" value="3">
+ <constant name="TEXTURE_NORMAL" value="4" enum="TextureParam">
</constant>
- <constant name="TEXTURE_NORMAL" value="4">
+ <constant name="TEXTURE_RIM" value="5" enum="TextureParam">
</constant>
- <constant name="TEXTURE_RIM" value="5">
+ <constant name="TEXTURE_CLEARCOAT" value="6" enum="TextureParam">
</constant>
- <constant name="TEXTURE_CLEARCOAT" value="6">
+ <constant name="TEXTURE_FLOWMAP" value="7" enum="TextureParam">
</constant>
- <constant name="TEXTURE_FLOWMAP" value="7">
+ <constant name="TEXTURE_AMBIENT_OCCLUSION" value="8" enum="TextureParam">
</constant>
- <constant name="TEXTURE_AMBIENT_OCCLUSION" value="8">
+ <constant name="TEXTURE_DEPTH" value="9" enum="TextureParam">
</constant>
- <constant name="TEXTURE_DEPTH" value="9">
+ <constant name="TEXTURE_SUBSURFACE_SCATTERING" value="10" enum="TextureParam">
</constant>
- <constant name="TEXTURE_SUBSURFACE_SCATTERING" value="10">
+ <constant name="TEXTURE_TRANSMISSION" value="11" enum="TextureParam">
</constant>
- <constant name="TEXTURE_TRANSMISSION" value="11">
+ <constant name="TEXTURE_REFRACTION" value="12" enum="TextureParam">
</constant>
- <constant name="TEXTURE_REFRACTION" value="12">
+ <constant name="TEXTURE_DETAIL_MASK" value="13" enum="TextureParam">
</constant>
- <constant name="TEXTURE_DETAIL_MASK" value="13">
+ <constant name="TEXTURE_DETAIL_ALBEDO" value="14" enum="TextureParam">
</constant>
- <constant name="TEXTURE_DETAIL_ALBEDO" value="14">
+ <constant name="TEXTURE_DETAIL_NORMAL" value="15" enum="TextureParam">
</constant>
- <constant name="TEXTURE_DETAIL_NORMAL" value="15">
+ <constant name="TEXTURE_MAX" value="16" enum="TextureParam">
</constant>
- <constant name="TEXTURE_MAX" value="16">
+ <constant name="DETAIL_UV_1" value="0" enum="DetailUV">
</constant>
- <constant name="DETAIL_UV_1" value="0">
+ <constant name="DETAIL_UV_2" value="1" enum="DetailUV">
</constant>
- <constant name="DETAIL_UV_2" value="1">
+ <constant name="FEATURE_TRANSPARENT" value="0" enum="Feature">
</constant>
- <constant name="FEATURE_TRANSPARENT" value="0">
+ <constant name="FEATURE_EMISSION" value="1" enum="Feature">
</constant>
- <constant name="FEATURE_EMISSION" value="1">
+ <constant name="FEATURE_NORMAL_MAPPING" value="2" enum="Feature">
</constant>
- <constant name="FEATURE_NORMAL_MAPPING" value="2">
+ <constant name="FEATURE_RIM" value="3" enum="Feature">
</constant>
- <constant name="FEATURE_RIM" value="3">
+ <constant name="FEATURE_CLEARCOAT" value="4" enum="Feature">
</constant>
- <constant name="FEATURE_CLEARCOAT" value="4">
+ <constant name="FEATURE_ANISOTROPY" value="5" enum="Feature">
</constant>
- <constant name="FEATURE_ANISOTROPY" value="5">
+ <constant name="FEATURE_AMBIENT_OCCLUSION" value="6" enum="Feature">
</constant>
- <constant name="FEATURE_AMBIENT_OCCLUSION" value="6">
+ <constant name="FEATURE_DEPTH_MAPPING" value="7" enum="Feature">
</constant>
- <constant name="FEATURE_DEPTH_MAPPING" value="7">
+ <constant name="FEATURE_SUBSURACE_SCATTERING" value="8" enum="Feature">
</constant>
- <constant name="FEATURE_SUBSURACE_SCATTERING" value="8">
+ <constant name="FEATURE_TRANSMISSION" value="9" enum="Feature">
</constant>
- <constant name="FEATURE_TRANSMISSION" value="9">
+ <constant name="FEATURE_REFRACTION" value="10" enum="Feature">
</constant>
- <constant name="FEATURE_REFRACTION" value="10">
+ <constant name="FEATURE_DETAIL" value="11" enum="Feature">
</constant>
- <constant name="FEATURE_DETAIL" value="11">
+ <constant name="FEATURE_MAX" value="12" enum="Feature">
</constant>
- <constant name="FEATURE_MAX" value="12">
+ <constant name="BLEND_MODE_MIX" value="0" enum="BlendMode">
</constant>
- <constant name="BLEND_MODE_MIX" value="0">
+ <constant name="BLEND_MODE_ADD" value="1" enum="BlendMode">
</constant>
- <constant name="BLEND_MODE_ADD" value="1">
+ <constant name="BLEND_MODE_SUB" value="2" enum="BlendMode">
</constant>
- <constant name="BLEND_MODE_SUB" value="2">
+ <constant name="BLEND_MODE_MUL" value="3" enum="BlendMode">
</constant>
- <constant name="BLEND_MODE_MUL" value="3">
+ <constant name="DEPTH_DRAW_OPAQUE_ONLY" value="0" enum="DepthDrawMode">
</constant>
- <constant name="DEPTH_DRAW_OPAQUE_ONLY" value="0">
+ <constant name="DEPTH_DRAW_ALWAYS" value="1" enum="DepthDrawMode">
</constant>
- <constant name="DEPTH_DRAW_ALWAYS" value="1">
+ <constant name="DEPTH_DRAW_DISABLED" value="2" enum="DepthDrawMode">
</constant>
- <constant name="DEPTH_DRAW_DISABLED" value="2">
+ <constant name="DEPTH_DRAW_ALPHA_OPAQUE_PREPASS" value="3" enum="DepthDrawMode">
</constant>
- <constant name="DEPTH_DRAW_ALPHA_OPAQUE_PREPASS" value="3">
+ <constant name="CULL_BACK" value="0" enum="CullMode">
</constant>
- <constant name="CULL_BACK" value="0">
+ <constant name="CULL_FRONT" value="1" enum="CullMode">
</constant>
- <constant name="CULL_FRONT" value="1">
+ <constant name="CULL_DISABLED" value="2" enum="CullMode">
</constant>
- <constant name="CULL_DISABLED" value="2">
+ <constant name="FLAG_UNSHADED" value="0" enum="Flags">
</constant>
- <constant name="FLAG_UNSHADED" value="0">
+ <constant name="FLAG_USE_VERTEX_LIGHTING" value="1" enum="Flags">
</constant>
- <constant name="FLAG_USE_VERTEX_LIGHTING" value="1">
+ <constant name="FLAG_DISABLE_DEPTH_TEST" value="2" enum="Flags">
</constant>
- <constant name="FLAG_DISABLE_DEPTH_TEST" value="2">
+ <constant name="FLAG_ALBEDO_FROM_VERTEX_COLOR" value="3" enum="Flags">
</constant>
- <constant name="FLAG_ALBEDO_FROM_VERTEX_COLOR" value="3">
+ <constant name="FLAG_SRGB_VERTEX_COLOR" value="4" enum="Flags">
</constant>
- <constant name="FLAG_SRGB_VERTEX_COLOR" value="4">
+ <constant name="FLAG_USE_POINT_SIZE" value="5" enum="Flags">
</constant>
- <constant name="FLAG_USE_POINT_SIZE" value="5">
+ <constant name="FLAG_FIXED_SIZE" value="6" enum="Flags">
</constant>
- <constant name="FLAG_FIXED_SIZE" value="6">
+ <constant name="FLAG_UV1_USE_TRIPLANAR" value="7" enum="Flags">
</constant>
- <constant name="FLAG_UV1_USE_TRIPLANAR" value="7">
+ <constant name="FLAG_UV2_USE_TRIPLANAR" value="8" enum="Flags">
</constant>
- <constant name="FLAG_UV2_USE_TRIPLANAR" value="8">
+ <constant name="FLAG_AO_ON_UV2" value="10" enum="Flags">
</constant>
- <constant name="FLAG_AO_ON_UV2" value="10">
+ <constant name="FLAG_USE_ALPHA_SCISSOR" value="11" enum="Flags">
</constant>
- <constant name="FLAG_USE_ALPHA_SCISSOR" value="11">
+ <constant name="FLAG_TRIPLANAR_USE_WORLD" value="9" enum="Flags">
</constant>
- <constant name="FLAG_TRIPLANAR_USE_WORLD" value="9">
+ <constant name="FLAG_ALBEDO_TEXTURE_FORCE_SRGB" value="12" enum="Flags">
</constant>
- <constant name="FLAG_MAX" value="12">
+ <constant name="FLAG_MAX" value="13" enum="Flags">
</constant>
- <constant name="DIFFUSE_BURLEY" value="0">
+ <constant name="DIFFUSE_BURLEY" value="0" enum="DiffuseMode">
</constant>
- <constant name="DIFFUSE_LAMBERT" value="1">
+ <constant name="DIFFUSE_LAMBERT" value="1" enum="DiffuseMode">
</constant>
- <constant name="DIFFUSE_LAMBERT_WRAP" value="2">
+ <constant name="DIFFUSE_LAMBERT_WRAP" value="2" enum="DiffuseMode">
</constant>
- <constant name="DIFFUSE_OREN_NAYAR" value="3">
+ <constant name="DIFFUSE_OREN_NAYAR" value="3" enum="DiffuseMode">
</constant>
- <constant name="DIFFUSE_TOON" value="4">
+ <constant name="DIFFUSE_TOON" value="4" enum="DiffuseMode">
</constant>
- <constant name="SPECULAR_SCHLICK_GGX" value="0">
+ <constant name="SPECULAR_SCHLICK_GGX" value="0" enum="SpecularMode">
</constant>
- <constant name="SPECULAR_BLINN" value="1">
+ <constant name="SPECULAR_BLINN" value="1" enum="SpecularMode">
</constant>
- <constant name="SPECULAR_PHONG" value="2">
+ <constant name="SPECULAR_PHONG" value="2" enum="SpecularMode">
</constant>
- <constant name="SPECULAR_TOON" value="3">
+ <constant name="SPECULAR_TOON" value="3" enum="SpecularMode">
</constant>
- <constant name="SPECULAR_DISABLED" value="4">
+ <constant name="SPECULAR_DISABLED" value="4" enum="SpecularMode">
</constant>
- <constant name="BILLBOARD_DISABLED" value="0">
+ <constant name="BILLBOARD_DISABLED" value="0" enum="BillboardMode">
</constant>
- <constant name="BILLBOARD_ENABLED" value="1">
+ <constant name="BILLBOARD_ENABLED" value="1" enum="BillboardMode">
</constant>
- <constant name="BILLBOARD_FIXED_Y" value="2">
+ <constant name="BILLBOARD_FIXED_Y" value="2" enum="BillboardMode">
</constant>
- <constant name="BILLBOARD_PARTICLES" value="3">
+ <constant name="BILLBOARD_PARTICLES" value="3" enum="BillboardMode">
</constant>
- <constant name="TEXTURE_CHANNEL_RED" value="0">
+ <constant name="TEXTURE_CHANNEL_RED" value="0" enum="TextureChannel">
</constant>
- <constant name="TEXTURE_CHANNEL_GREEN" value="1">
+ <constant name="TEXTURE_CHANNEL_GREEN" value="1" enum="TextureChannel">
</constant>
- <constant name="TEXTURE_CHANNEL_BLUE" value="2">
+ <constant name="TEXTURE_CHANNEL_BLUE" value="2" enum="TextureChannel">
</constant>
- <constant name="TEXTURE_CHANNEL_ALPHA" value="3">
+ <constant name="TEXTURE_CHANNEL_ALPHA" value="3" enum="TextureChannel">
</constant>
- <constant name="TEXTURE_CHANNEL_GRAYSCALE" value="4">
+ <constant name="TEXTURE_CHANNEL_GRAYSCALE" value="4" enum="TextureChannel">
</constant>
- <constant name="EMISSION_OP_ADD" value="0">
+ <constant name="EMISSION_OP_ADD" value="0" enum="EmissionOperator">
</constant>
- <constant name="EMISSION_OP_MULTIPLY" value="1">
+ <constant name="EMISSION_OP_MULTIPLY" value="1" enum="EmissionOperator">
</constant>
</constants>
</class>
diff --git a/doc/classes/SpatialVelocityTracker.xml b/doc/classes/SpatialVelocityTracker.xml
index 62d3f02c89..a58049a141 100644
--- a/doc/classes/SpatialVelocityTracker.xml
+++ b/doc/classes/SpatialVelocityTracker.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SpatialVelocityTracker" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="SpatialVelocityTracker" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/SphereMesh.xml b/doc/classes/SphereMesh.xml
index 42af9cd6b8..25ebaf1aaa 100644
--- a/doc/classes/SphereMesh.xml
+++ b/doc/classes/SphereMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SphereMesh" inherits="PrimitiveMesh" category="Core" version="3.0-alpha">
+<class name="SphereMesh" inherits="PrimitiveMesh" category="Core" version="3.0-beta">
<brief_description>
Class representing a spherical [PrimitiveMesh].
</brief_description>
@@ -11,76 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_height" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_is_hemisphere" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_radial_segments" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_rings" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_height">
- <return type="void">
- </return>
- <argument index="0" name="height" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_is_hemisphere">
- <return type="void">
- </return>
- <argument index="0" name="is_hemisphere" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_radial_segments">
- <return type="void">
- </return>
- <argument index="0" name="radial_segments" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_rings">
- <return type="void">
- </return>
- <argument index="0" name="rings" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height">
diff --git a/doc/classes/SphereShape.xml b/doc/classes/SphereShape.xml
index 28f96b0028..c26d069310 100644
--- a/doc/classes/SphereShape.xml
+++ b/doc/classes/SphereShape.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SphereShape" inherits="Shape" category="Core" version="3.0-alpha">
+<class name="SphereShape" inherits="Shape" category="Core" version="3.0-beta">
<brief_description>
Sphere shape for 3D collisions.
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="set_radius">
- <return type="void">
- </return>
- <argument index="0" name="radius" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="radius" type="float" setter="set_radius" getter="get_radius">
diff --git a/doc/classes/SpinBox.xml b/doc/classes/SpinBox.xml
index e0c0a88148..806d36717a 100644
--- a/doc/classes/SpinBox.xml
+++ b/doc/classes/SpinBox.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SpinBox" inherits="Range" category="Core" version="3.0-alpha">
+<class name="SpinBox" inherits="Range" category="Core" version="3.0-beta">
<brief_description>
Numerical input text field.
</brief_description>
@@ -17,53 +17,6 @@
<description>
</description>
</method>
- <method name="get_prefix" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_suffix" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the specific suffix.
- </description>
- </method>
- <method name="is_editable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return if the spinbox is editable.
- </description>
- </method>
- <method name="set_editable">
- <return type="void">
- </return>
- <argument index="0" name="editable" type="bool">
- </argument>
- <description>
- Set whether the spinbox is editable.
- </description>
- </method>
- <method name="set_prefix">
- <return type="void">
- </return>
- <argument index="0" name="prefix" type="String">
- </argument>
- <description>
- Set a prefix.
- </description>
- </method>
- <method name="set_suffix">
- <return type="void">
- </return>
- <argument index="0" name="suffix" type="String">
- </argument>
- <description>
- Set a specific suffix.
- </description>
- </method>
</methods>
<members>
<member name="editable" type="bool" setter="set_editable" getter="is_editable">
diff --git a/doc/classes/SplitContainer.xml b/doc/classes/SplitContainer.xml
index 50ed6a5f64..835a226a50 100644
--- a/doc/classes/SplitContainer.xml
+++ b/doc/classes/SplitContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SplitContainer" inherits="Container" category="Core" version="3.0-alpha">
+<class name="SplitContainer" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
Container for splitting and adjusting.
</brief_description>
@@ -11,54 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_dragger_visibility" qualifiers="const">
- <return type="int" enum="SplitContainer.DraggerVisibility">
- </return>
- <description>
- Return visibility of the split dragger (one of [DRAGGER_VISIBLE], [DRAGGER_HIDDEN] or [DRAGGER_HIDDEN_COLLAPSED]).
- </description>
- </method>
- <method name="get_split_offset" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the split offset.
- </description>
- </method>
- <method name="is_collapsed" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the split is collapsed.
- </description>
- </method>
- <method name="set_collapsed">
- <return type="void">
- </return>
- <argument index="0" name="collapsed" type="bool">
- </argument>
- <description>
- Set if the split must be collapsed.
- </description>
- </method>
- <method name="set_dragger_visibility">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="SplitContainer.DraggerVisibility">
- </argument>
- <description>
- Set visibility of the split dragger ([i]mode[/i] must be one of [DRAGGER_VISIBLE], [DRAGGER_HIDDEN] or [DRAGGER_HIDDEN_COLLAPSED]).
- </description>
- </method>
- <method name="set_split_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="int">
- </argument>
- <description>
- Set the split offset.
- </description>
- </method>
</methods>
<members>
<member name="collapsed" type="bool" setter="set_collapsed" getter="is_collapsed">
@@ -78,13 +30,13 @@
</signal>
</signals>
<constants>
- <constant name="DRAGGER_VISIBLE" value="0">
+ <constant name="DRAGGER_VISIBLE" value="0" enum="DraggerVisibility">
The split dragger is visible.
</constant>
- <constant name="DRAGGER_HIDDEN" value="1">
+ <constant name="DRAGGER_HIDDEN" value="1" enum="DraggerVisibility">
The split dragger is invisible.
</constant>
- <constant name="DRAGGER_HIDDEN_COLLAPSED" value="2">
+ <constant name="DRAGGER_HIDDEN_COLLAPSED" value="2" enum="DraggerVisibility">
The split dragger is invisible and collapsed.
</constant>
</constants>
diff --git a/doc/classes/SpotLight.xml b/doc/classes/SpotLight.xml
index ce58791171..c66646114f 100644
--- a/doc/classes/SpotLight.xml
+++ b/doc/classes/SpotLight.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SpotLight" inherits="Light" category="Core" version="3.0-alpha">
+<class name="SpotLight" inherits="Light" category="Core" version="3.0-beta">
<brief_description>
Spotlight [Light], such as a reflector spotlight or a lantern.
</brief_description>
diff --git a/doc/classes/Sprite.xml b/doc/classes/Sprite.xml
index 7996adab51..655e98b3ed 100644
--- a/doc/classes/Sprite.xml
+++ b/doc/classes/Sprite.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Sprite" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="Sprite" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
General purpose Sprite node.
</brief_description>
@@ -11,194 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_frame" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the texture frame for a sprite-sheet, works when vframes or hframes are greater than 1.
- </description>
- </method>
- <method name="get_hframes" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the amount of horizontal frames. See [method set_hframes].
- </description>
- </method>
- <method name="get_normal_map" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return sprite draw offset.
- </description>
- </method>
- <method name="get_region_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- Return the region rect to read from.
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- Return the base texture for the sprite.
- </description>
- </method>
- <method name="get_vframes" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the amount of vertical frames. See [method set_vframes].
- </description>
- </method>
- <method name="is_centered" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return if the sprite is centered at the local origin.
- </description>
- </method>
- <method name="is_flipped_h" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the sprite is flipped horizontally.
- </description>
- </method>
- <method name="is_flipped_v" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the sprite is flipped vertically.
- </description>
- </method>
- <method name="is_region" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return if the sprite reads from a region.
- </description>
- </method>
- <method name="is_region_filter_clip_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_centered">
- <return type="void">
- </return>
- <argument index="0" name="centered" type="bool">
- </argument>
- <description>
- Set whether the sprite should be centered on the origin.
- </description>
- </method>
- <method name="set_flip_h">
- <return type="void">
- </return>
- <argument index="0" name="flip_h" type="bool">
- </argument>
- <description>
- Set true to flip the sprite horizontally.
- </description>
- </method>
- <method name="set_flip_v">
- <return type="void">
- </return>
- <argument index="0" name="flip_v" type="bool">
- </argument>
- <description>
- Set true to flip the sprite vertically.
- </description>
- </method>
- <method name="set_frame">
- <return type="void">
- </return>
- <argument index="0" name="frame" type="int">
- </argument>
- <description>
- Set the texture frame for a sprite-sheet, works when vframes or hframes are greater than 1.
- </description>
- </method>
- <method name="set_hframes">
- <return type="void">
- </return>
- <argument index="0" name="hframes" type="int">
- </argument>
- <description>
- Set the amount of horizontal frames and converts the sprite into a sprite-sheet. This is useful for animation.
- </description>
- </method>
- <method name="set_normal_map">
- <return type="void">
- </return>
- <argument index="0" name="normal_map" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector2">
- </argument>
- <description>
- Set the sprite draw offset, useful for setting rotation pivots.
- </description>
- </method>
- <method name="set_region">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set the sprite as a sub-region of a bigger texture. Useful for texture-atlases.
- </description>
- </method>
- <method name="set_region_filter_clip">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_region_rect">
- <return type="void">
- </return>
- <argument index="0" name="rect" type="Rect2">
- </argument>
- <description>
- Set the region rect to read from.
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- Set the base texture for the sprite.
- </description>
- </method>
- <method name="set_vframes">
- <return type="void">
- </return>
- <argument index="0" name="vframes" type="int">
- </argument>
- <description>
- Set the amount of vertical frames and converts the sprite into a sprite-sheet. This is useful for animation.
- </description>
- </method>
</methods>
<members>
<member name="centered" type="bool" setter="set_centered" getter="is_centered">
diff --git a/doc/classes/Sprite3D.xml b/doc/classes/Sprite3D.xml
index 5354d8c819..d727725a95 100644
--- a/doc/classes/Sprite3D.xml
+++ b/doc/classes/Sprite3D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Sprite3D" inherits="SpriteBase3D" category="Core" version="3.0-alpha">
+<class name="Sprite3D" inherits="SpriteBase3D" category="Core" version="3.0-beta">
<brief_description>
2D Sprite node in 3D world.
</brief_description>
@@ -11,90 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_frame" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_hframes" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_region_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_vframes" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="is_region" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_frame">
- <return type="void">
- </return>
- <argument index="0" name="frame" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_hframes">
- <return type="void">
- </return>
- <argument index="0" name="hframes" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_region">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_region_rect">
- <return type="void">
- </return>
- <argument index="0" name="rect" type="Rect2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_vframes">
- <return type="void">
- </return>
- <argument index="0" name="vframes" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="frame" type="int" setter="set_frame" getter="get_frame">
diff --git a/doc/classes/SpriteBase3D.xml b/doc/classes/SpriteBase3D.xml
index 69537cd884..580a467d6b 100644
--- a/doc/classes/SpriteBase3D.xml
+++ b/doc/classes/SpriteBase3D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SpriteBase3D" inherits="GeometryInstance" category="Core" version="3.0-alpha">
+<class name="SpriteBase3D" inherits="GeometryInstance" category="Core" version="3.0-beta">
<brief_description>
2D Sprite node in 3D environment.
</brief_description>
@@ -11,156 +11,12 @@
<demos>
</demos>
<methods>
- <method name="get_alpha_cut_mode" qualifiers="const">
- <return type="int" enum="SpriteBase3D.AlphaCutMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_axis" qualifiers="const">
- <return type="int" enum="Vector3.Axis">
- </return>
- <description>
- </description>
- </method>
- <method name="get_draw_flag" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="flag" type="int" enum="SpriteBase3D.DrawFlags">
- </argument>
- <description>
- </description>
- </method>
<method name="get_item_rect" qualifiers="const">
<return type="Rect2">
</return>
<description>
</description>
</method>
- <method name="get_modulate" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_offset" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_opacity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_pixel_size" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="is_centered" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_flipped_h" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_flipped_v" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_alpha_cut_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="SpriteBase3D.AlphaCutMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_axis">
- <return type="void">
- </return>
- <argument index="0" name="axis" type="int" enum="Vector3.Axis">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_centered">
- <return type="void">
- </return>
- <argument index="0" name="centered" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_draw_flag">
- <return type="void">
- </return>
- <argument index="0" name="flag" type="int" enum="SpriteBase3D.DrawFlags">
- </argument>
- <argument index="1" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flip_h">
- <return type="void">
- </return>
- <argument index="0" name="flip_h" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_flip_v">
- <return type="void">
- </return>
- <argument index="0" name="flip_v" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_modulate">
- <return type="void">
- </return>
- <argument index="0" name="modulate" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_offset">
- <return type="void">
- </return>
- <argument index="0" name="offset" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_opacity">
- <return type="void">
- </return>
- <argument index="0" name="opacity" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pixel_size">
- <return type="void">
- </return>
- <argument index="0" name="pixel_size" type="float">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="alpha_cut" type="int" setter="set_alpha_cut_mode" getter="get_alpha_cut_mode" enum="SpriteBase3D.AlphaCutMode">
@@ -200,23 +56,23 @@
</member>
</members>
<constants>
- <constant name="FLAG_TRANSPARENT" value="0">
+ <constant name="FLAG_TRANSPARENT" value="0" enum="DrawFlags">
If set, the texture's transparency and the opacity are used to make those parts of the Sprite invisible.
</constant>
- <constant name="FLAG_SHADED" value="1">
+ <constant name="FLAG_SHADED" value="1" enum="DrawFlags">
If set, the Light in the Environment has effects on the Sprite.
</constant>
- <constant name="FLAG_DOUBLE_SIDED" value="2">
+ <constant name="FLAG_DOUBLE_SIDED" value="2" enum="DrawFlags">
If set, texture can be seen from the back as well, if not, it is invisible when looking at it from behind.
</constant>
- <constant name="FLAG_MAX" value="3">
+ <constant name="FLAG_MAX" value="3" enum="DrawFlags">
Used internally to mark the end of the Flags section.
</constant>
- <constant name="ALPHA_CUT_DISABLED" value="0">
+ <constant name="ALPHA_CUT_DISABLED" value="0" enum="AlphaCutMode">
</constant>
- <constant name="ALPHA_CUT_DISCARD" value="1">
+ <constant name="ALPHA_CUT_DISCARD" value="1" enum="AlphaCutMode">
</constant>
- <constant name="ALPHA_CUT_OPAQUE_PREPASS" value="2">
+ <constant name="ALPHA_CUT_OPAQUE_PREPASS" value="2" enum="AlphaCutMode">
</constant>
</constants>
</class>
diff --git a/doc/classes/SpriteFrames.xml b/doc/classes/SpriteFrames.xml
index 336b155689..883a6d4fa8 100644
--- a/doc/classes/SpriteFrames.xml
+++ b/doc/classes/SpriteFrames.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SpriteFrames" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="SpriteFrames" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Sprite frame library for AnimatedSprite.
</brief_description>
@@ -164,9 +164,6 @@
</method>
</methods>
<members>
- <member name="animations" type="Array" setter="_set_animations" getter="_get_animations">
- An [Array] containing the [code]name[/code], [code]speed[/code], [code]loop[/code], and [code]frames[/code] of each animation.
- </member>
<member name="frames" type="Array" setter="_set_frames" getter="_get_frames">
</member>
</members>
diff --git a/doc/classes/StaticBody.xml b/doc/classes/StaticBody.xml
index a008f0b99c..dd105589a6 100644
--- a/doc/classes/StaticBody.xml
+++ b/doc/classes/StaticBody.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StaticBody" inherits="PhysicsBody" category="Core" version="3.0-alpha">
+<class name="StaticBody" inherits="PhysicsBody" category="Core" version="3.0-beta">
<brief_description>
Static body for 3D Physics.
</brief_description>
@@ -13,70 +13,6 @@
<demos>
</demos>
<methods>
- <method name="get_bounce" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body bounciness.
- </description>
- </method>
- <method name="get_constant_angular_velocity" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Return the constant angular velocity for the body.
- </description>
- </method>
- <method name="get_constant_linear_velocity" qualifiers="const">
- <return type="Vector3">
- </return>
- <description>
- Return the constant linear velocity for the body.
- </description>
- </method>
- <method name="get_friction" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body friction.
- </description>
- </method>
- <method name="set_bounce">
- <return type="void">
- </return>
- <argument index="0" name="bounce" type="float">
- </argument>
- <description>
- Set the body bounciness, from 0 (not bouncy) to 1 (bouncy).
- </description>
- </method>
- <method name="set_constant_angular_velocity">
- <return type="void">
- </return>
- <argument index="0" name="vel" type="Vector3">
- </argument>
- <description>
- Set a constant angular velocity for the body. This does not rotate the body, but affects other bodies touching it, as if it was rotating.
- </description>
- </method>
- <method name="set_constant_linear_velocity">
- <return type="void">
- </return>
- <argument index="0" name="vel" type="Vector3">
- </argument>
- <description>
- Set a constant linear velocity for the body. This does not move the body, but affects other bodies touching it, as if it was moving.
- </description>
- </method>
- <method name="set_friction">
- <return type="void">
- </return>
- <argument index="0" name="friction" type="float">
- </argument>
- <description>
- Set the body friction, from 0 (frictionless) to 1 (full friction).
- </description>
- </method>
</methods>
<members>
<member name="bounce" type="float" setter="set_bounce" getter="get_bounce">
diff --git a/doc/classes/StaticBody2D.xml b/doc/classes/StaticBody2D.xml
index 9f1f79ad59..bf670a344f 100644
--- a/doc/classes/StaticBody2D.xml
+++ b/doc/classes/StaticBody2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StaticBody2D" inherits="PhysicsBody2D" category="Core" version="3.0-alpha">
+<class name="StaticBody2D" inherits="PhysicsBody2D" category="Core" version="3.0-beta">
<brief_description>
Static body for 2D Physics.
</brief_description>
@@ -12,70 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_bounce" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body bounciness.
- </description>
- </method>
- <method name="get_constant_angular_velocity" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the constant angular velocity for the body.
- </description>
- </method>
- <method name="get_constant_linear_velocity" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the constant linear velocity for the body.
- </description>
- </method>
- <method name="get_friction" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the body friction.
- </description>
- </method>
- <method name="set_bounce">
- <return type="void">
- </return>
- <argument index="0" name="bounce" type="float">
- </argument>
- <description>
- Set the body bounciness, from 0 (not bouncy) to 1 (bouncy).
- </description>
- </method>
- <method name="set_constant_angular_velocity">
- <return type="void">
- </return>
- <argument index="0" name="vel" type="float">
- </argument>
- <description>
- Set a constant angular velocity for the body. This does not rotate the body, but affects other bodies touching it, as if it was rotating.
- </description>
- </method>
- <method name="set_constant_linear_velocity">
- <return type="void">
- </return>
- <argument index="0" name="vel" type="Vector2">
- </argument>
- <description>
- Set a constant linear velocity for the body. This does not move the body, but affects other bodies touching it, as if it was moving.
- </description>
- </method>
- <method name="set_friction">
- <return type="void">
- </return>
- <argument index="0" name="friction" type="float">
- </argument>
- <description>
- Set the body friction, from 0 (frictionless) to 1 (full friction).
- </description>
- </method>
</methods>
<members>
<member name="bounce" type="float" setter="set_bounce" getter="get_bounce">
diff --git a/doc/classes/StreamPeer.xml b/doc/classes/StreamPeer.xml
index 4f92a524b1..d757b6f2d8 100644
--- a/doc/classes/StreamPeer.xml
+++ b/doc/classes/StreamPeer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StreamPeer" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="StreamPeer" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Abstraction and base class for stream-based protocols.
</brief_description>
diff --git a/doc/classes/StreamPeerBuffer.xml b/doc/classes/StreamPeerBuffer.xml
index 5c67598285..66696ed416 100644
--- a/doc/classes/StreamPeerBuffer.xml
+++ b/doc/classes/StreamPeerBuffer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StreamPeerBuffer" inherits="StreamPeer" category="Core" version="3.0-alpha">
+<class name="StreamPeerBuffer" inherits="StreamPeer" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/StreamPeerSSL.xml b/doc/classes/StreamPeerSSL.xml
index 59d0e492e4..55cb39e137 100644
--- a/doc/classes/StreamPeerSSL.xml
+++ b/doc/classes/StreamPeerSSL.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StreamPeerSSL" inherits="StreamPeer" category="Core" version="3.0-alpha">
+<class name="StreamPeerSSL" inherits="StreamPeer" category="Core" version="3.0-beta">
<brief_description>
SSL Stream peer.
</brief_description>
@@ -48,16 +48,16 @@
</method>
</methods>
<constants>
- <constant name="STATUS_DISCONNECTED" value="0">
+ <constant name="STATUS_DISCONNECTED" value="0" enum="Status">
A status representing a [code]StreamPeerSSL[/code] that is disconnected.
</constant>
- <constant name="STATUS_CONNECTED" value="1">
+ <constant name="STATUS_CONNECTED" value="1" enum="Status">
A status representing a [code]StreamPeerSSL[/code] that is connected to a host.
</constant>
- <constant name="STATUS_ERROR_NO_CERTIFICATE" value="2">
+ <constant name="STATUS_ERROR_NO_CERTIFICATE" value="2" enum="Status">
An errot status that shows the peer did not present a SSL certificate and validation was requested.
</constant>
- <constant name="STATUS_ERROR_HOSTNAME_MISMATCH" value="3">
+ <constant name="STATUS_ERROR_HOSTNAME_MISMATCH" value="3" enum="Status">
An error status that shows a mismatch in the SSL certificate domain presented by the host and the domain requested for validation.
</constant>
</constants>
diff --git a/doc/classes/StreamPeerTCP.xml b/doc/classes/StreamPeerTCP.xml
index 3df68d0926..4c9812587a 100644
--- a/doc/classes/StreamPeerTCP.xml
+++ b/doc/classes/StreamPeerTCP.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StreamPeerTCP" inherits="StreamPeer" category="Core" version="3.0-alpha">
+<class name="StreamPeerTCP" inherits="StreamPeer" category="Core" version="3.0-beta">
<brief_description>
TCP Stream peer.
</brief_description>
@@ -58,16 +58,16 @@
</method>
</methods>
<constants>
- <constant name="STATUS_NONE" value="0">
+ <constant name="STATUS_NONE" value="0" enum="Status">
The initial status of the [code]StreamPeerTCP[/code], also the status after a disconnect.
</constant>
- <constant name="STATUS_CONNECTING" value="1">
+ <constant name="STATUS_CONNECTING" value="1" enum="Status">
A status representing a [code]StreamPeerTCP[/code] that is connecting to a host.
</constant>
- <constant name="STATUS_CONNECTED" value="2">
+ <constant name="STATUS_CONNECTED" value="2" enum="Status">
A status representing a [code]StreamPeerTCP[/code] that is connected to a host.
</constant>
- <constant name="STATUS_ERROR" value="3">
+ <constant name="STATUS_ERROR" value="3" enum="Status">
A staus representing a [code]StreamPeerTCP[/code] in error state.
</constant>
</constants>
diff --git a/doc/classes/StreamTexture.xml b/doc/classes/StreamTexture.xml
index 2a5ad36b25..2e15070a8f 100644
--- a/doc/classes/StreamTexture.xml
+++ b/doc/classes/StreamTexture.xml
@@ -1,31 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StreamTexture" inherits="Texture" category="Core" version="3.0-alpha">
+<class name="StreamTexture" inherits="Texture" category="Core" version="3.0-beta">
<brief_description>
+ A .stex texture.
</brief_description>
<description>
+ A texture that is loaded from a .stex file.
</description>
<tutorials>
</tutorials>
<demos>
</demos>
<methods>
- <method name="get_load_path" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="load">
- <return type="int" enum="Error">
- </return>
- <argument index="0" name="path" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="load_path" type="String" setter="load" getter="get_load_path">
+ The StreamTexture's filepath to a .stex file.
</member>
</members>
<constants>
diff --git a/doc/classes/String.xml b/doc/classes/String.xml
index 60c5e75dec..78e9f3cd3f 100644
--- a/doc/classes/String.xml
+++ b/doc/classes/String.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="String" category="Built-In Types" version="3.0-alpha">
+<class name="String" category="Built-In Types" version="3.0-beta">
<brief_description>
Built-in string class.
</brief_description>
diff --git a/doc/classes/StyleBox.xml b/doc/classes/StyleBox.xml
index c904522c7f..2759b5f430 100644
--- a/doc/classes/StyleBox.xml
+++ b/doc/classes/StyleBox.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StyleBox" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="StyleBox" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Base class for drawing stylized boxes for the UI.
</brief_description>
@@ -27,15 +27,6 @@
<description>
</description>
</method>
- <method name="get_default_margin" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- Return the default offset of the margin "margin" (see MARGIN_* enum) of a StyleBox, Controls that draw styleboxes with context inside need to know the margin, so the border of the stylebox is not occluded.
- </description>
- </method>
<method name="get_margin" qualifiers="const">
<return type="float">
</return>
@@ -59,17 +50,6 @@
Return the "offset" of a stylebox, this is a helper function, like writing [code]Vector2(style.get_margin(MARGIN_LEFT), style.get_margin(MARGIN_TOP))[/code].
</description>
</method>
- <method name="set_default_margin">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="offset" type="float">
- </argument>
- <description>
- Set the default offset "offset" of the margin "margin" (see MARGIN_* enum) for a StyleBox, Controls that draw styleboxes with context inside need to know the margin, so the border of the stylebox is not occluded.
- </description>
- </method>
<method name="test_mask" qualifiers="const">
<return type="bool">
</return>
diff --git a/doc/classes/StyleBoxEmpty.xml b/doc/classes/StyleBoxEmpty.xml
index fd0e256e36..70d801e699 100644
--- a/doc/classes/StyleBoxEmpty.xml
+++ b/doc/classes/StyleBoxEmpty.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StyleBoxEmpty" inherits="StyleBox" category="Core" version="3.0-alpha">
+<class name="StyleBoxEmpty" inherits="StyleBox" category="Core" version="3.0-beta">
<brief_description>
Empty stylebox (does not display anything).
</brief_description>
diff --git a/doc/classes/StyleBoxFlat.xml b/doc/classes/StyleBoxFlat.xml
index ab1f733c5c..16a1e72fce 100644
--- a/doc/classes/StyleBoxFlat.xml
+++ b/doc/classes/StyleBoxFlat.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StyleBoxFlat" inherits="StyleBox" category="Core" version="3.0-alpha">
+<class name="StyleBoxFlat" inherits="StyleBox" category="Core" version="3.0-beta">
<brief_description>
Customizable Stylebox with a given set of parameters. (no texture required)
</brief_description>
@@ -27,140 +27,12 @@
<demos>
</demos>
<methods>
- <method name="get_aa_size" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_bg_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_border_blend" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_border_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_border_width" qualifiers="const">
- <return type="int">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- </description>
- </method>
<method name="get_border_width_min" qualifiers="const">
<return type="int">
</return>
<description>
</description>
</method>
- <method name="get_corner_detail" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_corner_radius" qualifiers="const">
- <return type="int">
- </return>
- <argument index="0" name="corner" type="int" enum="Corner">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_expand_margin" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_shadow_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_shadow_size" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="is_anti_aliased" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_draw_center_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_aa_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_anti_aliased">
- <return type="void">
- </return>
- <argument index="0" name="anti_aliased" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_bg_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_border_blend">
- <return type="void">
- </return>
- <argument index="0" name="blend" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_border_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_border_width">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="width" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="set_border_width_all">
<return type="void">
</return>
@@ -169,24 +41,6 @@
<description>
</description>
</method>
- <method name="set_corner_detail">
- <return type="void">
- </return>
- <argument index="0" name="detail" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_corner_radius">
- <return type="void">
- </return>
- <argument index="0" name="corner" type="int" enum="Corner">
- </argument>
- <argument index="1" name="radius" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="set_corner_radius_all">
<return type="void">
</return>
@@ -209,24 +63,6 @@
<description>
</description>
</method>
- <method name="set_draw_center">
- <return type="void">
- </return>
- <argument index="0" name="draw_center" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_expand_margin">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="size" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="set_expand_margin_all">
<return type="void">
</return>
@@ -249,22 +85,6 @@
<description>
</description>
</method>
- <method name="set_shadow_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="anti_aliasing" type="bool" setter="set_anti_aliased" getter="is_anti_aliased">
diff --git a/doc/classes/StyleBoxLine.xml b/doc/classes/StyleBoxLine.xml
index 669d74416f..e18af2334c 100644
--- a/doc/classes/StyleBoxLine.xml
+++ b/doc/classes/StyleBoxLine.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StyleBoxLine" inherits="StyleBox" category="Core" version="3.0-alpha">
+<class name="StyleBoxLine" inherits="StyleBox" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,38 +9,12 @@
<demos>
</demos>
<methods>
- <method name="get_color" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
<method name="get_grow" qualifiers="const">
<return type="float">
</return>
<description>
</description>
</method>
- <method name="get_thickness" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="is_vertical" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_color">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
<method name="set_grow">
<return type="void">
</return>
@@ -49,22 +23,6 @@
<description>
</description>
</method>
- <method name="set_thickness">
- <return type="void">
- </return>
- <argument index="0" name="thickness" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_vertical">
- <return type="void">
- </return>
- <argument index="0" name="vertical" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="color" type="Color" setter="set_color" getter="get_color">
diff --git a/doc/classes/StyleBoxTexture.xml b/doc/classes/StyleBoxTexture.xml
index 2b64b5d6bf..2a7077bbff 100644
--- a/doc/classes/StyleBoxTexture.xml
+++ b/doc/classes/StyleBoxTexture.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="StyleBoxTexture" inherits="StyleBox" category="Core" version="3.0-alpha">
+<class name="StyleBoxTexture" inherits="StyleBox" category="Core" version="3.0-beta">
<brief_description>
Texture Based 3x3 scale style.
</brief_description>
@@ -11,72 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_expand_margin_size" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_h_axis_stretch_mode" qualifiers="const">
- <return type="int" enum="StyleBoxTexture.AxisStretchMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_margin_size" qualifiers="const">
- <return type="float">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_modulate" qualifiers="const">
- <return type="Color">
- </return>
- <description>
- </description>
- </method>
- <method name="get_normal_map" qualifiers="const">
- <return type="Resource">
- </return>
- <description>
- </description>
- </method>
- <method name="get_region_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Resource">
- </return>
- <description>
- </description>
- </method>
- <method name="get_v_axis_stretch_mode" qualifiers="const">
- <return type="int" enum="StyleBoxTexture.AxisStretchMode">
- </return>
- <description>
- </description>
- </method>
- <method name="is_draw_center_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_draw_center">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
<method name="set_expand_margin_all">
<return type="void">
</return>
@@ -99,74 +33,6 @@
<description>
</description>
</method>
- <method name="set_expand_margin_size">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="size" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_h_axis_stretch_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="StyleBoxTexture.AxisStretchMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_margin_size">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="size" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_modulate">
- <return type="void">
- </return>
- <argument index="0" name="color" type="Color">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_normal_map">
- <return type="void">
- </return>
- <argument index="0" name="normal_map" type="Resource">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_region_rect">
- <return type="void">
- </return>
- <argument index="0" name="region" type="Rect2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Resource">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_v_axis_stretch_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="StyleBoxTexture.AxisStretchMode">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="axis_stretch_horizontal" type="int" setter="set_h_axis_stretch_mode" getter="get_h_axis_stretch_mode" enum="StyleBoxTexture.AxisStretchMode">
@@ -207,11 +73,11 @@
</signal>
</signals>
<constants>
- <constant name="AXIS_STRETCH_MODE_STRETCH" value="0">
+ <constant name="AXIS_STRETCH_MODE_STRETCH" value="0" enum="AxisStretchMode">
</constant>
- <constant name="AXIS_STRETCH_MODE_TILE" value="1">
+ <constant name="AXIS_STRETCH_MODE_TILE" value="1" enum="AxisStretchMode">
</constant>
- <constant name="AXIS_STRETCH_MODE_TILE_FIT" value="2">
+ <constant name="AXIS_STRETCH_MODE_TILE_FIT" value="2" enum="AxisStretchMode">
</constant>
</constants>
</class>
diff --git a/doc/classes/SurfaceTool.xml b/doc/classes/SurfaceTool.xml
index 93090d9d2e..0916d0b928 100644
--- a/doc/classes/SurfaceTool.xml
+++ b/doc/classes/SurfaceTool.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="SurfaceTool" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="SurfaceTool" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Helper tool to create geometry.
</brief_description>
@@ -170,6 +170,8 @@
</return>
<argument index="0" name="existing" type="ArrayMesh" default="null">
</argument>
+ <argument index="1" name="flags" type="int" default="97792">
+ </argument>
<description>
Returns a constructed [ArrayMesh] from current information passed in. If an existing [ArrayMesh] is passed in as an argument, will add an extra surface to the existing [ArrayMesh].
</description>
diff --git a/doc/classes/TCP_Server.xml b/doc/classes/TCP_Server.xml
index 20cdbe4231..d3715ff545 100644
--- a/doc/classes/TCP_Server.xml
+++ b/doc/classes/TCP_Server.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TCP_Server" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="TCP_Server" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
TCP Server.
</brief_description>
diff --git a/doc/classes/TabContainer.xml b/doc/classes/TabContainer.xml
index 4921690074..350dd11e4d 100644
--- a/doc/classes/TabContainer.xml
+++ b/doc/classes/TabContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TabContainer" inherits="Control" category="Core" version="3.0-alpha">
+<class name="TabContainer" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Tabbed Container.
</brief_description>
@@ -14,20 +14,6 @@
<demos>
</demos>
<methods>
- <method name="are_tabs_visible" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns [code]true[/code] if the tabs are visible.
- </description>
- </method>
- <method name="get_current_tab" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Returns the currently visible tab's index.
- </description>
- </method>
<method name="get_current_tab_control" qualifiers="const">
<return type="Control">
</return>
@@ -49,13 +35,6 @@
Returns the previously active tab index.
</description>
</method>
- <method name="get_tab_align" qualifiers="const">
- <return type="int" enum="TabContainer.TabAlign">
- </return>
- <description>
- Returns the tab alignment. See the [code]ALIGN_*[/code] constants.
- </description>
- </method>
<method name="get_tab_control" qualifiers="const">
<return type="Control">
</return>
@@ -99,15 +78,6 @@
Returns the title of the tab at index [code]tab_idx[/code]. Tab titles default to the name of the indexed child node, but this can be overridden with [method set_tab_title].
</description>
</method>
- <method name="set_current_tab">
- <return type="void">
- </return>
- <argument index="0" name="tab_idx" type="int">
- </argument>
- <description>
- Sets to [code]false[/code] the [code]visible[/code] property for all [Control] children except for the tab at [code]tab_idx[/code].
- </description>
- </method>
<method name="set_popup">
<return type="void">
</return>
@@ -117,15 +87,6 @@
If set on a [Popup] node instance, a popup menu icon appears in the top-right corner of the [code]TabContainer[/code]. Clicking it will expand the [Popup] node.
</description>
</method>
- <method name="set_tab_align">
- <return type="void">
- </return>
- <argument index="0" name="align" type="int" enum="TabContainer.TabAlign">
- </argument>
- <description>
- Sets tab alignment, from the [code]ALIGN_*[/code] constants. Moves tabs to the left, right, or center.
- </description>
- </method>
<method name="set_tab_disabled">
<return type="void">
</return>
@@ -159,15 +120,6 @@
Sets a title for the tab at index [code]tab_idx[/code]. Tab titles default to the name of the indexed child node, but this can be overridden with [method set_tab_title].
</description>
</method>
- <method name="set_tabs_visible">
- <return type="void">
- </return>
- <argument index="0" name="visible" type="bool">
- </argument>
- <description>
- If [code]true[/code] tabs are visible. If [code]false[/code] tabs' content and titles are hidden. Default value: [code]true[/code].
- </description>
- </method>
</methods>
<members>
<member name="current_tab" type="int" setter="set_current_tab" getter="get_current_tab">
@@ -202,11 +154,11 @@
</signal>
</signals>
<constants>
- <constant name="ALIGN_LEFT" value="0">
+ <constant name="ALIGN_LEFT" value="0" enum="TabAlign">
</constant>
- <constant name="ALIGN_CENTER" value="1">
+ <constant name="ALIGN_CENTER" value="1" enum="TabAlign">
</constant>
- <constant name="ALIGN_RIGHT" value="2">
+ <constant name="ALIGN_RIGHT" value="2" enum="TabAlign">
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/Tabs.xml b/doc/classes/Tabs.xml
index e007decf47..fbda1aedb4 100644
--- a/doc/classes/Tabs.xml
+++ b/doc/classes/Tabs.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Tabs" inherits="Control" category="Core" version="3.0-alpha">
+<class name="Tabs" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Tabs Control.
</brief_description>
@@ -29,8 +29,8 @@
<description>
</description>
</method>
- <method name="get_current_tab" qualifiers="const">
- <return type="int">
+ <method name="get_offset_buttons_visible" qualifiers="const">
+ <return type="bool">
</return>
<description>
</description>
@@ -41,12 +41,6 @@
<description>
</description>
</method>
- <method name="get_tab_close_display_policy" qualifiers="const">
- <return type="int" enum="Tabs.CloseButtonDisplayPolicy">
- </return>
- <description>
- </description>
- </method>
<method name="get_tab_count" qualifiers="const">
<return type="int">
</return>
@@ -69,6 +63,12 @@
<description>
</description>
</method>
+ <method name="get_tab_offset" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_tab_rect" qualifiers="const">
<return type="Rect2">
</return>
@@ -105,14 +105,6 @@
<description>
</description>
</method>
- <method name="set_current_tab">
- <return type="void">
- </return>
- <argument index="0" name="tab_idx" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="set_tab_align">
<return type="void">
</return>
@@ -121,14 +113,6 @@
<description>
</description>
</method>
- <method name="set_tab_close_display_policy">
- <return type="void">
- </return>
- <argument index="0" name="policy" type="int" enum="Tabs.CloseButtonDisplayPolicy">
- </argument>
- <description>
- </description>
- </method>
<method name="set_tab_disabled">
<return type="void">
</return>
@@ -163,6 +147,8 @@
<members>
<member name="current_tab" type="int" setter="set_current_tab" getter="get_current_tab">
</member>
+ <member name="scrolling_enabled" type="bool" setter="set_scrolling_enabled" getter="get_scrolling_enabled">
+ </member>
<member name="tab_close_display_policy" type="int" setter="set_tab_close_display_policy" getter="get_tab_close_display_policy" enum="Tabs.CloseButtonDisplayPolicy">
</member>
</members>
@@ -205,21 +191,21 @@
</signal>
</signals>
<constants>
- <constant name="ALIGN_LEFT" value="0">
+ <constant name="ALIGN_LEFT" value="0" enum="TabAlign">
</constant>
- <constant name="ALIGN_CENTER" value="1">
+ <constant name="ALIGN_CENTER" value="1" enum="TabAlign">
</constant>
- <constant name="ALIGN_RIGHT" value="2">
+ <constant name="ALIGN_RIGHT" value="2" enum="TabAlign">
</constant>
- <constant name="ALIGN_MAX" value="3">
+ <constant name="ALIGN_MAX" value="3" enum="TabAlign">
</constant>
- <constant name="CLOSE_BUTTON_SHOW_NEVER" value="0">
+ <constant name="CLOSE_BUTTON_SHOW_NEVER" value="0" enum="CloseButtonDisplayPolicy">
</constant>
- <constant name="CLOSE_BUTTON_SHOW_ACTIVE_ONLY" value="1">
+ <constant name="CLOSE_BUTTON_SHOW_ACTIVE_ONLY" value="1" enum="CloseButtonDisplayPolicy">
</constant>
- <constant name="CLOSE_BUTTON_SHOW_ALWAYS" value="2">
+ <constant name="CLOSE_BUTTON_SHOW_ALWAYS" value="2" enum="CloseButtonDisplayPolicy">
</constant>
- <constant name="CLOSE_BUTTON_MAX" value="3">
+ <constant name="CLOSE_BUTTON_MAX" value="3" enum="CloseButtonDisplayPolicy">
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml
index 0e862a7903..da30c4c7bd 100644
--- a/doc/classes/TextEdit.xml
+++ b/doc/classes/TextEdit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TextEdit" inherits="Control" category="Core" version="3.0-alpha">
+<class name="TextEdit" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Multiline text editing control.
</brief_description>
@@ -37,6 +37,14 @@
Add a keyword and its color.
</description>
</method>
+ <method name="can_fold" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="line" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="clear_colors">
<return type="void">
</return>
@@ -58,20 +66,6 @@
Copy the current selection.
</description>
</method>
- <method name="cursor_get_blink_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Gets whether the text editor caret is blinking.
- </description>
- </method>
- <method name="cursor_get_blink_speed" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Gets the text editor caret blink speed.
- </description>
- </method>
<method name="cursor_get_column" qualifiers="const">
<return type="int">
</return>
@@ -86,67 +80,49 @@
Return the line the editing cursor is at.
</description>
</method>
- <method name="cursor_is_block_mode" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Gets whether the text editor caret is in block mode.
- </description>
- </method>
- <method name="cursor_set_blink_enabled">
+ <method name="cursor_set_column">
<return type="void">
</return>
- <argument index="0" name="enable" type="bool">
+ <argument index="0" name="column" type="int">
+ </argument>
+ <argument index="1" name="adjust_viewport" type="bool" default="true">
</argument>
<description>
- Set the text editor caret to blink.
</description>
</method>
- <method name="cursor_set_blink_speed">
+ <method name="cursor_set_line">
<return type="void">
</return>
- <argument index="0" name="blink_speed" type="float">
+ <argument index="0" name="line" type="int">
+ </argument>
+ <argument index="1" name="adjust_viewport" type="bool" default="true">
+ </argument>
+ <argument index="2" name="can_be_hidden" type="bool" default="true">
</argument>
<description>
- Set the text editor caret blink speed. Cannot be less then or equal to 0.
</description>
</method>
- <method name="cursor_set_block_mode">
+ <method name="cut">
<return type="void">
</return>
- <argument index="0" name="enable" type="bool">
- </argument>
<description>
- Set the text editor caret to block mode.
+ Cut the current selection.
</description>
</method>
- <method name="cursor_set_column">
+ <method name="fold_all_lines">
<return type="void">
</return>
- <argument index="0" name="column" type="int">
- </argument>
- <argument index="1" name="adjust_viewport" type="bool" default="true">
- </argument>
<description>
</description>
</method>
- <method name="cursor_set_line">
+ <method name="fold_line">
<return type="void">
</return>
<argument index="0" name="line" type="int">
</argument>
- <argument index="1" name="adjust_viewport" type="bool" default="true">
- </argument>
<description>
</description>
</method>
- <method name="cut">
- <return type="void">
- </return>
- <description>
- Cut the current selection.
- </description>
- </method>
<method name="get_line" qualifiers="const">
<return type="String">
</return>
@@ -204,19 +180,6 @@
Return the selection end line.
</description>
</method>
- <method name="get_text">
- <return type="String">
- </return>
- <description>
- Return the whole text.
- </description>
- </method>
- <method name="get_v_scroll_speed" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_word_under_cursor" qualifiers="const">
<return type="String">
</return>
@@ -232,37 +195,20 @@
Insert a given text at the cursor position.
</description>
</method>
- <method name="is_context_menu_enabled">
- <return type="bool">
- </return>
- <description>
- Returns true if the context menu is enabled.
- </description>
- </method>
- <method name="is_highlight_all_occurrences_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns true if highlight all occurrences is enabled.
- </description>
- </method>
- <method name="is_highlight_current_line_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_overriding_selected_font_color" qualifiers="const">
+ <method name="is_folded" qualifiers="const">
<return type="bool">
</return>
+ <argument index="0" name="line" type="int">
+ </argument>
<description>
</description>
</method>
- <method name="is_readonly" qualifiers="const">
+ <method name="is_line_hidden" qualifiers="const">
<return type="bool">
</return>
+ <argument index="0" name="arg0" type="int">
+ </argument>
<description>
- Return true if the text editor is in read-only mode (see [method set_readonly]).
</description>
</method>
<method name="is_selection_active" qualifiers="const">
@@ -272,26 +218,6 @@
Return true if the selection is active.
</description>
</method>
- <method name="is_show_line_numbers_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns true if line numbers are enabled.
- </description>
- </method>
- <method name="is_smooth_scroll_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_syntax_coloring_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if the syntax coloring is enabled.
- </description>
- </method>
<method name="menu_option">
<return type="void">
</return>
@@ -351,28 +277,12 @@
Select all the text.
</description>
</method>
- <method name="set_context_menu_enabled">
+ <method name="set_line_as_hidden">
<return type="void">
</return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set the status of the context menu. When enabled, the context menu will appear when the [code]TextEdit[/code] is right clicked.
- </description>
- </method>
- <method name="set_highlight_all_occurrences">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
+ <argument index="0" name="line" type="int">
</argument>
- <description>
- Set to enable highlighting all occurrences of the current selection.
- </description>
- </method>
- <method name="set_highlight_current_line">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
+ <argument index="1" name="enable" type="bool">
</argument>
<description>
</description>
@@ -386,80 +296,43 @@
Set the maximum amount of characters editable.
</description>
</method>
- <method name="set_override_selected_font_color">
- <return type="void">
- </return>
- <argument index="0" name="override" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_readonly">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set the text editor as read-only. Text can be displayed but not edited.
- </description>
- </method>
- <method name="set_show_line_numbers">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set to enable showing line numbers.
- </description>
- </method>
- <method name="set_smooth_scroll_enable">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_syntax_coloring">
+ <method name="set_wrap">
<return type="void">
</return>
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Set to enable the syntax coloring.
+ Enable text wrapping when it goes beyond he edge of what is visible.
</description>
</method>
- <method name="set_text">
+ <method name="toggle_fold_line">
<return type="void">
</return>
- <argument index="0" name="text" type="String">
+ <argument index="0" name="line" type="int">
</argument>
<description>
- Set the entire text.
+ Toggle the folding of the code block at the given line.
</description>
</method>
- <method name="set_v_scroll_speed">
+ <method name="undo">
<return type="void">
</return>
- <argument index="0" name="speed" type="float">
- </argument>
<description>
+ Perform undo operation.
</description>
</method>
- <method name="set_wrap">
+ <method name="unfold_line">
<return type="void">
</return>
- <argument index="0" name="enable" type="bool">
+ <argument index="0" name="line" type="int">
</argument>
<description>
- Enable text wrapping when it goes beyond he edge of what is visible.
</description>
</method>
- <method name="undo">
+ <method name="unhide_all_lines">
<return type="void">
</return>
<description>
- Perform undo operation.
</description>
</method>
</methods>
@@ -472,6 +345,8 @@
</member>
<member name="context_menu_enabled" type="bool" setter="set_context_menu_enabled" getter="is_context_menu_enabled">
</member>
+ <member name="hiding_enabled" type="int" setter="set_hiding_enabled" getter="is_hiding_enabled">
+ </member>
<member name="highlight_all_occurrences" type="bool" setter="set_highlight_all_occurrences" getter="is_highlight_all_occurrences_enabled">
</member>
<member name="highlight_current_line" type="bool" setter="set_highlight_current_line" getter="is_highlight_current_line_enabled">
@@ -527,28 +402,28 @@
</signal>
</signals>
<constants>
- <constant name="SEARCH_MATCH_CASE" value="1">
+ <constant name="SEARCH_MATCH_CASE" value="1" enum="SearchFlags">
Match case when searching.
</constant>
- <constant name="SEARCH_WHOLE_WORDS" value="2">
+ <constant name="SEARCH_WHOLE_WORDS" value="2" enum="SearchFlags">
Match whole words when searching.
</constant>
- <constant name="SEARCH_BACKWARDS" value="4">
+ <constant name="SEARCH_BACKWARDS" value="4" enum="SearchFlags">
Search from end to beginning.
</constant>
- <constant name="MENU_CUT" value="0">
+ <constant name="MENU_CUT" value="0" enum="MenuItems">
</constant>
- <constant name="MENU_COPY" value="1">
+ <constant name="MENU_COPY" value="1" enum="MenuItems">
</constant>
- <constant name="MENU_PASTE" value="2">
+ <constant name="MENU_PASTE" value="2" enum="MenuItems">
</constant>
- <constant name="MENU_CLEAR" value="3">
+ <constant name="MENU_CLEAR" value="3" enum="MenuItems">
</constant>
- <constant name="MENU_SELECT_ALL" value="4">
+ <constant name="MENU_SELECT_ALL" value="4" enum="MenuItems">
</constant>
- <constant name="MENU_UNDO" value="5">
+ <constant name="MENU_UNDO" value="5" enum="MenuItems">
</constant>
- <constant name="MENU_MAX" value="6">
+ <constant name="MENU_MAX" value="6" enum="MenuItems">
</constant>
</constants>
<theme_items>
@@ -562,6 +437,8 @@
</theme_item>
<theme_item name="caret_color" type="Color">
</theme_item>
+ <theme_item name="code_folding_color" type="Color">
+ </theme_item>
<theme_item name="completion" type="StyleBox">
</theme_item>
<theme_item name="completion_background_color" type="Color">
@@ -604,6 +481,8 @@
</theme_item>
<theme_item name="number_color" type="Color">
</theme_item>
+ <theme_item name="read_only" type="StyleBox">
+ </theme_item>
<theme_item name="selection_color" type="Color">
</theme_item>
<theme_item name="symbol_color" type="Color">
diff --git a/doc/classes/Texture.xml b/doc/classes/Texture.xml
index a856eb64ad..bf27bc4768 100644
--- a/doc/classes/Texture.xml
+++ b/doc/classes/Texture.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Texture" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Texture" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Texture for 2D and 3D.
</brief_description>
@@ -116,25 +116,29 @@
</method>
</methods>
<constants>
- <constant name="FLAG_MIPMAPS" value="1">
- Generate mipmaps, to enable smooth zooming out of the texture.
+ <constant name="FLAG_MIPMAPS" value="1" enum="Flags">
+ Generate mipmaps, which are smaller versions of the same texture to use when zoomed out, keeping the aspect ratio.
</constant>
- <constant name="FLAG_REPEAT" value="2">
- Repeat (instead of clamp to edge).
+ <constant name="FLAG_REPEAT" value="2" enum="Flags">
+ Repeats texture (instead of clamp to edge).
</constant>
- <constant name="FLAG_FILTER" value="4">
- Turn on magnifying filter, to enable smooth zooming in of the texture.
+ <constant name="FLAG_FILTER" value="4" enum="Flags">
+ Magnifying filter, to enable smooth zooming in of the texture.
</constant>
- <constant name="FLAGS_DEFAULT" value="7">
+ <constant name="FLAGS_DEFAULT" value="7" enum="Flags">
Default flags. Generate mipmaps, repeat, and filter are enabled.
</constant>
- <constant name="FLAG_ANISOTROPIC_FILTER" value="8">
+ <constant name="FLAG_ANISOTROPIC_FILTER" value="8" enum="Flags">
+ Anisotropic mipmap filtering. Generates smaller versions of the same texture with different aspect ratios.
+ More effective on planes often shown going to the horrizon as those textures (Walls or Ground for example) get squashed in the viewport to different aspect ratios and regular mipmaps keep the aspect ratio so they don't optimize storage that well in those cases.
</constant>
- <constant name="FLAG_CONVERT_TO_LINEAR" value="16">
+ <constant name="FLAG_CONVERT_TO_LINEAR" value="16" enum="Flags">
+ Converts texture to SRGB color space.
</constant>
- <constant name="FLAG_MIRRORED_REPEAT" value="32">
+ <constant name="FLAG_MIRRORED_REPEAT" value="32" enum="Flags">
+ Repeats texture with alternate sections mirrored.
</constant>
- <constant name="FLAG_VIDEO_SURFACE" value="4096">
+ <constant name="FLAG_VIDEO_SURFACE" value="4096" enum="Flags">
Texture is a video surface.
</constant>
</constants>
diff --git a/doc/classes/TextureButton.xml b/doc/classes/TextureButton.xml
index a6d935376a..9074966f4f 100644
--- a/doc/classes/TextureButton.xml
+++ b/doc/classes/TextureButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TextureButton" inherits="BaseButton" category="Core" version="3.0-alpha">
+<class name="TextureButton" inherits="BaseButton" category="Core" version="3.0-beta">
<brief_description>
Texture-based button. Supports Pressed, Hover, Disabled and Focused states.
</brief_description>
@@ -12,118 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_click_mask" qualifiers="const">
- <return type="BitMap">
- </return>
- <description>
- </description>
- </method>
- <method name="get_disabled_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_expand" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_focused_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_hover_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_normal_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_pressed_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_stretch_mode" qualifiers="const">
- <return type="int" enum="TextureButton.StretchMode">
- </return>
- <description>
- </description>
- </method>
- <method name="set_click_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="BitMap">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_disabled_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_expand">
- <return type="void">
- </return>
- <argument index="0" name="p_expand" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_focused_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_hover_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_normal_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_pressed_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_stretch_mode">
- <return type="void">
- </return>
- <argument index="0" name="p_mode" type="int" enum="TextureButton.StretchMode">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="expand" type="bool" setter="set_expand" getter="get_expand">
@@ -152,25 +40,25 @@
</member>
</members>
<constants>
- <constant name="STRETCH_SCALE" value="0">
+ <constant name="STRETCH_SCALE" value="0" enum="StretchMode">
Scale to fit the node's bounding rectangle.
</constant>
- <constant name="STRETCH_TILE" value="1">
+ <constant name="STRETCH_TILE" value="1" enum="StretchMode">
Tile inside the node's bounding rectangle.
</constant>
- <constant name="STRETCH_KEEP" value="2">
+ <constant name="STRETCH_KEEP" value="2" enum="StretchMode">
The texture keeps its original size and stays in the bounding rectangle's top-left corner.
</constant>
- <constant name="STRETCH_KEEP_CENTERED" value="3">
+ <constant name="STRETCH_KEEP_CENTERED" value="3" enum="StretchMode">
The texture keeps its original size and stays centered in the node's bounding rectangle.
</constant>
- <constant name="STRETCH_KEEP_ASPECT" value="4">
+ <constant name="STRETCH_KEEP_ASPECT" value="4" enum="StretchMode">
Scale the texture to fit the node's bounding rectangle, but maintain the texture's aspect ratio.
</constant>
- <constant name="STRETCH_KEEP_ASPECT_CENTERED" value="5">
+ <constant name="STRETCH_KEEP_ASPECT_CENTERED" value="5" enum="StretchMode">
Scale the texture to fit the node's bounding rectangle, center it, and maintain its aspect ratio.
</constant>
- <constant name="STRETCH_KEEP_ASPECT_COVERED" value="6">
+ <constant name="STRETCH_KEEP_ASPECT_COVERED" value="6" enum="StretchMode">
Scale the texture so that the shorter side fits the bounding rectangle. The other side clips to the node's limits.
</constant>
</constants>
diff --git a/doc/classes/TextureProgress.xml b/doc/classes/TextureProgress.xml
index 550c38920a..c3046d7877 100644
--- a/doc/classes/TextureProgress.xml
+++ b/doc/classes/TextureProgress.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TextureProgress" inherits="Range" category="Core" version="3.0-alpha">
+<class name="TextureProgress" inherits="Range" category="Core" version="3.0-beta">
<brief_description>
Texture-based progress bar. Useful for loading screens and life or stamina bars.
</brief_description>
@@ -11,140 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_fill_degrees">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fill_mode">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_nine_patch_stretch" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns true if textures are stretched as nine-patches or false otherwise.
- </description>
- </method>
- <method name="get_over_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_progress_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="get_radial_center_offset">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_radial_initial_angle">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_stretch_margin" qualifiers="const">
- <return type="int">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <description>
- Return nine-patch texture offset for a given margin (MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM).
- </description>
- </method>
- <method name="get_under_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="set_fill_degrees">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fill_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_nine_patch_stretch">
- <return type="void">
- </return>
- <argument index="0" name="stretch" type="bool">
- </argument>
- <description>
- Set if textures should be stretched as nine-patches.
- </description>
- </method>
- <method name="set_over_texture">
- <return type="void">
- </return>
- <argument index="0" name="tex" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_progress_texture">
- <return type="void">
- </return>
- <argument index="0" name="tex" type="Texture">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_radial_center_offset">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_radial_initial_angle">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_stretch_margin">
- <return type="void">
- </return>
- <argument index="0" name="margin" type="int" enum="Margin">
- </argument>
- <argument index="1" name="value" type="int">
- </argument>
- <description>
- Set nine-patch texture offset for a given margin (MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM).
- </description>
- </method>
- <method name="set_under_texture">
- <return type="void">
- </return>
- <argument index="0" name="tex" type="Texture">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="fill_mode" type="int" setter="set_fill_mode" getter="get_fill_mode">
@@ -187,22 +53,22 @@
</member>
</members>
<constants>
- <constant name="FILL_LEFT_TO_RIGHT" value="0">
+ <constant name="FILL_LEFT_TO_RIGHT" value="0" enum="FillMode">
The [member texture_progress] fills from left to right.
</constant>
- <constant name="FILL_RIGHT_TO_LEFT" value="1">
+ <constant name="FILL_RIGHT_TO_LEFT" value="1" enum="FillMode">
The [member texture_progress] fills from right to left.
</constant>
- <constant name="FILL_TOP_TO_BOTTOM" value="2">
+ <constant name="FILL_TOP_TO_BOTTOM" value="2" enum="FillMode">
The [member texture_progress] fills from top to bototm.
</constant>
- <constant name="FILL_BOTTOM_TO_TOP" value="3">
+ <constant name="FILL_BOTTOM_TO_TOP" value="3" enum="FillMode">
The [member texture_progress] fills from bottom to top.
</constant>
- <constant name="FILL_CLOCKWISE" value="4">
+ <constant name="FILL_CLOCKWISE" value="4" enum="FillMode">
Turns the node into a radial bar. The [member texture_progress] fills clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to refine its behavior.
</constant>
- <constant name="FILL_COUNTER_CLOCKWISE" value="5">
+ <constant name="FILL_COUNTER_CLOCKWISE" value="5" enum="FillMode">
Turns the node into a radial bar. The [member texture_progress] fills counter-clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to refine its behavior.
</constant>
</constants>
diff --git a/doc/classes/TextureRect.xml b/doc/classes/TextureRect.xml
index cef102e8ae..c1a5902448 100644
--- a/doc/classes/TextureRect.xml
+++ b/doc/classes/TextureRect.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TextureRect" inherits="Control" category="Core" version="3.0-alpha">
+<class name="TextureRect" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Draws a sprite or a texture inside a User Interface. The texture can tile or not.
</brief_description>
@@ -11,48 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_stretch_mode" qualifiers="const">
- <return type="int" enum="TextureRect.StretchMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- </description>
- </method>
- <method name="has_expand" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_expand">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_stretch_mode">
- <return type="void">
- </return>
- <argument index="0" name="stretch_mode" type="int" enum="TextureRect.StretchMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="expand" type="bool" setter="set_expand" getter="has_expand">
@@ -66,28 +24,28 @@
</member>
</members>
<constants>
- <constant name="STRETCH_SCALE_ON_EXPAND" value="0">
+ <constant name="STRETCH_SCALE_ON_EXPAND" value="0" enum="StretchMode">
Scale to fit the node's bounding rectangle, only if [code]expand[/code] is [code]true[/code]. Default [code]stretch_mode[/code], for backwards compatibility. Until you set [code]expand[/code] to [code]true[/code], the texture will behave like [code]STRETCH_KEEP[/code].
</constant>
- <constant name="STRETCH_SCALE" value="1">
+ <constant name="STRETCH_SCALE" value="1" enum="StretchMode">
Scale to fit the node's bounding rectangle.
</constant>
- <constant name="STRETCH_TILE" value="2">
+ <constant name="STRETCH_TILE" value="2" enum="StretchMode">
Tile inside the node's bounding rectangle.
</constant>
- <constant name="STRETCH_KEEP" value="3">
+ <constant name="STRETCH_KEEP" value="3" enum="StretchMode">
The texture keeps its original size and stays in the bounding rectangle's top-left corner.
</constant>
- <constant name="STRETCH_KEEP_CENTERED" value="4">
+ <constant name="STRETCH_KEEP_CENTERED" value="4" enum="StretchMode">
The texture keeps its original size and stays centered in the node's bounding rectangle.
</constant>
- <constant name="STRETCH_KEEP_ASPECT" value="5">
+ <constant name="STRETCH_KEEP_ASPECT" value="5" enum="StretchMode">
Scale the texture to fit the node's bounding rectangle, but maintain the texture's aspect ratio.
</constant>
- <constant name="STRETCH_KEEP_ASPECT_CENTERED" value="6">
+ <constant name="STRETCH_KEEP_ASPECT_CENTERED" value="6" enum="StretchMode">
Scale the texture to fit the node's bounding rectangle, center it and maintain its aspect ratio.
</constant>
- <constant name="STRETCH_KEEP_ASPECT_COVERED" value="7">
+ <constant name="STRETCH_KEEP_ASPECT_COVERED" value="7" enum="StretchMode">
Scale the texture so that the shorter side fits the bounding rectangle. The other side clips to the node's limits.
</constant>
</constants>
diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml
index 0a95a52e4f..f6d3b97181 100644
--- a/doc/classes/Theme.xml
+++ b/doc/classes/Theme.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Theme" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Theme" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Theme for controls.
</brief_description>
@@ -20,6 +20,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Clears theme [Color] at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="clear_constant">
@@ -30,6 +31,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Clears theme constant at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="clear_font">
@@ -40,6 +42,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Clears [Font] at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="clear_icon">
@@ -50,6 +53,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Clears icon at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="clear_stylebox">
@@ -60,12 +64,14 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Clears [StyleBox] at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="copy_default_theme">
<return type="void">
</return>
<description>
+ Sets theme values to a copy of the default theme values.
</description>
</method>
<method name="get_color" qualifiers="const">
@@ -76,6 +82,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns the [Color] at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="get_color_list" qualifiers="const">
@@ -84,6 +91,7 @@
<argument index="0" name="type" type="String">
</argument>
<description>
+ Returns all of the [Color]s as a [PoolStringArray] filled with each [Color]'s name, for use in [method get_color], if Theme has [code]type[/code].
</description>
</method>
<method name="get_constant" qualifiers="const">
@@ -94,6 +102,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns the constant at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="get_constant_list" qualifiers="const">
@@ -102,12 +111,7 @@
<argument index="0" name="type" type="String">
</argument>
<description>
- </description>
- </method>
- <method name="get_default_font" qualifiers="const">
- <return type="Font">
- </return>
- <description>
+ Returns all of the constants as a [PoolStringArray] filled with each constant's name, for use in [method get_constant], if Theme has [code]type[/code].
</description>
</method>
<method name="get_font" qualifiers="const">
@@ -118,6 +122,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns the [Font] at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="get_font_list" qualifiers="const">
@@ -126,6 +131,7 @@
<argument index="0" name="type" type="String">
</argument>
<description>
+ Returns all of the [Font]s as a [PoolStringArray] filled with each [Font]'s name, for use in [method get_font], if Theme has [code]type[/code].
</description>
</method>
<method name="get_icon" qualifiers="const">
@@ -136,6 +142,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns the icon [Texture] at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="get_icon_list" qualifiers="const">
@@ -144,6 +151,7 @@
<argument index="0" name="type" type="String">
</argument>
<description>
+ Returns all of the icons as a [PoolStringArray] filled with each [Texture]'s name, for use in [method get_icon], if Theme has [code]type[/code].
</description>
</method>
<method name="get_stylebox" qualifiers="const">
@@ -154,6 +162,7 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns the icon [StyleBox] at [code]name[/code] if Theme has [code]type[/code].
</description>
</method>
<method name="get_stylebox_list" qualifiers="const">
@@ -162,12 +171,14 @@
<argument index="0" name="type" type="String">
</argument>
<description>
+ Returns all of the [StyleBox]s as a [PoolStringArray] filled with each [StyleBox]'s name, for use in [method get_stylebox], if Theme has [code]type[/code].
</description>
</method>
<method name="get_stylebox_types" qualifiers="const">
<return type="PoolStringArray">
</return>
<description>
+ Returns all of the [StyleBox] types as a [PoolStringArray] filled with each [StyleBox]'s type, for use in [method get_stylebox] and/or [method get_stylebox_list], if Theme has [code]type[/code].
</description>
</method>
<method name="get_type_list" qualifiers="const">
@@ -176,6 +187,7 @@
<argument index="0" name="type" type="String">
</argument>
<description>
+ Returns all of the types in [code]type[/code] as a [PoolStringArray] for use in any of the get_* functions, if Theme has [code]type[/code].
</description>
</method>
<method name="has_color" qualifiers="const">
@@ -186,6 +198,8 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns [code]true[/code] if [Color] with [code]name[/code] is in [code]type[/code].
+ Returns [code]false[/code] if Theme does not have [code]type[/code].
</description>
</method>
<method name="has_constant" qualifiers="const">
@@ -196,6 +210,8 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns [code]true[/code] if constant with [code]name[/code] is in [code]type[/code].
+ Returns [code]false[/code] if Theme does not have [code]type[/code].
</description>
</method>
<method name="has_font" qualifiers="const">
@@ -206,6 +222,8 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns [code]true[/code] if [Font] with [code]name[/code] is in [code]type[/code].
+ Returns [code]false[/code] if Theme does not have [code]type[/code].
</description>
</method>
<method name="has_icon" qualifiers="const">
@@ -216,6 +234,8 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns [code]true[/code] if icon [Texture] with [code]name[/code] is in [code]type[/code].
+ Returns [code]false[/code] if Theme does not have [code]type[/code].
</description>
</method>
<method name="has_stylebox" qualifiers="const">
@@ -226,6 +246,8 @@
<argument index="1" name="type" type="String">
</argument>
<description>
+ Returns [code]true[/code] if [StyleBox] with [code]name[/code] is in [code]type[/code].
+ Returns [code]false[/code] if Theme does not have [code]type[/code].
</description>
</method>
<method name="set_color">
@@ -238,6 +260,8 @@
<argument index="2" name="color" type="Color">
</argument>
<description>
+ Sets Theme's [Color] to [code]color[/code] at [code]name[/code] in [code]type[/code].
+ Does nothing if Theme does not have [code]type[/code].
</description>
</method>
<method name="set_constant">
@@ -250,14 +274,8 @@
<argument index="2" name="constant" type="int">
</argument>
<description>
- </description>
- </method>
- <method name="set_default_font">
- <return type="void">
- </return>
- <argument index="0" name="font" type="Font">
- </argument>
- <description>
+ Sets Theme's constant to [code]constant[/code] at [code]name[/code] in [code]type[/code].
+ Does nothing if Theme does not have [code]type[/code].
</description>
</method>
<method name="set_font">
@@ -270,6 +288,8 @@
<argument index="2" name="font" type="Font">
</argument>
<description>
+ Sets Theme's [Font] to [code]font[/code] at [code]name[/code] in [code]type[/code].
+ Does nothing if Theme does not have [code]type[/code].
</description>
</method>
<method name="set_icon">
@@ -282,6 +302,8 @@
<argument index="2" name="texture" type="Texture">
</argument>
<description>
+ Sets Theme's icon [Texture] to [code]texture[/code] at [code]name[/code] in [code]type[/code].
+ Does nothing if Theme does not have [code]type[/code].
</description>
</method>
<method name="set_stylebox">
@@ -294,11 +316,14 @@
<argument index="2" name="texture" type="StyleBox">
</argument>
<description>
+ Sets Theme's [StyleBox] to [code]stylebox[/code] at [code]name[/code] in [code]type[/code].
+ Does nothing if Theme does not have [code]type[/code].
</description>
</method>
</methods>
<members>
<member name="default_font" type="Font" setter="set_default_font" getter="get_default_font">
+ The theme's default font.
</member>
</members>
<constants>
diff --git a/doc/classes/Thread.xml b/doc/classes/Thread.xml
index 24bc4bb985..c9b1d872bc 100644
--- a/doc/classes/Thread.xml
+++ b/doc/classes/Thread.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Thread" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="Thread" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
A unit of execution in a process.
</brief_description>
@@ -50,11 +50,11 @@
</method>
</methods>
<constants>
- <constant name="PRIORITY_LOW" value="0">
+ <constant name="PRIORITY_LOW" value="0" enum="Priority">
</constant>
- <constant name="PRIORITY_NORMAL" value="1">
+ <constant name="PRIORITY_NORMAL" value="1" enum="Priority">
</constant>
- <constant name="PRIORITY_HIGH" value="2">
+ <constant name="PRIORITY_HIGH" value="2" enum="Priority">
</constant>
</constants>
</class>
diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml
index c48f58f123..e58ab3dd25 100644
--- a/doc/classes/TileMap.xml
+++ b/doc/classes/TileMap.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TileMap" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="TileMap" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Node for 2D tile-based maps.
</brief_description>
@@ -29,13 +29,6 @@
Return the tile index of the referenced cell.
</description>
</method>
- <method name="get_cell_size" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the cell size.
- </description>
- </method>
<method name="get_cellv" qualifiers="const">
<return type="int">
</return>
@@ -59,33 +52,6 @@
Return true if tiles are to be centered in y coordinate (by default this is false and they are drawn from upper left cell corner).
</description>
</method>
- <method name="get_clip_uv" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_collision_bounce" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the collision bounce parameter.
- </description>
- </method>
- <method name="get_collision_friction" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the collision friction parameter.
- </description>
- </method>
- <method name="get_collision_layer" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the collision layer.
- </description>
- </method>
<method name="get_collision_layer_bit" qualifiers="const">
<return type="bool">
</return>
@@ -94,13 +60,6 @@
<description>
</description>
</method>
- <method name="get_collision_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the collision mask.
- </description>
- </method>
<method name="get_collision_mask_bit" qualifiers="const">
<return type="bool">
</return>
@@ -109,61 +68,6 @@
<description>
</description>
</method>
- <method name="get_collision_use_kinematic" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether the tilemap handles collisions as a kinematic body.
- </description>
- </method>
- <method name="get_custom_transform" qualifiers="const">
- <return type="Transform2D">
- </return>
- <description>
- Return the custom transform matrix.
- </description>
- </method>
- <method name="get_half_offset" qualifiers="const">
- <return type="int" enum="TileMap.HalfOffset">
- </return>
- <description>
- Return the current half offset configuration.
- </description>
- </method>
- <method name="get_mode" qualifiers="const">
- <return type="int" enum="TileMap.Mode">
- </return>
- <description>
- Return the orientation mode.
- </description>
- </method>
- <method name="get_occluder_light_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_quadrant_size" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Return the quadrant size.
- </description>
- </method>
- <method name="get_tile_origin" qualifiers="const">
- <return type="int" enum="TileMap.TileOrigin">
- </return>
- <description>
- Return the tile origin configuration.
- </description>
- </method>
- <method name="get_tileset" qualifiers="const">
- <return type="TileSet">
- </return>
- <description>
- Return the current tileset.
- </description>
- </method>
<method name="get_used_cells" qualifiers="const">
<return type="Array">
</return>
@@ -218,13 +122,6 @@
Return whether the referenced cell is flipped over the Y axis.
</description>
</method>
- <method name="is_y_sort_mode_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return the Y sort mode.
- </description>
- </method>
<method name="map_to_world" qualifiers="const">
<return type="Vector2">
</return>
@@ -252,19 +149,12 @@
</argument>
<argument index="5" name="transpose" type="bool" default="false">
</argument>
+ <argument index="6" name="autotile_coord" type="Vector2" default="Vector2( 0, 0 )">
+ </argument>
<description>
Set the tile index for the cell referenced by its grid-based X and Y coordinates.
A tile index of -1 clears the cell.
- Optionally, the tile can also be flipped over the X and Y coordinates or transposed.
- </description>
- </method>
- <method name="set_cell_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector2">
- </argument>
- <description>
- Set the cell size.
+ Optionally, the tile can also be flipped over the X and Y coordinates, transposed, or be given autotile coordinates.
</description>
</method>
<method name="set_cellv">
@@ -304,42 +194,6 @@
Set tiles to be centered in y coordinate. (by default this is false and they are drawn from upper left cell corner).
</description>
</method>
- <method name="set_clip_uv">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_collision_bounce">
- <return type="void">
- </return>
- <argument index="0" name="value" type="float">
- </argument>
- <description>
- Set the collision bounce parameter. Allowable values range from 0 to 1.
- </description>
- </method>
- <method name="set_collision_friction">
- <return type="void">
- </return>
- <argument index="0" name="value" type="float">
- </argument>
- <description>
- Set the collision friction parameter. Allowable values range from 0 to 1.
- </description>
- </method>
- <method name="set_collision_layer">
- <return type="void">
- </return>
- <argument index="0" name="layer" type="int">
- </argument>
- <description>
- Set the collision layer.
- Layers are referenced by binary indexes, so allowable values to describe the 20 available layers range from 0 to 2^20-1.
- </description>
- </method>
<method name="set_collision_layer_bit">
<return type="void">
</return>
@@ -350,16 +204,6 @@
<description>
</description>
</method>
- <method name="set_collision_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- Set the collision masks.
- Masks are referenced by binary indexes, so allowable values to describe the 20 available masks range from 0 to 2^20-1.
- </description>
- </method>
<method name="set_collision_mask_bit">
<return type="void">
</return>
@@ -370,89 +214,6 @@
<description>
</description>
</method>
- <method name="set_collision_use_kinematic">
- <return type="void">
- </return>
- <argument index="0" name="use_kinematic" type="bool">
- </argument>
- <description>
- Set the tilemap to handle collisions as a kinematic body (enabled) or a static body (disabled).
- </description>
- </method>
- <method name="set_custom_transform">
- <return type="void">
- </return>
- <argument index="0" name="custom_transform" type="Transform2D">
- </argument>
- <description>
- Set custom transform matrix, to use in combination with the custom orientation mode.
- </description>
- </method>
- <method name="set_half_offset">
- <return type="void">
- </return>
- <argument index="0" name="half_offset" type="int" enum="TileMap.HalfOffset">
- </argument>
- <description>
- Set a half offset on the X coordinate, Y coordinate, or none (use HALF_OFFSET_* constants as argument).
- Half offset sets every other tile off by a half tile size in the specified direction.
- </description>
- </method>
- <method name="set_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="TileMap.Mode">
- </argument>
- <description>
- Set the orientation mode as square, isometric or custom (use MODE_* constants as argument).
- </description>
- </method>
- <method name="set_occluder_light_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_quadrant_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="int">
- </argument>
- <description>
- Set the quadrant size, this optimizes drawing by batching chunks of map at draw/cull time.
- Allowed values are integers ranging from 1 to 128.
- </description>
- </method>
- <method name="set_tile_origin">
- <return type="void">
- </return>
- <argument index="0" name="origin" type="int" enum="TileMap.TileOrigin">
- </argument>
- <description>
- Set the tile origin to the tile center or its top-left corner (use TILE_ORIGIN_* constants as argument).
- </description>
- </method>
- <method name="set_tileset">
- <return type="void">
- </return>
- <argument index="0" name="tileset" type="TileSet">
- </argument>
- <description>
- Set the current tileset.
- </description>
- </method>
- <method name="set_y_sort_mode">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set the Y sort mode. Enabled Y sort mode means that children of the tilemap will be drawn in the order defined by their Y coordinate.
- A tile with a higher Y coordinate will therefore be drawn later, potentially covering up the tile(s) above it if its sprite is higher than its cell size.
- </description>
- </method>
<method name="world_to_map" qualifiers="const">
<return type="Vector2">
</return>
@@ -505,9 +266,6 @@
<member name="occluder_light_mask" type="int" setter="set_occluder_light_mask" getter="get_occluder_light_mask">
The light mask assigned to all light occluders in the TileMap. The TileSet's light occluders will cast shadows only from Light2D(s) that have the same light mask(s).
</member>
- <member name="tile_data" type="PoolIntArray" setter="_set_tile_data" getter="_get_tile_data">
- A [PoolIntArray] containing
- </member>
<member name="tile_set" type="TileSet" setter="set_tileset" getter="get_tileset">
The assigned [TileSet].
</member>
@@ -520,34 +278,34 @@
</signal>
</signals>
<constants>
- <constant name="INVALID_CELL" value="-1" enum="">
+ <constant name="INVALID_CELL" value="-1">
Returned when a cell doesn't exist.
</constant>
- <constant name="MODE_SQUARE" value="0">
+ <constant name="MODE_SQUARE" value="0" enum="Mode">
Orthogonal orientation mode.
</constant>
- <constant name="MODE_ISOMETRIC" value="1">
+ <constant name="MODE_ISOMETRIC" value="1" enum="Mode">
Isometric orientation mode.
</constant>
- <constant name="MODE_CUSTOM" value="2">
+ <constant name="MODE_CUSTOM" value="2" enum="Mode">
Custom orientation mode.
</constant>
- <constant name="HALF_OFFSET_X" value="0">
+ <constant name="HALF_OFFSET_X" value="0" enum="HalfOffset">
Half offset on the X coordinate.
</constant>
- <constant name="HALF_OFFSET_Y" value="1">
+ <constant name="HALF_OFFSET_Y" value="1" enum="HalfOffset">
Half offset on the Y coordinate.
</constant>
- <constant name="HALF_OFFSET_DISABLED" value="2">
+ <constant name="HALF_OFFSET_DISABLED" value="2" enum="HalfOffset">
Half offset disabled.
</constant>
- <constant name="TILE_ORIGIN_TOP_LEFT" value="0">
+ <constant name="TILE_ORIGIN_TOP_LEFT" value="0" enum="TileOrigin">
Tile origin at its top-left corner.
</constant>
- <constant name="TILE_ORIGIN_CENTER" value="1">
+ <constant name="TILE_ORIGIN_CENTER" value="1" enum="TileOrigin">
Tile origin at its center.
</constant>
- <constant name="TILE_ORIGIN_BOTTOM_LEFT" value="2">
+ <constant name="TILE_ORIGIN_BOTTOM_LEFT" value="2" enum="TileOrigin">
</constant>
</constants>
</class>
diff --git a/doc/classes/TileSet.xml b/doc/classes/TileSet.xml
index a1063567f8..6a147a9646 100644
--- a/doc/classes/TileSet.xml
+++ b/doc/classes/TileSet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TileSet" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="TileSet" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Tile library for tilemaps.
</brief_description>
@@ -12,6 +12,48 @@
<demos>
</demos>
<methods>
+ <method name="_forward_subtile_selection" qualifiers="virtual">
+ <return type="void">
+ </return>
+ <argument index="0" name="autotile_id" type="int">
+ </argument>
+ <argument index="1" name="bitmask" type="int">
+ </argument>
+ <argument index="2" name="tilemap" type="Object">
+ </argument>
+ <argument index="3" name="tile_location" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="_is_tile_bound" qualifiers="virtual">
+ <return type="void">
+ </return>
+ <argument index="0" name="drawn_id" type="int">
+ </argument>
+ <argument index="1" name="neighbor_id" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="autotile_get_bitmask_mode" qualifiers="const">
+ <return type="int" enum="TileSet.BitmaskMode">
+ </return>
+ <argument index="0" name="arg0" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="autotile_set_bitmask_mode">
+ <return type="void">
+ </return>
+ <argument index="0" name="mode" type="int">
+ </argument>
+ <argument index="1" name="arg1" type="int" enum="TileSet.BitmaskMode">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="clear">
<return type="void">
</return>
@@ -71,6 +113,8 @@
</argument>
<argument index="3" name="one_way" type="bool" default="false">
</argument>
+ <argument index="4" name="autotile_coord" type="Vector2" default="Vector2( 0, 0 )">
+ </argument>
<description>
</description>
</method>
@@ -368,5 +412,25 @@
</method>
</methods>
<constants>
+ <constant name="BITMASK_2X2" value="0" enum="BitmaskMode">
+ </constant>
+ <constant name="BITMASK_3X3" value="1" enum="BitmaskMode">
+ </constant>
+ <constant name="BIND_TOPLEFT" value="1" enum="AutotileBindings">
+ </constant>
+ <constant name="BIND_TOP" value="2" enum="AutotileBindings">
+ </constant>
+ <constant name="BIND_TOPRIGHT" value="4" enum="AutotileBindings">
+ </constant>
+ <constant name="BIND_LEFT" value="8" enum="AutotileBindings">
+ </constant>
+ <constant name="BIND_RIGHT" value="32" enum="AutotileBindings">
+ </constant>
+ <constant name="BIND_BOTTOMLEFT" value="64" enum="AutotileBindings">
+ </constant>
+ <constant name="BIND_BOTTOM" value="128" enum="AutotileBindings">
+ </constant>
+ <constant name="BIND_BOTTOMRIGHT" value="256" enum="AutotileBindings">
+ </constant>
</constants>
</class>
diff --git a/doc/classes/Timer.xml b/doc/classes/Timer.xml
index 8d834537a7..7ea83b0b22 100644
--- a/doc/classes/Timer.xml
+++ b/doc/classes/Timer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Timer" inherits="Node" category="Core" version="3.0-alpha">
+<class name="Timer" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
A countdown timer.
</brief_description>
@@ -18,34 +18,6 @@
Return the time left for timeout in seconds if the timer is active, 0 otherwise.
</description>
</method>
- <method name="get_timer_process_mode" qualifiers="const">
- <return type="int" enum="Timer.TimerProcessMode">
- </return>
- <description>
- Return the timer's processing mode.
- </description>
- </method>
- <method name="get_wait_time" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the wait time in seconds.
- </description>
- </method>
- <method name="has_autostart" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if set to automatically start when entering the scene.
- </description>
- </method>
- <method name="is_one_shot" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return true if configured as one-shot.
- </description>
- </method>
<method name="is_paused" qualifiers="const">
<return type="bool">
</return>
@@ -59,24 +31,6 @@
<description>
</description>
</method>
- <method name="set_autostart">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set to automatically start when entering the scene.
- </description>
- </method>
- <method name="set_one_shot">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set as one-shot. If enabled, the timer will stop after timeout, otherwise it will automatically restart.
- </description>
- </method>
<method name="set_paused">
<return type="void">
</return>
@@ -86,24 +40,6 @@
Set whether the timer is paused or not. A paused timer will be inactive until it is unpaused again.
</description>
</method>
- <method name="set_timer_process_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Timer.TimerProcessMode">
- </argument>
- <description>
- Set the timer's processing mode (fixed or idle, use TIMER_PROCESS_* constants as argument).
- </description>
- </method>
- <method name="set_wait_time">
- <return type="void">
- </return>
- <argument index="0" name="time_sec" type="float">
- </argument>
- <description>
- Set wait time in seconds. When the time is over, it will emit the timeout signal.
- </description>
- </method>
<method name="start">
<return type="void">
</return>
@@ -141,10 +77,10 @@
</signal>
</signals>
<constants>
- <constant name="TIMER_PROCESS_PHYSICS" value="0">
+ <constant name="TIMER_PROCESS_PHYSICS" value="0" enum="TimerProcessMode">
Update the Timer during the physics step at each frame (fixed framerate processing).
</constant>
- <constant name="TIMER_PROCESS_IDLE" value="1">
+ <constant name="TIMER_PROCESS_IDLE" value="1" enum="TimerProcessMode">
Update the Timer during the idle time at each frame.
</constant>
</constants>
diff --git a/doc/classes/ToolButton.xml b/doc/classes/ToolButton.xml
index b541d00d2f..512bbbf3f0 100644
--- a/doc/classes/ToolButton.xml
+++ b/doc/classes/ToolButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ToolButton" inherits="Button" category="Core" version="3.0-alpha">
+<class name="ToolButton" inherits="Button" category="Core" version="3.0-beta">
<brief_description>
Flat button helper class.
</brief_description>
diff --git a/doc/classes/TouchScreenButton.xml b/doc/classes/TouchScreenButton.xml
index 283ead1b1b..776765f84d 100644
--- a/doc/classes/TouchScreenButton.xml
+++ b/doc/classes/TouchScreenButton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TouchScreenButton" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="TouchScreenButton" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Button for touch screen devices.
</brief_description>
@@ -11,54 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_action" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Returns the button's action.
- </description>
- </method>
- <method name="get_bitmask" qualifiers="const">
- <return type="BitMap">
- </return>
- <description>
- Returns the button's bitmask.
- </description>
- </method>
- <method name="get_shape" qualifiers="const">
- <return type="Shape2D">
- </return>
- <description>
- Returns the button's shape.
- </description>
- </method>
- <method name="get_texture" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- Returns the button's texture for the normal state.
- </description>
- </method>
- <method name="get_texture_pressed" qualifiers="const">
- <return type="Texture">
- </return>
- <description>
- Returns the button's texture for the pressed state.
- </description>
- </method>
- <method name="get_visibility_mode" qualifiers="const">
- <return type="int" enum="TouchScreenButton.VisibilityMode">
- </return>
- <description>
- Sets the button's visibility mode. See [code]VISIBILITY_*[/code] constants.
- </description>
- </method>
- <method name="is_passby_press_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
<method name="is_pressed" qualifiers="const">
<return type="bool">
</return>
@@ -66,99 +18,6 @@
Returns [code]true[/code] if this button is currently pressed.
</description>
</method>
- <method name="is_shape_centered" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_shape_visible" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_action">
- <return type="void">
- </return>
- <argument index="0" name="action" type="String">
- </argument>
- <description>
- Sets the button's action.
- </description>
- </method>
- <method name="set_bitmask">
- <return type="void">
- </return>
- <argument index="0" name="bitmask" type="BitMap">
- </argument>
- <description>
- Sets the button's [BitMap] bitmask.
- </description>
- </method>
- <method name="set_passby_press">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- If [code]true[/code] passby presses are enabled for this button.
- </description>
- </method>
- <method name="set_shape">
- <return type="void">
- </return>
- <argument index="0" name="shape" type="Shape2D">
- </argument>
- <description>
- Sets the button's shape.
- </description>
- </method>
- <method name="set_shape_centered">
- <return type="void">
- </return>
- <argument index="0" name="bool" type="bool">
- </argument>
- <description>
- If [code]true[/code] the button's shape is centered.
- </description>
- </method>
- <method name="set_shape_visible">
- <return type="void">
- </return>
- <argument index="0" name="bool" type="bool">
- </argument>
- <description>
- If [code]true[/code] the button's shape is visible.
- </description>
- </method>
- <method name="set_texture">
- <return type="void">
- </return>
- <argument index="0" name="texture" type="Texture">
- </argument>
- <description>
- Sets the button's [Texture] for the normal state.
- </description>
- </method>
- <method name="set_texture_pressed">
- <return type="void">
- </return>
- <argument index="0" name="texture_pressed" type="Texture">
- </argument>
- <description>
- Sets the button's [Texture] for the pressed state.
- </description>
- </method>
- <method name="set_visibility_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="TouchScreenButton.VisibilityMode">
- </argument>
- <description>
- Sets the button's visibility mode. See the [code]VISIBILITY_*[/code] constants.
- </description>
- </method>
</methods>
<members>
<member name="action" type="String" setter="set_action" getter="get_action">
@@ -202,10 +61,10 @@
</signal>
</signals>
<constants>
- <constant name="VISIBILITY_ALWAYS" value="0">
+ <constant name="VISIBILITY_ALWAYS" value="0" enum="VisibilityMode">
Always visible.
</constant>
- <constant name="VISIBILITY_TOUCHSCREEN_ONLY" value="1">
+ <constant name="VISIBILITY_TOUCHSCREEN_ONLY" value="1" enum="VisibilityMode">
Visible on touch screens only.
</constant>
</constants>
diff --git a/doc/classes/Transform.xml b/doc/classes/Transform.xml
index 9e1672e6f5..83003cb357 100644
--- a/doc/classes/Transform.xml
+++ b/doc/classes/Transform.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Transform" category="Built-In Types" version="3.0-alpha">
+<class name="Transform" category="Built-In Types" version="3.0-beta">
<brief_description>
3D Transformation. 3x4 matrix.
</brief_description>
diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml
index d17063b550..17576f33ed 100644
--- a/doc/classes/Transform2D.xml
+++ b/doc/classes/Transform2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Transform2D" category="Built-In Types" version="3.0-alpha">
+<class name="Transform2D" category="Built-In Types" version="3.0-beta">
<brief_description>
2D Transformation. 3x2 matrix.
</brief_description>
diff --git a/doc/classes/Translation.xml b/doc/classes/Translation.xml
index dc2609b3e1..cb49c66383 100644
--- a/doc/classes/Translation.xml
+++ b/doc/classes/Translation.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Translation" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="Translation" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Language Translation.
</brief_description>
@@ -31,13 +31,6 @@
Erase a message.
</description>
</method>
- <method name="get_locale" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the locale of the translation.
- </description>
- </method>
<method name="get_message" qualifiers="const">
<return type="String">
</return>
@@ -60,21 +53,10 @@
Return all the messages (keys).
</description>
</method>
- <method name="set_locale">
- <return type="void">
- </return>
- <argument index="0" name="locale" type="String">
- </argument>
- <description>
- Set the locale of the translation.
- </description>
- </method>
</methods>
<members>
<member name="locale" type="String" setter="set_locale" getter="get_locale">
</member>
- <member name="messages" type="PoolStringArray" setter="_set_messages" getter="_get_messages">
- </member>
</members>
<constants>
</constants>
diff --git a/doc/classes/TranslationServer.xml b/doc/classes/TranslationServer.xml
index 8b50bf027b..c9b5b46525 100644
--- a/doc/classes/TranslationServer.xml
+++ b/doc/classes/TranslationServer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TranslationServer" inherits="Object" category="Core" version="3.0-alpha">
+<class name="TranslationServer" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Server that manages all translations. Translations can be set to it and removed from it.
</brief_description>
diff --git a/doc/classes/Tree.xml b/doc/classes/Tree.xml
index 508a0ec194..11bd3b3b86 100644
--- a/doc/classes/Tree.xml
+++ b/doc/classes/Tree.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Tree" inherits="Control" category="Core" version="3.0-alpha">
+<class name="Tree" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Control to show a tree of items.
</brief_description>
@@ -405,21 +405,25 @@
Emitted instead of [code]item_selected[/code] when [code]select_mode[/code] is [code]SELECT_MULTI[/code].
</description>
</signal>
+ <signal name="nothing_selected">
+ <description>
+ </description>
+ </signal>
</signals>
<constants>
- <constant name="SELECT_SINGLE" value="0">
+ <constant name="SELECT_SINGLE" value="0" enum="SelectMode">
Allow selection of a single item at a time.
</constant>
- <constant name="SELECT_ROW" value="1">
+ <constant name="SELECT_ROW" value="1" enum="SelectMode">
</constant>
- <constant name="SELECT_MULTI" value="2">
+ <constant name="SELECT_MULTI" value="2" enum="SelectMode">
Allow selection of multiple items at the same time.
</constant>
- <constant name="DROP_MODE_DISABLED" value="0">
+ <constant name="DROP_MODE_DISABLED" value="0" enum="DropModeFlags">
</constant>
- <constant name="DROP_MODE_ON_ITEM" value="1">
+ <constant name="DROP_MODE_ON_ITEM" value="1" enum="DropModeFlags">
</constant>
- <constant name="DROP_MODE_INBETWEEN" value="2">
+ <constant name="DROP_MODE_INBETWEEN" value="2" enum="DropModeFlags">
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/TreeItem.xml b/doc/classes/TreeItem.xml
index b463ef7bbb..421185fe51 100644
--- a/doc/classes/TreeItem.xml
+++ b/doc/classes/TreeItem.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TreeItem" inherits="Object" category="Core" version="3.0-alpha">
+<class name="TreeItem" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Control for a single item inside a [Tree].
</brief_description>
@@ -586,30 +586,30 @@
</method>
</methods>
<constants>
- <constant name="CELL_MODE_STRING" value="0">
+ <constant name="CELL_MODE_STRING" value="0" enum="TreeCellMode">
Cell contains a string.
</constant>
- <constant name="CELL_MODE_CHECK" value="1">
+ <constant name="CELL_MODE_CHECK" value="1" enum="TreeCellMode">
Cell can be checked.
</constant>
- <constant name="CELL_MODE_RANGE" value="2">
+ <constant name="CELL_MODE_RANGE" value="2" enum="TreeCellMode">
Cell contains a range.
</constant>
- <constant name="CELL_MODE_RANGE_EXPRESSION" value="3">
+ <constant name="CELL_MODE_RANGE_EXPRESSION" value="3" enum="TreeCellMode">
Cell contains a range expression.
</constant>
- <constant name="CELL_MODE_ICON" value="4">
+ <constant name="CELL_MODE_ICON" value="4" enum="TreeCellMode">
Cell contains an icon.
</constant>
- <constant name="CELL_MODE_CUSTOM" value="5">
+ <constant name="CELL_MODE_CUSTOM" value="5" enum="TreeCellMode">
</constant>
- <constant name="ALIGN_LEFT" value="0">
+ <constant name="ALIGN_LEFT" value="0" enum="TextAlign">
Align text to the left. See [code]set_text_align()[/code].
</constant>
- <constant name="ALIGN_CENTER" value="1">
+ <constant name="ALIGN_CENTER" value="1" enum="TextAlign">
Center text. See [code]set_text_align()[/code].
</constant>
- <constant name="ALIGN_RIGHT" value="2">
+ <constant name="ALIGN_RIGHT" value="2" enum="TextAlign">
Align text to the right. See [code]set_text_align()[/code].
</constant>
</constants>
diff --git a/doc/classes/TriangleMesh.xml b/doc/classes/TriangleMesh.xml
index 21a37913c8..adc9e00536 100644
--- a/doc/classes/TriangleMesh.xml
+++ b/doc/classes/TriangleMesh.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="TriangleMesh" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="TriangleMesh" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/Tween.xml b/doc/classes/Tween.xml
index 822eee5838..a11580860a 100644
--- a/doc/classes/Tween.xml
+++ b/doc/classes/Tween.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Tween" inherits="Node" category="Core" version="3.0-alpha">
+<class name="Tween" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Node useful for animations with unknown start and end points.
</brief_description>
@@ -50,13 +50,13 @@
</return>
<argument index="0" name="object" type="Object">
</argument>
- <argument index="1" name="property" type="String">
+ <argument index="1" name="property" type="NodePath">
</argument>
<argument index="2" name="initial_val" type="Variant">
</argument>
<argument index="3" name="target" type="Object">
</argument>
- <argument index="4" name="target_property" type="String">
+ <argument index="4" name="target_property" type="NodePath">
</argument>
<argument index="5" name="duration" type="float">
</argument>
@@ -85,13 +85,6 @@
Returns the speed that has been set from editor GUI or [method set_repeat].
</description>
</method>
- <method name="get_tween_process_mode" qualifiers="const">
- <return type="int" enum="Tween.TweenProcessMode">
- </return>
- <description>
- Returns the process mode that has been set from editor GUI or [method set_tween_process_mode]
- </description>
- </method>
<method name="interpolate_callback">
<return type="bool">
</return>
@@ -167,7 +160,7 @@
</return>
<argument index="0" name="object" type="Object">
</argument>
- <argument index="1" name="property" type="String">
+ <argument index="1" name="property" type="NodePath">
</argument>
<argument index="2" name="initial_val" type="Variant">
</argument>
@@ -290,15 +283,6 @@
Set the speed multiplier of the tween. Set it to 1 for normal speed, 2 for two times nromal speed, and 0.5 for half of the normal speed. Setting it to 0 would pause the animation, but you might consider using [method set_active] or [method stop_all] and [method resume_all] for this.
</description>
</method>
- <method name="set_tween_process_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Tween.TweenProcessMode">
- </argument>
- <description>
- Set whether the Tween uses [code]_process[/code] or [code]_physics_process[/code] (accepts TWEEN_PROCESS_IDLE and TWEEN_PROCESS_PHYSICS constants, respectively).
- </description>
- </method>
<method name="start">
<return type="bool">
</return>
@@ -355,11 +339,11 @@
</return>
<argument index="0" name="object" type="Object">
</argument>
- <argument index="1" name="property" type="String">
+ <argument index="1" name="property" type="NodePath">
</argument>
<argument index="2" name="initial" type="Object">
</argument>
- <argument index="3" name="initial_val" type="String">
+ <argument index="3" name="initial_val" type="NodePath">
</argument>
<argument index="4" name="final_val" type="Variant">
</argument>
@@ -422,55 +406,55 @@
</signal>
</signals>
<constants>
- <constant name="TWEEN_PROCESS_PHYSICS" value="0">
+ <constant name="TWEEN_PROCESS_PHYSICS" value="0" enum="TweenProcessMode">
The [code]Tween[/code] should use [code]_physics_process[/code] for timekeeping when this is enabled.
</constant>
- <constant name="TWEEN_PROCESS_IDLE" value="1">
+ <constant name="TWEEN_PROCESS_IDLE" value="1" enum="TweenProcessMode">
The [code]Tween[/code] should use [code]_process[/code] for timekeeping when this is enabled (default).
</constant>
- <constant name="TRANS_LINEAR" value="0">
+ <constant name="TRANS_LINEAR" value="0" enum="TransitionType">
Means that the animation is interpolated linearly.
</constant>
- <constant name="TRANS_SINE" value="1">
+ <constant name="TRANS_SINE" value="1" enum="TransitionType">
Means that the animation is interpolated using a sine wave.
</constant>
- <constant name="TRANS_QUINT" value="2">
+ <constant name="TRANS_QUINT" value="2" enum="TransitionType">
Means that the animation is interpolated with a quinary (to the power of 5) function.
</constant>
- <constant name="TRANS_QUART" value="3">
+ <constant name="TRANS_QUART" value="3" enum="TransitionType">
Means that the animation is interpolated with a quartic (to the power of 4) function.
</constant>
- <constant name="TRANS_QUAD" value="4">
+ <constant name="TRANS_QUAD" value="4" enum="TransitionType">
Means that the animation is interpolated with a quadratic (to the power of 2) function.
</constant>
- <constant name="TRANS_EXPO" value="5">
+ <constant name="TRANS_EXPO" value="5" enum="TransitionType">
Means that the animation is interpolated with an exponential (some number to the power of x) function.
</constant>
- <constant name="TRANS_ELASTIC" value="6">
+ <constant name="TRANS_ELASTIC" value="6" enum="TransitionType">
Means that the animation is interpolated with elasticity, wiggling around the edges.
</constant>
- <constant name="TRANS_CUBIC" value="7">
+ <constant name="TRANS_CUBIC" value="7" enum="TransitionType">
Means that the animation is interpolated with a cubic (to the power of 3) function.
</constant>
- <constant name="TRANS_CIRC" value="8">
+ <constant name="TRANS_CIRC" value="8" enum="TransitionType">
Means that the animation is interpolated with a function using square roots.
</constant>
- <constant name="TRANS_BOUNCE" value="9">
+ <constant name="TRANS_BOUNCE" value="9" enum="TransitionType">
Means that the animation is interpolated by bouncing at, but never surpassing, the end.
</constant>
- <constant name="TRANS_BACK" value="10">
+ <constant name="TRANS_BACK" value="10" enum="TransitionType">
Means that the animation is interpolated backing out at edges.
</constant>
- <constant name="EASE_IN" value="0">
+ <constant name="EASE_IN" value="0" enum="EaseType">
Signifies that the interpolation should be focused in the beginning.
</constant>
- <constant name="EASE_OUT" value="1">
+ <constant name="EASE_OUT" value="1" enum="EaseType">
Signifies that the interpolation should be focused in the end.
</constant>
- <constant name="EASE_IN_OUT" value="2">
+ <constant name="EASE_IN_OUT" value="2" enum="EaseType">
Signifies that the interpolation should be focused in both ends.
</constant>
- <constant name="EASE_OUT_IN" value="3">
+ <constant name="EASE_OUT_IN" value="3" enum="EaseType">
Signifies that the interpolation should be focused in both ends, but they should be switched (a bit hard to explain, try it for yourself to be sure).
</constant>
</constants>
diff --git a/doc/classes/UndoRedo.xml b/doc/classes/UndoRedo.xml
index 718522aa57..f0d69b9b7f 100644
--- a/doc/classes/UndoRedo.xml
+++ b/doc/classes/UndoRedo.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="UndoRedo" inherits="Object" category="Core" version="3.0-alpha">
+<class name="UndoRedo" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Helper to manage UndoRedo in the editor or custom tools.
</brief_description>
@@ -144,11 +144,11 @@
</method>
</methods>
<constants>
- <constant name="MERGE_DISABLE" value="0">
+ <constant name="MERGE_DISABLE" value="0" enum="MergeMode">
</constant>
- <constant name="MERGE_ENDS" value="1">
+ <constant name="MERGE_ENDS" value="1" enum="MergeMode">
</constant>
- <constant name="MERGE_ALL" value="2">
+ <constant name="MERGE_ALL" value="2" enum="MergeMode">
</constant>
</constants>
</class>
diff --git a/doc/classes/VBoxContainer.xml b/doc/classes/VBoxContainer.xml
index b64b04437a..7c943d5e5d 100644
--- a/doc/classes/VBoxContainer.xml
+++ b/doc/classes/VBoxContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VBoxContainer" inherits="BoxContainer" category="Core" version="3.0-alpha">
+<class name="VBoxContainer" inherits="BoxContainer" category="Core" version="3.0-beta">
<brief_description>
Vertical box container.
</brief_description>
diff --git a/doc/classes/VScrollBar.xml b/doc/classes/VScrollBar.xml
index 5e5ed6f211..23ded3a4b7 100644
--- a/doc/classes/VScrollBar.xml
+++ b/doc/classes/VScrollBar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VScrollBar" inherits="ScrollBar" category="Core" version="3.0-alpha">
+<class name="VScrollBar" inherits="ScrollBar" category="Core" version="3.0-beta">
<brief_description>
Vertical version of [ScrollBar], which goes from left (min) to right (max).
</brief_description>
diff --git a/doc/classes/VSeparator.xml b/doc/classes/VSeparator.xml
index 88c043f9ca..931560855b 100644
--- a/doc/classes/VSeparator.xml
+++ b/doc/classes/VSeparator.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VSeparator" inherits="Separator" category="Core" version="3.0-alpha">
+<class name="VSeparator" inherits="Separator" category="Core" version="3.0-beta">
<brief_description>
Vertical version of [Separator].
</brief_description>
diff --git a/doc/classes/VSlider.xml b/doc/classes/VSlider.xml
index bc0a3a25b6..ed8940ed4e 100644
--- a/doc/classes/VSlider.xml
+++ b/doc/classes/VSlider.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VSlider" inherits="Slider" category="Core" version="3.0-alpha">
+<class name="VSlider" inherits="Slider" category="Core" version="3.0-beta">
<brief_description>
Vertical slider.
</brief_description>
diff --git a/doc/classes/VSplitContainer.xml b/doc/classes/VSplitContainer.xml
index e5a8981aaf..22f6bb449b 100644
--- a/doc/classes/VSplitContainer.xml
+++ b/doc/classes/VSplitContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VSplitContainer" inherits="SplitContainer" category="Core" version="3.0-alpha">
+<class name="VSplitContainer" inherits="SplitContainer" category="Core" version="3.0-beta">
<brief_description>
Vertical split container.
</brief_description>
diff --git a/doc/classes/Variant.xml b/doc/classes/Variant.xml
index 14df6f050f..12cbd276a1 100644
--- a/doc/classes/Variant.xml
+++ b/doc/classes/Variant.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Variant" category="Core" version="3.0-alpha">
+<class name="Variant" category="Core" version="3.0-beta">
<brief_description>
The most important data type in Godot.
</brief_description>
diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml
index 3afad1d6fa..976cdbbd90 100644
--- a/doc/classes/Vector2.xml
+++ b/doc/classes/Vector2.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Vector2" category="Built-In Types" version="3.0-alpha">
+<class name="Vector2" category="Built-In Types" version="3.0-beta">
<brief_description>
Vector used for 2D Math.
</brief_description>
diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml
index cec5970f06..acb41297a7 100644
--- a/doc/classes/Vector3.xml
+++ b/doc/classes/Vector3.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Vector3" category="Built-In Types" version="3.0-alpha">
+<class name="Vector3" category="Built-In Types" version="3.0-beta">
<brief_description>
Vector class, which performs basic 3D vector math operations.
</brief_description>
@@ -241,13 +241,13 @@
</member>
</members>
<constants>
- <constant name="AXIS_X" value="0" enum="">
+ <constant name="AXIS_X" value="0">
Enumerated value for the X axis. Returned by functions like max_axis or min_axis.
</constant>
- <constant name="AXIS_Y" value="1" enum="">
+ <constant name="AXIS_Y" value="1">
Enumerated value for the Y axis.
</constant>
- <constant name="AXIS_Z" value="2" enum="">
+ <constant name="AXIS_Z" value="2">
Enumerated value for the Z axis.
</constant>
</constants>
diff --git a/doc/classes/VehicleBody.xml b/doc/classes/VehicleBody.xml
index f9f3590385..77916a7e9f 100644
--- a/doc/classes/VehicleBody.xml
+++ b/doc/classes/VehicleBody.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VehicleBody" inherits="PhysicsBody" category="Core" version="3.0-alpha">
+<class name="VehicleBody" inherits="PhysicsBody" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,24 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_brake" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_engine_force" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_friction" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_linear_velocity" qualifiers="const">
<return type="Vector3">
</return>
@@ -38,60 +20,6 @@
[/codeblock]
</description>
</method>
- <method name="get_mass" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_steering" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the steering angle (in radians).
- </description>
- </method>
- <method name="set_brake">
- <return type="void">
- </return>
- <argument index="0" name="brake" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_engine_force">
- <return type="void">
- </return>
- <argument index="0" name="engine_force" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_friction">
- <return type="void">
- </return>
- <argument index="0" name="friction" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_mass">
- <return type="void">
- </return>
- <argument index="0" name="mass" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_steering">
- <return type="void">
- </return>
- <argument index="0" name="steering" type="float">
- </argument>
- <description>
- Set the steering angle (in radians).
- </description>
- </method>
</methods>
<members>
<member name="brake" type="float" setter="set_brake" getter="get_brake">
diff --git a/doc/classes/VehicleWheel.xml b/doc/classes/VehicleWheel.xml
index f04c33cc5a..7c384886cb 100644
--- a/doc/classes/VehicleWheel.xml
+++ b/doc/classes/VehicleWheel.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VehicleWheel" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="VehicleWheel" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,172 +9,18 @@
<demos>
</demos>
<methods>
- <method name="get_damping_compression" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_damping_relaxation" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_friction_slip" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_radius" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_roll_influence" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_skidinfo" qualifiers="const">
<return type="float">
</return>
<description>
</description>
</method>
- <method name="get_suspension_max_force" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_suspension_rest_length" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_suspension_stiffness" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
- <method name="get_suspension_travel" qualifiers="const">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="is_in_contact" qualifiers="const">
<return type="bool">
</return>
<description>
</description>
</method>
- <method name="is_used_as_steering" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_used_as_traction" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_damping_compression">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_damping_relaxation">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_friction_slip">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_radius">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_roll_influence">
- <return type="void">
- </return>
- <argument index="0" name="roll_influence" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_suspension_max_force">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_suspension_rest_length">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_suspension_stiffness">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_suspension_travel">
- <return type="void">
- </return>
- <argument index="0" name="length" type="float">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_use_as_steering">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_use_as_traction">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="damping_compression" type="float" setter="set_damping_compression" getter="get_damping_compression">
diff --git a/doc/classes/VideoPlayer.xml b/doc/classes/VideoPlayer.xml
index 340b162727..281dc1f071 100644
--- a/doc/classes/VideoPlayer.xml
+++ b/doc/classes/VideoPlayer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VideoPlayer" inherits="Control" category="Core" version="3.0-alpha">
+<class name="VideoPlayer" inherits="Control" category="Core" version="3.0-beta">
<brief_description>
Control to play video files.
</brief_description>
@@ -11,13 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_audio_track" qualifiers="const">
- <return type="int">
- </return>
- <description>
- Get the selected audio track (for multitrack videos).
- </description>
- </method>
<method name="get_buffering_msec" qualifiers="const">
<return type="int">
</return>
@@ -25,19 +18,6 @@
Get the amount of milliseconds to store in buffer while playing.
</description>
</method>
- <method name="get_bus" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_stream" qualifiers="const">
- <return type="VideoStream">
- </return>
- <description>
- Get the video stream.
- </description>
- </method>
<method name="get_stream_name" qualifiers="const">
<return type="String">
</return>
@@ -66,34 +46,6 @@
Get the volume of the audio track as a linear value.
</description>
</method>
- <method name="get_volume_db" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Get the volume of the audio track in decibels.
- </description>
- </method>
- <method name="has_autoplay" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Get whether or not the video is set as autoplay.
- </description>
- </method>
- <method name="has_expand" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Get whether or not the expand property is set.
- </description>
- </method>
- <method name="is_paused" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Get whether or not the video is paused.
- </description>
- </method>
<method name="is_playing" qualifiers="const">
<return type="bool">
</return>
@@ -108,24 +60,6 @@
Start the video playback.
</description>
</method>
- <method name="set_audio_track">
- <return type="void">
- </return>
- <argument index="0" name="track" type="int">
- </argument>
- <description>
- Set the audio track (for multitrack videos).
- </description>
- </method>
- <method name="set_autoplay">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set whether this node should start playing automatically.
- </description>
- </method>
<method name="set_buffering_msec">
<return type="void">
</return>
@@ -135,41 +69,6 @@
Set the amount of milliseconds to buffer during playback.
</description>
</method>
- <method name="set_bus">
- <return type="void">
- </return>
- <argument index="0" name="bus" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_expand">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set the expand property. If enabled, the video will grow or shrink to fit the player size, otherwise it will play at the stream resolution.
- </description>
- </method>
- <method name="set_paused">
- <return type="void">
- </return>
- <argument index="0" name="paused" type="bool">
- </argument>
- <description>
- Set whether the video should pause the playback.
- </description>
- </method>
- <method name="set_stream">
- <return type="void">
- </return>
- <argument index="0" name="stream" type="VideoStream">
- </argument>
- <description>
- Set the video stream for this player.
- </description>
- </method>
<method name="set_stream_position">
<return type="void">
</return>
@@ -188,15 +87,6 @@
Set the audio volume as a linear value.
</description>
</method>
- <method name="set_volume_db">
- <return type="void">
- </return>
- <argument index="0" name="db" type="float">
- </argument>
- <description>
- Set the audio volume in decibels.
- </description>
- </method>
<method name="stop">
<return type="void">
</return>
diff --git a/doc/classes/VideoStream.xml b/doc/classes/VideoStream.xml
index 00607b0f0a..9f0d9afa43 100644
--- a/doc/classes/VideoStream.xml
+++ b/doc/classes/VideoStream.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VideoStream" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="VideoStream" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml
index 9bd229ef26..ad3903d549 100644
--- a/doc/classes/Viewport.xml
+++ b/doc/classes/Viewport.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="Viewport" inherits="Node" category="Core" version="3.0-alpha">
+<class name="Viewport" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Creates a sub-view into the screen.
</brief_description>
@@ -44,18 +44,6 @@
Get the canvas transform of the viewport.
</description>
</method>
- <method name="get_clear_mode" qualifiers="const">
- <return type="int" enum="Viewport.ClearMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_debug_draw" qualifiers="const">
- <return type="int" enum="Viewport.DebugDraw">
- </return>
- <description>
- </description>
- </method>
<method name="get_final_transform" qualifiers="const">
<return type="Transform2D">
</return>
@@ -70,13 +58,6 @@
Get the global canvas transform of the viewport.
</description>
</method>
- <method name="get_hdr" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Get whether the rendered texture has filters enabled.
- </description>
- </method>
<method name="get_mouse_position" qualifiers="const">
<return type="Vector2">
</return>
@@ -84,19 +65,6 @@
Get the mouse position, relative to the viewport.
</description>
</method>
- <method name="get_msaa" qualifiers="const">
- <return type="int" enum="Viewport.MSAA">
- </return>
- <description>
- </description>
- </method>
- <method name="get_physics_object_picking">
- <return type="bool">
- </return>
- <description>
- Get whether picking for all physics objects inside the viewport is enabled.
- </description>
- </method>
<method name="get_render_info">
<return type="int">
</return>
@@ -105,27 +73,6 @@
<description>
</description>
</method>
- <method name="get_shadow_atlas_quadrant_subdiv" qualifiers="const">
- <return type="int" enum="Viewport.ShadowAtlasQuadrantSubdiv">
- </return>
- <argument index="0" name="quadrant" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="get_shadow_atlas_size" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_size" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- Return the viewport rect. If the viewport is child of a control, it will use the same rect as the parent. Otherwise, if the rect is empty, the viewport will use all the allowed space.
- </description>
- </method>
<method name="get_size_override" qualifiers="const">
<return type="Vector2">
</return>
@@ -140,26 +87,6 @@
Get the viewport's texture, for use with various objects that you want to texture with the viewport.
</description>
</method>
- <method name="get_update_mode" qualifiers="const">
- <return type="int" enum="Viewport.UpdateMode">
- </return>
- <description>
- Get when the viewport would be updated, will be one of the [code]UPDATE_*[/code] constants.
- </description>
- </method>
- <method name="get_usage" qualifiers="const">
- <return type="int" enum="Viewport.Usage">
- </return>
- <description>
- </description>
- </method>
- <method name="get_vflip" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Set whether the render target is flipped on the Y axis.
- </description>
- </method>
<method name="get_viewport_rid" qualifiers="const">
<return type="RID">
</return>
@@ -174,13 +101,6 @@
Return the final, visible rect in global screen coordinates.
</description>
</method>
- <method name="get_world" qualifiers="const">
- <return type="World">
- </return>
- <description>
- Return the 3D world of the viewport.
- </description>
- </method>
<method name="get_world_2d" qualifiers="const">
<return type="World2D">
</return>
@@ -202,13 +122,6 @@
Returns whether there are shown modals on-screen.
</description>
</method>
- <method name="has_transparent_background" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether the viewport lets whatever is behind it to show.
- </description>
- </method>
<method name="input">
<return type="void">
</return>
@@ -217,33 +130,6 @@
<description>
</description>
</method>
- <method name="is_3d_disabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_audio_listener" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether the viewport sends sounds to the speakers.
- </description>
- </method>
- <method name="is_audio_listener_2d" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns whether the viewport sends soundsfrom 2D emitters to the speakers.
- </description>
- </method>
- <method name="is_input_disabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether input to the viewport is disabled.
- </description>
- </method>
<method name="is_size_override_enabled" qualifiers="const">
<return type="bool">
</return>
@@ -258,37 +144,6 @@
Get the enabled status of the size strech override set with [method set_size_override_stretch].
</description>
</method>
- <method name="is_snap_controls_to_pixels_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_using_own_world" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Return whether the viewport is using a world separate from the parent viewport's world.
- </description>
- </method>
- <method name="set_as_audio_listener">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Makes the viewport send sounds to the speakers.
- </description>
- </method>
- <method name="set_as_audio_listener_2d">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Makes the viewport send sounds from 2D emitters to the speakers.
- </description>
- </method>
<method name="set_attach_to_screen_rect">
<return type="void">
</return>
@@ -306,39 +161,6 @@
Set the canvas transform of the viewport, useful for changing the on-screen positions of all child [CanvasItem]s. This is relative to the global canvas transform of the viewport.
</description>
</method>
- <method name="set_clear_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Viewport.ClearMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_debug_draw">
- <return type="void">
- </return>
- <argument index="0" name="debug_draw" type="int" enum="Viewport.DebugDraw">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_disable_3d">
- <return type="void">
- </return>
- <argument index="0" name="disable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_disable_input">
- <return type="void">
- </return>
- <argument index="0" name="disable" type="bool">
- </argument>
- <description>
- Set whether input to the viewport is disabled.
- </description>
- </method>
<method name="set_global_canvas_transform">
<return type="void">
</return>
@@ -348,58 +170,6 @@
Set the global canvas transform of the viewport. The canvas transform is relative to this.
</description>
</method>
- <method name="set_hdr">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_msaa">
- <return type="void">
- </return>
- <argument index="0" name="msaa" type="int" enum="Viewport.MSAA">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_physics_object_picking">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Enable/disable picking for all physics objects inside the viewport.
- </description>
- </method>
- <method name="set_shadow_atlas_quadrant_subdiv">
- <return type="void">
- </return>
- <argument index="0" name="quadrant" type="int">
- </argument>
- <argument index="1" name="subdiv" type="int" enum="Viewport.ShadowAtlasQuadrantSubdiv">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_shadow_atlas_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector2">
- </argument>
- <description>
- Set the size of the viewport.
- </description>
- </method>
<method name="set_size_override">
<return type="void">
</return>
@@ -422,79 +192,6 @@
Set whether the size override affects stretch as well.
</description>
</method>
- <method name="set_snap_controls_to_pixels">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_transparent_background">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- If this viewport is a child of another viewport, keep the previously drawn background visible.
- </description>
- </method>
- <method name="set_update_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="Viewport.UpdateMode">
- </argument>
- <description>
- Set when the render target would be updated, using the [code]UPDATE_*[/code] constants
- </description>
- </method>
- <method name="set_usage">
- <return type="void">
- </return>
- <argument index="0" name="usage" type="int" enum="Viewport.Usage">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_use_arvr">
- <return type="void">
- </return>
- <argument index="0" name="use" type="bool">
- </argument>
- <description>
- If true this viewport will be bound to our ARVR Server.
- If this is our main Godot viewport our AR/VR output will be displayed on screen.
- If output is redirected to an HMD we'll see the output of just one of the eyes without any distortion applied else we'll see the stereo buffer with distortion applied if applicable
- If this is an extra viewport output will only work if redirection to an HMD is supported by the interface. The render target will allow you to use the undistorted output for the right eye in the display.
- </description>
- </method>
- <method name="set_use_own_world">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Make the viewport use a world separate from the parent viewport's world.
- </description>
- </method>
- <method name="set_vflip">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- Set whether the viewport is flipped on the Y axis.
- </description>
- </method>
- <method name="set_world">
- <return type="void">
- </return>
- <argument index="0" name="world" type="World">
- </argument>
- <description>
- Change the 3D world of the viewport.
- </description>
- </method>
<method name="set_world_2d">
<return type="void">
</return>
@@ -518,13 +215,6 @@
Force update of the 2D and 3D worlds.
</description>
</method>
- <method name="use_arvr">
- <return type="bool">
- </return>
- <description>
- Returns whether this viewport is using our ARVR Server
- </description>
- </method>
<method name="warp_mouse">
<return type="void">
</return>
@@ -591,78 +281,78 @@
</signal>
</signals>
<constants>
- <constant name="UPDATE_DISABLED" value="0">
+ <constant name="UPDATE_DISABLED" value="0" enum="UpdateMode">
Do not update the render target.
</constant>
- <constant name="UPDATE_ONCE" value="1">
+ <constant name="UPDATE_ONCE" value="1" enum="UpdateMode">
Update the render target once, then switch to [code]UPDATE_DISABLED[/code]
</constant>
- <constant name="UPDATE_WHEN_VISIBLE" value="2">
+ <constant name="UPDATE_WHEN_VISIBLE" value="2" enum="UpdateMode">
Update the render target only when it is visible. This is the default value.
</constant>
- <constant name="UPDATE_ALWAYS" value="3">
+ <constant name="UPDATE_ALWAYS" value="3" enum="UpdateMode">
</constant>
- <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_DISABLED" value="0">
+ <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_DISABLED" value="0" enum="ShadowAtlasQuadrantSubdiv">
</constant>
- <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_1" value="1">
+ <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_1" value="1" enum="ShadowAtlasQuadrantSubdiv">
</constant>
- <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_4" value="2">
+ <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_4" value="2" enum="ShadowAtlasQuadrantSubdiv">
</constant>
- <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_16" value="3">
+ <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_16" value="3" enum="ShadowAtlasQuadrantSubdiv">
</constant>
- <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_64" value="4">
+ <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_64" value="4" enum="ShadowAtlasQuadrantSubdiv">
</constant>
- <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_256" value="5">
+ <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_256" value="5" enum="ShadowAtlasQuadrantSubdiv">
</constant>
- <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_1024" value="6">
+ <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_1024" value="6" enum="ShadowAtlasQuadrantSubdiv">
</constant>
- <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_MAX" value="7">
+ <constant name="SHADOW_ATLAS_QUADRANT_SUBDIV_MAX" value="7" enum="ShadowAtlasQuadrantSubdiv">
</constant>
- <constant name="RENDER_INFO_OBJECTS_IN_FRAME" value="0">
+ <constant name="RENDER_INFO_OBJECTS_IN_FRAME" value="0" enum="RenderInfo">
</constant>
- <constant name="RENDER_INFO_VERTICES_IN_FRAME" value="1">
+ <constant name="RENDER_INFO_VERTICES_IN_FRAME" value="1" enum="RenderInfo">
</constant>
- <constant name="RENDER_INFO_MATERIAL_CHANGES_IN_FRAME" value="2">
+ <constant name="RENDER_INFO_MATERIAL_CHANGES_IN_FRAME" value="2" enum="RenderInfo">
</constant>
- <constant name="RENDER_INFO_SHADER_CHANGES_IN_FRAME" value="3">
+ <constant name="RENDER_INFO_SHADER_CHANGES_IN_FRAME" value="3" enum="RenderInfo">
</constant>
- <constant name="RENDER_INFO_SURFACE_CHANGES_IN_FRAME" value="4">
+ <constant name="RENDER_INFO_SURFACE_CHANGES_IN_FRAME" value="4" enum="RenderInfo">
</constant>
- <constant name="RENDER_INFO_DRAW_CALLS_IN_FRAME" value="5">
+ <constant name="RENDER_INFO_DRAW_CALLS_IN_FRAME" value="5" enum="RenderInfo">
</constant>
- <constant name="RENDER_INFO_MAX" value="6">
+ <constant name="RENDER_INFO_MAX" value="6" enum="RenderInfo">
</constant>
- <constant name="DEBUG_DRAW_DISABLED" value="0">
+ <constant name="DEBUG_DRAW_DISABLED" value="0" enum="DebugDraw">
</constant>
- <constant name="DEBUG_DRAW_UNSHADED" value="1">
+ <constant name="DEBUG_DRAW_UNSHADED" value="1" enum="DebugDraw">
</constant>
- <constant name="DEBUG_DRAW_OVERDRAW" value="2">
+ <constant name="DEBUG_DRAW_OVERDRAW" value="2" enum="DebugDraw">
</constant>
- <constant name="DEBUG_DRAW_WIREFRAME" value="3">
+ <constant name="DEBUG_DRAW_WIREFRAME" value="3" enum="DebugDraw">
</constant>
- <constant name="MSAA_DISABLED" value="0">
+ <constant name="MSAA_DISABLED" value="0" enum="MSAA">
</constant>
- <constant name="MSAA_2X" value="1">
+ <constant name="MSAA_2X" value="1" enum="MSAA">
</constant>
- <constant name="MSAA_4X" value="2">
+ <constant name="MSAA_4X" value="2" enum="MSAA">
</constant>
- <constant name="MSAA_8X" value="3">
+ <constant name="MSAA_8X" value="3" enum="MSAA">
</constant>
- <constant name="MSAA_16X" value="4">
+ <constant name="MSAA_16X" value="4" enum="MSAA">
</constant>
- <constant name="USAGE_2D" value="0">
+ <constant name="USAGE_2D" value="0" enum="Usage">
</constant>
- <constant name="USAGE_2D_NO_SAMPLING" value="1">
+ <constant name="USAGE_2D_NO_SAMPLING" value="1" enum="Usage">
</constant>
- <constant name="USAGE_3D" value="2">
+ <constant name="USAGE_3D" value="2" enum="Usage">
</constant>
- <constant name="USAGE_3D_NO_EFFECTS" value="3">
+ <constant name="USAGE_3D_NO_EFFECTS" value="3" enum="Usage">
</constant>
- <constant name="CLEAR_MODE_ALWAYS" value="0">
+ <constant name="CLEAR_MODE_ALWAYS" value="0" enum="ClearMode">
</constant>
- <constant name="CLEAR_MODE_NEVER" value="1">
+ <constant name="CLEAR_MODE_NEVER" value="1" enum="ClearMode">
</constant>
- <constant name="CLEAR_MODE_ONLY_NEXT_FRAME" value="2">
+ <constant name="CLEAR_MODE_ONLY_NEXT_FRAME" value="2" enum="ClearMode">
</constant>
</constants>
</class>
diff --git a/doc/classes/ViewportContainer.xml b/doc/classes/ViewportContainer.xml
index 5a4c3af1f6..19d4e462c9 100644
--- a/doc/classes/ViewportContainer.xml
+++ b/doc/classes/ViewportContainer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ViewportContainer" inherits="Container" category="Core" version="3.0-alpha">
+<class name="ViewportContainer" inherits="Container" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,34 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_stretch_shrink" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="is_stretch_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_stretch">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_stretch_shrink">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="stretch" type="bool" setter="set_stretch" getter="is_stretch_enabled">
diff --git a/doc/classes/ViewportTexture.xml b/doc/classes/ViewportTexture.xml
index 1eace840a8..e6a2b212bf 100644
--- a/doc/classes/ViewportTexture.xml
+++ b/doc/classes/ViewportTexture.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ViewportTexture" inherits="Texture" category="Core" version="3.0-alpha">
+<class name="ViewportTexture" inherits="Texture" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,20 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_viewport_path_in_scene" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="set_viewport_path_in_scene">
- <return type="void">
- </return>
- <argument index="0" name="path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="viewport_path" type="NodePath" setter="set_viewport_path_in_scene" getter="get_viewport_path_in_scene">
diff --git a/doc/classes/VisibilityEnabler.xml b/doc/classes/VisibilityEnabler.xml
index 95bcbd6816..67137e1408 100644
--- a/doc/classes/VisibilityEnabler.xml
+++ b/doc/classes/VisibilityEnabler.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisibilityEnabler" inherits="VisibilityNotifier" category="Core" version="3.0-alpha">
+<class name="VisibilityEnabler" inherits="VisibilityNotifier" category="Core" version="3.0-beta">
<brief_description>
Enable certain nodes only when visible.
</brief_description>
@@ -11,26 +11,6 @@
<demos>
</demos>
<methods>
- <method name="is_enabler_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="enabler" type="int" enum="VisibilityEnabler.Enabler">
- </argument>
- <description>
- Returns whether the specified enabler was set to true or not.
- </description>
- </method>
- <method name="set_enabler">
- <return type="void">
- </return>
- <argument index="0" name="enabler" type="int" enum="VisibilityEnabler.Enabler">
- </argument>
- <argument index="1" name="enabled" type="bool">
- </argument>
- <description>
- Set an enabler to true for all nodes of its type to be disabled when the VisibilityEnabler is not in view. See the constants for enablers and what they affect.
- </description>
- </method>
</methods>
<members>
<member name="freeze_bodies" type="bool" setter="set_enabler" getter="is_enabler_enabled">
@@ -39,13 +19,13 @@
</member>
</members>
<constants>
- <constant name="ENABLER_PAUSE_ANIMATIONS" value="0">
+ <constant name="ENABLER_PAUSE_ANIMATIONS" value="0" enum="Enabler">
This enabler will pause [AnimationPlayer] nodes.
</constant>
- <constant name="ENABLER_FREEZE_BODIES" value="1">
+ <constant name="ENABLER_FREEZE_BODIES" value="1" enum="Enabler">
This enabler will freeze [RigidBody] nodes.
</constant>
- <constant name="ENABLER_MAX" value="2">
+ <constant name="ENABLER_MAX" value="2" enum="Enabler">
</constant>
</constants>
</class>
diff --git a/doc/classes/VisibilityEnabler2D.xml b/doc/classes/VisibilityEnabler2D.xml
index f23d54a544..45e15eb4b3 100644
--- a/doc/classes/VisibilityEnabler2D.xml
+++ b/doc/classes/VisibilityEnabler2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisibilityEnabler2D" inherits="VisibilityNotifier2D" category="Core" version="3.0-alpha">
+<class name="VisibilityEnabler2D" inherits="VisibilityNotifier2D" category="Core" version="3.0-beta">
<brief_description>
Enable certain nodes only when visible.
</brief_description>
@@ -11,26 +11,6 @@
<demos>
</demos>
<methods>
- <method name="is_enabler_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <argument index="0" name="enabler" type="int" enum="VisibilityEnabler2D.Enabler">
- </argument>
- <description>
- Returns whether the specified enabler was set to true or not.
- </description>
- </method>
- <method name="set_enabler">
- <return type="void">
- </return>
- <argument index="0" name="enabler" type="int" enum="VisibilityEnabler2D.Enabler">
- </argument>
- <argument index="1" name="enabled" type="bool">
- </argument>
- <description>
- Set an enabler to true for all nodes of its type to be disabled when the VisibilityEnabler2D is not in view. See the constants for enablers and what they affect.
- </description>
- </method>
</methods>
<members>
<member name="freeze_bodies" type="bool" setter="set_enabler" getter="is_enabler_enabled">
@@ -47,24 +27,24 @@
</member>
</members>
<constants>
- <constant name="ENABLER_PAUSE_ANIMATIONS" value="0">
+ <constant name="ENABLER_PAUSE_ANIMATIONS" value="0" enum="Enabler">
This enabler will pause [AnimationPlayer] nodes.
</constant>
- <constant name="ENABLER_FREEZE_BODIES" value="1">
+ <constant name="ENABLER_FREEZE_BODIES" value="1" enum="Enabler">
This enabler will freeze [RigidBody2D] nodes.
</constant>
- <constant name="ENABLER_PAUSE_PARTICLES" value="2">
+ <constant name="ENABLER_PAUSE_PARTICLES" value="2" enum="Enabler">
This enabler will stop [Particles2D] nodes.
</constant>
- <constant name="ENABLER_PARENT_PROCESS" value="3">
+ <constant name="ENABLER_PARENT_PROCESS" value="3" enum="Enabler">
This enabler will stop the parent's _process function.
</constant>
- <constant name="ENABLER_PARENT_PHYSICS_PROCESS" value="4">
+ <constant name="ENABLER_PARENT_PHYSICS_PROCESS" value="4" enum="Enabler">
This enabler will stop the parent's _physics_process function.
</constant>
- <constant name="ENABLER_PAUSE_ANIMATED_SPRITES" value="5">
+ <constant name="ENABLER_PAUSE_ANIMATED_SPRITES" value="5" enum="Enabler">
</constant>
- <constant name="ENABLER_MAX" value="6">
+ <constant name="ENABLER_MAX" value="6" enum="Enabler">
</constant>
</constants>
</class>
diff --git a/doc/classes/VisibilityNotifier.xml b/doc/classes/VisibilityNotifier.xml
index 90f1974697..9e1c326633 100644
--- a/doc/classes/VisibilityNotifier.xml
+++ b/doc/classes/VisibilityNotifier.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisibilityNotifier" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="VisibilityNotifier" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Detects when the node is visible on screen.
</brief_description>
@@ -11,13 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_aabb" qualifiers="const">
- <return type="AABB">
- </return>
- <description>
- Returns the bounding box of the VisibilityNotifier.
- </description>
- </method>
<method name="is_on_screen" qualifiers="const">
<return type="bool">
</return>
@@ -25,15 +18,6 @@
If [code]true[/code] the bounding box is on the screen.
</description>
</method>
- <method name="set_aabb">
- <return type="void">
- </return>
- <argument index="0" name="rect" type="AABB">
- </argument>
- <description>
- Set the visibility bounding box of the VisibilityNotifier.
- </description>
- </method>
</methods>
<members>
<member name="aabb" type="AABB" setter="set_aabb" getter="get_aabb">
diff --git a/doc/classes/VisibilityNotifier2D.xml b/doc/classes/VisibilityNotifier2D.xml
index b8db14e583..327812db23 100644
--- a/doc/classes/VisibilityNotifier2D.xml
+++ b/doc/classes/VisibilityNotifier2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisibilityNotifier2D" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="VisibilityNotifier2D" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Detects when the node is visible on screen.
</brief_description>
@@ -11,13 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_rect" qualifiers="const">
- <return type="Rect2">
- </return>
- <description>
- Returns the bounding rectangle of the VisibilityNotifier2D.
- </description>
- </method>
<method name="is_on_screen" qualifiers="const">
<return type="bool">
</return>
@@ -25,15 +18,6 @@
If [code]true[/code] the bounding rectangle is on the screen.
</description>
</method>
- <method name="set_rect">
- <return type="void">
- </return>
- <argument index="0" name="rect" type="Rect2">
- </argument>
- <description>
- Set the visibility bounding rectangle of the VisibilityNotifier2D.
- </description>
- </method>
</methods>
<members>
<member name="rect" type="Rect2" setter="set_rect" getter="get_rect">
diff --git a/doc/classes/VisualInstance.xml b/doc/classes/VisualInstance.xml
index 7108eb13c5..bd66880719 100644
--- a/doc/classes/VisualInstance.xml
+++ b/doc/classes/VisualInstance.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualInstance" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="VisualInstance" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -13,18 +13,15 @@
<return type="AABB">
</return>
<description>
- </description>
- </method>
- <method name="get_layer_mask" qualifiers="const">
- <return type="int">
- </return>
- <description>
+ Returns the [AABB] (also known as the bounding box) for this VisualInstance.
</description>
</method>
<method name="get_transformed_aabb" qualifiers="const">
<return type="AABB">
</return>
<description>
+ Returns the transformed [AABB] (also known as the bounding box) for this VisualInstance.
+ Transformed in this case means the [AABB] plus the position, rotation, and scale of the [Spatial]s [Transform]
</description>
</method>
<method name="set_base">
@@ -33,19 +30,15 @@
<argument index="0" name="base" type="RID">
</argument>
<description>
- </description>
- </method>
- <method name="set_layer_mask">
- <return type="void">
- </return>
- <argument index="0" name="mask" type="int">
- </argument>
- <description>
+ Sets the base of the VisualInstance, which changes how the engine handles the VisualInstance under the hood.
+ It is recommended to only use set_base if you know what you're doing.
</description>
</method>
</methods>
<members>
<member name="layers" type="int" setter="set_layer_mask" getter="get_layer_mask">
+ The render layer(s) this VisualInstance is drawn on.
+ This object will only be visible for [Camera]s whose cull mask includes the render object this VisualInstance is set to.
</member>
</members>
<constants>
diff --git a/doc/classes/VisualServer.xml b/doc/classes/VisualServer.xml
index d716d99e5d..1a9dc3a669 100644
--- a/doc/classes/VisualServer.xml
+++ b/doc/classes/VisualServer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualServer" inherits="Object" category="Core" version="3.0-alpha">
+<class name="VisualServer" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
Server for anything visible.
</brief_description>
@@ -24,6 +24,7 @@
<argument index="3" name="bottom" type="RID">
</argument>
<description>
+ Sets images to be rendered in the window margin.
</description>
</method>
<method name="black_bars_set_margins">
@@ -38,12 +39,14 @@
<argument index="3" name="bottom" type="int">
</argument>
<description>
+ Sets margin size, where black bars (or images, if [method black_bars_set_images] was used) are rendered.
</description>
</method>
<method name="canvas_create">
<return type="RID">
</return>
<description>
+ Creates a canvas and returns the assigned [RID].
</description>
</method>
<method name="canvas_item_add_circle">
@@ -58,6 +61,7 @@
<argument index="3" name="color" type="Color">
</argument>
<description>
+ Adds a circle command to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_clip_ignore">
@@ -68,6 +72,7 @@
<argument index="1" name="ignore" type="bool">
</argument>
<description>
+ If ignore is [code]true[/code], the VisualServer does not perform clipping.
</description>
</method>
<method name="canvas_item_add_line">
@@ -86,6 +91,7 @@
<argument index="5" name="antialiased" type="bool" default="false">
</argument>
<description>
+ Adds a line command to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_mesh">
@@ -98,6 +104,7 @@
<argument index="2" name="skeleton" type="RID">
</argument>
<description>
+ Adds a [Mesh] to the [CanvasItem]'s draw commands. Only affects its aabb at the moment.
</description>
</method>
<method name="canvas_item_add_multimesh">
@@ -110,6 +117,7 @@
<argument index="2" name="skeleton" type="RID">
</argument>
<description>
+ Adds a [MultiMesh] to the [CanvasItem]'s draw commands. Only affects its aabb at the moment.
</description>
</method>
<method name="canvas_item_add_nine_patch">
@@ -138,6 +146,8 @@
<argument index="10" name="normal_map" type="RID">
</argument>
<description>
+ Adds a nine patch image to the [CanvasItem]'s draw commands.
+ See [NinePatchRect] for more explanation.
</description>
</method>
<method name="canvas_item_add_particles">
@@ -156,6 +166,7 @@
<argument index="5" name="v_frames" type="int">
</argument>
<description>
+ Adds a particles system to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_polygon">
@@ -176,6 +187,7 @@
<argument index="6" name="antialiased" type="bool" default="false">
</argument>
<description>
+ Adds a polygon to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_polyline">
@@ -192,6 +204,7 @@
<argument index="4" name="antialiased" type="bool" default="false">
</argument>
<description>
+ Adds a polyline, which is a line from mutliple points with a width, to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_primitive">
@@ -212,6 +225,7 @@
<argument index="6" name="normal_map" type="RID">
</argument>
<description>
+ Adds a primitive to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_rect">
@@ -224,6 +238,7 @@
<argument index="2" name="color" type="Color">
</argument>
<description>
+ Adds a rectangle to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_set_transform">
@@ -234,6 +249,8 @@
<argument index="1" name="transform" type="Transform2D">
</argument>
<description>
+ Adds a [Transform2D] command to the [CanvasItem]'s draw commands.
+ This sets the extra_matrix uniform when executed. This affects the later command's of the canvas item.
</description>
</method>
<method name="canvas_item_add_texture_rect">
@@ -254,6 +271,7 @@
<argument index="6" name="normal_map" type="RID">
</argument>
<description>
+ Adds a textured rect to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_texture_rect_region">
@@ -276,6 +294,7 @@
<argument index="7" name="clip_uv" type="bool" default="true">
</argument>
<description>
+ Adds a texture rect with region setting to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_add_triangle_array">
@@ -298,6 +317,7 @@
<argument index="7" name="normal_map" type="RID">
</argument>
<description>
+ Adds a triangle array to the [CanvasItem]'s draw commands.
</description>
</method>
<method name="canvas_item_clear">
@@ -306,12 +326,14 @@
<argument index="0" name="item" type="RID">
</argument>
<description>
+ Clears the [CanvasItem] and removes all commands in it.
</description>
</method>
<method name="canvas_item_create">
<return type="RID">
</return>
<description>
+ Creates a new [CanvasItem] and returns its [RID].
</description>
</method>
<method name="canvas_item_set_clip">
@@ -322,6 +344,7 @@
<argument index="1" name="clip" type="bool">
</argument>
<description>
+ Sets clipping for the [CanvasItem].
</description>
</method>
<method name="canvas_item_set_copy_to_backbuffer">
@@ -334,6 +357,7 @@
<argument index="2" name="rect" type="Rect2">
</argument>
<description>
+ Sets the [CanvasItem] to copy a rect to the backbuffer.
</description>
</method>
<method name="canvas_item_set_custom_rect">
@@ -346,6 +370,7 @@
<argument index="2" name="rect" type="Rect2" default="Rect2( 0, 0, 0, 0 )">
</argument>
<description>
+ Defines a custom drawing rectangle for the [CanvasItem].
</description>
</method>
<method name="canvas_item_set_distance_field_mode">
@@ -366,6 +391,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Sets [CanvasItem] to be drawn behind its parent.
</description>
</method>
<method name="canvas_item_set_draw_index">
@@ -376,6 +402,7 @@
<argument index="1" name="index" type="int">
</argument>
<description>
+ Sets the index for the [CanvasItem].
</description>
</method>
<method name="canvas_item_set_light_mask">
@@ -386,6 +413,7 @@
<argument index="1" name="mask" type="int">
</argument>
<description>
+ The light mask. See [LightOccluder2D] for more information on light masks.
</description>
</method>
<method name="canvas_item_set_material">
@@ -396,6 +424,7 @@
<argument index="1" name="material" type="RID">
</argument>
<description>
+ Sets a new material to the [CanvasItem].
</description>
</method>
<method name="canvas_item_set_modulate">
@@ -406,6 +435,7 @@
<argument index="1" name="color" type="Color">
</argument>
<description>
+ Sets the color that modulates the [CanvasItem] and its children.
</description>
</method>
<method name="canvas_item_set_parent">
@@ -416,6 +446,7 @@
<argument index="1" name="parent" type="RID">
</argument>
<description>
+ Sets the parent for the [CanvasItem].
</description>
</method>
<method name="canvas_item_set_self_modulate">
@@ -426,6 +457,7 @@
<argument index="1" name="color" type="Color">
</argument>
<description>
+ Sets the color that modulates the [CanvasItem] without children.
</description>
</method>
<method name="canvas_item_set_sort_children_by_y">
@@ -436,6 +468,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Sets if [CanvasItem]'s children should be sorted by y-position.
</description>
</method>
<method name="canvas_item_set_transform">
@@ -446,6 +479,7 @@
<argument index="1" name="transform" type="Transform2D">
</argument>
<description>
+ Sets the [CanvasItem]'s [Transform2D].
</description>
</method>
<method name="canvas_item_set_use_parent_material">
@@ -456,6 +490,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Sets if the [CanvasItem] uses its parent's material.
</description>
</method>
<method name="canvas_item_set_visible">
@@ -466,6 +501,7 @@
<argument index="1" name="visible" type="bool">
</argument>
<description>
+ Sets if the canvas item (including its children) is visible.
</description>
</method>
<method name="canvas_item_set_z">
@@ -476,6 +512,7 @@
<argument index="1" name="z" type="int">
</argument>
<description>
+ Sets the [CanvasItem]'s z order position.
</description>
</method>
<method name="canvas_item_set_z_as_relative_to_parent">
@@ -486,6 +523,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ If this is enabled, the z-position of the parent will be added to the childrens z-position.
</description>
</method>
<method name="canvas_light_attach_to_canvas">
@@ -496,12 +534,14 @@
<argument index="1" name="canvas" type="RID">
</argument>
<description>
+ Attaches the canvas light to the canvas. Removes it from its previous canvas.
</description>
</method>
<method name="canvas_light_create">
<return type="RID">
</return>
<description>
+ Creates a canvas light.
</description>
</method>
<method name="canvas_light_occluder_attach_to_canvas">
@@ -512,12 +552,14 @@
<argument index="1" name="canvas" type="RID">
</argument>
<description>
+ Attaches a light occluder to the canvas. Removes it from its previous canvas.
</description>
</method>
<method name="canvas_light_occluder_create">
<return type="RID">
</return>
<description>
+ Creates a light occluder.
</description>
</method>
<method name="canvas_light_occluder_set_enabled">
@@ -528,6 +570,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Enables or disables light occluder.
</description>
</method>
<method name="canvas_light_occluder_set_light_mask">
@@ -538,6 +581,7 @@
<argument index="1" name="mask" type="int">
</argument>
<description>
+ The light mask. See [LightOccluder2D] for more information on light masks
</description>
</method>
<method name="canvas_light_occluder_set_polygon">
@@ -548,6 +592,7 @@
<argument index="1" name="polygon" type="RID">
</argument>
<description>
+ Sets a light occluder's polygon.
</description>
</method>
<method name="canvas_light_occluder_set_transform">
@@ -558,6 +603,7 @@
<argument index="1" name="transform" type="Transform2D">
</argument>
<description>
+ Sets a light occluder's [Transform2D].
</description>
</method>
<method name="canvas_light_set_color">
@@ -568,6 +614,7 @@
<argument index="1" name="color" type="Color">
</argument>
<description>
+ Sets the color for a light.
</description>
</method>
<method name="canvas_light_set_enabled">
@@ -578,6 +625,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Enables or disables a canvas light.
</description>
</method>
<method name="canvas_light_set_energy">
@@ -588,6 +636,7 @@
<argument index="1" name="energy" type="float">
</argument>
<description>
+ Sets a canvas light's energy.
</description>
</method>
<method name="canvas_light_set_height">
@@ -598,6 +647,7 @@
<argument index="1" name="height" type="float">
</argument>
<description>
+ Sets a canvas light's height.
</description>
</method>
<method name="canvas_light_set_item_cull_mask">
@@ -608,6 +658,7 @@
<argument index="1" name="mask" type="int">
</argument>
<description>
+ The light mask. See [LightOccluder2D] for more information on light masks
</description>
</method>
<method name="canvas_light_set_item_shadow_cull_mask">
@@ -618,6 +669,7 @@
<argument index="1" name="mask" type="int">
</argument>
<description>
+ The shadow mask. binary about wich layers this canvas light affects wich canvas item's shadows. See [LightOccluder2D] for more information on light masks.
</description>
</method>
<method name="canvas_light_set_layer_range">
@@ -630,6 +682,7 @@
<argument index="2" name="max_layer" type="int">
</argument>
<description>
+ The layer range that gets rendered with this light.
</description>
</method>
<method name="canvas_light_set_mode">
@@ -640,6 +693,7 @@
<argument index="1" name="mode" type="int" enum="VisualServer.CanvasLightMode">
</argument>
<description>
+ The mode of the light, see CANVAS_LIGHT_MODE_* constants.
</description>
</method>
<method name="canvas_light_set_scale">
@@ -660,6 +714,7 @@
<argument index="1" name="size" type="int">
</argument>
<description>
+ Sets the width of the shadow buffer, size gets scaled to the next power of two for this.
</description>
</method>
<method name="canvas_light_set_shadow_color">
@@ -670,6 +725,7 @@
<argument index="1" name="color" type="Color">
</argument>
<description>
+ Sets the color of the canvas light's shadow.
</description>
</method>
<method name="canvas_light_set_shadow_enabled">
@@ -680,6 +736,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Enables or disables the canvas light's shadow.
</description>
</method>
<method name="canvas_light_set_shadow_filter">
@@ -690,6 +747,7 @@
<argument index="1" name="filter" type="int" enum="VisualServer.CanvasLightShadowFilter">
</argument>
<description>
+ Sets the canvas light's shadow's filter, see CANVAS_LIGHT_SHADOW_FILTER_* constants.
</description>
</method>
<method name="canvas_light_set_shadow_gradient_length">
@@ -700,6 +758,7 @@
<argument index="1" name="length" type="float">
</argument>
<description>
+ Sets the length of the shadow's gradient.
</description>
</method>
<method name="canvas_light_set_shadow_smooth">
@@ -710,6 +769,7 @@
<argument index="1" name="smooth" type="float">
</argument>
<description>
+ Smoothens the shadow. The lower, the more smooth.
</description>
</method>
<method name="canvas_light_set_texture">
@@ -740,6 +800,7 @@
<argument index="1" name="transform" type="Transform2D">
</argument>
<description>
+ Sets the canvas light's [Transform2D].
</description>
</method>
<method name="canvas_light_set_z_range">
@@ -758,6 +819,7 @@
<return type="RID">
</return>
<description>
+ Creates a new light occluder polygon.
</description>
</method>
<method name="canvas_occluder_polygon_set_cull_mode">
@@ -768,6 +830,7 @@
<argument index="1" name="mode" type="int" enum="VisualServer.CanvasOccluderPolygonCullMode">
</argument>
<description>
+ Sets an occluder polygons cull mode. See CANVAS_OCCLUDER_POLYGON_CULL_MODE_* constants.
</description>
</method>
<method name="canvas_occluder_polygon_set_shape">
@@ -780,6 +843,7 @@
<argument index="2" name="closed" type="bool">
</argument>
<description>
+ Sets the shape of the occluder polygon.
</description>
</method>
<method name="canvas_occluder_polygon_set_shape_as_lines">
@@ -790,6 +854,7 @@
<argument index="1" name="shape" type="PoolVector2Array">
</argument>
<description>
+ Sets the shape of the occluder polygon as lines.
</description>
</method>
<method name="canvas_set_item_mirroring">
@@ -802,6 +867,7 @@
<argument index="2" name="mirroring" type="Vector2">
</argument>
<description>
+ A copy of the canvas item will be drawn with a local offset of the mirroring [Vector2].
</description>
</method>
<method name="canvas_set_modulate">
@@ -812,30 +878,39 @@
<argument index="1" name="color" type="Color">
</argument>
<description>
+ Modulates all colors in the given canvas.
</description>
</method>
<method name="draw">
<return type="void">
</return>
+ <argument index="0" name="swap_buffers" type="bool" default="true">
+ </argument>
<description>
+ Draws a frame.
</description>
</method>
<method name="finish">
<return type="void">
</return>
<description>
+ Removes buffers and clears testcubes.
</description>
</method>
<method name="force_draw">
<return type="void">
</return>
+ <argument index="0" name="swap_buffers" type="bool" default="true">
+ </argument>
<description>
+ Draws a frame. Same as [method draw].
</description>
</method>
<method name="force_sync">
<return type="void">
</return>
<description>
+ Syncronizes threads.
</description>
</method>
<method name="free">
@@ -844,6 +919,7 @@
<argument index="0" name="rid" type="RID">
</argument>
<description>
+ Tries to free an object in the VisualServer.
</description>
</method>
<method name="get_render_info">
@@ -852,30 +928,35 @@
<argument index="0" name="info" type="int" enum="VisualServer.RenderInfo">
</argument>
<description>
+ Returns a certain information, see RENDER_INFO_* for options.
</description>
</method>
<method name="get_test_cube">
<return type="RID">
</return>
<description>
+ Returns the id of the test cube. Creates one if none exists.
</description>
</method>
<method name="get_test_texture">
<return type="RID">
</return>
<description>
+ Returns the id of the test texture. Creates one if none exists.
</description>
</method>
<method name="get_white_texture">
<return type="RID">
</return>
<description>
+ Returns the id of a white texture. Creates one if none exists.
</description>
</method>
<method name="has_changed" qualifiers="const">
<return type="bool">
</return>
<description>
+ Returns [code]true[/code] if changes have been made to the VisualServer's data. [method draw] is usually called if this happens.
</description>
</method>
<method name="has_feature" qualifiers="const">
@@ -892,12 +973,14 @@
<argument index="0" name="feature" type="String">
</argument>
<description>
+ Returns true, if the OS supports a certain feature. Features might be s3tc, etc, etc2 and pvrtc,
</description>
</method>
<method name="init">
<return type="void">
</return>
<description>
+ Initializes the visual server.
</description>
</method>
<method name="make_sphere_mesh">
@@ -910,12 +993,14 @@
<argument index="2" name="radius" type="float">
</argument>
<description>
+ Returns a mesh of a sphere with the given amount of horizontal and vertical subdivisions.
</description>
</method>
<method name="material_create">
<return type="RID">
</return>
<description>
+ Returns an empty material.
</description>
</method>
<method name="material_get_param" qualifiers="const">
@@ -926,6 +1011,7 @@
<argument index="1" name="parameter" type="String">
</argument>
<description>
+ Returns the value of a certain material's parameter.
</description>
</method>
<method name="material_get_shader" qualifiers="const">
@@ -934,6 +1020,7 @@
<argument index="0" name="shader_material" type="RID">
</argument>
<description>
+ Returns the shader of a certain material's shader. Returns an empty RID if the material doesn't have a shader.
</description>
</method>
<method name="material_set_line_width">
@@ -944,6 +1031,7 @@
<argument index="1" name="width" type="float">
</argument>
<description>
+ Sets a materials line width.
</description>
</method>
<method name="material_set_next_pass">
@@ -954,6 +1042,7 @@
<argument index="1" name="next_material" type="RID">
</argument>
<description>
+ Sets an objects next material.
</description>
</method>
<method name="material_set_param">
@@ -966,6 +1055,7 @@
<argument index="2" name="value" type="Variant">
</argument>
<description>
+ Sets a materials parameter.
</description>
</method>
<method name="material_set_render_priority">
@@ -976,6 +1066,7 @@
<argument index="1" name="priority" type="int">
</argument>
<description>
+ Sets a material's render priority.
</description>
</method>
<method name="material_set_shader">
@@ -986,6 +1077,7 @@
<argument index="1" name="shader" type="RID">
</argument>
<description>
+ Sets a shader material's shader.
</description>
</method>
<method name="mesh_add_surface_from_arrays">
@@ -1002,6 +1094,7 @@
<argument index="4" name="compress_format" type="int" default="97792">
</argument>
<description>
+ Adds a surface generated from the Arrays to a mesh. See PRIMITIVE_TYPE_* constants for types.
</description>
</method>
<method name="mesh_clear">
@@ -1010,12 +1103,14 @@
<argument index="0" name="mesh" type="RID">
</argument>
<description>
+ Removes all surfaces from a mesh.
</description>
</method>
<method name="mesh_create">
<return type="RID">
</return>
<description>
+ Creates a new mesh.
</description>
</method>
<method name="mesh_get_blend_shape_count" qualifiers="const">
@@ -1024,6 +1119,7 @@
<argument index="0" name="mesh" type="RID">
</argument>
<description>
+ Returns a mesh's blend shape count.
</description>
</method>
<method name="mesh_get_blend_shape_mode" qualifiers="const">
@@ -1032,6 +1128,7 @@
<argument index="0" name="mesh" type="RID">
</argument>
<description>
+ Returns a mesh's blend shape mode.
</description>
</method>
<method name="mesh_get_custom_aabb" qualifiers="const">
@@ -1040,6 +1137,7 @@
<argument index="0" name="mesh" type="RID">
</argument>
<description>
+ Returns a mesh's custom aabb.
</description>
</method>
<method name="mesh_get_surface_count" qualifiers="const">
@@ -1048,6 +1146,7 @@
<argument index="0" name="mesh" type="RID">
</argument>
<description>
+ Returns a mesh's number of surfaces.
</description>
</method>
<method name="mesh_remove_surface">
@@ -1058,6 +1157,7 @@
<argument index="1" name="index" type="int">
</argument>
<description>
+ Removes a mesh's surface.
</description>
</method>
<method name="mesh_set_blend_shape_count">
@@ -1068,6 +1168,7 @@
<argument index="1" name="amount" type="int">
</argument>
<description>
+ Sets a mesh's blend shape count.
</description>
</method>
<method name="mesh_set_blend_shape_mode">
@@ -1078,6 +1179,7 @@
<argument index="1" name="mode" type="int" enum="VisualServer.BlendShapeMode">
</argument>
<description>
+ Sets a mesh's blend shape mode.
</description>
</method>
<method name="mesh_set_custom_aabb">
@@ -1088,6 +1190,7 @@
<argument index="1" name="aabb" type="AABB">
</argument>
<description>
+ Sets a mesh's custom aabb.
</description>
</method>
<method name="mesh_surface_get_aabb" qualifiers="const">
@@ -1098,6 +1201,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns a mesh's surface's aabb.
</description>
</method>
<method name="mesh_surface_get_array" qualifiers="const">
@@ -1108,6 +1212,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns a mesh's surface's vertex buffer.
</description>
</method>
<method name="mesh_surface_get_array_index_len" qualifiers="const">
@@ -1118,6 +1223,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns a mesh's surface's amount of indices.
</description>
</method>
<method name="mesh_surface_get_array_len" qualifiers="const">
@@ -1128,6 +1234,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns a mesh's surface's amount of vertices.
</description>
</method>
<method name="mesh_surface_get_arrays" qualifiers="const">
@@ -1138,6 +1245,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns a mesh's surface's buffer arrays.
</description>
</method>
<method name="mesh_surface_get_blend_shape_arrays" qualifiers="const">
@@ -1148,6 +1256,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns a mesh's surface's arrays for blend shapes
</description>
</method>
<method name="mesh_surface_get_format" qualifiers="const">
@@ -1158,6 +1267,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns the format of a mesh's surface.
</description>
</method>
<method name="mesh_surface_get_index_array" qualifiers="const">
@@ -1168,6 +1278,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns a mesh's surface's index buffer.
</description>
</method>
<method name="mesh_surface_get_material" qualifiers="const">
@@ -1178,6 +1289,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns a mesh's surface's material.
</description>
</method>
<method name="mesh_surface_get_primitive_type" qualifiers="const">
@@ -1188,6 +1300,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns the primitive type of a mesh's surface.
</description>
</method>
<method name="mesh_surface_get_skeleton_aabb" qualifiers="const">
@@ -1198,6 +1311,7 @@
<argument index="1" name="surface" type="int">
</argument>
<description>
+ Returns the aabb of a mesh's surface's skeleton.
</description>
</method>
<method name="mesh_surface_set_material">
@@ -1210,6 +1324,7 @@
<argument index="2" name="material" type="RID">
</argument>
<description>
+ Sets a mesh's surface's material.
</description>
</method>
<method name="request_frame_drawn_callback">
@@ -1236,6 +1351,7 @@
<argument index="2" name="scale" type="bool">
</argument>
<description>
+ Sets a boot image. The color defines the background color and if scale is [code]true[/code], the image will be scaled to fit the screen size.
</description>
</method>
<method name="set_debug_generate_wireframes">
@@ -1258,6 +1374,7 @@
<return type="RID">
</return>
<description>
+ Creates an empty shader.
</description>
</method>
<method name="shader_get_code" qualifiers="const">
@@ -1266,6 +1383,7 @@
<argument index="0" name="shader" type="RID">
</argument>
<description>
+ Returns a shader's code.
</description>
</method>
<method name="shader_get_default_texture_param" qualifiers="const">
@@ -1276,6 +1394,7 @@
<argument index="1" name="name" type="String">
</argument>
<description>
+ Returns a default texture from a shader searched by name.
</description>
</method>
<method name="shader_get_param_list" qualifiers="const">
@@ -1284,6 +1403,7 @@
<argument index="0" name="shader" type="RID">
</argument>
<description>
+ Returns the parameters of a shader.
</description>
</method>
<method name="shader_set_code">
@@ -1294,6 +1414,7 @@
<argument index="1" name="code" type="String">
</argument>
<description>
+ Sets a shader's code.
</description>
</method>
<method name="shader_set_default_texture_param">
@@ -1306,12 +1427,14 @@
<argument index="2" name="texture" type="RID">
</argument>
<description>
+ Sets a shader's default texture. Overwrites the texture given by name.
</description>
</method>
<method name="sky_create">
<return type="RID">
</return>
<description>
+ Creates an empty sky.
</description>
</method>
<method name="sky_set_texture">
@@ -1324,6 +1447,7 @@
<argument index="2" name="radiance_size" type="int">
</argument>
<description>
+ Sets a sky's texture.
</description>
</method>
<method name="sync">
@@ -1346,12 +1470,14 @@
<argument index="4" name="flags" type="int" default="7">
</argument>
<description>
+ Allocates space for a texture's image or video.
</description>
</method>
<method name="texture_create">
<return type="RID">
</return>
<description>
+ Creates an empty texture.
</description>
</method>
<method name="texture_create_from_image">
@@ -1362,12 +1488,14 @@
<argument index="1" name="flags" type="int" default="7">
</argument>
<description>
+ Creates a texture, allocates the space for an image, and fills in the image.
</description>
</method>
<method name="texture_debug_usage">
<return type="Array">
</return>
<description>
+ Returns a list of all the textures and their information.
</description>
</method>
<method name="texture_get_data" qualifiers="const">
@@ -1378,6 +1506,7 @@
<argument index="1" name="cube_side" type="int" enum="VisualServer.CubeMapSide" default="0">
</argument>
<description>
+ Returns a copy of a texture's image unless it's a CubeMap, in wich case it returns the [RID] of the image at one of the cubes sides.
</description>
</method>
<method name="texture_get_flags" qualifiers="const">
@@ -1386,6 +1515,7 @@
<argument index="0" name="texture" type="RID">
</argument>
<description>
+ Returns the flags of a texture.
</description>
</method>
<method name="texture_get_format" qualifiers="const">
@@ -1394,6 +1524,7 @@
<argument index="0" name="texture" type="RID">
</argument>
<description>
+ Returns the format of the texture's image.
</description>
</method>
<method name="texture_get_height" qualifiers="const">
@@ -1402,6 +1533,7 @@
<argument index="0" name="texture" type="RID">
</argument>
<description>
+ Returns the texture's height.
</description>
</method>
<method name="texture_get_path" qualifiers="const">
@@ -1410,6 +1542,7 @@
<argument index="0" name="texture" type="RID">
</argument>
<description>
+ Returns the texture's path.
</description>
</method>
<method name="texture_get_texid" qualifiers="const">
@@ -1418,6 +1551,7 @@
<argument index="0" name="texture" type="RID">
</argument>
<description>
+ Returns the opengl id of the texture's image.
</description>
</method>
<method name="texture_get_width" qualifiers="const">
@@ -1426,6 +1560,7 @@
<argument index="0" name="texture" type="RID">
</argument>
<description>
+ Returns the texture's width.
</description>
</method>
<method name="texture_set_data">
@@ -1438,6 +1573,7 @@
<argument index="2" name="cube_side" type="int" enum="VisualServer.CubeMapSide" default="0">
</argument>
<description>
+ Sets the texture's image data. If it's a CubeMap, it sets the image data at a cube side.
</description>
</method>
<method name="texture_set_flags">
@@ -1448,6 +1584,7 @@
<argument index="1" name="flags" type="int">
</argument>
<description>
+ Sets the texture's flags. See [enum TextureFlags] for options
</description>
</method>
<method name="texture_set_path">
@@ -1458,6 +1595,7 @@
<argument index="1" name="path" type="String">
</argument>
<description>
+ Sets the texture's path.
</description>
</method>
<method name="texture_set_shrink_all_x2_on_set_data">
@@ -1466,6 +1604,7 @@
<argument index="0" name="shrink" type="bool">
</argument>
<description>
+ If [code]true[/code], sets internal processes to shrink all image data to half the size.
</description>
</method>
<method name="texture_set_size_override">
@@ -1478,6 +1617,7 @@
<argument index="2" name="height" type="int">
</argument>
<description>
+ Overwrites the texture's width and height.
</description>
</method>
<method name="textures_keep_original">
@@ -1486,6 +1626,7 @@
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ If [code]true[/code], the image will be stored in the texture's images array if overwritten.
</description>
</method>
<method name="viewport_attach_camera">
@@ -1496,6 +1637,7 @@
<argument index="1" name="camera" type="RID">
</argument>
<description>
+ Sets a viewport's camera.
</description>
</method>
<method name="viewport_attach_canvas">
@@ -1506,6 +1648,7 @@
<argument index="1" name="canvas" type="RID">
</argument>
<description>
+ Sets a viewport's canvas.
</description>
</method>
<method name="viewport_attach_to_screen">
@@ -1518,12 +1661,14 @@
<argument index="2" name="screen" type="int" default="0">
</argument>
<description>
+ Attaches a viewport to a screen.
</description>
</method>
<method name="viewport_create">
<return type="RID">
</return>
<description>
+ Creates an empty viewport.
</description>
</method>
<method name="viewport_detach">
@@ -1532,6 +1677,7 @@
<argument index="0" name="viewport" type="RID">
</argument>
<description>
+ Detaches the viewport from the screen.
</description>
</method>
<method name="viewport_get_render_info">
@@ -1542,6 +1688,7 @@
<argument index="1" name="info" type="int" enum="VisualServer.ViewportRenderInfo">
</argument>
<description>
+ Returns a viewport's render info. for options see VIEWPORT_RENDER_INFO* constants.
</description>
</method>
<method name="viewport_get_texture" qualifiers="const">
@@ -1550,6 +1697,7 @@
<argument index="0" name="viewport" type="RID">
</argument>
<description>
+ Returns the viewport's last rendered frame.
</description>
</method>
<method name="viewport_remove_canvas">
@@ -1560,6 +1708,7 @@
<argument index="1" name="canvas" type="RID">
</argument>
<description>
+ Detaches a viewport from a canvas and vice versa.
</description>
</method>
<method name="viewport_set_active">
@@ -1570,6 +1719,7 @@
<argument index="1" name="active" type="bool">
</argument>
<description>
+ If [code]true[/code], sets the viewport active, else sets it inactive.
</description>
</method>
<method name="viewport_set_canvas_layer">
@@ -1582,6 +1732,7 @@
<argument index="2" name="layer" type="int">
</argument>
<description>
+ Sets the renderlayer for a viewport's canvas.
</description>
</method>
<method name="viewport_set_canvas_transform">
@@ -1594,6 +1745,7 @@
<argument index="2" name="offset" type="Transform2D">
</argument>
<description>
+ Sets the transformation of a viewport's canvas.
</description>
</method>
<method name="viewport_set_clear_mode">
@@ -1604,6 +1756,7 @@
<argument index="1" name="clear_mode" type="int" enum="VisualServer.ViewportClearMode">
</argument>
<description>
+ Sets the clear mode of a viewport. See VIEWPORT_CLEAR_MODE_* constants for options.
</description>
</method>
<method name="viewport_set_debug_draw">
@@ -1614,6 +1767,7 @@
<argument index="1" name="draw" type="int" enum="VisualServer.ViewportDebugDraw">
</argument>
<description>
+ Sets the debug draw mode of a viewport. See VIEWPORT_DEBUG_DRAW_* constants for options.
</description>
</method>
<method name="viewport_set_disable_3d">
@@ -1624,6 +1778,7 @@
<argument index="1" name="disabled" type="bool">
</argument>
<description>
+ If [code]true[/code] a viewport's 3D rendering should be disabled.
</description>
</method>
<method name="viewport_set_disable_environment">
@@ -1634,6 +1789,7 @@
<argument index="1" name="disabled" type="bool">
</argument>
<description>
+ If [code]true[/code] rendering of a viewport's environment should be disabled.
</description>
</method>
<method name="viewport_set_global_canvas_transform">
@@ -1644,6 +1800,7 @@
<argument index="1" name="transform" type="Transform2D">
</argument>
<description>
+ Sets the viewport's global transformation matrix.
</description>
</method>
<method name="viewport_set_hdr">
@@ -1654,6 +1811,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ If [code]true[/code] the viewport should render to hdr.
</description>
</method>
<method name="viewport_set_hide_canvas">
@@ -1664,6 +1822,7 @@
<argument index="1" name="hidden" type="bool">
</argument>
<description>
+ If [code]true[/code] the viewport's canvas should not be rendered.
</description>
</method>
<method name="viewport_set_hide_scenario">
@@ -1684,6 +1843,7 @@
<argument index="1" name="msaa" type="int" enum="VisualServer.ViewportMSAA">
</argument>
<description>
+ Sets the anti-aliasing mode. see [enum ViewportMSAA] for options.
</description>
</method>
<method name="viewport_set_parent_viewport">
@@ -1694,6 +1854,7 @@
<argument index="1" name="parent_viewport" type="RID">
</argument>
<description>
+ Sets the viewport's parent to another viewport.
</description>
</method>
<method name="viewport_set_scenario">
@@ -1704,6 +1865,8 @@
<argument index="1" name="scenario" type="RID">
</argument>
<description>
+ Sets a viewport's scenario.
+ The scenario contains information about the [enum ScenarioDebugMode], environment information, reflection atlas etc.
</description>
</method>
<method name="viewport_set_shadow_atlas_quadrant_subdivision">
@@ -1716,6 +1879,7 @@
<argument index="2" name="subdivision" type="int">
</argument>
<description>
+ Sets the shadow atlas quadrant's subdivision.
</description>
</method>
<method name="viewport_set_shadow_atlas_size">
@@ -1726,6 +1890,7 @@
<argument index="1" name="size" type="int">
</argument>
<description>
+ Sets the size of the shadow atlas's images.
</description>
</method>
<method name="viewport_set_size">
@@ -1738,6 +1903,7 @@
<argument index="2" name="height" type="int">
</argument>
<description>
+ Sets the viewport's width and height.
</description>
</method>
<method name="viewport_set_transparent_background">
@@ -1748,6 +1914,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ If [code]true[/code] the viewport should render its background as transparent.
</description>
</method>
<method name="viewport_set_update_mode">
@@ -1758,6 +1925,7 @@
<argument index="1" name="update_mode" type="int" enum="VisualServer.ViewportUpdateMode">
</argument>
<description>
+ Sets when the viewport should be updated. See VIEWPORT_UPDATE_MODE_* constants for options.
</description>
</method>
<method name="viewport_set_usage">
@@ -1768,6 +1936,7 @@
<argument index="1" name="usage" type="int" enum="VisualServer.ViewportUsage">
</argument>
<description>
+ Sets what should be rendered in the viewport. See VIEWPORT_USAGE_* constants for options.
</description>
</method>
<method name="viewport_set_use_arvr">
@@ -1778,6 +1947,7 @@
<argument index="1" name="use_arvr" type="bool">
</argument>
<description>
+ If [code]true[/code] the viewport should use augmented or virtual reality technologies. See [ARVRInterface].
</description>
</method>
<method name="viewport_set_vflip">
@@ -1788,6 +1958,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ If [code]true[/code] the viewport's rendering should be flipped vertically.
</description>
</method>
</methods>
@@ -1798,315 +1969,432 @@
</signal>
</signals>
<constants>
- <constant name="NO_INDEX_ARRAY" value="-1" enum="">
+ <constant name="NO_INDEX_ARRAY" value="-1">
+ Marks an error that shows that the index array is empty.
</constant>
- <constant name="ARRAY_WEIGHTS_SIZE" value="4" enum="">
+ <constant name="ARRAY_WEIGHTS_SIZE" value="4">
</constant>
- <constant name="CANVAS_ITEM_Z_MIN" value="-4096" enum="">
+ <constant name="CANVAS_ITEM_Z_MIN" value="-4096">
+ The minimum Z-layer for canvas items.
</constant>
- <constant name="CANVAS_ITEM_Z_MAX" value="4096" enum="">
+ <constant name="CANVAS_ITEM_Z_MAX" value="4096">
+ The maximum Z-layer for canvas items.
</constant>
- <constant name="MAX_GLOW_LEVELS" value="7" enum="">
+ <constant name="MAX_GLOW_LEVELS" value="7">
</constant>
- <constant name="MAX_CURSORS" value="8" enum="">
+ <constant name="MAX_CURSORS" value="8">
</constant>
- <constant name="MATERIAL_RENDER_PRIORITY_MIN" value="-128" enum="">
+ <constant name="MATERIAL_RENDER_PRIORITY_MIN" value="-128">
+ The minimum renderpriority of all materials.
</constant>
- <constant name="MATERIAL_RENDER_PRIORITY_MAX" value="127" enum="">
+ <constant name="MATERIAL_RENDER_PRIORITY_MAX" value="127">
+ The maximum renderpriority of all materials.
</constant>
- <constant name="CUBEMAP_LEFT" value="0">
+ <constant name="CUBEMAP_LEFT" value="0" enum="CubeMapSide">
+ Marks the left side of a cubemap.
</constant>
- <constant name="CUBEMAP_RIGHT" value="1">
+ <constant name="CUBEMAP_RIGHT" value="1" enum="CubeMapSide">
+ Marks the right side of a cubemap.
</constant>
- <constant name="CUBEMAP_BOTTOM" value="2">
+ <constant name="CUBEMAP_BOTTOM" value="2" enum="CubeMapSide">
+ Marks the bottom side of a cubemap.
</constant>
- <constant name="CUBEMAP_TOP" value="3">
+ <constant name="CUBEMAP_TOP" value="3" enum="CubeMapSide">
+ Marks the top side of a cubemap.
</constant>
- <constant name="CUBEMAP_FRONT" value="4">
+ <constant name="CUBEMAP_FRONT" value="4" enum="CubeMapSide">
+ Marks the front side of a cubemap.
</constant>
- <constant name="CUBEMAP_BACK" value="5">
+ <constant name="CUBEMAP_BACK" value="5" enum="CubeMapSide">
+ Marks the back side of a cubemap.
</constant>
- <constant name="TEXTURE_FLAG_MIPMAPS" value="1">
+ <constant name="TEXTURE_FLAG_MIPMAPS" value="1" enum="TextureFlags">
+ Generate mipmaps, which are smaller versions of the same texture to use when zoomed out, keeping the aspect ratio.
</constant>
- <constant name="TEXTURE_FLAG_REPEAT" value="2">
+ <constant name="TEXTURE_FLAG_REPEAT" value="2" enum="TextureFlags">
+ Repeat (instead of clamp to edge).
</constant>
- <constant name="TEXTURE_FLAG_FILTER" value="4">
+ <constant name="TEXTURE_FLAG_FILTER" value="4" enum="TextureFlags">
+ Turn on magnifying filter, to enable smooth zooming in of the texture.
</constant>
- <constant name="TEXTURE_FLAG_ANISOTROPIC_FILTER" value="8">
+ <constant name="TEXTURE_FLAG_ANISOTROPIC_FILTER" value="8" enum="TextureFlags">
+ Anisotropic mipmap filtering. Generates smaller versions of the same texture with different aspect ratios.
+ More effective on planes often shown going to the horrizon as those textures (Walls or Ground for example) get squashed in the viewport to different aspect ratios and regular mipmaps keep the aspect ratio so they don't optimize storage that well in those cases.
</constant>
- <constant name="TEXTURE_FLAG_CONVERT_TO_LINEAR" value="16">
+ <constant name="TEXTURE_FLAG_CONVERT_TO_LINEAR" value="16" enum="TextureFlags">
+ Converts texture to SRGB color space.
</constant>
- <constant name="TEXTURE_FLAG_MIRRORED_REPEAT" value="32">
+ <constant name="TEXTURE_FLAG_MIRRORED_REPEAT" value="32" enum="TextureFlags">
+ Repeat texture with alternate sections mirrored.
</constant>
- <constant name="TEXTURE_FLAG_CUBEMAP" value="2048">
+ <constant name="TEXTURE_FLAG_CUBEMAP" value="2048" enum="TextureFlags">
+ Texture is a cubemap.
</constant>
- <constant name="TEXTURE_FLAG_USED_FOR_STREAMING" value="4096">
+ <constant name="TEXTURE_FLAG_USED_FOR_STREAMING" value="4096" enum="TextureFlags">
+ Texture is a video surface.
</constant>
- <constant name="TEXTURE_FLAGS_DEFAULT" value="7">
+ <constant name="TEXTURE_FLAGS_DEFAULT" value="7" enum="TextureFlags">
+ Default flags. Generate mipmaps, repeat, and filter are enabled.
</constant>
- <constant name="SHADER_SPATIAL" value="0">
+ <constant name="SHADER_SPATIAL" value="0" enum="ShaderMode">
+ Shader is a 3D shader.
</constant>
- <constant name="SHADER_CANVAS_ITEM" value="1">
+ <constant name="SHADER_CANVAS_ITEM" value="1" enum="ShaderMode">
+ Shader is a 2D shader.
</constant>
- <constant name="SHADER_PARTICLES" value="2">
+ <constant name="SHADER_PARTICLES" value="2" enum="ShaderMode">
+ Shader is a particle shader.
</constant>
- <constant name="SHADER_MAX" value="3">
+ <constant name="SHADER_MAX" value="3" enum="ShaderMode">
+ Marks maximum of the shader types array. used internally.
</constant>
- <constant name="ARRAY_VERTEX" value="0">
+ <constant name="ARRAY_VERTEX" value="0" enum="ArrayType">
+ Array is a vertex array.
</constant>
- <constant name="ARRAY_NORMAL" value="1">
+ <constant name="ARRAY_NORMAL" value="1" enum="ArrayType">
+ Array is a normal array.
</constant>
- <constant name="ARRAY_TANGENT" value="2">
+ <constant name="ARRAY_TANGENT" value="2" enum="ArrayType">
+ Array is a tangent array.
</constant>
- <constant name="ARRAY_COLOR" value="3">
+ <constant name="ARRAY_COLOR" value="3" enum="ArrayType">
+ Array is a color array.
</constant>
- <constant name="ARRAY_TEX_UV" value="4">
+ <constant name="ARRAY_TEX_UV" value="4" enum="ArrayType">
+ Array is a uv coordinates array.
</constant>
- <constant name="ARRAY_TEX_UV2" value="5">
+ <constant name="ARRAY_TEX_UV2" value="5" enum="ArrayType">
+ Array is a uv coordinates array for the second uv coordinates.
</constant>
- <constant name="ARRAY_BONES" value="6">
+ <constant name="ARRAY_BONES" value="6" enum="ArrayType">
+ Array contains bone information.
</constant>
- <constant name="ARRAY_WEIGHTS" value="7">
+ <constant name="ARRAY_WEIGHTS" value="7" enum="ArrayType">
+ Array is weight information.
</constant>
- <constant name="ARRAY_INDEX" value="8">
+ <constant name="ARRAY_INDEX" value="8" enum="ArrayType">
+ Array is index array.
</constant>
- <constant name="ARRAY_MAX" value="9">
+ <constant name="ARRAY_MAX" value="9" enum="ArrayType">
+ Marks the maximum of the array types. Used internally.
</constant>
- <constant name="ARRAY_FORMAT_VERTEX" value="1">
+ <constant name="ARRAY_FORMAT_VERTEX" value="1" enum="ArrayFormat">
+ Flag used to mark a vertex array.
</constant>
- <constant name="ARRAY_FORMAT_NORMAL" value="2">
+ <constant name="ARRAY_FORMAT_NORMAL" value="2" enum="ArrayFormat">
+ Flag used to mark a normal array.
</constant>
- <constant name="ARRAY_FORMAT_TANGENT" value="4">
+ <constant name="ARRAY_FORMAT_TANGENT" value="4" enum="ArrayFormat">
+ Flag used to mark a tangent array.
</constant>
- <constant name="ARRAY_FORMAT_COLOR" value="8">
+ <constant name="ARRAY_FORMAT_COLOR" value="8" enum="ArrayFormat">
+ Flag used to mark a color array.
</constant>
- <constant name="ARRAY_FORMAT_TEX_UV" value="16">
+ <constant name="ARRAY_FORMAT_TEX_UV" value="16" enum="ArrayFormat">
+ Flag used to mark a uv coordinates array.
</constant>
- <constant name="ARRAY_FORMAT_TEX_UV2" value="32">
+ <constant name="ARRAY_FORMAT_TEX_UV2" value="32" enum="ArrayFormat">
+ Flag used to mark a uv coordinates array for the second uv coordinates.
</constant>
- <constant name="ARRAY_FORMAT_BONES" value="64">
+ <constant name="ARRAY_FORMAT_BONES" value="64" enum="ArrayFormat">
+ Flag used to mark a bone information array.
</constant>
- <constant name="ARRAY_FORMAT_WEIGHTS" value="128">
+ <constant name="ARRAY_FORMAT_WEIGHTS" value="128" enum="ArrayFormat">
+ Flag used to mark a weights array.
</constant>
- <constant name="ARRAY_FORMAT_INDEX" value="256">
+ <constant name="ARRAY_FORMAT_INDEX" value="256" enum="ArrayFormat">
+ Flag used to mark a index array.
</constant>
- <constant name="ARRAY_COMPRESS_VERTEX" value="512">
+ <constant name="ARRAY_COMPRESS_VERTEX" value="512" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) vertex array.
</constant>
- <constant name="ARRAY_COMPRESS_NORMAL" value="1024">
+ <constant name="ARRAY_COMPRESS_NORMAL" value="1024" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) normal array.
</constant>
- <constant name="ARRAY_COMPRESS_TANGENT" value="2048">
+ <constant name="ARRAY_COMPRESS_TANGENT" value="2048" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) tangent array.
</constant>
- <constant name="ARRAY_COMPRESS_COLOR" value="4096">
+ <constant name="ARRAY_COMPRESS_COLOR" value="4096" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) color array.
</constant>
- <constant name="ARRAY_COMPRESS_TEX_UV" value="8192">
+ <constant name="ARRAY_COMPRESS_TEX_UV" value="8192" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) uv coordinates array.
</constant>
- <constant name="ARRAY_COMPRESS_TEX_UV2" value="16384">
+ <constant name="ARRAY_COMPRESS_TEX_UV2" value="16384" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) uv coordinates array for the second uv coordinates.
</constant>
- <constant name="ARRAY_COMPRESS_BONES" value="32768">
+ <constant name="ARRAY_COMPRESS_BONES" value="32768" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_COMPRESS_WEIGHTS" value="65536">
+ <constant name="ARRAY_COMPRESS_WEIGHTS" value="65536" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) weight array.
</constant>
- <constant name="ARRAY_COMPRESS_INDEX" value="131072">
+ <constant name="ARRAY_COMPRESS_INDEX" value="131072" enum="ArrayFormat">
</constant>
- <constant name="ARRAY_FLAG_USE_2D_VERTICES" value="262144">
+ <constant name="ARRAY_FLAG_USE_2D_VERTICES" value="262144" enum="ArrayFormat">
+ Flag used to mark that the array contains 2D vertices.
</constant>
- <constant name="ARRAY_FLAG_USE_16_BIT_BONES" value="524288">
+ <constant name="ARRAY_FLAG_USE_16_BIT_BONES" value="524288" enum="ArrayFormat">
+ Flag used to mark that the array uses 16 bit bones instead of 8 bit.
</constant>
- <constant name="ARRAY_COMPRESS_DEFAULT" value="97792">
+ <constant name="ARRAY_COMPRESS_DEFAULT" value="97792" enum="ArrayFormat">
+ Used to set flags ARRAY_COMPRESS_VERTEX, ARRAY_COMPRESS_NORMAL, ARRAY_COMPRESS_TANGENT, ARRAY_COMPRESS_COLOR, ARRAY_COMPRESS_TEX_UV, ARRAY_COMPRESS_TEX_UV2 and ARRAY_COMPRESS_WEIGHTS quickly.
</constant>
- <constant name="PRIMITIVE_POINTS" value="0">
+ <constant name="PRIMITIVE_POINTS" value="0" enum="PrimitiveType">
+ Primitive to draw consists of points.
</constant>
- <constant name="PRIMITIVE_LINES" value="1">
+ <constant name="PRIMITIVE_LINES" value="1" enum="PrimitiveType">
+ Primitive to draw consists of lines.
</constant>
- <constant name="PRIMITIVE_LINE_STRIP" value="2">
+ <constant name="PRIMITIVE_LINE_STRIP" value="2" enum="PrimitiveType">
+ Primitive to draw consists of a line strip from start to end.
</constant>
- <constant name="PRIMITIVE_LINE_LOOP" value="3">
+ <constant name="PRIMITIVE_LINE_LOOP" value="3" enum="PrimitiveType">
+ Primitive to draw consists of a line loop (a line strip with a line between the last and the first vertex).
</constant>
- <constant name="PRIMITIVE_TRIANGLES" value="4">
+ <constant name="PRIMITIVE_TRIANGLES" value="4" enum="PrimitiveType">
+ Primitive to draw consists of triangles.
</constant>
- <constant name="PRIMITIVE_TRIANGLE_STRIP" value="5">
+ <constant name="PRIMITIVE_TRIANGLE_STRIP" value="5" enum="PrimitiveType">
+ Primitive to draw consists of a triangle strip (the last 3 verticies are always combined to make a triangle).
</constant>
- <constant name="PRIMITIVE_TRIANGLE_FAN" value="6">
+ <constant name="PRIMITIVE_TRIANGLE_FAN" value="6" enum="PrimitiveType">
+ Primitive to draw consists of a triangle strip (the last 2 verticies are always combined with the first to make a triangle).
</constant>
- <constant name="PRIMITIVE_MAX" value="7">
+ <constant name="PRIMITIVE_MAX" value="7" enum="PrimitiveType">
+ Marks the primitive types endpoint. used internally.
</constant>
- <constant name="BLEND_SHAPE_MODE_NORMALIZED" value="0">
+ <constant name="BLEND_SHAPE_MODE_NORMALIZED" value="0" enum="BlendShapeMode">
</constant>
- <constant name="BLEND_SHAPE_MODE_RELATIVE" value="1">
+ <constant name="BLEND_SHAPE_MODE_RELATIVE" value="1" enum="BlendShapeMode">
</constant>
- <constant name="LIGHT_DIRECTIONAL" value="0">
+ <constant name="LIGHT_DIRECTIONAL" value="0" enum="LightType">
+ Is a directional (sun) light.
</constant>
- <constant name="LIGHT_OMNI" value="1">
+ <constant name="LIGHT_OMNI" value="1" enum="LightType">
+ is an omni light.
</constant>
- <constant name="LIGHT_SPOT" value="2">
+ <constant name="LIGHT_SPOT" value="2" enum="LightType">
+ is an spot light.
</constant>
- <constant name="LIGHT_PARAM_ENERGY" value="0">
+ <constant name="LIGHT_PARAM_ENERGY" value="0" enum="LightParam">
+ The light's energy.
</constant>
- <constant name="LIGHT_PARAM_SPECULAR" value="1">
+ <constant name="LIGHT_PARAM_SPECULAR" value="2" enum="LightParam">
+ The light's influence on specularity.
</constant>
- <constant name="LIGHT_PARAM_RANGE" value="2">
+ <constant name="LIGHT_PARAM_RANGE" value="3" enum="LightParam">
+ The light's range.
</constant>
- <constant name="LIGHT_PARAM_ATTENUATION" value="3">
+ <constant name="LIGHT_PARAM_ATTENUATION" value="4" enum="LightParam">
+ The light's attenuation.
</constant>
- <constant name="LIGHT_PARAM_SPOT_ANGLE" value="4">
+ <constant name="LIGHT_PARAM_SPOT_ANGLE" value="5" enum="LightParam">
+ The spotlight's angle.
</constant>
- <constant name="LIGHT_PARAM_SPOT_ATTENUATION" value="5">
+ <constant name="LIGHT_PARAM_SPOT_ATTENUATION" value="6" enum="LightParam">
+ The spotlight's attenuation.
</constant>
- <constant name="LIGHT_PARAM_CONTACT_SHADOW_SIZE" value="6">
+ <constant name="LIGHT_PARAM_CONTACT_SHADOW_SIZE" value="7" enum="LightParam">
+ Scales the shadow color.
</constant>
- <constant name="LIGHT_PARAM_SHADOW_MAX_DISTANCE" value="7">
+ <constant name="LIGHT_PARAM_SHADOW_MAX_DISTANCE" value="8" enum="LightParam">
</constant>
- <constant name="LIGHT_PARAM_SHADOW_SPLIT_1_OFFSET" value="8">
+ <constant name="LIGHT_PARAM_SHADOW_SPLIT_1_OFFSET" value="9" enum="LightParam">
</constant>
- <constant name="LIGHT_PARAM_SHADOW_SPLIT_2_OFFSET" value="9">
+ <constant name="LIGHT_PARAM_SHADOW_SPLIT_2_OFFSET" value="10" enum="LightParam">
</constant>
- <constant name="LIGHT_PARAM_SHADOW_SPLIT_3_OFFSET" value="10">
+ <constant name="LIGHT_PARAM_SHADOW_SPLIT_3_OFFSET" value="11" enum="LightParam">
</constant>
- <constant name="LIGHT_PARAM_SHADOW_NORMAL_BIAS" value="11">
+ <constant name="LIGHT_PARAM_SHADOW_NORMAL_BIAS" value="12" enum="LightParam">
</constant>
- <constant name="LIGHT_PARAM_SHADOW_BIAS" value="12">
+ <constant name="LIGHT_PARAM_SHADOW_BIAS" value="13" enum="LightParam">
</constant>
- <constant name="LIGHT_PARAM_SHADOW_BIAS_SPLIT_SCALE" value="13">
+ <constant name="LIGHT_PARAM_SHADOW_BIAS_SPLIT_SCALE" value="14" enum="LightParam">
</constant>
- <constant name="LIGHT_PARAM_MAX" value="14">
+ <constant name="LIGHT_PARAM_MAX" value="15" enum="LightParam">
+ The light parameters endpoint. Used internally.
</constant>
- <constant name="VIEWPORT_UPDATE_DISABLED" value="0">
+ <constant name="VIEWPORT_UPDATE_DISABLED" value="0" enum="ViewportUpdateMode">
</constant>
- <constant name="VIEWPORT_UPDATE_ONCE" value="1">
+ <constant name="VIEWPORT_UPDATE_ONCE" value="1" enum="ViewportUpdateMode">
</constant>
- <constant name="VIEWPORT_UPDATE_WHEN_VISIBLE" value="2">
+ <constant name="VIEWPORT_UPDATE_WHEN_VISIBLE" value="2" enum="ViewportUpdateMode">
</constant>
- <constant name="VIEWPORT_UPDATE_ALWAYS" value="3">
+ <constant name="VIEWPORT_UPDATE_ALWAYS" value="3" enum="ViewportUpdateMode">
</constant>
- <constant name="VIEWPORT_CLEAR_ALWAYS" value="0">
+ <constant name="VIEWPORT_CLEAR_ALWAYS" value="0" enum="ViewportClearMode">
+ The viewport is always cleared before drawing.
</constant>
- <constant name="VIEWPORT_CLEAR_NEVER" value="1">
+ <constant name="VIEWPORT_CLEAR_NEVER" value="1" enum="ViewportClearMode">
+ The viewport is never cleared before drawing.
</constant>
- <constant name="VIEWPORT_CLEAR_ONLY_NEXT_FRAME" value="2">
+ <constant name="VIEWPORT_CLEAR_ONLY_NEXT_FRAME" value="2" enum="ViewportClearMode">
+ The viewport is cleared once, then the clear mode is set to [VIEWPORT_CLEAR_NEVER].
</constant>
- <constant name="VIEWPORT_MSAA_DISABLED" value="0">
+ <constant name="VIEWPORT_MSAA_DISABLED" value="0" enum="ViewportMSAA">
+ Multisample antialiasing is disabled.
</constant>
- <constant name="VIEWPORT_MSAA_2X" value="1">
+ <constant name="VIEWPORT_MSAA_2X" value="1" enum="ViewportMSAA">
+ Multisample antialiasing is set to 2X.
</constant>
- <constant name="VIEWPORT_MSAA_4X" value="2">
+ <constant name="VIEWPORT_MSAA_4X" value="2" enum="ViewportMSAA">
+ Multisample antialiasing is set to 4X.
</constant>
- <constant name="VIEWPORT_MSAA_8X" value="3">
+ <constant name="VIEWPORT_MSAA_8X" value="3" enum="ViewportMSAA">
+ Multisample antialiasing is set to 8X.
</constant>
- <constant name="VIEWPORT_MSAA_16X" value="4">
+ <constant name="VIEWPORT_MSAA_16X" value="4" enum="ViewportMSAA">
+ Multisample antialiasing is set to 16X.
</constant>
- <constant name="VIEWPORT_USAGE_2D" value="0">
+ <constant name="VIEWPORT_USAGE_2D" value="0" enum="ViewportUsage">
+ The Viewport does not render 3D but samples.
</constant>
- <constant name="VIEWPORT_USAGE_2D_NO_SAMPLING" value="1">
+ <constant name="VIEWPORT_USAGE_2D_NO_SAMPLING" value="1" enum="ViewportUsage">
+ The Viewport does not render 3D and does not sample.
</constant>
- <constant name="VIEWPORT_USAGE_3D" value="2">
+ <constant name="VIEWPORT_USAGE_3D" value="2" enum="ViewportUsage">
+ The Viewport renders 3D with effects.
</constant>
- <constant name="VIEWPORT_USAGE_3D_NO_EFFECTS" value="3">
+ <constant name="VIEWPORT_USAGE_3D_NO_EFFECTS" value="3" enum="ViewportUsage">
+ The Viewport renders 3D but without effects.
</constant>
- <constant name="VIEWPORT_RENDER_INFO_OBJECTS_IN_FRAME" value="0">
+ <constant name="VIEWPORT_RENDER_INFO_OBJECTS_IN_FRAME" value="0" enum="ViewportRenderInfo">
</constant>
- <constant name="VIEWPORT_RENDER_INFO_VERTICES_IN_FRAME" value="1">
+ <constant name="VIEWPORT_RENDER_INFO_VERTICES_IN_FRAME" value="1" enum="ViewportRenderInfo">
</constant>
- <constant name="VIEWPORT_RENDER_INFO_MATERIAL_CHANGES_IN_FRAME" value="2">
+ <constant name="VIEWPORT_RENDER_INFO_MATERIAL_CHANGES_IN_FRAME" value="2" enum="ViewportRenderInfo">
</constant>
- <constant name="VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME" value="3">
+ <constant name="VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME" value="3" enum="ViewportRenderInfo">
</constant>
- <constant name="VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME" value="4">
+ <constant name="VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME" value="4" enum="ViewportRenderInfo">
</constant>
- <constant name="VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME" value="5">
+ <constant name="VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME" value="5" enum="ViewportRenderInfo">
</constant>
- <constant name="VIEWPORT_RENDER_INFO_MAX" value="6">
+ <constant name="VIEWPORT_RENDER_INFO_MAX" value="6" enum="ViewportRenderInfo">
+ Marks end of VIEWPORT_RENDER_INFO* constants. Used internally.
</constant>
- <constant name="VIEWPORT_DEBUG_DRAW_DISABLED" value="0">
+ <constant name="VIEWPORT_DEBUG_DRAW_DISABLED" value="0" enum="ViewportDebugDraw">
+ Debug draw is disabled. Default setting.
</constant>
- <constant name="VIEWPORT_DEBUG_DRAW_UNSHADED" value="1">
+ <constant name="VIEWPORT_DEBUG_DRAW_UNSHADED" value="1" enum="ViewportDebugDraw">
+ Debug draw sets objects to unshaded.
</constant>
- <constant name="VIEWPORT_DEBUG_DRAW_OVERDRAW" value="2">
+ <constant name="VIEWPORT_DEBUG_DRAW_OVERDRAW" value="2" enum="ViewportDebugDraw">
+ Overwrites clear color to [code](0,0,0,0)[/code].
</constant>
- <constant name="VIEWPORT_DEBUG_DRAW_WIREFRAME" value="3">
+ <constant name="VIEWPORT_DEBUG_DRAW_WIREFRAME" value="3" enum="ViewportDebugDraw">
+ Debug draw draws objects in wireframe.
</constant>
- <constant name="SCENARIO_DEBUG_DISABLED" value="0">
+ <constant name="SCENARIO_DEBUG_DISABLED" value="0" enum="ScenarioDebugMode">
</constant>
- <constant name="SCENARIO_DEBUG_WIREFRAME" value="1">
+ <constant name="SCENARIO_DEBUG_WIREFRAME" value="1" enum="ScenarioDebugMode">
</constant>
- <constant name="SCENARIO_DEBUG_OVERDRAW" value="2">
+ <constant name="SCENARIO_DEBUG_OVERDRAW" value="2" enum="ScenarioDebugMode">
</constant>
- <constant name="SCENARIO_DEBUG_SHADELESS" value="3">
+ <constant name="SCENARIO_DEBUG_SHADELESS" value="3" enum="ScenarioDebugMode">
</constant>
- <constant name="INSTANCE_NONE" value="0">
+ <constant name="INSTANCE_NONE" value="0" enum="InstanceType">
+ The instance does not have a type.
</constant>
- <constant name="INSTANCE_MESH" value="1">
+ <constant name="INSTANCE_MESH" value="1" enum="InstanceType">
+ The instance is a mesh.
</constant>
- <constant name="INSTANCE_MULTIMESH" value="2">
+ <constant name="INSTANCE_MULTIMESH" value="2" enum="InstanceType">
+ The instance is a multimesh.
</constant>
- <constant name="INSTANCE_IMMEDIATE" value="3">
+ <constant name="INSTANCE_IMMEDIATE" value="3" enum="InstanceType">
+ The instance is an immediate geometry.
</constant>
- <constant name="INSTANCE_PARTICLES" value="4">
+ <constant name="INSTANCE_PARTICLES" value="4" enum="InstanceType">
+ The instance is a particle emitter.
</constant>
- <constant name="INSTANCE_LIGHT" value="5">
+ <constant name="INSTANCE_LIGHT" value="5" enum="InstanceType">
+ The instance is a light.
</constant>
- <constant name="INSTANCE_REFLECTION_PROBE" value="6">
+ <constant name="INSTANCE_REFLECTION_PROBE" value="6" enum="InstanceType">
</constant>
- <constant name="INSTANCE_GI_PROBE" value="7">
+ <constant name="INSTANCE_GI_PROBE" value="7" enum="InstanceType">
</constant>
- <constant name="INSTANCE_MAX" value="8">
+ <constant name="INSTANCE_MAX" value="8" enum="InstanceType">
+ The max value for INSTANCE_* constants, used internally.
</constant>
- <constant name="INSTANCE_GEOMETRY_MASK" value="30">
+ <constant name="INSTANCE_GEOMETRY_MASK" value="30" enum="InstanceType">
+ A combination of the flags of geometry instances (mesh, multimesh, immediate and particles).
</constant>
- <constant name="NINE_PATCH_STRETCH" value="0">
+ <constant name="NINE_PATCH_STRETCH" value="0" enum="NinePatchAxisMode">
+ The nine patch gets stretched where needed.
</constant>
- <constant name="NINE_PATCH_TILE" value="1">
+ <constant name="NINE_PATCH_TILE" value="1" enum="NinePatchAxisMode">
+ The nine patch gets filled with tiles where needed.
</constant>
- <constant name="NINE_PATCH_TILE_FIT" value="2">
+ <constant name="NINE_PATCH_TILE_FIT" value="2" enum="NinePatchAxisMode">
+ The nine patch gets filled with tiles where needed and stretches them a bit if needed.
</constant>
- <constant name="CANVAS_LIGHT_MODE_ADD" value="0">
+ <constant name="CANVAS_LIGHT_MODE_ADD" value="0" enum="CanvasLightMode">
+ Adds light color additive to the canvas.
</constant>
- <constant name="CANVAS_LIGHT_MODE_SUB" value="1">
+ <constant name="CANVAS_LIGHT_MODE_SUB" value="1" enum="CanvasLightMode">
+ Adds light color subtractive to the canvas.
</constant>
- <constant name="CANVAS_LIGHT_MODE_MIX" value="2">
+ <constant name="CANVAS_LIGHT_MODE_MIX" value="2" enum="CanvasLightMode">
+ The light adds color depending on transparency.
</constant>
- <constant name="CANVAS_LIGHT_MODE_MASK" value="3">
+ <constant name="CANVAS_LIGHT_MODE_MASK" value="3" enum="CanvasLightMode">
+ The light adds color depending on mask.
</constant>
- <constant name="CANVAS_LIGHT_FILTER_NONE" value="0">
+ <constant name="CANVAS_LIGHT_FILTER_NONE" value="0" enum="CanvasLightShadowFilter">
</constant>
- <constant name="CANVAS_LIGHT_FILTER_PCF3" value="1">
+ <constant name="CANVAS_LIGHT_FILTER_PCF3" value="1" enum="CanvasLightShadowFilter">
</constant>
- <constant name="CANVAS_LIGHT_FILTER_PCF5" value="2">
+ <constant name="CANVAS_LIGHT_FILTER_PCF5" value="2" enum="CanvasLightShadowFilter">
</constant>
- <constant name="CANVAS_LIGHT_FILTER_PCF7" value="3">
+ <constant name="CANVAS_LIGHT_FILTER_PCF7" value="3" enum="CanvasLightShadowFilter">
</constant>
- <constant name="CANVAS_LIGHT_FILTER_PCF9" value="4">
+ <constant name="CANVAS_LIGHT_FILTER_PCF9" value="4" enum="CanvasLightShadowFilter">
</constant>
- <constant name="CANVAS_LIGHT_FILTER_PCF13" value="5">
+ <constant name="CANVAS_LIGHT_FILTER_PCF13" value="5" enum="CanvasLightShadowFilter">
</constant>
- <constant name="CANVAS_OCCLUDER_POLYGON_CULL_DISABLED" value="0">
+ <constant name="CANVAS_OCCLUDER_POLYGON_CULL_DISABLED" value="0" enum="CanvasOccluderPolygonCullMode">
+ Culling of the canvas occluder is disabled.
</constant>
- <constant name="CANVAS_OCCLUDER_POLYGON_CULL_CLOCKWISE" value="1">
+ <constant name="CANVAS_OCCLUDER_POLYGON_CULL_CLOCKWISE" value="1" enum="CanvasOccluderPolygonCullMode">
+ Culling of the canvas occluder is clockwise.
</constant>
- <constant name="CANVAS_OCCLUDER_POLYGON_CULL_COUNTER_CLOCKWISE" value="2">
+ <constant name="CANVAS_OCCLUDER_POLYGON_CULL_COUNTER_CLOCKWISE" value="2" enum="CanvasOccluderPolygonCullMode">
+ Culling of the canvas occluder is counterclockwise.
</constant>
- <constant name="INFO_OBJECTS_IN_FRAME" value="0">
+ <constant name="INFO_OBJECTS_IN_FRAME" value="0" enum="RenderInfo">
+ The amount of objects in the frame.
</constant>
- <constant name="INFO_VERTICES_IN_FRAME" value="1">
+ <constant name="INFO_VERTICES_IN_FRAME" value="1" enum="RenderInfo">
+ The amount of vertices in the frame.
</constant>
- <constant name="INFO_MATERIAL_CHANGES_IN_FRAME" value="2">
+ <constant name="INFO_MATERIAL_CHANGES_IN_FRAME" value="2" enum="RenderInfo">
+ The amount of modified materials in the frame.
</constant>
- <constant name="INFO_SHADER_CHANGES_IN_FRAME" value="3">
+ <constant name="INFO_SHADER_CHANGES_IN_FRAME" value="3" enum="RenderInfo">
+ The amount of shader rebinds in the frame.
</constant>
- <constant name="INFO_SURFACE_CHANGES_IN_FRAME" value="4">
+ <constant name="INFO_SURFACE_CHANGES_IN_FRAME" value="4" enum="RenderInfo">
+ The amount of surface changes in the frame.
</constant>
- <constant name="INFO_DRAW_CALLS_IN_FRAME" value="5">
+ <constant name="INFO_DRAW_CALLS_IN_FRAME" value="5" enum="RenderInfo">
+ The amount of draw calls in frame.
</constant>
- <constant name="INFO_USAGE_VIDEO_MEM_TOTAL" value="6">
+ <constant name="INFO_USAGE_VIDEO_MEM_TOTAL" value="6" enum="RenderInfo">
</constant>
- <constant name="INFO_VIDEO_MEM_USED" value="7">
+ <constant name="INFO_VIDEO_MEM_USED" value="7" enum="RenderInfo">
+ The amount of vertex memory and texture memory used.
</constant>
- <constant name="INFO_TEXTURE_MEM_USED" value="8">
+ <constant name="INFO_TEXTURE_MEM_USED" value="8" enum="RenderInfo">
+ The amount of texture memory used.
</constant>
- <constant name="INFO_VERTEX_MEM_USED" value="9">
+ <constant name="INFO_VERTEX_MEM_USED" value="9" enum="RenderInfo">
+ The amount of vertex memory used.
</constant>
- <constant name="FEATURE_SHADERS" value="0">
+ <constant name="FEATURE_SHADERS" value="0" enum="Features">
</constant>
- <constant name="FEATURE_MULTITHREADED" value="1">
+ <constant name="FEATURE_MULTITHREADED" value="1" enum="Features">
</constant>
</constants>
</class>
diff --git a/doc/classes/WeakRef.xml b/doc/classes/WeakRef.xml
index 00e5bdfd2c..0641dc1349 100644
--- a/doc/classes/WeakRef.xml
+++ b/doc/classes/WeakRef.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="WeakRef" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="WeakRef" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Holds an [Object], but does not contribute to the reference count if the object is a reference.
</brief_description>
diff --git a/doc/classes/WindowDialog.xml b/doc/classes/WindowDialog.xml
index a6ebd45a76..5bdcfe238d 100644
--- a/doc/classes/WindowDialog.xml
+++ b/doc/classes/WindowDialog.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="WindowDialog" inherits="Popup" category="Core" version="3.0-alpha">
+<class name="WindowDialog" inherits="Popup" category="Core" version="3.0-beta">
<brief_description>
Base class for window dialogs.
</brief_description>
@@ -18,41 +18,13 @@
Return the close [TextureButton].
</description>
</method>
- <method name="get_resizable" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="get_title" qualifiers="const">
- <return type="String">
- </return>
- <description>
- Return the title of the window.
- </description>
- </method>
- <method name="set_resizable">
- <return type="void">
- </return>
- <argument index="0" name="resizable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_title">
- <return type="void">
- </return>
- <argument index="0" name="title" type="String">
- </argument>
- <description>
- Set the title of the window.
- </description>
- </method>
</methods>
<members>
<member name="resizable" type="bool" setter="set_resizable" getter="get_resizable">
+ If [code]true[/code] the user can resize the window. Default value: [code]false[/code].
</member>
<member name="window_title" type="String" setter="set_title" getter="get_title">
+ The text displayed in the window's title bar. Default value: "Save a File".
</member>
</members>
<constants>
diff --git a/doc/classes/World.xml b/doc/classes/World.xml
index 6d243f26a5..9011d39669 100644
--- a/doc/classes/World.xml
+++ b/doc/classes/World.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="World" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="World" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Class that has everything pertaining to a world.
</brief_description>
@@ -15,53 +15,30 @@
<return type="PhysicsDirectSpaceState">
</return>
<description>
- </description>
- </method>
- <method name="get_environment" qualifiers="const">
- <return type="Environment">
- </return>
- <description>
- </description>
- </method>
- <method name="get_fallback_environment" qualifiers="const">
- <return type="Environment">
- </return>
- <description>
+ Returns the World's physics space.
</description>
</method>
<method name="get_scenario" qualifiers="const">
<return type="RID">
</return>
<description>
+ Returns the World's visual scenario.
</description>
</method>
<method name="get_space" qualifiers="const">
<return type="RID">
</return>
<description>
- </description>
- </method>
- <method name="set_environment">
- <return type="void">
- </return>
- <argument index="0" name="env" type="Environment">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_fallback_environment">
- <return type="void">
- </return>
- <argument index="0" name="env" type="Environment">
- </argument>
- <description>
+ Returns the World's sound space.
</description>
</method>
</methods>
<members>
<member name="environment" type="Environment" setter="set_environment" getter="get_environment">
+ The World's [Environment].
</member>
<member name="fallback_environment" type="Environment" setter="set_fallback_environment" getter="get_fallback_environment">
+ The World's fallback_environment will be used if the World's [Environment] fails or is missing.
</member>
</members>
<constants>
diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml
index bf3cc9f24b..93c88968ac 100644
--- a/doc/classes/World2D.xml
+++ b/doc/classes/World2D.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="World2D" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="World2D" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
Class that has everything pertaining to a 2D world.
</brief_description>
diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml
index 13922b4987..44f2086e51 100644
--- a/doc/classes/WorldEnvironment.xml
+++ b/doc/classes/WorldEnvironment.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="WorldEnvironment" inherits="Node" category="Core" version="3.0-alpha">
+<class name="WorldEnvironment" inherits="Node" category="Core" version="3.0-beta">
<brief_description>
Sets environment properties for the entire scene
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_environment" qualifiers="const">
- <return type="Environment">
- </return>
- <description>
- Return the [Environment] currently bound.
- </description>
- </method>
- <method name="set_environment">
- <return type="void">
- </return>
- <argument index="0" name="env" type="Environment">
- </argument>
- <description>
- Set the currently bound [Environment] to the one specified.
- </description>
- </method>
</methods>
<members>
<member name="environment" type="Environment" setter="set_environment" getter="get_environment">
diff --git a/doc/classes/XMLParser.xml b/doc/classes/XMLParser.xml
index 5e7ba3b4bf..2665e594e0 100644
--- a/doc/classes/XMLParser.xml
+++ b/doc/classes/XMLParser.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="XMLParser" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="XMLParser" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Low-level class for creating parsers for XML files.
</brief_description>
@@ -148,25 +148,25 @@
</method>
</methods>
<constants>
- <constant name="NODE_NONE" value="0">
+ <constant name="NODE_NONE" value="0" enum="NodeType">
There's no node (no file or buffer opened)
</constant>
- <constant name="NODE_ELEMENT" value="1">
+ <constant name="NODE_ELEMENT" value="1" enum="NodeType">
Element (tag)
</constant>
- <constant name="NODE_ELEMENT_END" value="2">
+ <constant name="NODE_ELEMENT_END" value="2" enum="NodeType">
End of element
</constant>
- <constant name="NODE_TEXT" value="3">
+ <constant name="NODE_TEXT" value="3" enum="NodeType">
Text node
</constant>
- <constant name="NODE_COMMENT" value="4">
+ <constant name="NODE_COMMENT" value="4" enum="NodeType">
Comment node
</constant>
- <constant name="NODE_CDATA" value="5">
+ <constant name="NODE_CDATA" value="5" enum="NodeType">
CDATA content
</constant>
- <constant name="NODE_UNKNOWN" value="6">
+ <constant name="NODE_UNKNOWN" value="6" enum="NodeType">
Unknown node
</constant>
</constants>
diff --git a/doc/classes/YSort.xml b/doc/classes/YSort.xml
index de4c8be11a..b1a8980141 100644
--- a/doc/classes/YSort.xml
+++ b/doc/classes/YSort.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="YSort" inherits="Node2D" category="Core" version="3.0-alpha">
+<class name="YSort" inherits="Node2D" category="Core" version="3.0-beta">
<brief_description>
Sort all child nodes based on their Y positions.
</brief_description>
@@ -11,22 +11,6 @@
<demos>
</demos>
<methods>
- <method name="is_sort_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- Returns true if the children nodes are being sorted.
- </description>
- </method>
- <method name="set_sort_enabled">
- <return type="void">
- </return>
- <argument index="0" name="enabled" type="bool">
- </argument>
- <description>
- Set whether the children nodes are sorted or not. (default true)
- </description>
- </method>
</methods>
<members>
<member name="sort_enabled" type="bool" setter="set_sort_enabled" getter="is_sort_enabled">
diff --git a/doc/classes/bool.xml b/doc/classes/bool.xml
index f596180bcf..2437d53bda 100644
--- a/doc/classes/bool.xml
+++ b/doc/classes/bool.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="bool" category="Built-In Types" version="3.0-alpha">
+<class name="bool" category="Built-In Types" version="3.0-beta">
<brief_description>
Boolean built-in type
</brief_description>
diff --git a/doc/classes/float.xml b/doc/classes/float.xml
index 703ca55be8..e7c46beb37 100644
--- a/doc/classes/float.xml
+++ b/doc/classes/float.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="float" category="Built-In Types" version="3.0-alpha">
+<class name="float" category="Built-In Types" version="3.0-beta">
<brief_description>
Float built-in type
</brief_description>
diff --git a/doc/classes/int.xml b/doc/classes/int.xml
index 79a198b198..a59bce0309 100644
--- a/doc/classes/int.xml
+++ b/doc/classes/int.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="int" category="Built-In Types" version="3.0-alpha">
+<class name="int" category="Built-In Types" version="3.0-beta">
<brief_description>
Integer built-in type.
</brief_description>
diff --git a/doc/tools/doc_status.py b/doc/tools/doc_status.py
index 170ded9f50..ab74c0b9d6 100644
--- a/doc/tools/doc_status.py
+++ b/doc/tools/doc_status.py
@@ -245,21 +245,6 @@ class ClassStatus:
status = ClassStatus()
status.name = c.attrib['name']
- # setgets do not count
- methods = []
- for tag in list(c):
- if tag.tag in ['methods']:
- for sub_tag in list(tag):
- methods.append(sub_tag.attrib['name'])
- if tag.tag in ['members']:
- for sub_tag in list(tag):
- try:
- if(sub_tag.attrib['setter'].startswith('_') == False):
- methods.remove(sub_tag.attrib['setter'])
- if(sub_tag.attrib['getter'].startswith('_') == False):
- methods.remove(sub_tag.attrib['getter'])
- except:
- pass
for tag in list(c):
if tag.tag == 'brief_description':
@@ -270,9 +255,8 @@ class ClassStatus:
elif tag.tag in ['methods', 'signals']:
for sub_tag in list(tag):
- if sub_tag.attrib['name'] in methods or tag.tag == 'signals':
- descr = sub_tag.find('description')
- status.progresses[tag.tag].increment(len(descr.text.strip()) > 0)
+ descr = sub_tag.find('description')
+ status.progresses[tag.tag].increment(len(descr.text.strip()) > 0)
elif tag.tag in ['constants', 'members']:
for sub_tag in list(tag):
status.progresses[tag.tag].increment(len(sub_tag.text.strip()) > 0)
diff --git a/drivers/SCsub b/drivers/SCsub
index 938927f3a9..daa5ff623b 100644
--- a/drivers/SCsub
+++ b/drivers/SCsub
@@ -45,5 +45,5 @@ if env.split_drivers:
env.split_lib("drivers")
else:
env.add_source_files(env.drivers_sources, "*.cpp")
- lib = env.Library("drivers", env.drivers_sources)
+ lib = env.add_library("drivers", env.drivers_sources)
env.Prepend(LIBS=[lib])
diff --git a/drivers/convex_decomp/b2d_decompose.cpp b/drivers/convex_decomp/b2d_decompose.cpp
index 97d312983f..c7681ed2ad 100644
--- a/drivers/convex_decomp/b2d_decompose.cpp
+++ b/drivers/convex_decomp/b2d_decompose.cpp
@@ -153,7 +153,7 @@ static Vector<Vector<Vector2> > _b2d_decompose(const Vector<Vector2> &p_polygon)
delete p;
return res; // pdarray; //needs to be deleted after body is created
}
-}
+} // namespace b2ConvexDecomp
Vector<Vector<Vector2> > b2d_decompose(const Vector<Vector2> &p_polygon) {
diff --git a/drivers/coreaudio/audio_driver_coreaudio.cpp b/drivers/coreaudio/audio_driver_coreaudio.cpp
index c531d6af9d..313704ae2e 100644
--- a/drivers/coreaudio/audio_driver_coreaudio.cpp
+++ b/drivers/coreaudio/audio_driver_coreaudio.cpp
@@ -220,7 +220,7 @@ OSStatus AudioDriverCoreAudio::output_callback(void *inRefCon,
while (frames_left) {
int frames = MIN(frames_left, ad->buffer_frames);
- ad->audio_server_process(frames, ad->samples_in.ptr());
+ ad->audio_server_process(frames, ad->samples_in.ptrw());
for (int j = 0; j < frames * ad->channels; j++) {
diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp
index 308a18aa9d..309497c938 100644
--- a/drivers/gles3/rasterizer_canvas_gles3.cpp
+++ b/drivers/gles3/rasterizer_canvas_gles3.cpp
@@ -208,6 +208,8 @@ RasterizerStorageGLES3::Texture *RasterizerCanvasGLES3::_bind_canvas_texture(con
} else {
+ texture = texture->get_ptr();
+
if (texture->render_target)
texture->render_target->used_in_frame = true;
@@ -243,6 +245,7 @@ RasterizerStorageGLES3::Texture *RasterizerCanvasGLES3::_bind_canvas_texture(con
} else {
+ normal_map = normal_map->get_ptr();
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, normal_map->tex_id);
state.current_normal = p_normal_map;
@@ -449,7 +452,7 @@ void RasterizerCanvasGLES3::_draw_gui_primitive(int p_points, const Vector2 *p_v
void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *current_clip, bool &reclip) {
int cc = p_item->commands.size();
- Item::Command **commands = p_item->commands.ptr();
+ Item::Command **commands = p_item->commands.ptrw();
for (int i = 0; i < cc; i++) {
@@ -524,7 +527,9 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur
_draw_generic(GL_TRIANGLE_STRIP, pline->triangles.size(), pline->triangles.ptr(), NULL, pline->triangle_colors.ptr(), pline->triangle_colors.size() == 1);
#ifdef GLES_OVER_GL
glEnable(GL_LINE_SMOOTH);
- if (pline->lines.size()) {
+ if (pline->multiline) {
+ //needs to be different
+ } else {
_draw_generic(GL_LINE_LOOP, pline->lines.size(), pline->lines.ptr(), NULL, pline->line_colors.ptr(), pline->line_colors.size() == 1);
}
glDisable(GL_LINE_SMOOTH);
@@ -535,7 +540,23 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur
if (pline->antialiased)
glEnable(GL_LINE_SMOOTH);
#endif
- _draw_generic(GL_LINE_STRIP, pline->lines.size(), pline->lines.ptr(), NULL, pline->line_colors.ptr(), pline->line_colors.size() == 1);
+
+ if (pline->multiline) {
+ int todo = pline->lines.size() / 2;
+ int max_per_call = data.polygon_buffer_size / (sizeof(real_t) * 4);
+ int offset = 0;
+
+ while (todo) {
+ int to_draw = MIN(max_per_call, todo);
+ _draw_generic(GL_LINES, to_draw * 2, &pline->lines.ptr()[offset], NULL, pline->line_colors.size() == 1 ? pline->line_colors.ptr() : &pline->line_colors.ptr()[offset], pline->line_colors.size() == 1);
+ todo -= to_draw;
+ offset += to_draw * 2;
+ }
+
+ } else {
+
+ _draw_generic(GL_LINES, pline->lines.size(), pline->lines.ptr(), NULL, pline->line_colors.ptr(), pline->line_colors.size() == 1);
+ }
#ifdef GLES_OVER_GL
if (pline->antialiased)
@@ -1084,8 +1105,8 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons
}
int tc = material_ptr->textures.size();
- RID *textures = material_ptr->textures.ptr();
- ShaderLanguage::ShaderNode::Uniform::Hint *texture_hints = shader_ptr->texture_hints.ptr();
+ RID *textures = material_ptr->textures.ptrw();
+ ShaderLanguage::ShaderNode::Uniform::Hint *texture_hints = shader_ptr->texture_hints.ptrw();
for (int i = 0; i < tc; i++) {
@@ -1115,6 +1136,8 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons
continue;
}
+ t = t->get_ptr();
+
if (storage->config.srgb_decode_supported && t->using_srgb) {
//no srgb in 2D
glTexParameteri(t->target, _TEXTURE_SRGB_DECODE_EXT, _SKIP_DECODE_EXT);
@@ -1700,6 +1723,7 @@ void RasterizerCanvasGLES3::initialize() {
glBindBuffer(GL_ARRAY_BUFFER, data.polygon_buffer);
glBufferData(GL_ARRAY_BUFFER, poly_size, NULL, GL_DYNAMIC_DRAW); //allocate max size
glBindBuffer(GL_ARRAY_BUFFER, 0);
+ data.polygon_buffer_size = poly_size;
//quad arrays
for (int i = 0; i < 4; i++) {
diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp
index ee61481a86..cd0adbd0d1 100644
--- a/drivers/gles3/rasterizer_gles3.cpp
+++ b/drivers/gles3/rasterizer_gles3.cpp
@@ -352,7 +352,7 @@ void RasterizerGLES3::blit_render_target_to_screen(RID p_render_target, const Re
canvas->canvas_end();
}
-void RasterizerGLES3::end_frame() {
+void RasterizerGLES3::end_frame(bool p_swap_buffers) {
#if 0
canvas->canvas_begin();
@@ -384,7 +384,10 @@ void RasterizerGLES3::end_frame() {
canvas->draw_generic_textured_rect(Rect2(0,0,15,15),Rect2(0,0,1,1));
#endif
- OS::get_singleton()->swap_buffers();
+ if (p_swap_buffers)
+ OS::get_singleton()->swap_buffers();
+ else
+ glFinish();
/* print_line("objects: "+itos(storage->info.render_object_count));
print_line("material chages: "+itos(storage->info.render_material_switch_count));
@@ -412,7 +415,8 @@ void RasterizerGLES3::make_current() {
void RasterizerGLES3::register_config() {
GLOBAL_DEF("rendering/quality/filters/use_nearest_mipmap_filter", false);
- GLOBAL_DEF("rendering/quality/filters/anisotropic_filter_level", 4.0);
+ GLOBAL_DEF("rendering/quality/filters/anisotropic_filter_level", 4);
+ ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/filters/anisotropic_filter_level", PropertyInfo(Variant::INT, "rendering/quality/filters/anisotropic_filter_level", PROPERTY_HINT_RANGE, "1,16,1"));
GLOBAL_DEF("rendering/limits/time/time_rollover_secs", 3600);
}
diff --git a/drivers/gles3/rasterizer_gles3.h b/drivers/gles3/rasterizer_gles3.h
index 4bfec09bf3..c27af7d019 100644
--- a/drivers/gles3/rasterizer_gles3.h
+++ b/drivers/gles3/rasterizer_gles3.h
@@ -59,7 +59,7 @@ public:
virtual void restore_render_target();
virtual void clear_render_target(const Color &p_color);
virtual void blit_render_target_to_screen(RID p_render_target, const Rect2 &p_screen_rect, int p_screen = 0);
- virtual void end_frame();
+ virtual void end_frame(bool p_swap_buffers);
virtual void finalize();
static void make_current();
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index 0c57e4e9cf..d38ec2a1f9 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -254,7 +254,7 @@ bool RasterizerSceneGLES3::_shadow_atlas_find_shadow(ShadowAtlas *shadow_atlas,
//look for an empty space
int sc = shadow_atlas->quadrants[qidx].shadows.size();
- ShadowAtlas::Quadrant::Shadow *sarr = shadow_atlas->quadrants[qidx].shadows.ptr();
+ ShadowAtlas::Quadrant::Shadow *sarr = shadow_atlas->quadrants[qidx].shadows.ptrw();
int found_free_idx = -1; //found a free one
int found_used_idx = -1; //found existing one, must steal it
@@ -1134,18 +1134,6 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m
state.current_depth_draw = p_material->shader->spatial.depth_draw_mode;
}
-//glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
-
-/*
- if (p_material->flags[VS::MATERIAL_FLAG_WIREFRAME])
- glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
- else
- glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
-
- if (p_material->line_width)
- glLineWidth(p_material->line_width);
- */
-
#if 0
//blend mode
if (state.current_blend_mode!=p_material->shader->spatial.blend_mode) {
@@ -1198,8 +1186,8 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m
}
int tc = p_material->textures.size();
- RID *textures = p_material->textures.ptr();
- ShaderLanguage::ShaderNode::Uniform::Hint *texture_hints = p_material->shader->texture_hints.ptr();
+ RID *textures = p_material->textures.ptrw();
+ ShaderLanguage::ShaderNode::Uniform::Hint *texture_hints = p_material->shader->texture_hints.ptrw();
state.current_main_tex = 0;
@@ -1235,6 +1223,7 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m
} else {
+ t = t->get_ptr(); //resolve for proxies
#ifdef TOOLS_ENABLED
if (t->detect_3d) {
t->detect_3d(t->detect_3d_ud);
@@ -2164,7 +2153,7 @@ void RasterizerSceneGLES3::_render_list(RenderList::Element **p_elements, int p_
state.scene_shader.set_conditional(SceneShaderGLES3::USE_OPAQUE_PREPASS, false);
}
-void RasterizerSceneGLES3::_add_geometry(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, int p_material, bool p_depth_pass) {
+void RasterizerSceneGLES3::_add_geometry(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, int p_material, bool p_depth_pass, bool p_shadow_pass) {
RasterizerStorageGLES3::Material *m = NULL;
RID m_src = p_instance->material_override.is_valid() ? p_instance->material_override : (p_material >= 0 ? p_instance->materials[p_material] : p_geometry->material);
@@ -2196,17 +2185,17 @@ void RasterizerSceneGLES3::_add_geometry(RasterizerStorageGLES3::Geometry *p_geo
ERR_FAIL_COND(!m);
- _add_geometry_with_material(p_geometry, p_instance, p_owner, m, p_depth_pass);
+ _add_geometry_with_material(p_geometry, p_instance, p_owner, m, p_depth_pass, p_shadow_pass);
while (m->next_pass.is_valid()) {
m = storage->material_owner.getornull(m->next_pass);
if (!m || !m->shader || !m->shader->valid)
break;
- _add_geometry_with_material(p_geometry, p_instance, p_owner, m, p_depth_pass);
+ _add_geometry_with_material(p_geometry, p_instance, p_owner, m, p_depth_pass, p_shadow_pass);
}
}
-void RasterizerSceneGLES3::_add_geometry_with_material(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, RasterizerStorageGLES3::Material *p_material, bool p_depth_pass) {
+void RasterizerSceneGLES3::_add_geometry_with_material(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, RasterizerStorageGLES3::Material *p_material, bool p_depth_pass, bool p_shadow_pass) {
bool has_base_alpha = (p_material->shader->spatial.uses_alpha && !p_material->shader->spatial.uses_alpha_scissor) || p_material->shader->spatial.uses_screen_texture;
bool has_blend_alpha = p_material->shader->spatial.blend_mode != RasterizerStorageGLES3::Shader::Spatial::BLEND_MODE_MIX;
@@ -2238,11 +2227,11 @@ void RasterizerSceneGLES3::_add_geometry_with_material(RasterizerStorageGLES3::G
if (!p_material->shader->spatial.uses_alpha_scissor && !p_material->shader->spatial.writes_modelview_or_projection && !p_material->shader->spatial.uses_vertex && !p_material->shader->spatial.uses_discard && p_material->shader->spatial.depth_draw_mode != RasterizerStorageGLES3::Shader::Spatial::DEPTH_DRAW_ALPHA_PREPASS) {
//shader does not use discard and does not write a vertex position, use generic material
if (p_instance->cast_shadows == VS::SHADOW_CASTING_SETTING_DOUBLE_SIDED) {
- p_material = storage->material_owner.getptr(default_material_twosided);
+ p_material = storage->material_owner.getptr(!p_shadow_pass && p_material->shader->spatial.uses_world_coordinates ? default_worldcoord_material_twosided : default_material_twosided);
no_cull = true;
mirror = false;
} else {
- p_material = storage->material_owner.getptr(default_material);
+ p_material = storage->material_owner.getptr(!p_shadow_pass && p_material->shader->spatial.uses_world_coordinates ? default_worldcoord_material : default_material);
}
}
@@ -2280,13 +2269,15 @@ void RasterizerSceneGLES3::_add_geometry_with_material(RasterizerStorageGLES3::G
}
e->sort_key |= uint64_t(e->material->index) << RenderList::SORT_KEY_MATERIAL_INDEX_SHIFT;
- e->sort_key |= uint64_t(e->instance->depth_layer) << RenderList::SORT_KEY_OPAQUE_DEPTH_LAYER_SHIFT;
if (e->instance->gi_probe_instances.size()) {
e->sort_key |= SORT_KEY_GI_PROBES_FLAG;
}
e->sort_key |= uint64_t(p_material->render_priority + 128) << RenderList::SORT_KEY_PRIORITY_SHIFT;
+ } else {
+ e->sort_key |= uint64_t(e->instance->depth_layer) << RenderList::SORT_KEY_OPAQUE_DEPTH_LAYER_SHIFT;
+ e->sort_key |= uint64_t(e->material->index) << RenderList::SORT_KEY_MATERIAL_INDEX_SHIFT;
}
/*
@@ -3060,7 +3051,7 @@ void RasterizerSceneGLES3::_copy_texture_to_front_buffer(GLuint p_texture) {
storage->shaders.copy.set_conditional(CopyShaderGLES3::DISABLE_ALPHA, false);
}
-void RasterizerSceneGLES3::_fill_render_list(InstanceBase **p_cull_result, int p_cull_count, bool p_depth_pass) {
+void RasterizerSceneGLES3::_fill_render_list(InstanceBase **p_cull_result, int p_cull_count, bool p_depth_pass, bool p_shadow_pass) {
current_geometry_index = 0;
current_material_index = 0;
@@ -3085,7 +3076,7 @@ void RasterizerSceneGLES3::_fill_render_list(InstanceBase **p_cull_result, int p
int mat_idx = inst->materials[i].is_valid() ? i : -1;
RasterizerStorageGLES3::Surface *s = mesh->surfaces[i];
- _add_geometry(s, inst, NULL, mat_idx, p_depth_pass);
+ _add_geometry(s, inst, NULL, mat_idx, p_depth_pass, p_shadow_pass);
}
//mesh->last_pass=frame;
@@ -3108,7 +3099,7 @@ void RasterizerSceneGLES3::_fill_render_list(InstanceBase **p_cull_result, int p
for (int i = 0; i < ssize; i++) {
RasterizerStorageGLES3::Surface *s = mesh->surfaces[i];
- _add_geometry(s, inst, multi_mesh, -1, p_depth_pass);
+ _add_geometry(s, inst, multi_mesh, -1, p_depth_pass, p_shadow_pass);
}
} break;
@@ -3117,7 +3108,7 @@ void RasterizerSceneGLES3::_fill_render_list(InstanceBase **p_cull_result, int p
RasterizerStorageGLES3::Immediate *immediate = storage->immediate_owner.getptr(inst->base);
ERR_CONTINUE(!immediate);
- _add_geometry(immediate, inst, NULL, -1, p_depth_pass);
+ _add_geometry(immediate, inst, NULL, -1, p_depth_pass, p_shadow_pass);
} break;
case VS::INSTANCE_PARTICLES: {
@@ -3139,7 +3130,7 @@ void RasterizerSceneGLES3::_fill_render_list(InstanceBase **p_cull_result, int p
for (int j = 0; j < ssize; j++) {
RasterizerStorageGLES3::Surface *s = mesh->surfaces[j];
- _add_geometry(s, inst, particles, -1, p_depth_pass);
+ _add_geometry(s, inst, particles, -1, p_depth_pass, p_shadow_pass);
}
}
@@ -4055,8 +4046,8 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const
glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
render_list.clear();
- _fill_render_list(p_cull_result, p_cull_count, true);
- render_list.sort_by_depth(false);
+ _fill_render_list(p_cull_result, p_cull_count, true, false);
+ render_list.sort_by_key(false);
state.scene_shader.set_conditional(SceneShaderGLES3::RENDER_DEPTH, true);
_render_list(render_list.elements, render_list.element_count, p_cam_transform, p_cam_projection, 0, false, false, true, false, false);
state.scene_shader.set_conditional(SceneShaderGLES3::RENDER_DEPTH, false);
@@ -4086,11 +4077,10 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const
_setup_lights(p_light_cull_result, p_light_cull_count, p_cam_transform.affine_inverse(), p_cam_projection, p_shadow_atlas);
_setup_reflections(p_reflection_probe_cull_result, p_reflection_probe_cull_count, p_cam_transform.affine_inverse(), p_cam_projection, p_reflection_atlas, env);
- render_list.clear();
-
bool use_mrt = false;
- _fill_render_list(p_cull_result, p_cull_count, false);
+ render_list.clear();
+ _fill_render_list(p_cull_result, p_cull_count, false, false);
//
glEnable(GL_BLEND);
@@ -4593,10 +4583,8 @@ void RasterizerSceneGLES3::render_shadow(RID p_light, RID p_shadow_atlas, int p_
}
}
- //todo hacer que se redibuje cuando corresponde
-
render_list.clear();
- _fill_render_list(p_cull_result, p_cull_count, true);
+ _fill_render_list(p_cull_result, p_cull_count, true, true);
render_list.sort_by_depth(false); //shadow is front to back for performance
@@ -4760,6 +4748,18 @@ void RasterizerSceneGLES3::initialize() {
default_material_twosided = storage->material_create();
storage->shader_set_code(default_shader_twosided, "shader_type spatial; render_mode cull_disabled;\n");
storage->material_set_shader(default_material_twosided, default_shader_twosided);
+
+ //default for shaders using world coordinates (typical for triplanar)
+
+ default_worldcoord_shader = storage->shader_create();
+ storage->shader_set_code(default_worldcoord_shader, "shader_type spatial; render_mode world_vertex_coords;\n");
+ default_worldcoord_material = storage->material_create();
+ storage->material_set_shader(default_worldcoord_material, default_worldcoord_shader);
+
+ default_worldcoord_shader_twosided = storage->shader_create();
+ default_worldcoord_material_twosided = storage->material_create();
+ storage->shader_set_code(default_worldcoord_shader_twosided, "shader_type spatial; render_mode cull_disabled,world_vertex_coords;\n");
+ storage->material_set_shader(default_worldcoord_material_twosided, default_worldcoord_shader_twosided);
}
{
diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h
index 69b43c7813..ffbe10fb60 100644
--- a/drivers/gles3/rasterizer_scene_gles3.h
+++ b/drivers/gles3/rasterizer_scene_gles3.h
@@ -78,6 +78,11 @@ public:
RID default_shader;
RID default_shader_twosided;
+ RID default_worldcoord_material;
+ RID default_worldcoord_material_twosided;
+ RID default_worldcoord_shader;
+ RID default_worldcoord_shader_twosided;
+
RID default_overdraw_material;
RID default_overdraw_shader;
@@ -812,9 +817,9 @@ public:
void _render_list(RenderList::Element **p_elements, int p_element_count, const Transform &p_view_transform, const CameraMatrix &p_projection, GLuint p_base_env, bool p_reverse_cull, bool p_alpha_pass, bool p_shadow, bool p_directional_add, bool p_directional_shadows);
- _FORCE_INLINE_ void _add_geometry(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, int p_material, bool p_depth_pass);
+ _FORCE_INLINE_ void _add_geometry(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, int p_material, bool p_depth_pass, bool p_shadow_pass);
- _FORCE_INLINE_ void _add_geometry_with_material(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, RasterizerStorageGLES3::Material *p_material, bool p_depth_pass);
+ _FORCE_INLINE_ void _add_geometry_with_material(RasterizerStorageGLES3::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES3::GeometryOwner *p_owner, RasterizerStorageGLES3::Material *p_material, bool p_depth_pass, bool p_shadow_pass);
void _draw_sky(RasterizerStorageGLES3::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_custom_fov, float p_energy);
@@ -827,7 +832,7 @@ public:
void _copy_to_front_buffer(Environment *env);
void _copy_texture_to_front_buffer(GLuint p_texture); //used for debug
- void _fill_render_list(InstanceBase **p_cull_result, int p_cull_count, bool p_depth_pass);
+ void _fill_render_list(InstanceBase **p_cull_result, int p_cull_count, bool p_depth_pass, bool p_shadow_pass);
void _blur_effect_buffer();
void _render_mrts(Environment *env, const CameraMatrix &p_cam_projection);
diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp
index a41d84a2aa..cba9f08537 100644
--- a/drivers/gles3/rasterizer_storage_gles3.cpp
+++ b/drivers/gles3/rasterizer_storage_gles3.cpp
@@ -1232,6 +1232,25 @@ RID RasterizerStorageGLES3::texture_create_radiance_cubemap(RID p_source, int p_
return texture_owner.make_rid(ctex);
}
+void RasterizerStorageGLES3::texture_set_proxy(RID p_texture, RID p_proxy) {
+
+ Texture *texture = texture_owner.get(p_texture);
+ ERR_FAIL_COND(!texture);
+
+ if (texture->proxy) {
+ texture->proxy->proxy_owners.erase(texture);
+ texture->proxy = NULL;
+ }
+
+ if (p_proxy.is_valid()) {
+ Texture *proxy = texture_owner.get(p_proxy);
+ ERR_FAIL_COND(!proxy);
+ ERR_FAIL_COND(proxy == texture);
+ proxy->proxy_owners.insert(texture);
+ texture->proxy = proxy;
+ }
+}
+
RID RasterizerStorageGLES3::sky_create() {
Sky *sky = memnew(Sky);
@@ -1601,6 +1620,7 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const {
p_shader->spatial.uses_screen_texture = false;
p_shader->spatial.uses_vertex = false;
p_shader->spatial.writes_modelview_or_projection = false;
+ p_shader->spatial.uses_world_coordinates = false;
shaders.actions_scene.render_mode_values["blend_add"] = Pair<int *, int>(&p_shader->spatial.blend_mode, Shader::Spatial::BLEND_MODE_ADD);
shaders.actions_scene.render_mode_values["blend_mix"] = Pair<int *, int>(&p_shader->spatial.blend_mode, Shader::Spatial::BLEND_MODE_MIX);
@@ -1621,9 +1641,10 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const {
shaders.actions_scene.render_mode_flags["vertex_lighting"] = &p_shader->spatial.uses_vertex_lighting;
+ shaders.actions_scene.render_mode_flags["world_vertex_coords"] = &p_shader->spatial.uses_world_coordinates;
+
shaders.actions_scene.usage_flag_pointers["ALPHA"] = &p_shader->spatial.uses_alpha;
shaders.actions_scene.usage_flag_pointers["ALPHA_SCISSOR"] = &p_shader->spatial.uses_alpha_scissor;
- shaders.actions_scene.usage_flag_pointers["VERTEX"] = &p_shader->spatial.uses_vertex;
shaders.actions_scene.usage_flag_pointers["SSS_STRENGTH"] = &p_shader->spatial.uses_sss;
shaders.actions_scene.usage_flag_pointers["DISCARD"] = &p_shader->spatial.uses_discard;
@@ -1632,6 +1653,7 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const {
shaders.actions_scene.write_flag_pointers["MODELVIEW_MATRIX"] = &p_shader->spatial.writes_modelview_or_projection;
shaders.actions_scene.write_flag_pointers["PROJECTION_MATRIX"] = &p_shader->spatial.writes_modelview_or_projection;
+ shaders.actions_scene.write_flag_pointers["VERTEX"] = &p_shader->spatial.uses_vertex;
actions = &shaders.actions_scene;
actions->uniforms = &p_shader->uniforms;
@@ -3477,7 +3499,7 @@ void RasterizerStorageGLES3::mesh_clear(RID p_mesh) {
}
}
-void RasterizerStorageGLES3::mesh_render_blend_shapes(Surface *s, float *p_weights) {
+void RasterizerStorageGLES3::mesh_render_blend_shapes(Surface *s, const float *p_weights) {
glBindVertexArray(s->array_id);
@@ -4063,7 +4085,7 @@ void RasterizerStorageGLES3::update_dirty_multimeshes() {
int stride = multimesh->color_floats + multimesh->xform_floats;
int count = multimesh->data.size();
- float *data = multimesh->data.ptr();
+ float *data = multimesh->data.ptrw();
AABB aabb;
@@ -4327,7 +4349,7 @@ void RasterizerStorageGLES3::skeleton_bone_set_transform(RID p_skeleton, int p_b
ERR_FAIL_INDEX(p_bone, skeleton->size);
ERR_FAIL_COND(skeleton->use_2d);
- float *texture = skeleton->skel_texture.ptr();
+ float *texture = skeleton->skel_texture.ptrw();
int base_ofs = ((p_bone / 256) * 256) * 3 * 4 + (p_bone % 256) * 4;
@@ -4390,7 +4412,7 @@ void RasterizerStorageGLES3::skeleton_bone_set_transform_2d(RID p_skeleton, int
ERR_FAIL_INDEX(p_bone, skeleton->size);
ERR_FAIL_COND(!skeleton->use_2d);
- float *texture = skeleton->skel_texture.ptr();
+ float *texture = skeleton->skel_texture.ptrw();
int base_ofs = ((p_bone / 256) * 256) * 2 * 4 + (p_bone % 256) * 4;
@@ -5632,8 +5654,8 @@ void RasterizerStorageGLES3::update_particles() {
}
int tc = material->textures.size();
- RID *textures = material->textures.ptr();
- ShaderLanguage::ShaderNode::Uniform::Hint *texture_hints = material->shader->texture_hints.ptr();
+ RID *textures = material->textures.ptrw();
+ ShaderLanguage::ShaderNode::Uniform::Hint *texture_hints = material->shader->texture_hints.ptrw();
for (int i = 0; i < tc; i++) {
@@ -5694,13 +5716,9 @@ void RasterizerStorageGLES3::update_particles() {
else
frame_time = 1.0 / 30.0;
- float delta = particles->pre_process_time;
- if (delta > 0.1) { //avoid recursive stalls if fps goes below 10
- delta = 0.1;
- }
- float todo = delta;
+ float todo = particles->pre_process_time;
- while (todo >= frame_time) {
+ while (todo >= 0) {
_particles_process(particles, frame_time);
todo -= frame_time;
}
diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h
index 8aa8235b42..25327af0a5 100644
--- a/drivers/gles3/rasterizer_storage_gles3.h
+++ b/drivers/gles3/rasterizer_storage_gles3.h
@@ -242,6 +242,9 @@ public:
struct Texture : public RID_Data {
+ Texture *proxy;
+ Set<Texture *> proxy_owners;
+
String path;
uint32_t flags;
int width, height;
@@ -301,6 +304,15 @@ public:
detect_srgb_ud = NULL;
detect_normal = NULL;
detect_normal_ud = NULL;
+ proxy = NULL;
+ }
+
+ _ALWAYS_INLINE_ Texture *get_ptr() {
+ if (proxy) {
+ return proxy; //->get_ptr(); only one level of indirection, else not inlining possible.
+ } else {
+ return this;
+ }
}
~Texture() {
@@ -309,6 +321,14 @@ public:
glDeleteTextures(1, &tex_id);
}
+
+ for (Set<Texture *>::Element *E = proxy_owners.front(); E; E = E->next()) {
+ E->get()->proxy = NULL;
+ }
+
+ if (proxy) {
+ proxy->proxy_owners.erase(this);
+ }
}
};
@@ -343,6 +363,8 @@ public:
virtual void texture_set_detect_srgb_callback(RID p_texture, VisualServer::TextureDetectCallback p_callback, void *p_userdata);
virtual void texture_set_detect_normal_callback(RID p_texture, VisualServer::TextureDetectCallback p_callback, void *p_userdata);
+ virtual void texture_set_proxy(RID p_texture, RID p_proxy);
+
/* SKY API */
struct Sky : public RID_Data {
@@ -453,6 +475,7 @@ public:
bool uses_time;
bool writes_modelview_or_projection;
bool uses_vertex_lighting;
+ bool uses_world_coordinates;
} spatial;
@@ -463,8 +486,8 @@ public:
bool uses_vertex_time;
bool uses_fragment_time;
- Shader()
- : dirty_list(this) {
+ Shader() :
+ dirty_list(this) {
shader = NULL;
ubo_size = 0;
@@ -517,8 +540,9 @@ public:
bool can_cast_shadow_cache;
bool is_animated_cache;
- Material()
- : list(this), dirty_list(this) {
+ Material() :
+ list(this),
+ dirty_list(this) {
can_cast_shadow_cache = false;
is_animated_cache = false;
shader = NULL;
@@ -719,7 +743,7 @@ public:
virtual AABB mesh_get_aabb(RID p_mesh, RID p_skeleton) const;
virtual void mesh_clear(RID p_mesh);
- void mesh_render_blend_shapes(Surface *s, float *p_weights);
+ void mesh_render_blend_shapes(Surface *s, const float *p_weights);
/* MULTIMESH API */
@@ -741,8 +765,9 @@ public:
bool dirty_aabb;
bool dirty_data;
- MultiMesh()
- : update_list(this), mesh_list(this) {
+ MultiMesh() :
+ update_list(this),
+ mesh_list(this) {
dirty_aabb = true;
dirty_data = true;
xform_floats = 0;
@@ -842,8 +867,8 @@ public:
SelfList<Skeleton> update_list;
Set<RasterizerScene::InstanceBase *> instances; //instances using skeleton
- Skeleton()
- : update_list(this) {
+ Skeleton() :
+ update_list(this) {
size = 0;
use_2d = false;
@@ -1093,8 +1118,8 @@ public:
Transform emission_transform;
- Particles()
- : particle_element(this) {
+ Particles() :
+ particle_element(this) {
cycle_number = 0;
emitting = false;
one_shot = false;
diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp
index 325df8e4f1..21102e8c25 100644
--- a/drivers/gles3/shader_compiler_gles3.cpp
+++ b/drivers/gles3/shader_compiler_gles3.cpp
@@ -81,6 +81,16 @@ static int _get_datatype_size(SL::DataType p_type) {
ERR_FAIL_V(0);
}
+static String _interpstr(SL::DataInterpolation p_interp) {
+
+ switch (p_interp) {
+ case SL::INTERPOLATION_FLAT: return "flat ";
+ case SL::INTERPOLATION_NO_PERSPECTIVE: return "noperspective ";
+ case SL::INTERPOLATION_SMOOTH: return "smooth ";
+ }
+ return "";
+}
+
static String _prestr(SL::DataPrecision p_pres) {
switch (p_pres) {
@@ -220,7 +230,6 @@ void ShaderCompilerGLES3::_dump_function_deps(SL::ShaderNode *p_node, const Stri
for (Set<StringName>::Element *E = p_node->functions[fidx].uses_function.front(); E; E = E->next()) {
- print_line(String(p_node->functions[fidx].name) + " uses function: " + String(E->get()));
if (added.has(E->get())) {
continue; //was added already
}
@@ -383,12 +392,13 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener
for (Map<StringName, SL::ShaderNode::Varying>::Element *E = pnode->varyings.front(); E; E = E->next()) {
String vcode;
+ String interp_mode = _interpstr(E->get().interpolation);
vcode += _prestr(E->get().precission);
vcode += _typestr(E->get().type);
vcode += " " + _mkid(E->key());
vcode += ";\n";
- r_gen_code.vertex_global += "out " + vcode;
- r_gen_code.fragment_global += "in " + vcode;
+ r_gen_code.vertex_global += interp_mode + "out " + vcode;
+ r_gen_code.fragment_global += interp_mode + "in " + vcode;
}
Map<StringName, String> function_code;
diff --git a/drivers/gles3/shader_gles3.cpp b/drivers/gles3/shader_gles3.cpp
index d4ef256a33..9e234f5005 100644
--- a/drivers/gles3/shader_gles3.cpp
+++ b/drivers/gles3/shader_gles3.cpp
@@ -343,7 +343,7 @@ ShaderGLES3::Version *ShaderGLES3::get_current_version() {
glDeleteProgram(v.id);
v.id = 0;
- ERR_PRINT("NO LOG, WTF");
+ ERR_PRINT("Vertex shader compilation failed with empty log");
} else {
if (iloglen == 0) {
@@ -451,7 +451,7 @@ ShaderGLES3::Version *ShaderGLES3::get_current_version() {
glDeleteShader(v.vert_id);
glDeleteProgram(v.id);
v.id = 0;
- ERR_PRINT("NO LOG, WTF");
+ ERR_PRINT("Fragment shader compilation failed with empty log");
} else {
if (iloglen == 0) {
@@ -624,7 +624,7 @@ void ShaderGLES3::setup(const char **p_conditional_defines, int p_conditional_co
feedbacks = p_feedback;
feedback_count = p_feedback_count;
- //split vertex and shader code (thank you, retarded shader compiler programmers from you know what company).
+ //split vertex and shader code (thank you, shader compiler programmers from you know what company).
{
String globals_tag = "\nVERTEX_SHADER_GLOBALS";
String material_tag = "\nMATERIAL_UNIFORMS";
diff --git a/drivers/gles3/shaders/particles.glsl b/drivers/gles3/shaders/particles.glsl
index a62c124dfe..fbee08c0fe 100644
--- a/drivers/gles3/shaders/particles.glsl
+++ b/drivers/gles3/shaders/particles.glsl
@@ -116,7 +116,7 @@ void main() {
#endif
}
- } else {
+ } else if(delta > 0.0) {
if (restart_phase >= prev_system_phase) {
restart=true;
#ifdef USE_FRACTIONAL_DELTA
diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl
index 9880663143..9b817c7a4e 100644
--- a/drivers/gles3/shaders/scene.glsl
+++ b/drivers/gles3/shaders/scene.glsl
@@ -263,6 +263,10 @@ uniform highp sampler2D skeleton_texture; //texunit:-1
out highp vec4 position_interp;
+// FIXME: This triggers a Mesa bug that breaks rendering, so disabled for now.
+// See GH-13450 and https://bugs.freedesktop.org/show_bug.cgi?id=100316
+//invariant gl_Position;
+
void main() {
highp vec4 vertex = vertex_attrib; // vec4(vertex_attrib.xyz * data_attrib.x,1.0);
@@ -458,12 +462,7 @@ VERTEX_SHADER_CODE
#endif //RENDER_DEPTH
-
-#if !defined(SKIP_TRANSFORM_USED) && !defined(RENDER_DEPTH_DUAL_PARABOLOID)
gl_Position = projection_matrix * vec4(vertex_interp,1.0);
-#else
- gl_Position = vertex;
-#endif
position_interp=gl_Position;
@@ -828,7 +827,7 @@ float contact_shadow_compute(vec3 pos, vec3 dir, float max_distance) {
pixel_size = abs((pos.y-endpoint.y)/(screen_rel.y/screen_pixel_size.y));
}*/
- vec4 bias = projection_matrix * vec4(pos+vec3(0.0,0.0,0.04), 1.0); //todo un-harcode the 0.04
+ vec4 bias = projection_matrix * vec4(pos+vec3(0.0,0.0,max_distance*0.5), 1.0); //todo un-harcode the 0.04
@@ -1031,7 +1030,7 @@ LIGHT_SHADER_CODE
#if defined(LIGHT_USE_RIM)
- float rim_light = pow(1.0-cNdotV, (1.0-roughness)*16.0);
+ float rim_light = pow(max(0.0,1.0-cNdotV), max(0.0,(1.0-roughness)*16.0));
diffuse_light += rim_light * rim * mix(vec3(1.0),diffuse_color,rim_tint) * light_color;
#endif
}
@@ -1208,7 +1207,8 @@ void light_process_omni(int idx, vec3 vertex, vec3 eye_vec,vec3 normal,vec3 bino
vec3 light_rel_vec = omni_lights[idx].light_pos_inv_radius.xyz-vertex;
float light_length = length( light_rel_vec );
float normalized_distance = light_length*omni_lights[idx].light_pos_inv_radius.w;
- vec3 light_attenuation = vec3(pow( max(1.0 - normalized_distance, 0.0), omni_lights[idx].light_direction_attenuation.w ));
+ float omni_attenuation = pow( max(1.0 - normalized_distance, 0.0), omni_lights[idx].light_direction_attenuation.w );
+ vec3 light_attenuation = vec3(omni_attenuation);
if (omni_lights[idx].light_params.w>0.5) {
//there is a shadowmap
@@ -1257,7 +1257,7 @@ void light_process_omni(int idx, vec3 vertex, vec3 eye_vec,vec3 normal,vec3 bino
light_attenuation*=mix(omni_lights[idx].shadow_color_contact.rgb,vec3(1.0),shadow);
}
- light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,omni_lights[idx].light_color_energy.rgb,light_attenuation,albedo,transmission,omni_lights[idx].light_params.z*p_blob_intensity,roughness,metallic,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light);
+ light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,omni_lights[idx].light_color_energy.rgb,light_attenuation,albedo,transmission,omni_lights[idx].light_params.z*p_blob_intensity,roughness,metallic,rim * omni_attenuation,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light);
}
@@ -1266,12 +1266,13 @@ void light_process_spot(int idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 bi
vec3 light_rel_vec = spot_lights[idx].light_pos_inv_radius.xyz-vertex;
float light_length = length( light_rel_vec );
float normalized_distance = light_length*spot_lights[idx].light_pos_inv_radius.w;
- vec3 light_attenuation = vec3(pow( max(1.0 - normalized_distance, 0.001), spot_lights[idx].light_direction_attenuation.w ));
+ float spot_attenuation = pow( max(1.0 - normalized_distance, 0.001), spot_lights[idx].light_direction_attenuation.w );
vec3 spot_dir = spot_lights[idx].light_direction_attenuation.xyz;
float spot_cutoff=spot_lights[idx].light_params.y;
float scos = max(dot(-normalize(light_rel_vec), spot_dir),spot_cutoff);
- float spot_rim = (1.0 - scos) / (1.0 - spot_cutoff);
- light_attenuation *= 1.0 - pow( max(spot_rim,0.001), spot_lights[idx].light_params.x);
+ float spot_rim = max(0.0001,(1.0 - scos) / (1.0 - spot_cutoff));
+ spot_attenuation*= 1.0 - pow( spot_rim, spot_lights[idx].light_params.x);
+ vec3 light_attenuation = vec3(spot_attenuation);
if (spot_lights[idx].light_params.w>0.5) {
//there is a shadowmap
@@ -1291,7 +1292,7 @@ void light_process_spot(int idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 bi
light_attenuation*=mix(spot_lights[idx].shadow_color_contact.rgb,vec3(1.0),shadow);
}
- light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,spot_lights[idx].light_color_energy.rgb,light_attenuation,albedo,transmission,spot_lights[idx].light_params.z*p_blob_intensity,roughness,metallic,rim,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light);
+ light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,spot_lights[idx].light_color_energy.rgb,light_attenuation,albedo,transmission,spot_lights[idx].light_params.z*p_blob_intensity,roughness,metallic,rim * spot_attenuation,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light);
}
@@ -1423,7 +1424,7 @@ uniform highp float gi_probe_normal_bias2;
uniform bool gi_probe2_enabled;
uniform bool gi_probe_blend_ambient2;
-vec3 voxel_cone_trace(sampler3D probe, vec3 cell_size, vec3 pos, vec3 ambient, bool blend_ambient, vec3 direction, float tan_half_angle, float max_distance, float p_bias) {
+vec3 voxel_cone_trace(mediump sampler3D probe, vec3 cell_size, vec3 pos, vec3 ambient, bool blend_ambient, vec3 direction, float tan_half_angle, float max_distance, float p_bias) {
float dist = p_bias;//1.0; //dot(direction,mix(vec3(-1.0),vec3(1.0),greaterThan(direction,vec3(0.0))))*2.0;
float alpha=0.0;
@@ -1445,7 +1446,7 @@ vec3 voxel_cone_trace(sampler3D probe, vec3 cell_size, vec3 pos, vec3 ambient, b
return color;
}
-void gi_probe_compute(sampler3D probe, mat4 probe_xform, vec3 bounds,vec3 cell_size,vec3 pos, vec3 ambient, vec3 environment, bool blend_ambient,float multiplier, mat3 normal_mtx,vec3 ref_vec, float roughness,float p_bias,float p_normal_bias, inout vec4 out_spec, inout vec4 out_diff) {
+void gi_probe_compute(mediump sampler3D probe, mat4 probe_xform, vec3 bounds,vec3 cell_size,vec3 pos, vec3 ambient, vec3 environment, bool blend_ambient,float multiplier, mat3 normal_mtx,vec3 ref_vec, float roughness,float p_bias,float p_normal_bias, inout vec4 out_spec, inout vec4 out_diff) {
@@ -2048,7 +2049,7 @@ FRAGMENT_SHADER_CODE
if (fog_height_enabled) {
float y = (camera_matrix * vec4(vertex,1.0)).y;
- fog_amount = max(fog_amount,pow(1.0-smoothstep(fog_height_min,fog_height_max,y),fog_height_curve));
+ fog_amount = max(fog_amount,pow(smoothstep(fog_height_min,fog_height_max,y),fog_height_curve));
}
float rev_amount = 1.0 - fog_amount;
diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.cpp b/drivers/pulseaudio/audio_driver_pulseaudio.cpp
index e4c8641a3b..49ac9e6e22 100644
--- a/drivers/pulseaudio/audio_driver_pulseaudio.cpp
+++ b/drivers/pulseaudio/audio_driver_pulseaudio.cpp
@@ -241,7 +241,7 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) {
} else {
ad->lock();
- ad->audio_server_process(ad->buffer_frames, ad->samples_in.ptr());
+ ad->audio_server_process(ad->buffer_frames, ad->samples_in.ptrw());
ad->unlock();
diff --git a/drivers/unix/ip_unix.cpp b/drivers/unix/ip_unix.cpp
index 77c942c673..6254466efc 100644
--- a/drivers/unix/ip_unix.cpp
+++ b/drivers/unix/ip_unix.cpp
@@ -149,10 +149,7 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
while (true) {
addrs = (IP_ADAPTER_ADDRESSES *)memalloc(buf_size);
- int err = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_SKIP_ANYCAST |
- GAA_FLAG_SKIP_MULTICAST |
- GAA_FLAG_SKIP_DNS_SERVER |
- GAA_FLAG_SKIP_FRIENDLY_NAME,
+ int err = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_FRIENDLY_NAME,
NULL, addrs, &buf_size);
if (err == NO_ERROR) {
break;
diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp
index 0d102902e8..5a06a58b80 100644
--- a/drivers/unix/os_unix.cpp
+++ b/drivers/unix/os_unix.cpp
@@ -391,7 +391,7 @@ String OS_Unix::get_locale() const {
return locale;
}
-Error OS_Unix::open_dynamic_library(const String p_path, void *&p_library_handle) {
+Error OS_Unix::open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path) {
p_library_handle = dlopen(p_path.utf8().get_data(), RTLD_NOW);
if (!p_library_handle) {
ERR_EXPLAIN("Can't open dynamic library: " + p_path + ". Error: " + dlerror());
@@ -447,13 +447,17 @@ int OS_Unix::get_processor_count() const {
String OS_Unix::get_user_data_dir() const {
- String appname = get_safe_application_name();
+ String appname = get_safe_dir_name(ProjectSettings::get_singleton()->get("application/config/name"));
if (appname != "") {
- bool use_godot_dir = ProjectSettings::get_singleton()->get("application/config/use_shared_user_dir");
- if (use_godot_dir) {
- return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file(appname);
+ bool use_custom_dir = ProjectSettings::get_singleton()->get("application/config/use_custom_user_dir");
+ if (use_custom_dir) {
+ String custom_dir = get_safe_dir_name(ProjectSettings::get_singleton()->get("application/config/custom_user_dir_name"), true);
+ if (custom_dir == "") {
+ custom_dir = appname;
+ }
+ return get_data_path().plus_file(custom_dir);
} else {
- return get_data_path().plus_file(appname);
+ return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file(appname);
}
}
diff --git a/drivers/unix/os_unix.h b/drivers/unix/os_unix.h
index 5b3fb824f0..1a4c73ce4c 100644
--- a/drivers/unix/os_unix.h
+++ b/drivers/unix/os_unix.h
@@ -77,7 +77,7 @@ public:
//virtual VideoMode get_video_mode() const;
//virtual void get_fullscreen_mode_list(List<VideoMode> *p_list) const;
- virtual Error open_dynamic_library(const String p_path, void *&p_library_handle);
+ virtual Error open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path = false);
virtual Error close_dynamic_library(void *p_library_handle);
virtual Error get_dynamic_library_symbol_handle(void *p_library_handle, const String p_name, void *&p_symbol_handle, bool p_optional = false);
diff --git a/drivers/unix/rw_lock_posix.cpp b/drivers/unix/rw_lock_posix.cpp
index ab2d6495bd..00125809c0 100644
--- a/drivers/unix/rw_lock_posix.cpp
+++ b/drivers/unix/rw_lock_posix.cpp
@@ -39,7 +39,7 @@ void RWLockPosix::read_lock() {
int err = pthread_rwlock_rdlock(&rwlock);
if (err != 0) {
- perror("wtf: ");
+ perror("Acquiring lock failed");
}
ERR_FAIL_COND(err != 0);
}
diff --git a/drivers/unix/stream_peer_tcp_posix.cpp b/drivers/unix/stream_peer_tcp_posix.cpp
index 3bc2397e6f..e88a7d7de1 100644
--- a/drivers/unix/stream_peer_tcp_posix.cpp
+++ b/drivers/unix/stream_peer_tcp_posix.cpp
@@ -213,7 +213,7 @@ Error StreamPeerTCPPosix::write(const uint8_t *p_data, int p_bytes, int &r_sent,
if (errno != EAGAIN) {
- perror("shit?");
+ perror("Nothing sent");
disconnect_from_host();
ERR_PRINT("Server disconnected!\n");
return FAILED;
@@ -270,7 +270,7 @@ Error StreamPeerTCPPosix::read(uint8_t *p_buffer, int p_bytes, int &r_received,
if (errno != EAGAIN) {
- perror("shit?");
+ perror("Nothing read");
disconnect_from_host();
ERR_PRINT("Server disconnected!\n");
return FAILED;
diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp
index 0671ee408e..10b6a61b2d 100644
--- a/drivers/wasapi/audio_driver_wasapi.cpp
+++ b/drivers/wasapi/audio_driver_wasapi.cpp
@@ -74,21 +74,22 @@ Error AudioDriverWASAPI::init_device(bool reinit) {
ERR_FAIL_COND_V(hr != S_OK, ERR_CANT_OPEN);
// Since we're using WASAPI Shared Mode we can't control any of these, we just tag along
- channels = pwfex->nChannels;
+ wasapi_channels = pwfex->nChannels;
mix_rate = pwfex->nSamplesPerSec;
format_tag = pwfex->wFormatTag;
bits_per_sample = pwfex->wBitsPerSample;
- switch (channels) {
+ switch (wasapi_channels) {
case 2: // Stereo
case 4: // Surround 3.1
case 6: // Surround 5.1
case 8: // Surround 7.1
+ channels = wasapi_channels;
break;
default:
- ERR_PRINTS("WASAPI: Unsupported number of channels: " + itos(channels));
- ERR_FAIL_V(ERR_CANT_OPEN);
+ WARN_PRINTS("WASAPI: Unsupported number of channels: " + itos(wasapi_channels));
+ channels = 2;
break;
}
@@ -206,6 +207,35 @@ AudioDriver::SpeakerMode AudioDriverWASAPI::get_speaker_mode() const {
return get_speaker_mode_by_total_channels(channels);
}
+void AudioDriverWASAPI::write_sample(AudioDriverWASAPI *ad, BYTE *buffer, int i, int32_t sample) {
+ if (ad->format_tag == WAVE_FORMAT_PCM) {
+ switch (ad->bits_per_sample) {
+ case 8:
+ ((int8_t *)buffer)[i] = sample >> 24;
+ break;
+
+ case 16:
+ ((int16_t *)buffer)[i] = sample >> 16;
+ break;
+
+ case 24:
+ ((int8_t *)buffer)[i * 3 + 2] = sample >> 24;
+ ((int8_t *)buffer)[i * 3 + 1] = sample >> 16;
+ ((int8_t *)buffer)[i * 3 + 0] = sample >> 8;
+ break;
+
+ case 32:
+ ((int32_t *)buffer)[i] = sample;
+ break;
+ }
+ } else if (ad->format_tag == WAVE_FORMAT_IEEE_FLOAT) {
+ ((float *)buffer)[i] = (sample >> 16) / 32768.f;
+ } else {
+ ERR_PRINT("WASAPI: Unknown format tag");
+ ad->exit_thread = true;
+ }
+}
+
void AudioDriverWASAPI::thread_func(void *p_udata) {
AudioDriverWASAPI *ad = (AudioDriverWASAPI *)p_udata;
@@ -214,7 +244,7 @@ void AudioDriverWASAPI::thread_func(void *p_udata) {
if (ad->active) {
ad->lock();
- ad->audio_server_process(ad->buffer_frames, ad->samples_in.ptr());
+ ad->audio_server_process(ad->buffer_frames, ad->samples_in.ptrw());
ad->unlock();
} else {
@@ -240,42 +270,21 @@ void AudioDriverWASAPI::thread_func(void *p_udata) {
if (hr == S_OK) {
// We're using WASAPI Shared Mode so we must convert the buffer
- if (ad->format_tag == WAVE_FORMAT_PCM) {
- switch (ad->bits_per_sample) {
- case 8:
- for (unsigned int i = 0; i < write_frames * ad->channels; i++) {
- ((int8_t *)buffer)[i] = ad->samples_in[buffer_idx++] >> 24;
- }
- break;
-
- case 16:
- for (unsigned int i = 0; i < write_frames * ad->channels; i++) {
- ((int16_t *)buffer)[i] = ad->samples_in[buffer_idx++] >> 16;
- }
- break;
-
- case 24:
- for (unsigned int i = 0; i < write_frames * ad->channels; i++) {
- int32_t sample = ad->samples_in[buffer_idx++];
- ((int8_t *)buffer)[i * 3 + 2] = sample >> 24;
- ((int8_t *)buffer)[i * 3 + 1] = sample >> 16;
- ((int8_t *)buffer)[i * 3 + 0] = sample >> 8;
- }
- break;
-
- case 32:
- for (unsigned int i = 0; i < write_frames * ad->channels; i++) {
- ((int32_t *)buffer)[i] = ad->samples_in[buffer_idx++];
- }
- break;
- }
- } else if (ad->format_tag == WAVE_FORMAT_IEEE_FLOAT) {
+ if (ad->channels == ad->wasapi_channels) {
for (unsigned int i = 0; i < write_frames * ad->channels; i++) {
- ((float *)buffer)[i] = (ad->samples_in[buffer_idx++] >> 16) / 32768.f;
+ ad->write_sample(ad, buffer, i, ad->samples_in[buffer_idx++]);
}
} else {
- ERR_PRINT("WASAPI: Unknown format tag");
- ad->exit_thread = true;
+ for (unsigned int i = 0; i < write_frames; i++) {
+ for (unsigned int j = 0; j < MIN(ad->channels, ad->wasapi_channels); j++) {
+ ad->write_sample(ad, buffer, i * ad->wasapi_channels + j, ad->samples_in[buffer_idx++]);
+ }
+ if (ad->wasapi_channels > ad->channels) {
+ for (unsigned int j = ad->channels; j < ad->wasapi_channels; j++) {
+ ad->write_sample(ad, buffer, i * ad->wasapi_channels + j, 0);
+ }
+ }
+ }
}
hr = ad->render_client->ReleaseBuffer(write_frames, 0);
@@ -380,6 +389,7 @@ AudioDriverWASAPI::AudioDriverWASAPI() {
buffer_size = 0;
channels = 0;
+ wasapi_channels = 0;
mix_rate = 0;
buffer_frames = 0;
diff --git a/drivers/wasapi/audio_driver_wasapi.h b/drivers/wasapi/audio_driver_wasapi.h
index 87a2db724c..5921645f6e 100644
--- a/drivers/wasapi/audio_driver_wasapi.h
+++ b/drivers/wasapi/audio_driver_wasapi.h
@@ -55,6 +55,7 @@ class AudioDriverWASAPI : public AudioDriver {
unsigned int buffer_size;
unsigned int channels;
+ unsigned int wasapi_channels;
int mix_rate;
int buffer_frames;
@@ -62,6 +63,7 @@ class AudioDriverWASAPI : public AudioDriver {
mutable bool exit_thread;
bool active;
+ _FORCE_INLINE_ void write_sample(AudioDriverWASAPI *ad, BYTE *buffer, int i, int32_t sample);
static void thread_func(void *p_udata);
Error init_device(bool reinit = false);
diff --git a/drivers/xaudio2/audio_driver_xaudio2.h b/drivers/xaudio2/audio_driver_xaudio2.h
index 27ef2ebcb8..dd4fc76047 100644
--- a/drivers/xaudio2/audio_driver_xaudio2.h
+++ b/drivers/xaudio2/audio_driver_xaudio2.h
@@ -48,8 +48,8 @@ class AudioDriverXAudio2 : public AudioDriver {
struct XAudio2DriverVoiceCallback : public IXAudio2VoiceCallback {
HANDLE buffer_end_event;
- XAudio2DriverVoiceCallback()
- : buffer_end_event(CreateEvent(NULL, FALSE, FALSE, NULL)) {}
+ XAudio2DriverVoiceCallback() :
+ buffer_end_event(CreateEvent(NULL, FALSE, FALSE, NULL)) {}
void STDMETHODCALLTYPE OnBufferEnd(void *pBufferContext) { /*print_line("buffer ended");*/
SetEvent(buffer_end_event);
}
diff --git a/editor/SCsub b/editor/SCsub
index 75ec422bd5..8f87e12cb9 100644
--- a/editor/SCsub
+++ b/editor/SCsub
@@ -474,7 +474,7 @@ if env['tools']:
SConscript('import/SCsub')
SConscript('plugins/SCsub')
- lib = env.Library("editor", env.editor_sources)
+ lib = env.add_library("editor", env.editor_sources)
env.Prepend(LIBS=[lib])
Export('env')
diff --git a/editor/animation_editor.cpp b/editor/animation_editor.cpp
index ae304ed0bc..c6757ba98f 100644
--- a/editor/animation_editor.cpp
+++ b/editor/animation_editor.cpp
@@ -966,7 +966,9 @@ void AnimationKeyEditor::_cleanup_animation(Ref<Animation> p_animation) {
Object *obj = NULL;
RES res;
- Node *node = root->get_node_and_resource(p_animation->track_get_path(i), res);
+ Vector<StringName> leftover_path;
+
+ Node *node = root->get_node_and_resource(p_animation->track_get_path(i), res, leftover_path);
if (res.is_valid()) {
obj = res.ptr();
@@ -975,7 +977,7 @@ void AnimationKeyEditor::_cleanup_animation(Ref<Animation> p_animation) {
}
if (obj && p_animation->track_get_type(i) == Animation::TYPE_VALUE) {
- valid_type = obj->get_static_property_type(p_animation->track_get_path(i).get_property(), &prop_exists);
+ valid_type = obj->get_static_property_type_indexed(leftover_path, &prop_exists);
}
if (!obj && cleanup_tracks->is_pressed()) {
@@ -1122,6 +1124,8 @@ void AnimationKeyEditor::_track_editor_draw() {
Ref<Texture> add_key_icon = get_icon("TrackAddKey", "EditorIcons");
Ref<Texture> add_key_icon_hl = get_icon("TrackAddKeyHl", "EditorIcons");
Ref<Texture> down_icon = get_icon("select_arrow", "Tree");
+ Ref<Texture> checked = get_icon("checked", "Tree");
+ Ref<Texture> unchecked = get_icon("unchecked", "Tree");
Ref<Texture> wrap_icon[2] = {
get_icon("InterpWrapClamp", "EditorIcons"),
@@ -1168,6 +1172,7 @@ void AnimationKeyEditor::_track_editor_draw() {
v_scroll->set_page(fit);
}
+ int left_check_ofs = checked->get_width();
int settings_limit = size.width - right_separator_ofs;
int name_limit = settings_limit * name_column_ratio;
@@ -1315,7 +1320,9 @@ void AnimationKeyEditor::_track_editor_draw() {
Object *obj = NULL;
RES res;
- Node *node = root ? root->get_node_and_resource(animation->track_get_path(idx), res) : (Node *)NULL;
+ Vector<StringName> leftover_path;
+
+ Node *node = root ? root->get_node_and_resource(animation->track_get_path(idx), res, leftover_path) : (Node *)NULL;
if (res.is_valid()) {
obj = res.ptr();
@@ -1324,9 +1331,11 @@ void AnimationKeyEditor::_track_editor_draw() {
}
if (obj && animation->track_get_type(idx) == Animation::TYPE_VALUE) {
- valid_type = obj->get_static_property_type(animation->track_get_path(idx).get_property(), &prop_exists);
+ // While leftover_path might be still empty, we wouldn't be able to get here anyway
+ valid_type = obj->get_static_property_type_indexed(leftover_path, &prop_exists);
}
+ // Draw background color of the whole track
if (/*mouse_over.over!=MouseOver::OVER_NONE &&*/ idx == mouse_over.track) {
Color sepc = hover_color;
te->draw_rect(Rect2(ofs + Point2(0, y), Size2(size.width, h - 1)), sepc);
@@ -1338,14 +1347,20 @@ void AnimationKeyEditor::_track_editor_draw() {
te->draw_rect(Rect2(ofs + Point2(0, y), Size2(size.width - 1, h - 1)), tc);
}
- te->draw_texture(type_icon[animation->track_get_type(idx)], ofs + Point2(0, y + (h - type_icon[0]->get_height()) / 2).floor());
+ // Draw track enabled state check box
+ Ref<Texture> check_box = animation->track_is_enabled(idx) ? checked : unchecked;
+ te->draw_texture(check_box, ofs + Point2(0, y + (h - checked->get_height()) / 2).floor());
+
+ // Draw track type glyph and node path
+ te->draw_texture(type_icon[animation->track_get_type(idx)], ofs + Point2(left_check_ofs + sep, y + (h - type_icon[0]->get_height()) / 2).floor());
NodePath np = animation->track_get_path(idx);
Node *n = root ? root->get_node(np) : (Node *)NULL;
Color ncol = color;
if (n && editor_selection->is_selected(n))
ncol = track_select_color;
- te->draw_string(font, Point2(ofs + Point2(type_icon[0]->get_width() + sep, y + font->get_ascent() + (sep / 2))).floor(), np, ncol, name_limit - (type_icon[0]->get_width() + sep) - 5);
+ te->draw_string(font, Point2(ofs + Point2(left_check_ofs + sep + type_icon[0]->get_width() + sep, y + font->get_ascent() + (sep / 2))).floor(), np, ncol, name_limit - (type_icon[0]->get_width() + sep) - 5);
+ // Draw separator line below track area
if (!obj)
te->draw_line(ofs + Point2(0, y + h / 2), ofs + Point2(name_limit, y + h / 2), invalid_path_color);
@@ -1648,26 +1663,34 @@ PropertyInfo AnimationKeyEditor::_find_hint_for_track(int p_idx, NodePath &r_bas
return PropertyInfo();
RES res;
- Node *node = root->get_node_and_resource(path, res);
+ Vector<StringName> leftover_path;
+ Node *node = root->get_node_and_resource(path, res, leftover_path, true);
if (node) {
r_base_path = node->get_path();
}
- String property = path.get_property();
- if (property == "")
+ if (leftover_path.empty())
return PropertyInfo();
- List<PropertyInfo> pinfo;
+ Variant property_info_base;
if (res.is_valid())
- res->get_property_list(&pinfo);
+ property_info_base = res;
else if (node)
- node->get_property_list(&pinfo);
+ property_info_base = node;
+
+ for (int i = 0; i < leftover_path.size() - 1; i++) {
+ property_info_base = property_info_base.get_named(leftover_path[i]);
+ }
+
+ List<PropertyInfo> pinfo;
+ property_info_base.get_property_list(&pinfo);
for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) {
- if (E->get().name == property)
+ if (E->get().name == leftover_path[leftover_path.size() - 1]) {
return E->get();
+ }
}
return PropertyInfo();
@@ -1785,6 +1808,7 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input)
Ref<Texture> down_icon = get_icon("select_arrow", "Tree");
Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons");
Ref<Texture> add_key_icon = get_icon("TrackAddKey", "EditorIcons");
+ Ref<Texture> check_icon = get_icon("checked", "Tree");
Ref<Texture> wrap_icon[2] = {
get_icon("InterpWrapClamp", "EditorIcons"),
@@ -1819,6 +1843,7 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input)
v_scroll->set_page(fit);
}
+ int left_check_ofs = check_icon->get_width();
int settings_limit = size.width - right_separator_ofs;
int name_limit = settings_limit * name_column_ratio;
@@ -2079,7 +2104,12 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input)
return;
}
- if (mpos.x < name_limit - (type_icon[0]->get_width() / 2.0)) {
+ if (mpos.x < left_check_ofs) {
+ // Checkbox on the very left to enable/disable tracks.
+
+ animation->track_set_enabled(idx, !animation->track_is_enabled(idx));
+
+ } else if (mpos.x < name_limit - (type_icon[0]->get_width() / 2.0)) {
//name column
// area
@@ -2090,7 +2120,7 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input)
return;
}
- Rect2 area(ofs.x, ofs.y + ((int(mpos.y) / h) + 1) * h, name_limit, h);
+ Rect2 area(ofs.x + left_check_ofs + sep, ofs.y + ((int(mpos.y) / h) + 1) * h, name_limit - left_check_ofs - sep, h);
track_name->set_text(animation->track_get_path(idx));
track_name->set_position(te->get_global_position() + area.position);
track_name->set_size(area.size);
@@ -2779,7 +2809,8 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input)
Object *obj = NULL;
RES res;
- Node *node = root->get_node_and_resource(animation->track_get_path(idx), res);
+ Vector<StringName> leftover_path;
+ Node *node = root->get_node_and_resource(animation->track_get_path(idx), res, leftover_path);
if (res.is_valid()) {
obj = res.ptr();
@@ -2788,7 +2819,7 @@ void AnimationKeyEditor::_track_editor_gui_input(const Ref<InputEvent> &p_input)
}
if (obj) {
- valid_type = obj->get_static_property_type(animation->track_get_path(idx).get_property(), &prop_exists);
+ valid_type = obj->get_static_property_type_indexed(leftover_path, &prop_exists);
}
text += "type: " + Variant::get_type_name(v.get_type()) + "\n";
diff --git a/editor/dependency_editor.h b/editor/dependency_editor.h
index 9b0aca67d5..0cc153945d 100644
--- a/editor/dependency_editor.h
+++ b/editor/dependency_editor.h
@@ -35,6 +35,7 @@
#include "scene/gui/tab_container.h"
#include "scene/gui/tree.h"
+class EditorFileDialog;
class EditorFileSystemDirectory;
class EditorNode;
diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp
index 1f9884aa70..0bb059f425 100644
--- a/editor/doc/doc_data.cpp
+++ b/editor/doc/doc_data.cpp
@@ -214,8 +214,12 @@ void DocData::generate(bool p_basic_types) {
ClassDB::get_class_list(&classes);
classes.sort_custom<StringName::AlphCompare>();
+ bool skip_setter_getter_methods = true;
+
while (classes.size()) {
+ Set<StringName> setters_getters;
+
String name = classes.front()->get();
String cname = name;
if (cname.begins_with("_")) //proxy class
@@ -231,7 +235,7 @@ void DocData::generate(bool p_basic_types) {
ClassDB::get_property_list(name, &properties, true);
for (List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) {
- if (E->get().usage & PROPERTY_USAGE_GROUP || E->get().usage & PROPERTY_USAGE_CATEGORY)
+ if (E->get().usage & PROPERTY_USAGE_GROUP || E->get().usage & PROPERTY_USAGE_CATEGORY || E->get().usage & PROPERTY_USAGE_INTERNAL)
continue;
PropertyDoc prop;
@@ -266,6 +270,13 @@ void DocData::generate(bool p_basic_types) {
prop.type = Variant::get_type_name(retinfo.type);
}
}
+
+ setters_getters.insert(getter);
+ }
+
+ if (setter != StringName()) {
+
+ setters_getters.insert(setter);
}
if (!found_type) {
@@ -288,6 +299,9 @@ void DocData::generate(bool p_basic_types) {
if (E->get().name == "" || (E->get().name[0] == '_' && !(E->get().flags & METHOD_FLAG_VIRTUAL)))
continue; //hidden, don't count
+ if (skip_setter_getter_methods && setters_getters.has(E->get().name) && E->get().name.find("/") == -1)
+ continue;
+
MethodDoc method;
method.name = E->get().name;
@@ -1067,9 +1081,9 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri
ConstantDoc &k = c.constants[i];
if (k.enumeration != String()) {
- _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\">");
- } else {
_write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">");
+ } else {
+ _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\">");
}
_write_string(f, 3, k.description.strip_edges().xml_escape());
_write_string(f, 2, "</constant>");
@@ -1101,7 +1115,7 @@ Error DocData::load_compressed(const uint8_t *p_data, int p_compressed_size, int
Vector<uint8_t> data;
data.resize(p_uncompressed_size);
- Compression::decompress(data.ptr(), p_uncompressed_size, p_data, p_compressed_size, Compression::MODE_DEFLATE);
+ Compression::decompress(data.ptrw(), p_uncompressed_size, p_data, p_compressed_size, Compression::MODE_DEFLATE);
class_list.clear();
Ref<XMLParser> parser = memnew(XMLParser);
diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp
index 290cb1be42..5f026abb6d 100644
--- a/editor/editor_about.cpp
+++ b/editor/editor_about.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "editor_about.h"
+#include "editor_node.h"
#include "authors.gen.h"
#include "donors.gen.h"
@@ -35,10 +36,23 @@
#include "version.h"
#include "version_hash.gen.h"
+void EditorAbout::_notification(int p_what) {
+
+ switch (p_what) {
+
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+
+ Ref<Font> font = EditorNode::get_singleton()->get_gui_base()->get_font("source", "EditorFonts");
+ _tpl_text->add_font_override("normal_font", font);
+ _license_text->add_font_override("normal_font", font);
+ } break;
+ }
+}
+
void EditorAbout::_license_tree_selected() {
TreeItem *selected = _tpl_tree->get_selected();
- _tpl_text->select(0, 0, 0, 0);
_tpl_text->set_text(selected->get_metadata(0));
}
@@ -52,7 +66,7 @@ TextureRect *EditorAbout::get_logo() const {
return _logo;
}
-ScrollContainer *EditorAbout::_populate_list(const String &p_name, const List<String> &p_sections, const char **p_src[]) {
+ScrollContainer *EditorAbout::_populate_list(const String &p_name, const List<String> &p_sections, const char **p_src[], const int p_flag_single_column) {
ScrollContainer *sc = memnew(ScrollContainer);
sc->set_name(p_name);
@@ -64,6 +78,7 @@ ScrollContainer *EditorAbout::_populate_list(const String &p_name, const List<St
for (int i = 0; i < p_sections.size(); i++) {
+ bool single_column = p_flag_single_column & 1 << i;
const char **names_ptr = p_src[i];
if (*names_ptr) {
@@ -72,17 +87,16 @@ ScrollContainer *EditorAbout::_populate_list(const String &p_name, const List<St
vbc->add_child(lbl);
ItemList *il = memnew(ItemList);
- il->set_max_columns(16);
il->set_h_size_flags(Control::SIZE_EXPAND_FILL);
il->set_same_column_width(true);
il->set_auto_height(true);
+ il->set_mouse_filter(Control::MOUSE_FILTER_IGNORE);
+ il->add_constant_override("hseparation", 16 * EDSCALE);
while (*names_ptr) {
il->add_item(String::utf8(*names_ptr++), NULL, false);
}
+ il->set_max_columns(il->get_item_count() < 4 || single_column ? 1 : 16);
vbc->add_child(il);
- if (il->get_item_count() == 2) {
- il->set_fixed_column_width(200 * EDSCALE);
- }
HSeparator *hs = memnew(HSeparator);
hs->set_modulate(Color(0, 0, 0, 0));
@@ -134,7 +148,7 @@ EditorAbout::EditorAbout() {
dev_sections.push_back(TTR("Project Manager"));
dev_sections.push_back(TTR("Developers"));
const char **dev_src[] = { dev_founders, dev_lead, dev_manager, dev_names };
- tc->add_child(_populate_list(TTR("Authors"), dev_sections, dev_src));
+ tc->add_child(_populate_list(TTR("Authors"), dev_sections, dev_src, 1));
// Donors
@@ -146,18 +160,16 @@ EditorAbout::EditorAbout() {
donor_sections.push_back(TTR("Silver Donors"));
donor_sections.push_back(TTR("Bronze Donors"));
const char **donor_src[] = { donor_s_plat, donor_s_gold, donor_s_mini, donor_gold, donor_silver, donor_bronze };
- tc->add_child(_populate_list(TTR("Donors"), donor_sections, donor_src));
+ tc->add_child(_populate_list(TTR("Donors"), donor_sections, donor_src, 3));
// License
- TextEdit *license = memnew(TextEdit);
- license->set_name(TTR("License"));
- license->set_h_size_flags(Control::SIZE_EXPAND_FILL);
- license->set_v_size_flags(Control::SIZE_EXPAND_FILL);
- license->set_wrap(true);
- license->set_readonly(true);
- license->set_text(String::utf8(about_license));
- tc->add_child(license);
+ _license_text = memnew(RichTextLabel);
+ _license_text->set_name(TTR("License"));
+ _license_text->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ _license_text->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+ _license_text->set_text(String::utf8(about_license));
+ tc->add_child(_license_text);
// Thirdparty License
@@ -224,11 +236,9 @@ EditorAbout::EditorAbout() {
tpl_ti_all->set_metadata(0, long_text);
tpl_hbc->add_child(_tpl_tree);
- _tpl_text = memnew(TextEdit);
+ _tpl_text = memnew(RichTextLabel);
_tpl_text->set_h_size_flags(Control::SIZE_EXPAND_FILL);
_tpl_text->set_v_size_flags(Control::SIZE_EXPAND_FILL);
- _tpl_text->set_wrap(true);
- _tpl_text->set_readonly(true);
tpl_hbc->add_child(_tpl_text);
_tpl_tree->connect("item_selected", this, "_license_tree_selected");
diff --git a/editor/editor_about.h b/editor/editor_about.h
index d455b1f074..fe40ce5f14 100644
--- a/editor/editor_about.h
+++ b/editor/editor_about.h
@@ -33,11 +33,11 @@
#include "scene/gui/control.h"
#include "scene/gui/dialogs.h"
#include "scene/gui/item_list.h"
+#include "scene/gui/rich_text_label.h"
#include "scene/gui/scroll_container.h"
#include "scene/gui/separator.h"
#include "scene/gui/split_container.h"
#include "scene/gui/tab_container.h"
-#include "scene/gui/text_edit.h"
#include "scene/gui/texture_rect.h"
#include "scene/gui/tree.h"
@@ -52,13 +52,15 @@ class EditorAbout : public AcceptDialog {
private:
void _license_tree_selected();
- ScrollContainer *_populate_list(const String &p_name, const List<String> &p_sections, const char **p_src[]);
+ ScrollContainer *_populate_list(const String &p_name, const List<String> &p_sections, const char **p_src[], const int p_flag_single_column = 0);
Tree *_tpl_tree;
- TextEdit *_tpl_text;
+ RichTextLabel *_license_text;
+ RichTextLabel *_tpl_text;
TextureRect *_logo;
protected:
+ void _notification(int p_what);
static void _bind_methods();
public:
diff --git a/editor/editor_asset_installer.cpp b/editor/editor_asset_installer.cpp
index 1aac697ffd..94108a52fc 100644
--- a/editor/editor_asset_installer.cpp
+++ b/editor/editor_asset_installer.cpp
@@ -268,7 +268,7 @@ void EditorAssetInstaller::ok_pressed() {
//read
unzOpenCurrentFile(pkg);
- unzReadCurrentFile(pkg, data.ptr(), data.size());
+ unzReadCurrentFile(pkg, data.ptrw(), data.size());
unzCloseCurrentFile(pkg);
FileAccess *f = FileAccess::open(path, FileAccess::WRITE);
diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp
index de64c11308..6e507fac9b 100644
--- a/editor/editor_audio_buses.cpp
+++ b/editor/editor_audio_buses.cpp
@@ -251,7 +251,7 @@ void EditorAudioBus::_volume_db_changed(float p_db) {
updating_bus = true;
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
- ur->create_action("Change Audio Bus Volume", UndoRedo::MERGE_ENDS);
+ ur->create_action(TTR("Change Audio Bus Volume"), UndoRedo::MERGE_ENDS);
ur->add_do_method(AudioServer::get_singleton(), "set_bus_volume_db", get_index(), p_db);
ur->add_undo_method(AudioServer::get_singleton(), "set_bus_volume_db", get_index(), AudioServer::get_singleton()->get_bus_volume_db(get_index()));
ur->add_do_method(buses, "_update_bus", get_index());
@@ -812,7 +812,7 @@ void EditorAudioBuses::_update_buses() {
EditorAudioBuses *EditorAudioBuses::register_editor() {
EditorAudioBuses *audio_buses = memnew(EditorAudioBuses);
- EditorNode::get_singleton()->add_bottom_panel_item("Audio", audio_buses);
+ EditorNode::get_singleton()->add_bottom_panel_item(TTR("Audio"), audio_buses);
return audio_buses;
}
diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp
index 443004f820..49d55e6305 100644
--- a/editor/editor_data.cpp
+++ b/editor/editor_data.cpp
@@ -690,9 +690,9 @@ Ref<Script> EditorData::get_scene_root_script(int p_idx) const {
String EditorData::get_scene_title(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), String());
if (!edited_scene[p_idx].root)
- return "[empty]";
+ return TTR("[empty]");
if (edited_scene[p_idx].root->get_filename() == "")
- return "[unsaved]";
+ return TTR("[unsaved]");
bool show_ext = EDITOR_DEF("interface/scene_tabs/show_extension", false);
String name = edited_scene[p_idx].root->get_filename().get_file();
if (!show_ext) {
diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp
index 8c8d9c4c79..3f618c3199 100644
--- a/editor/editor_export.cpp
+++ b/editor/editor_export.cpp
@@ -743,6 +743,18 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> &
custom_map["path_remap/remapped_paths"] = path_remaps;
}
+ // Store icon and splash images directly, they need to bypass the import system and be loaded as images
+ String icon = ProjectSettings::get_singleton()->get("application/config/icon");
+ String splash = ProjectSettings::get_singleton()->get("application/boot_splash/image");
+ if (icon != String() && FileAccess::exists(icon)) {
+ Vector<uint8_t> array = FileAccess::get_file_as_array(icon);
+ p_func(p_udata, icon, array, idx, total);
+ }
+ if (splash != String() && FileAccess::exists(splash)) {
+ Vector<uint8_t> array = FileAccess::get_file_as_array(splash);
+ p_func(p_udata, splash, array, idx, total);
+ }
+
String config_file = "project.binary";
String engine_cfb = EditorSettings::get_singleton()->get_cache_dir().plus_file("tmp" + config_file);
ProjectSettings::get_singleton()->save_custom(engine_cfb, custom_map, custom_list);
@@ -1249,6 +1261,7 @@ bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset> &p_preset,
if (custom_debug_binary == "" && custom_release_binary == "") {
if (!err.empty())
r_error = err;
+ r_missing_templates = !valid;
return valid;
}
diff --git a/editor/editor_export.h b/editor/editor_export.h
index 346c3b58e1..215a770a12 100644
--- a/editor/editor_export.h
+++ b/editor/editor_export.h
@@ -122,8 +122,9 @@ struct SharedObject {
String path;
Vector<String> tags;
- SharedObject(const String &p_path, const Vector<String> &p_tags)
- : path(p_path), tags(p_tags) {
+ SharedObject(const String &p_path, const Vector<String> &p_tags) :
+ path(p_path),
+ tags(p_tags) {
}
SharedObject() {}
diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp
index f8b9425a4e..eaa57fa46b 100644
--- a/editor/editor_file_dialog.cpp
+++ b/editor/editor_file_dialog.cpp
@@ -28,12 +28,13 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "editor_file_dialog.h"
-
+#include "dependency_editor.h"
#include "editor_resource_preview.h"
#include "editor_scale.h"
#include "editor_settings.h"
#include "os/file_access.h"
#include "os/keyboard.h"
+#include "os/os.h"
#include "print_string.h"
#include "scene/gui/center_container.h"
#include "scene/gui/label.h"
@@ -159,6 +160,10 @@ void EditorFileDialog::_unhandled_input(const Ref<InputEvent> &p_event) {
_make_dir();
handled = true;
}
+ if (ED_IS_SHORTCUT("file_dialog/delete", p_event)) {
+ _delete_items();
+ handled = true;
+ }
if (ED_IS_SHORTCUT("file_dialog/focus_path", p_event)) {
dir->grab_focus();
handled = true;
@@ -197,6 +202,9 @@ Vector<String> EditorFileDialog::get_selected_files() const {
void EditorFileDialog::update_dir() {
dir->set_text(dir_access->get_current_dir());
+
+ // Disable "Open" button only when we in selecting file(s) mode or open dir mode.
+ get_ok()->set_disabled(_is_open_should_be_disabled());
}
void EditorFileDialog::_dir_entered(String p_dir) {
@@ -452,6 +460,28 @@ void EditorFileDialog::_item_selected(int p_item) {
file->set_text(d["name"]);
_request_single_thumbnail(get_current_dir().plus_file(get_current_file()));
}
+
+ get_ok()->set_disabled(_is_open_should_be_disabled());
+}
+
+void EditorFileDialog::_items_clear_selection() {
+
+ item_list->unselect_all();
+
+ // If nothing is selected, then block Open button.
+ switch (mode) {
+
+ case MODE_OPEN_FILE:
+ case MODE_OPEN_FILES:
+ get_ok()->set_text(TTR("Open"));
+ get_ok()->set_disabled(item_list->is_anything_selected() == false);
+ break;
+
+ case MODE_OPEN_DIR:
+ get_ok()->set_disabled(false);
+ get_ok()->set_text(TTR("Select Current Folder"));
+ break;
+ }
}
void EditorFileDialog::_push_history() {
@@ -487,6 +517,126 @@ void EditorFileDialog::_item_dc_selected(int p_item) {
}
}
+void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p_pos) {
+
+ // Right click on specific file(s) or folder(s).
+ item_menu->clear();
+ item_menu->set_size(Size2(1, 1));
+
+ // Allow specific actions only on one item.
+ bool single_item_selected = item_list->get_selected_items().size() == 1;
+
+ // Disallow deleting the .import folder, Godot kills a cat if you do and it is possibly a senseless novice action.
+ bool allow_delete = true;
+ for (int i = 0; i < item_list->get_item_count(); i++) {
+ if (!item_list->is_selected(i)) {
+ continue;
+ }
+ Dictionary item_meta = item_list->get_item_metadata(i);
+ if (item_meta["path"] == "res://.import") {
+ allow_delete = false;
+ break;
+ }
+ }
+
+ if (single_item_selected) {
+ item_menu->add_icon_item(get_icon("CopyNodePath", "EditorIcons"), TTR("Copy Path"), ITEM_MENU_COPY_PATH);
+ }
+ if (allow_delete) {
+ item_menu->add_icon_item(get_icon("Remove", "EditorIcons"), TTR("Delete"), ITEM_MENU_DELETE, KEY_DELETE);
+ }
+ if (single_item_selected) {
+ item_menu->add_separator();
+ item_menu->add_icon_item(get_icon("Filesystem", "EditorIcons"), TTR("Show In File Manager"), ITEM_MENU_SHOW_IN_EXPLORER);
+ }
+
+ if (item_menu->get_item_count() > 0) {
+ item_menu->set_position(item_list->get_global_position() + p_pos);
+ item_menu->popup();
+ }
+}
+
+void EditorFileDialog::_item_list_rmb_clicked(const Vector2 &p_pos) {
+
+ // Right click on folder background. Deselect all files so that actions are applied on the current folder.
+ for (int i = 0; i < item_list->get_item_count(); i++) {
+ item_list->unselect(i);
+ }
+
+ item_menu->clear();
+ item_menu->set_size(Size2(1, 1));
+
+ if (can_create_dir) {
+ item_menu->add_icon_item(get_icon("folder", "FileDialog"), TTR("New Folder.."), ITEM_MENU_NEW_FOLDER, KEY_MASK_CMD | KEY_N);
+ }
+ item_menu->add_icon_item(get_icon("Reload", "EditorIcons"), TTR("Refresh"), ITEM_MENU_REFRESH, KEY_F5);
+ item_menu->add_separator();
+ item_menu->add_icon_item(get_icon("Filesystem", "EditorIcons"), TTR("Show In File Manager"), ITEM_MENU_SHOW_IN_EXPLORER);
+
+ item_menu->set_position(item_list->get_global_position() + p_pos);
+ item_menu->popup();
+}
+
+void EditorFileDialog::_item_menu_id_pressed(int p_option) {
+
+ switch (p_option) {
+
+ case ITEM_MENU_COPY_PATH: {
+ Dictionary item_meta = item_list->get_item_metadata(item_list->get_current());
+ OS::get_singleton()->set_clipboard(item_meta["path"]);
+ } break;
+
+ case ITEM_MENU_DELETE: {
+ _delete_items();
+ } break;
+
+ case ITEM_MENU_REFRESH: {
+ invalidate();
+ } break;
+
+ case ITEM_MENU_NEW_FOLDER: {
+ _make_dir();
+ } break;
+
+ case ITEM_MENU_SHOW_IN_EXPLORER: {
+ String path;
+ int idx = item_list->get_current();
+ if (idx == -1 || item_list->get_selected_items().size() == 0) {
+ // Folder background was clicked. Open this folder.
+ path = ProjectSettings::get_singleton()->globalize_path(dir_access->get_current_dir());
+ } else {
+ // Specific item was clicked. Open folders directly, or the folder containing a selected file.
+ Dictionary item_meta = item_list->get_item_metadata(idx);
+ path = ProjectSettings::get_singleton()->globalize_path(item_meta["path"]);
+ if (!item_meta["dir"]) {
+ path = path.get_base_dir();
+ }
+ }
+ OS::get_singleton()->shell_open(String("file://") + path);
+ } break;
+ }
+}
+
+bool EditorFileDialog::_is_open_should_be_disabled() {
+
+ if (mode == MODE_OPEN_ANY || mode == MODE_SAVE_FILE)
+ return false;
+
+ Vector<int> items = item_list->get_selected_items();
+ if (items.size() == 0)
+ return true;
+
+ for (int i = 0; i < items.size(); i++) {
+
+ Dictionary d = item_list->get_item_metadata(items.get(i));
+
+ if (((mode == MODE_OPEN_FILE || mode == MODE_OPEN_FILES) && d["dir"]) || (mode == MODE_OPEN_DIR && !d["dir"]))
+ return true;
+ }
+
+ return false;
+}
+
void EditorFileDialog::update_file_list() {
int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size");
@@ -541,7 +691,7 @@ void EditorFileDialog::update_file_list() {
while ((item = dir_access->get_next(&isdir)) != "") {
- if (item == ".")
+ if (item == "." || item == "..")
continue;
ishidden = dir_access->current_is_hidden();
@@ -554,11 +704,6 @@ void EditorFileDialog::update_file_list() {
}
}
- if (dirs.find("..") == NULL) {
- //may happen if lacking permissions
- dirs.push_back("..");
- }
-
dirs.sort_custom<NaturalNoCaseComparator>();
files.sort_custom<NaturalNoCaseComparator>();
@@ -577,7 +722,7 @@ void EditorFileDialog::update_file_list() {
Dictionary d;
d["name"] = dir_name;
- d["path"] = String();
+ d["path"] = cdir.plus_file(dir_name);
d["dir"] = true;
item_list->set_item_metadata(item_list->get_item_count() - 1, d);
@@ -617,8 +762,6 @@ void EditorFileDialog::update_file_list() {
}
}
- String base_dir = dir_access->get_current_dir();
-
while (!files.empty()) {
bool match = patterns.empty();
@@ -639,7 +782,7 @@ void EditorFileDialog::update_file_list() {
if (get_icon_func) {
- Ref<Texture> icon = get_icon_func(base_dir.plus_file(files.front()->get()));
+ Ref<Texture> icon = get_icon_func(cdir.plus_file(files.front()->get()));
//ti->set_icon(0,icon);
if (display_mode == DISPLAY_THUMBNAILS) {
@@ -658,12 +801,11 @@ void EditorFileDialog::update_file_list() {
Dictionary d;
d["name"] = files.front()->get();
d["dir"] = false;
- String fullpath = base_dir.plus_file(files.front()->get());
-
+ String fullpath = cdir.plus_file(files.front()->get());
if (display_mode == DISPLAY_THUMBNAILS) {
EditorResourcePreview::get_singleton()->queue_resource_preview(fullpath, this, "_thumbnail_result", fullpath);
}
- d["path"] = base_dir.plus_file(files.front()->get());
+ d["path"] = fullpath;
//ti->set_metadata(0,d);
item_list->set_item_metadata(item_list->get_item_count() - 1, d);
@@ -681,8 +823,9 @@ void EditorFileDialog::update_file_list() {
favorite->set_pressed(false);
fav_up->set_disabled(true);
fav_down->set_disabled(true);
+ get_ok()->set_disabled(_is_open_should_be_disabled());
for (int i = 0; i < favorites->get_item_count(); i++) {
- if (favorites->get_item_metadata(i) == base_dir) {
+ if (favorites->get_item_metadata(i) == cdir) {
favorites->select(i);
favorite->set_pressed(true);
if (i > 0) {
@@ -813,27 +956,27 @@ void EditorFileDialog::set_mode(Mode p_mode) {
case MODE_OPEN_FILE:
get_ok()->set_text(TTR("Open"));
set_title(TTR("Open a File"));
- makedir->hide();
+ can_create_dir = false;
break;
case MODE_OPEN_FILES:
get_ok()->set_text(TTR("Open"));
set_title(TTR("Open File(s)"));
- makedir->hide();
+ can_create_dir = false;
break;
case MODE_OPEN_DIR:
get_ok()->set_text(TTR("Open"));
set_title(TTR("Open a Directory"));
- makedir->show();
+ can_create_dir = true;
break;
case MODE_OPEN_ANY:
get_ok()->set_text(TTR("Open"));
set_title(TTR("Open a File or Directory"));
- makedir->show();
+ can_create_dir = true;
break;
case MODE_SAVE_FILE:
get_ok()->set_text(TTR("Save"));
set_title(TTR("Save a File"));
- makedir->show();
+ can_create_dir = true;
break;
}
@@ -842,6 +985,12 @@ void EditorFileDialog::set_mode(Mode p_mode) {
} else {
item_list->set_select_mode(ItemList::SELECT_SINGLE);
}
+
+ if (can_create_dir) {
+ makedir->show();
+ } else {
+ makedir->hide();
+ }
}
EditorFileDialog::Mode EditorFileDialog::get_mode() const {
@@ -913,6 +1062,28 @@ void EditorFileDialog::_make_dir() {
makedirname->grab_focus();
}
+void EditorFileDialog::_delete_items() {
+
+ // Collect the selected folders and files to delete and check them in the deletion dependency dialog.
+ Vector<String> folders;
+ Vector<String> files;
+ for (int i = 0; i < item_list->get_item_count(); i++) {
+ if (!item_list->is_selected(i)) {
+ continue;
+ }
+ Dictionary item_meta = item_list->get_item_metadata(i);
+ if (item_meta["dir"]) {
+ folders.push_back(item_meta["path"]);
+ } else {
+ files.push_back(item_meta["path"]);
+ }
+ }
+ if (folders.size() + files.size() > 0) {
+ remove_dialog->set_size(Size2(1, 1));
+ remove_dialog->show(folders, files);
+ }
+}
+
void EditorFileDialog::_select_drive(int p_idx) {
String d = drives->get_item_text(p_idx);
@@ -1139,6 +1310,10 @@ void EditorFileDialog::_bind_methods() {
ClassDB::bind_method(D_METHOD("_unhandled_input"), &EditorFileDialog::_unhandled_input);
ClassDB::bind_method(D_METHOD("_item_selected"), &EditorFileDialog::_item_selected);
+ ClassDB::bind_method(D_METHOD("_items_clear_selection"), &EditorFileDialog::_items_clear_selection);
+ ClassDB::bind_method(D_METHOD("_item_list_item_rmb_selected"), &EditorFileDialog::_item_list_item_rmb_selected);
+ ClassDB::bind_method(D_METHOD("_item_list_rmb_clicked"), &EditorFileDialog::_item_list_rmb_clicked);
+ ClassDB::bind_method(D_METHOD("_item_menu_id_pressed"), &EditorFileDialog::_item_menu_id_pressed);
ClassDB::bind_method(D_METHOD("_item_db_selected"), &EditorFileDialog::_item_dc_selected);
ClassDB::bind_method(D_METHOD("_dir_entered"), &EditorFileDialog::_dir_entered);
ClassDB::bind_method(D_METHOD("_file_entered"), &EditorFileDialog::_file_entered);
@@ -1190,6 +1365,15 @@ void EditorFileDialog::_bind_methods() {
ADD_SIGNAL(MethodInfo("files_selected", PropertyInfo(Variant::POOL_STRING_ARRAY, "paths")));
ADD_SIGNAL(MethodInfo("dir_selected", PropertyInfo(Variant::STRING, "dir")));
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "access", PROPERTY_HINT_ENUM, "Resources,User data,File system"), "set_access", "get_access");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List"), "set_display_mode", "get_display_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Open one,Open many,Open folder,Open any,Save"), "set_mode", "get_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "current_dir", PROPERTY_HINT_DIR), "set_current_dir", "get_current_dir");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "current_file", PROPERTY_HINT_FILE, "*"), "set_current_file", "get_current_file");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "current_path"), "set_current_path", "get_current_path");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_hidden_files"), "set_show_hidden_files", "is_showing_hidden_files");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "disable_overwrite_warning"), "set_disable_overwrite_warning", "is_overwrite_warning_disabled");
+
BIND_ENUM_CONSTANT(MODE_OPEN_FILE);
BIND_ENUM_CONSTANT(MODE_OPEN_FILES);
BIND_ENUM_CONSTANT(MODE_OPEN_DIR);
@@ -1275,6 +1459,7 @@ EditorFileDialog::EditorFileDialog() {
ED_SHORTCUT("file_dialog/toggle_favorite", TTR("Toggle Favorite"), KEY_MASK_ALT | KEY_F);
ED_SHORTCUT("file_dialog/toggle_mode", TTR("Toggle Mode"), KEY_MASK_ALT | KEY_V);
ED_SHORTCUT("file_dialog/create_folder", TTR("Create Folder"), KEY_MASK_CMD | KEY_N);
+ ED_SHORTCUT("file_dialog/delete", TTR("Delete"), KEY_DELETE);
ED_SHORTCUT("file_dialog/focus_path", TTR("Focus Path"), KEY_MASK_CMD | KEY_D);
ED_SHORTCUT("file_dialog/move_favorite_up", TTR("Move Favorite Up"), KEY_MASK_CMD | KEY_UP);
ED_SHORTCUT("file_dialog/move_favorite_down", TTR("Move Favorite Down"), KEY_MASK_CMD | KEY_DOWN);
@@ -1381,10 +1566,21 @@ EditorFileDialog::EditorFileDialog() {
list_vb->add_child(memnew(Label(TTR("Directories & Files:"))));
preview_hb->add_child(list_vb);
+ // Item (files and folders) list with context menu
+
item_list = memnew(ItemList);
item_list->set_v_size_flags(SIZE_EXPAND_FILL);
+ item_list->connect("item_rmb_selected", this, "_item_list_item_rmb_selected");
+ item_list->connect("rmb_clicked", this, "_item_list_rmb_clicked");
+ item_list->set_allow_rmb_select(true);
list_vb->add_child(item_list);
+ item_menu = memnew(PopupMenu);
+ item_menu->connect("id_pressed", this, "_item_menu_id_pressed");
+ add_child(item_menu);
+
+ // Other stuff
+
preview_vb = memnew(VBoxContainer);
preview_hb->add_child(preview_vb);
CenterContainer *prev_cc = memnew(CenterContainer);
@@ -1415,6 +1611,7 @@ EditorFileDialog::EditorFileDialog() {
//cancel->connect("pressed", this,"_cancel_pressed");
item_list->connect("item_selected", this, "_item_selected", varray(), CONNECT_DEFERRED);
item_list->connect("item_activated", this, "_item_db_selected", varray());
+ item_list->connect("nothing_selected", this, "_items_clear_selection");
dir->connect("text_entered", this, "_dir_entered");
file->connect("text_entered", this, "_file_entered");
filter->connect("item_selected", this, "_filter_selected");
@@ -1422,9 +1619,11 @@ EditorFileDialog::EditorFileDialog() {
confirm_save = memnew(ConfirmationDialog);
confirm_save->set_as_toplevel(true);
add_child(confirm_save);
-
confirm_save->connect("confirmed", this, "_save_confirm_pressed");
+ remove_dialog = memnew(DependencyRemoveDialog);
+ add_child(remove_dialog);
+
makedialog = memnew(ConfirmationDialog);
makedialog->set_title(TTR("Create Folder"));
VBoxContainer *makevb = memnew(VBoxContainer);
diff --git a/editor/editor_file_dialog.h b/editor/editor_file_dialog.h
index 4dc2947292..f4a9a174e7 100644
--- a/editor/editor_file_dialog.h
+++ b/editor/editor_file_dialog.h
@@ -39,6 +39,9 @@
#include "scene/gui/split_container.h"
#include "scene/gui/texture_rect.h"
#include "scene/gui/tool_button.h"
+
+class DependencyRemoveDialog;
+
/**
@author Juan Linietsky <reduzio@gmail.com>
*/
@@ -75,6 +78,14 @@ public:
static RegisterFunc unregister_func;
private:
+ enum ItemMenu {
+ ITEM_MENU_COPY_PATH,
+ ITEM_MENU_DELETE,
+ ITEM_MENU_REFRESH,
+ ITEM_MENU_NEW_FOLDER,
+ ITEM_MENU_SHOW_IN_EXPLORER
+ };
+
ConfirmationDialog *makedialog;
LineEdit *makedirname;
@@ -83,6 +94,7 @@ private:
//Button *action;
VBoxContainer *vbox;
Mode mode;
+ bool can_create_dir;
LineEdit *dir;
ToolButton *dir_prev;
@@ -91,6 +103,7 @@ private:
OptionButton *drives;
ItemList *item_list;
+ PopupMenu *item_menu;
TextureRect *preview;
VBoxContainer *preview_vb;
HSplitContainer *list_hb;
@@ -100,6 +113,7 @@ private:
OptionButton *filter;
DirAccess *dir_access;
ConfirmationDialog *confirm_save;
+ DependencyRemoveDialog *remove_dialog;
ToolButton *mode_thumbnails;
ToolButton *mode_list;
@@ -143,8 +157,13 @@ private:
void _recent_selected(int p_idx);
void _item_selected(int p_item);
+ void _items_clear_selection();
void _item_dc_selected(int p_item);
+ void _item_list_item_rmb_selected(int p_item, const Vector2 &p_pos);
+ void _item_list_rmb_clicked(const Vector2 &p_pos);
+ void _item_menu_id_pressed(int p_option);
+
void _select_drive(int p_idx);
void _dir_entered(String p_dir);
void _file_entered(const String &p_file);
@@ -155,6 +174,8 @@ private:
void _make_dir();
void _make_dir_confirm();
+ void _delete_items();
+
void _update_drives();
void _go_up();
@@ -172,6 +193,8 @@ private:
void _unhandled_input(const Ref<InputEvent> &p_event);
+ bool _is_open_should_be_disabled();
+
protected:
void _notification(int p_what);
static void _bind_methods();
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp
index 8d5bad3346..d462cce908 100644
--- a/editor/editor_file_system.cpp
+++ b/editor/editor_file_system.cpp
@@ -296,6 +296,89 @@ void EditorFileSystem::_thread_func(void *_userdata) {
sd->_scan_filesystem();
}
+bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_imported_files) {
+
+ if (!reimport_on_missing_imported_files && p_only_imported_files)
+ return false;
+
+ Error err;
+ FileAccess *f = FileAccess::open(p_path + ".import", FileAccess::READ, &err);
+
+ if (!f) { //no import file, do reimport
+ return true;
+ }
+
+ VariantParser::StreamFile stream;
+ stream.f = f;
+
+ String assign;
+ Variant value;
+ VariantParser::Tag next_tag;
+
+ int lines = 0;
+ String error_text;
+
+ List<String> to_check;
+
+ String source_md5;
+
+ while (true) {
+
+ assign = Variant();
+ next_tag.fields.clear();
+ next_tag.name = String();
+
+ err = VariantParser::parse_tag_assign_eof(&stream, lines, error_text, next_tag, assign, value, NULL, true);
+ if (err == ERR_FILE_EOF) {
+ memdelete(f);
+ break;
+ } else if (err != OK) {
+ ERR_PRINTS("ResourceFormatImporter::load - " + p_path + ".import:" + itos(lines) + " error: " + error_text);
+ memdelete(f);
+ return false; //parse error, try reimport manually (Avoid reimport loop on broken file)
+ }
+
+ if (assign != String()) {
+ if (assign.begins_with("path")) {
+ to_check.push_back(value);
+ } else if (assign == "files") {
+ Array fa = value;
+ for (int i = 0; i < fa.size(); i++) {
+ to_check.push_back(fa[i]);
+ }
+ } else if (!p_only_imported_files && assign == "source_md5") {
+ source_md5 = value;
+ }
+
+ } else if (next_tag.name != "remap" && next_tag.name != "deps") {
+ break;
+ }
+ }
+
+ memdelete(f);
+
+ //imported files are gone, reimport
+ for (List<String>::Element *E = to_check.front(); E; E = E->next()) {
+ if (!FileAccess::exists(E->get())) {
+ return true;
+ }
+ }
+
+ //check source md5 matching
+ if (!p_only_imported_files) {
+ if (source_md5 == String()) {
+ return true; //lacks md5, so just reimport
+ }
+
+ String md5 = FileAccess::get_md5(p_path);
+ if (md5 != source_md5) {
+ return true;
+ }
+ }
+
+ return false; //nothing changed
+}
+
bool EditorFileSystem::_update_scan_actions() {
sources_changed.clear();
@@ -365,12 +448,20 @@ bool EditorFileSystem::_update_scan_actions() {
fs_changed = true;
} break;
- case ItemAction::ACTION_FILE_REIMPORT: {
+ case ItemAction::ACTION_FILE_TEST_REIMPORT: {
int idx = ia.dir->find_file_index(ia.file);
ERR_CONTINUE(idx == -1);
String full_path = ia.dir->get_file_path(idx);
- reimports.push_back(full_path);
+ if (_test_for_reimport(full_path, false)) {
+ //must reimport
+ reimports.push_back(full_path);
+ } else {
+ //must not reimport, all was good
+ //update modified times, to avoid reimport
+ ia.dir->files[idx]->modified_time = FileAccess::get_modified_time(full_path);
+ ia.dir->files[idx]->import_modified_time = FileAccess::get_modified_time(full_path + ".import");
+ }
fs_changed = true;
} break;
@@ -440,72 +531,6 @@ EditorFileSystem::ScanProgress EditorFileSystem::ScanProgress::get_sub(int p_cur
return sp;
}
-bool EditorFileSystem::_check_missing_imported_files(const String &p_path) {
-
- if (!reimport_on_missing_imported_files)
- return true;
-
- Error err;
- FileAccess *f = FileAccess::open(p_path + ".import", FileAccess::READ, &err);
-
- if (!f) {
- print_line("could not open import for " + p_path);
- return false;
- }
-
- VariantParser::StreamFile stream;
- stream.f = f;
-
- String assign;
- Variant value;
- VariantParser::Tag next_tag;
-
- int lines = 0;
- String error_text;
-
- List<String> to_check;
-
- while (true) {
-
- assign = Variant();
- next_tag.fields.clear();
- next_tag.name = String();
-
- err = VariantParser::parse_tag_assign_eof(&stream, lines, error_text, next_tag, assign, value, NULL, true);
- if (err == ERR_FILE_EOF) {
- memdelete(f);
- return OK;
- } else if (err != OK) {
- ERR_PRINTS("ResourceFormatImporter::load - " + p_path + ".import:" + itos(lines) + " error: " + error_text);
- memdelete(f);
- return false;
- }
-
- if (assign != String()) {
- if (assign.begins_with("path")) {
- to_check.push_back(value);
- } else if (assign == "files") {
- Array fa = value;
- for (int i = 0; i < fa.size(); i++) {
- to_check.push_back(fa[i]);
- }
- }
-
- } else if (next_tag.name != "remap" && next_tag.name != "deps") {
- break;
- }
- }
-
- memdelete(f);
-
- for (List<String>::Element *E = to_check.front(); E; E = E->next()) {
- if (!FileAccess::exists(E->get())) {
- return false;
- }
- }
- return true;
-}
-
void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess *da, const ScanProgress &p_progress) {
List<String> dirs;
@@ -611,7 +636,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess
import_mt = FileAccess::get_modified_time(path + ".import");
}
- if (fc && fc->modification_time == mt && fc->import_modification_time == import_mt && _check_missing_imported_files(path)) {
+ if (fc && fc->modification_time == mt && fc->import_modification_time == import_mt && !_test_for_reimport(path, true)) {
fi->type = fc->type;
fi->deps = fc->deps;
@@ -632,7 +657,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess
fi->import_valid = ResourceLoader::is_import_valid(path);
ItemAction ia;
- ia.action = ItemAction::ACTION_FILE_REIMPORT;
+ ia.action = ItemAction::ACTION_FILE_TEST_REIMPORT;
ia.dir = p_dir;
ia.file = E->get();
scan_actions.push_back(ia);
@@ -761,7 +786,7 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const
if (import_extensions.has(ext)) {
//if it can be imported, and it was added, it needs to be reimported
ItemAction ia;
- ia.action = ItemAction::ACTION_FILE_REIMPORT;
+ ia.action = ItemAction::ACTION_FILE_TEST_REIMPORT;
ia.dir = p_dir;
ia.file = f;
scan_actions.push_back(ia);
@@ -807,7 +832,7 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const
uint64_t import_mt = FileAccess::get_modified_time(path + ".import");
if (import_mt != p_dir->files[i]->import_modified_time) {
reimport = true;
- } else if (!_check_missing_imported_files(path)) {
+ } else if (_test_for_reimport(path, true)) {
reimport = true;
}
}
@@ -815,7 +840,7 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const
if (reimport) {
ItemAction ia;
- ia.action = ItemAction::ACTION_FILE_REIMPORT;
+ ia.action = ItemAction::ACTION_FILE_TEST_REIMPORT;
ia.dir = p_dir;
ia.file = p_dir->files[i]->file;
scan_actions.push_back(ia);
@@ -1219,8 +1244,10 @@ void EditorFileSystem::update_file(const String &p_file) {
if (!FileAccess::exists(p_file)) {
//was removed
_delete_internal_files(p_file);
- memdelete(fs->files[cpos]);
- fs->files.remove(cpos);
+ if (cpos != -1) { // Might've never been part of the editor file system (*.* files deleted in Open dialog).
+ memdelete(fs->files[cpos]);
+ fs->files.remove(cpos);
+ }
call_deferred("emit_signal", "filesystem_changed"); //update later
return;
}
@@ -1385,8 +1412,9 @@ void EditorFileSystem::_reimport_file(const String &p_file) {
f->store_line("");
+ f->store_line("[deps]\n");
+
if (gen_files.size()) {
- f->store_line("[gen]");
Array genf;
for (List<String>::Element *E = gen_files.front(); E; E = E->next()) {
genf.push_back(E->get());
@@ -1398,6 +1426,8 @@ void EditorFileSystem::_reimport_file(const String &p_file) {
f->store_line("");
}
+ f->store_line("source_md5=\"" + FileAccess::get_md5(p_file) + "\"\n");
+
f->store_line("[params]");
f->store_line("");
diff --git a/editor/editor_file_system.h b/editor/editor_file_system.h
index ebcc091b0a..f2470bfd40 100644
--- a/editor/editor_file_system.h
+++ b/editor/editor_file_system.h
@@ -109,7 +109,7 @@ class EditorFileSystem : public Node {
ACTION_DIR_REMOVE,
ACTION_FILE_ADD,
ACTION_FILE_REMOVE,
- ACTION_FILE_REIMPORT
+ ACTION_FILE_TEST_REIMPORT
};
Action action;
@@ -200,7 +200,7 @@ class EditorFileSystem : public Node {
void _reimport_file(const String &p_file);
- bool _check_missing_imported_files(const String &p_path);
+ bool _test_for_reimport(const String &p_path, bool p_only_imported_files);
bool reimport_on_missing_imported_files;
diff --git a/editor/editor_fonts.cpp b/editor/editor_fonts.cpp
index 7e20077fd6..8aca007e6b 100644
--- a/editor/editor_fonts.cpp
+++ b/editor/editor_fonts.cpp
@@ -134,14 +134,14 @@ void editor_register_fonts(Ref<Theme> p_theme) {
//Ref<BitmapFont> doc_title_font = make_font(_bi_font_doc_title_font_height,_bi_font_doc_title_font_ascent,0,_bi_font_doc_title_font_charcount,_bi_font_doc_title_font_characters,p_theme->get_icon("DocTitleFont","EditorIcons"));
//Ref<BitmapFont> doc_code_font = make_font(_bi_font_doc_code_font_height,_bi_font_doc_code_font_ascent,0,_bi_font_doc_code_font_charcount,_bi_font_doc_code_font_characters,p_theme->get_icon("DocCodeFont","EditorIcons"));
- MAKE_DEFAULT_FONT(df_doc_title, int(EDITOR_DEF("text_editor/help/help_title_font_size", 16)) * EDSCALE);
+ MAKE_DEFAULT_FONT(df_doc_title, int(EDITOR_DEF("text_editor/help/help_title_font_size", 23)) * EDSCALE);
- MAKE_DEFAULT_FONT(df_doc, int(EDITOR_DEF("text_editor/help/help_font_size", 14)) * EDSCALE);
+ MAKE_DEFAULT_FONT(df_doc, int(EDITOR_DEF("text_editor/help/help_font_size", 15)) * EDSCALE);
p_theme->set_font("doc", "EditorFonts", df_doc);
p_theme->set_font("doc_title", "EditorFonts", df_doc_title);
- MAKE_DEFAULT_FONT(df_rulers, int(EDITOR_DEF("canvas_item_editor/rulers", 8)) * EDSCALE);
+ MAKE_DEFAULT_FONT(df_rulers, 8 * EDSCALE);
p_theme->set_font("rulers", "EditorFonts", df_rulers);
Ref<DynamicFont> df_code;
@@ -154,7 +154,7 @@ void editor_register_fonts(Ref<Theme> p_theme) {
Ref<DynamicFont> df_doc_code;
df_doc_code.instance();
- df_doc_code->set_size(int(EDITOR_DEF("text_editor/help/help_source_font_size", 16)) * EDSCALE);
+ df_doc_code->set_size(int(EDITOR_DEF("text_editor/help/help_source_font_size", 14)) * EDSCALE);
df_doc_code->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE);
df_doc_code->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE);
df_doc_code->set_font_data(dfmono);
diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp
index 4b372e7afd..676b168371 100644
--- a/editor/editor_help.cpp
+++ b/editor/editor_help.cpp
@@ -78,50 +78,40 @@ void EditorHelpSearch::_sbox_input(const Ref<InputEvent> &p_ie) {
}
}
-void EditorHelpSearch::_update_search() {
+class EditorHelpSearch::IncrementalSearch : public Reference {
+ String term;
+ TreeItem *root;
- search_options->clear();
- search_options->set_hide_root(true);
+ EditorHelpSearch *search;
+ Tree *search_options;
- /*
- TreeItem *root = search_options->create_item();
- _parse_fs(EditorFileSystem::get_singleton()->get_filesystem());
-*/
+ DocData *doc;
+ Ref<Texture> def_icon;
- List<StringName> type_list;
- ClassDB::get_class_list(&type_list);
+ int phase;
+ Map<String, DocData::ClassDoc>::Element *iterator;
- DocData *doc = EditorHelp::get_doc_data();
- String term = search_box->get_text();
- if (term.length() < 2)
- return;
-
- TreeItem *root = search_options->create_item();
-
- Ref<Texture> def_icon = get_icon("Node", "EditorIcons");
- //classes first
- for (Map<String, DocData::ClassDoc>::Element *E = doc->class_list.front(); E; E = E->next()) {
+ void phase1(Map<String, DocData::ClassDoc>::Element *E) {
if (E->key().findn(term) != -1) {
TreeItem *item = search_options->create_item(root);
item->set_metadata(0, "class_name:" + E->key());
item->set_text(0, E->key() + " (Class)");
- if (has_icon(E->key(), "EditorIcons"))
- item->set_icon(0, get_icon(E->key(), "EditorIcons"));
+ if (search->has_icon(E->key(), "EditorIcons"))
+ item->set_icon(0, search->get_icon(E->key(), "EditorIcons"));
else
item->set_icon(0, def_icon);
}
}
- //class methods, etc second
- for (Map<String, DocData::ClassDoc>::Element *E = doc->class_list.front(); E; E = E->next()) {
+ void phase2(Map<String, DocData::ClassDoc>::Element *E) {
DocData::ClassDoc &c = E->get();
Ref<Texture> cicon;
- if (has_icon(E->key(), "EditorIcons"))
- cicon = get_icon(E->key(), "EditorIcons");
+ if (search->has_icon(E->key(), "EditorIcons"))
+ cicon = search->get_icon(E->key(), "EditorIcons");
else
cicon = def_icon;
@@ -180,72 +170,81 @@ void EditorHelpSearch::_update_search() {
}
}
- //same but descriptions
+ bool slice() {
- for (Map<String, DocData::ClassDoc>::Element *E = doc->class_list.front(); E; E = E->next()) {
+ if (phase > 2)
+ return true;
- DocData::ClassDoc &c = E->get();
+ if (iterator) {
- Ref<Texture> cicon;
- if (has_icon(E->key(), "EditorIcons"))
- cicon = get_icon(E->key(), "EditorIcons");
- else
- cicon = def_icon;
+ switch (phase) {
+
+ case 1: {
+ phase1(iterator);
+ } break;
+ case 2: {
+ phase2(iterator);
+ } break;
+ default: {
+ WARN_PRINT("illegal phase in IncrementalSearch");
+ return true;
+ }
+ }
- if (c.description.findn(term) != -1) {
+ iterator = iterator->next();
+ } else {
- TreeItem *item = search_options->create_item(root);
- item->set_metadata(0, "class_desc:" + E->key());
- item->set_text(0, E->key() + " (Class Description)");
- item->set_icon(0, cicon);
+ phase += 1;
+ iterator = doc->class_list.front();
}
- for (int i = 0; i < c.methods.size(); i++) {
+ return false;
+ }
- if (c.methods[i].description.findn(term) != -1) {
+public:
+ IncrementalSearch(EditorHelpSearch *p_search, Tree *p_search_options, const String &p_term) :
+ search(p_search),
+ search_options(p_search_options) {
- TreeItem *item = search_options->create_item(root);
- item->set_metadata(0, "class_method_desc:" + E->key() + ":" + c.methods[i].name);
- item->set_text(0, E->key() + "." + c.methods[i].name + " (Method Description)");
- item->set_icon(0, cicon);
- }
- }
-
- for (int i = 0; i < c.signals.size(); i++) {
+ def_icon = search->get_icon("Node", "EditorIcons");
+ doc = EditorHelp::get_doc_data();
- if (c.signals[i].description.findn(term) != -1) {
+ term = p_term;
- TreeItem *item = search_options->create_item(root);
- item->set_metadata(0, "class_signal:" + E->key() + ":" + c.signals[i].name);
- item->set_text(0, E->key() + "." + c.signals[i].name + " (Signal Description)");
- item->set_icon(0, cicon);
- }
- }
+ root = search_options->create_item();
+ phase = 0;
+ iterator = 0;
+ }
- for (int i = 0; i < c.constants.size(); i++) {
+ bool empty() const {
- if (c.constants[i].description.findn(term) != -1) {
+ return root->get_children() == NULL;
+ }
- TreeItem *item = search_options->create_item(root);
- item->set_metadata(0, "class_constant:" + E->key() + ":" + c.constants[i].name);
- item->set_text(0, E->key() + "." + c.constants[i].name + " (Constant Description)");
- item->set_icon(0, cicon);
- }
- }
+ bool work(uint64_t slot = 1000000 / 10) {
- for (int i = 0; i < c.properties.size(); i++) {
+ const uint64_t until = OS::get_singleton()->get_ticks_usec() + slot;
- if (c.properties[i].description.findn(term) != -1) {
+ while (!slice()) {
- TreeItem *item = search_options->create_item(root);
- item->set_metadata(0, "class_property_desc:" + E->key() + ":" + c.properties[i].name);
- item->set_text(0, E->key() + "." + c.properties[i].name + " (Property Description)");
- item->set_icon(0, cicon);
- }
+ if (OS::get_singleton()->get_ticks_usec() > until)
+ return false;
}
+
+ return true;
}
+};
- get_ok()->set_disabled(root->get_children() == NULL);
+void EditorHelpSearch::_update_search() {
+ search_options->clear();
+ search_options->set_hide_root(true);
+
+ String term = search_box->get_text();
+ if (term.length() < 2)
+ return;
+
+ search = Ref<IncrementalSearch>(memnew(IncrementalSearch(this, search_options, term)));
+ set_process(true);
}
void EditorHelpSearch::_confirmed() {
@@ -281,6 +280,20 @@ void EditorHelpSearch::_notification(int p_what) {
//_update_icons
search_box->add_icon_override("right_icon", get_icon("Search", "EditorIcons"));
+ } else if (p_what == NOTIFICATION_PROCESS) {
+
+ if (search.is_valid()) {
+
+ if (search->work()) {
+
+ get_ok()->set_disabled(search->empty());
+ search = Ref<IncrementalSearch>();
+ set_process(false);
+ }
+ } else {
+
+ set_process(false);
+ }
}
}
@@ -433,12 +446,11 @@ void EditorHelpIndex::_update_class_list() {
while (type != "") {
if (filter.is_subsequence_ofi(type)) {
- if (to_select.empty()) {
+ if (to_select.empty() || type.length() < to_select.length()) {
to_select = type;
}
found = true;
- break;
}
type = EditorHelp::get_doc_data()->class_list[type].inherits;
diff --git a/editor/editor_help.h b/editor/editor_help.h
index 92c0e2f4d1..a224c7f8ee 100644
--- a/editor/editor_help.h
+++ b/editor/editor_help.h
@@ -53,6 +53,9 @@ class EditorHelpSearch : public ConfirmationDialog {
Tree *search_options;
String base_type;
+ class IncrementalSearch;
+ Ref<IncrementalSearch> search;
+
void _update_search();
void _sbox_input(const Ref<InputEvent> &p_ie);
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index a32ade3b71..908bc468a0 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -269,6 +269,7 @@ void EditorNode::_notification(int p_what) {
Engine::get_singleton()->set_editor_hint(true);
+ get_tree()->get_root()->set_usage(Viewport::USAGE_2D_NO_SAMPLING); //reduce memory usage
get_tree()->get_root()->set_disable_3d(true);
get_tree()->get_root()->set_as_audio_listener(false);
get_tree()->get_root()->set_as_audio_listener_2d(false);
@@ -289,6 +290,7 @@ void EditorNode::_notification(int p_what) {
_editor_select(EDITOR_3D);
_update_debug_options();
+ _load_docks();
}
if (p_what == MainLoop::NOTIFICATION_WM_FOCUS_IN) {
@@ -336,7 +338,13 @@ void EditorNode::_notification(int p_what) {
//_update_icons
for (int i = 0; i < singleton->main_editor_buttons.size(); i++) {
- main_editor_buttons[i]->set_icon(gui_base->get_icon(singleton->main_editor_buttons[i]->get_name(), "EditorIcons"));
+ Ref<Texture> icon = singleton->main_editor_buttons[i]->get_icon();
+
+ if (icon.is_valid()) {
+ main_editor_buttons[i]->set_icon(icon);
+ } else if (singleton->gui_base->has_icon(singleton->main_editor_buttons[i]->get_name(), "EditorIcons")) {
+ main_editor_buttons[i]->set_icon(gui_base->get_icon(singleton->main_editor_buttons[i]->get_name(), "EditorIcons"));
+ }
}
play_button->set_icon(gui_base->get_icon("MainPlay", "EditorIcons"));
play_scene_button->set_icon(gui_base->get_icon("PlayScene", "EditorIcons"));
@@ -1392,6 +1400,16 @@ void EditorNode::_property_editor_back() {
_edit_current();
}
+void EditorNode::_menu_collapseall() {
+
+ property_editor->collapse_all_folding();
+}
+
+void EditorNode::_menu_expandall() {
+
+ property_editor->expand_all_folding();
+}
+
void EditorNode::_save_default_environment() {
Ref<Environment> fallback = get_tree()->get_root()->get_world()->get_fallback_environment();
@@ -1486,7 +1504,7 @@ void EditorNode::_edit_current() {
if (FileAccess::exists(base_path + ".import")) {
editable_warning = TTR("This resource belongs to a scene that was imported, so it's not editable.\nPlease read the documentation relevant to importing scenes to better understand this workflow.");
} else {
- if (!get_edited_scene() || get_edited_scene()->get_filename() != base_path) {
+ if ((!get_edited_scene() || get_edited_scene()->get_filename() != base_path) && ResourceLoader::get_resource_type(base_path) == "PackedScene") {
editable_warning = TTR("This resource belongs to a scene that was instanced or inherited.\nChanges to it will not be kept when saving the current scene.");
}
}
@@ -1596,6 +1614,9 @@ void EditorNode::_edit_current() {
PopupMenu *p = object_menu->get_popup();
p->clear();
+ p->add_shortcut(ED_SHORTCUT("property_editor/expand_all", TTR("Expand all properties")), EXPAND_ALL);
+ p->add_shortcut(ED_SHORTCUT("property_editor/collapse_all", TTR("Collapse all properties")), COLLAPSE_ALL);
+ p->add_separator();
p->add_shortcut(ED_SHORTCUT("property_editor/copy_params", TTR("Copy Params")), OBJECT_COPY_PARAMS);
p->add_shortcut(ED_SHORTCUT("property_editor/paste_params", TTR("Paste Params")), OBJECT_PASTE_PARAMS);
p->add_separator();
@@ -1662,7 +1683,6 @@ void EditorNode::_resource_selected(const RES &p_res, const String &p_property)
void EditorNode::_run(bool p_current, const String &p_custom) {
if (editor_run.get_status() == EditorRun::STATUS_PLAY) {
-
play_button->set_pressed(!_playing_edited);
play_scene_button->set_pressed(_playing_edited);
return;
@@ -1794,6 +1814,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) {
play_button->set_pressed(true);
play_button->set_icon(gui_base->get_icon("Reload", "EditorIcons"));
}
+ stop_button->set_disabled(false);
_playing_edited = p_current;
}
@@ -2226,6 +2247,14 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
_set_editing_top_editors(current);
} break;
+ case COLLAPSE_ALL: {
+ _menu_collapseall();
+
+ } break;
+ case EXPAND_ALL: {
+ _menu_expandall();
+
+ } break;
case RUN_PLAY: {
_menu_option_confirm(RUN_STOP, true);
_run(false);
@@ -2257,6 +2286,8 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
play_scene_button->set_icon(gui_base->get_icon("PlayScene", "EditorIcons"));
play_custom_scene_button->set_pressed(false);
play_custom_scene_button->set_icon(gui_base->get_icon("PlayCustom", "EditorIcons"));
+ stop_button->set_disabled(true);
+
if (bool(EDITOR_DEF("run/output/always_close_output_on_stop", true))) {
for (int i = 0; i < bottom_panel_items.size(); i++) {
if (bottom_panel_items[i].control == log) {
@@ -2648,7 +2679,14 @@ void EditorNode::add_editor_plugin(EditorPlugin *p_editor) {
tb->set_toggle_mode(true);
tb->connect("pressed", singleton, "_editor_select", varray(singleton->main_editor_buttons.size()));
tb->set_text(p_editor->get_name());
- tb->set_icon(singleton->gui_base->get_icon(p_editor->get_name(), "EditorIcons"));
+ Ref<Texture> icon = p_editor->get_icon();
+
+ if (icon.is_valid()) {
+ tb->set_icon(icon);
+ } else if (singleton->gui_base->has_icon(p_editor->get_name(), "EditorIcons")) {
+ tb->set_icon(singleton->gui_base->get_icon(p_editor->get_name(), "EditorIcons"));
+ }
+
tb->set_name(p_editor->get_name());
singleton->main_editor_buttons.push_back(tb);
singleton->main_editor_button_vb->add_child(tb);
@@ -3110,6 +3148,10 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b
push_item(new_scene);
+ if (!restoring_scenes) {
+ save_layout();
+ }
+
return OK;
}
@@ -3322,6 +3364,7 @@ void EditorNode::register_editor_types() {
ClassDB::register_virtual_class<EditorInterface>();
ClassDB::register_class<EditorExportPlugin>();
ClassDB::register_class<EditorResourceConversionPlugin>();
+ ClassDB::register_class<EditorSceneImporter>();
// FIXME: Is this stuff obsolete, or should it be ported to new APIs?
ClassDB::register_class<EditorScenePostImport>();
@@ -3630,6 +3673,7 @@ void EditorNode::_save_docks() {
config.instance();
_save_docks_to_config(config, "docks");
+ _save_open_scenes_to_config(config, "EditorNode");
editor_data.get_plugin_window_layout(config);
config->save(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("editor_layout.cfg"));
@@ -3680,6 +3724,18 @@ void EditorNode::_save_docks_to_config(Ref<ConfigFile> p_layout, const String &p
}
}
+void EditorNode::_save_open_scenes_to_config(Ref<ConfigFile> p_layout, const String &p_section) {
+ Array scenes;
+ for (int i = 0; i < editor_data.get_edited_scene_count(); i++) {
+ String path = editor_data.get_scene_path(i);
+ if (path == "") {
+ continue;
+ }
+ scenes.push_back(path);
+ }
+ p_layout->set_value(p_section, "open_scenes", scenes);
+}
+
void EditorNode::save_layout() {
dock_drag_timer->start();
@@ -3704,6 +3760,7 @@ void EditorNode::_load_docks() {
}
_load_docks_from_config(config, "docks");
+ _load_open_scenes_from_config(config, "EditorNode");
editor_data.set_plugin_window_layout(config);
}
@@ -3850,6 +3907,25 @@ void EditorNode::_load_docks_from_config(Ref<ConfigFile> p_layout, const String
}
}
+void EditorNode::_load_open_scenes_from_config(Ref<ConfigFile> p_layout, const String &p_section) {
+ if (!bool(EDITOR_DEF("interface/scene_tabs/restore_scenes_on_load", false))) {
+ return;
+ }
+
+ if (!p_layout->has_section(p_section) || !p_layout->has_section_key(p_section, "open_scenes")) {
+ return;
+ }
+
+ restoring_scenes = true;
+
+ Array scenes = p_layout->get_value(p_section, "open_scenes");
+ for (int i = 0; i < scenes.size(); i++) {
+ load_scene(scenes[i]);
+ }
+
+ restoring_scenes = false;
+}
+
void EditorNode::_update_layouts_menu() {
editor_layouts->clear();
@@ -3948,6 +4024,8 @@ void EditorNode::_scene_tab_closed(int p_tab) {
} else {
_discard_changes();
}
+
+ save_layout();
_update_scene_tabs();
}
@@ -4645,6 +4723,7 @@ EditorNode::EditorNode() {
changing_scene = false;
_initializing_addons = false;
docks_visible = true;
+ restoring_scenes = false;
scene_distraction = false;
script_distraction = false;
@@ -4957,6 +5036,7 @@ EditorNode::EditorNode() {
scene_root_parent->set_v_size_flags(Control::SIZE_EXPAND_FILL);
scene_root = memnew(Viewport);
+ scene_root->set_usage(Viewport::USAGE_2D);
scene_root->set_disable_3d(true);
VisualServer::get_singleton()->viewport_set_hide_scenario(scene_root->get_viewport_rid(), true);
@@ -5204,6 +5284,7 @@ EditorNode::EditorNode() {
stop_button->set_icon(gui_base->get_icon("Stop", "EditorIcons"));
stop_button->connect("pressed", this, "_menu_option", make_binds(RUN_STOP));
stop_button->set_tooltip(TTR("Stop the scene."));
+ stop_button->set_disabled(true);
stop_button->set_shortcut(ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_F8));
run_native = memnew(EditorRunNative);
@@ -5262,13 +5343,14 @@ EditorNode::EditorNode() {
}
scene_tree_dock = memnew(SceneTreeDock(this, scene_root, editor_selection, editor_data));
- scene_tree_dock->set_name(TTR("Scene"));
dock_slot[DOCK_SLOT_RIGHT_UL]->add_child(scene_tree_dock);
+ dock_slot[DOCK_SLOT_RIGHT_UL]->set_tab_title(scene_tree_dock->get_index(), TTR("Scene"));
dock_slot[DOCK_SLOT_LEFT_BR]->hide();
VBoxContainer *prop_editor_base = memnew(VBoxContainer);
- prop_editor_base->set_name(TTR("Inspector")); // Properties?
+ prop_editor_base->set_name("Inspector");
dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(prop_editor_base);
+ dock_slot[DOCK_SLOT_RIGHT_BL]->set_tab_title(prop_editor_base->get_index(), TTR("Inspector"));
HBoxContainer *prop_editor_hb = memnew(HBoxContainer);
@@ -5376,11 +5458,11 @@ EditorNode::EditorNode() {
property_editor = memnew(PropertyEditor);
property_editor->set_autoclear(true);
property_editor->set_show_categories(true);
- property_editor->set_use_folding(true);
property_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL);
property_editor->set_use_doc_hints(true);
property_editor->set_hide_script(false);
property_editor->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/editor/capitalize_properties", true)));
+ property_editor->set_use_folding(!bool(EDITOR_DEF("interface/editor/disable_inspector_folding", false)));
property_editor->hide_top_label();
property_editor->register_text_enter(search_box);
@@ -5391,28 +5473,31 @@ EditorNode::EditorNode() {
import_dock = memnew(ImportDock);
dock_slot[DOCK_SLOT_RIGHT_UL]->add_child(import_dock);
- import_dock->set_name(TTR("Import"));
+ dock_slot[DOCK_SLOT_RIGHT_UL]->set_tab_title(import_dock->get_index(), TTR("Import"));
bool use_single_dock_column = (OS::get_singleton()->get_screen_size(OS::get_singleton()->get_current_screen()).x < 1200);
node_dock = memnew(NodeDock);
if (use_single_dock_column) {
dock_slot[DOCK_SLOT_RIGHT_UL]->add_child(node_dock);
+ dock_slot[DOCK_SLOT_RIGHT_UL]->set_tab_title(node_dock->get_index(), TTR("Node"));
} else {
dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(node_dock);
+ dock_slot[DOCK_SLOT_RIGHT_BL]->set_tab_title(node_dock->get_index(), TTR("Node"));
}
filesystem_dock = memnew(FileSystemDock(this));
- filesystem_dock->set_name(TTR("FileSystem"));
filesystem_dock->set_display_mode(int(EditorSettings::get_singleton()->get("docks/filesystem/display_mode")));
if (use_single_dock_column) {
dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(filesystem_dock);
+ dock_slot[DOCK_SLOT_RIGHT_BL]->set_tab_title(filesystem_dock->get_index(), TTR("FileSystem"));
left_r_vsplit->hide();
dock_slot[DOCK_SLOT_LEFT_UR]->hide();
dock_slot[DOCK_SLOT_LEFT_BR]->hide();
} else {
dock_slot[DOCK_SLOT_LEFT_UR]->add_child(filesystem_dock);
+ dock_slot[DOCK_SLOT_LEFT_UR]->set_tab_title(filesystem_dock->get_index(), TTR("FileSystem"));
}
filesystem_dock->connect("open", this, "open_request");
filesystem_dock->connect("instance", this, "_instance_request");
@@ -5421,9 +5506,9 @@ EditorNode::EditorNode() {
overridden_default_layout = -1;
default_layout.instance();
- default_layout->set_value(docks_section, "dock_3", TTR("FileSystem"));
- default_layout->set_value(docks_section, "dock_5", TTR("Scene") + "," + TTR("Import"));
- default_layout->set_value(docks_section, "dock_6", TTR("Inspector") + "," + TTR("Node"));
+ default_layout->set_value(docks_section, "dock_3", "FileSystem");
+ default_layout->set_value(docks_section, "dock_5", "Scene,Import");
+ default_layout->set_value(docks_section, "dock_6", "Inspector,Node");
for (int i = 0; i < DOCK_SLOT_MAX / 2; i++)
default_layout->set_value(docks_section, "dock_hsplit_" + itos(i + 1), 0);
@@ -5624,6 +5709,7 @@ EditorNode::EditorNode() {
editor_plugin_screen = NULL;
editor_plugins_over = memnew(EditorPluginList);
+ editor_plugins_force_over = memnew(EditorPluginList);
editor_plugins_force_input_forwarding = memnew(EditorPluginList);
_edit_current();
@@ -5716,8 +5802,6 @@ EditorNode::EditorNode() {
_initializing_addons = false;
}
- _load_docks();
-
FileAccess::set_file_close_fail_notify_callback(_file_access_close_error_notify);
waiting_for_first_scan = true;
@@ -5748,6 +5832,7 @@ EditorNode::~EditorNode() {
memdelete(EditorHelp::get_doc_data());
memdelete(editor_selection);
memdelete(editor_plugins_over);
+ memdelete(editor_plugins_force_over);
memdelete(editor_plugins_force_input_forwarding);
memdelete(file_server);
memdelete(progress_hb);
@@ -5801,10 +5886,17 @@ bool EditorPluginList::forward_spatial_gui_input(Camera *p_camera, const Ref<Inp
return discard;
}
-void EditorPluginList::forward_draw_over_canvas(Control *p_canvas) {
+void EditorPluginList::forward_draw_over_viewport(Control *p_overlay) {
+
+ for (int i = 0; i < plugins_list.size(); i++) {
+ plugins_list[i]->forward_draw_over_viewport(p_overlay);
+ }
+}
+
+void EditorPluginList::forward_force_draw_over_viewport(Control *p_overlay) {
for (int i = 0; i < plugins_list.size(); i++) {
- plugins_list[i]->forward_draw_over_canvas(p_canvas);
+ plugins_list[i]->forward_force_draw_over_viewport(p_overlay);
}
}
diff --git a/editor/editor_node.h b/editor/editor_node.h
index a2b4a0a049..658d5dc0ae 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -153,6 +153,9 @@ private:
OBJECT_REQUEST_HELP,
RUN_PLAY,
+ COLLAPSE_ALL,
+ EXPAND_ALL,
+
RUN_STOP,
RUN_PLAY_SCENE,
RUN_PLAY_NATIVE,
@@ -378,6 +381,7 @@ private:
Vector<EditorPlugin *> editor_plugins;
EditorPlugin *editor_plugin_screen;
EditorPluginList *editor_plugins_over;
+ EditorPluginList *editor_plugins_force_over;
EditorPluginList *editor_plugins_force_input_forwarding;
EditorHistory editor_history;
@@ -426,6 +430,9 @@ private:
void _property_editor_forward();
void _property_editor_back();
+ void _menu_collapseall();
+ void _menu_expandall();
+
void _select_history(int p_idx);
void _prepare_history();
@@ -559,6 +566,10 @@ private:
void _load_docks_from_config(Ref<ConfigFile> p_layout, const String &p_section);
void _update_dock_slots_visibility();
+ bool restoring_scenes;
+ void _save_open_scenes_to_config(Ref<ConfigFile> p_layout, const String &p_section);
+ void _load_open_scenes_from_config(Ref<ConfigFile> p_layout, const String &p_section);
+
void _update_layouts_menu();
void _layout_menu_option(int p_id);
@@ -636,6 +647,7 @@ public:
EditorPlugin *get_editor_plugin_screen() { return editor_plugin_screen; }
EditorPluginList *get_editor_plugins_over() { return editor_plugins_over; }
+ EditorPluginList *get_editor_plugins_force_over() { return editor_plugins_force_over; }
EditorPluginList *get_editor_plugins_force_input_forwarding() { return editor_plugins_force_input_forwarding; }
PropertyEditor *get_property_editor() { return property_editor; }
VBoxContainer *get_property_editor_vb() { return prop_editor_vb; }
@@ -820,7 +832,8 @@ public:
void edit(Object *p_object);
bool forward_gui_input(const Ref<InputEvent> &p_event);
bool forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event, bool serve_when_force_input_enabled);
- void forward_draw_over_canvas(Control *p_canvas);
+ void forward_draw_over_viewport(Control *p_overlay);
+ void forward_force_draw_over_viewport(Control *p_overlay);
void add_plugin(EditorPlugin *p_plugin);
void clear();
bool empty();
diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp
index 38e8b301b7..5c4c2b694f 100644
--- a/editor/editor_plugin.cpp
+++ b/editor/editor_plugin.cpp
@@ -375,6 +375,12 @@ void EditorPlugin::set_input_event_forwarding_always_enabled() {
always_input_forwarding_list->add_plugin(this);
}
+void EditorPlugin::set_force_draw_over_forwarding_enabled() {
+ force_draw_over_forwarding_enabled = true;
+ EditorPluginList *always_draw_over_forwarding_list = EditorNode::get_singleton()->get_editor_plugins_force_over();
+ always_draw_over_forwarding_list->add_plugin(this);
+}
+
void EditorPlugin::notify_scene_changed(const Node *scn_root) {
if (scn_root == NULL) return;
emit_signal("scene_changed", scn_root);
@@ -410,15 +416,38 @@ bool EditorPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
return false;
}
-void EditorPlugin::forward_draw_over_canvas(Control *p_canvas) {
+void EditorPlugin::forward_draw_over_viewport(Control *p_overlay) {
- if (get_script_instance() && get_script_instance()->has_method("forward_draw_over_canvas")) {
- get_script_instance()->call("forward_draw_over_canvas", p_canvas);
+ if (get_script_instance() && get_script_instance()->has_method("forward_draw_over_viewport")) {
+ get_script_instance()->call("forward_draw_over_viewport", p_overlay);
}
}
-void EditorPlugin::update_canvas() {
- CanvasItemEditor::get_singleton()->get_viewport_control()->update();
+void EditorPlugin::forward_force_draw_over_viewport(Control *p_overlay) {
+
+ if (get_script_instance() && get_script_instance()->has_method("forward_force_draw_over_viewport")) {
+ get_script_instance()->call("forward_force_draw_over_viewport", p_overlay);
+ }
+}
+
+// Updates the overlays of the 2D viewport or, if in 3D mode, of every 3D viewport.
+int EditorPlugin::update_overlays() const {
+
+ if (SpatialEditor::get_singleton()->is_visible()) {
+ int count = 0;
+ for (int i = 0; i < SpatialEditor::VIEWPORTS_COUNT; i++) {
+ SpatialEditorViewport *vp = SpatialEditor::get_singleton()->get_editor_viewport(i);
+ if (vp->is_visible()) {
+ vp->update_surface();
+ count++;
+ }
+ }
+ return count;
+ } else {
+ // This will update the normal viewport itself as well
+ CanvasItemEditor::get_singleton()->get_viewport_control()->update();
+ return 1;
+ }
}
bool EditorPlugin::forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event) {
@@ -437,6 +466,14 @@ String EditorPlugin::get_name() const {
return String();
}
+const Ref<Texture> EditorPlugin::get_icon() const {
+
+ if (get_script_instance() && get_script_instance()->has_method("get_plugin_icon")) {
+ return get_script_instance()->call("get_plugin_icon");
+ }
+
+ return Ref<Texture>();
+}
bool EditorPlugin::has_main_screen() const {
if (get_script_instance() && get_script_instance()->has_method("has_main_screen")) {
@@ -528,12 +565,12 @@ void EditorPlugin::save_global_state() {}
void EditorPlugin::add_import_plugin(const Ref<EditorImportPlugin> &p_importer) {
ResourceFormatImporter::get_singleton()->add_importer(p_importer);
- EditorFileSystem::get_singleton()->scan();
+ EditorFileSystem::get_singleton()->call_deferred("scan");
}
void EditorPlugin::remove_import_plugin(const Ref<EditorImportPlugin> &p_importer) {
ResourceFormatImporter::get_singleton()->remove_importer(p_importer);
- EditorFileSystem::get_singleton()->scan();
+ EditorFileSystem::get_singleton()->call_deferred("scan");
}
void EditorPlugin::add_export_plugin(const Ref<EditorExportPlugin> &p_exporter) {
@@ -544,6 +581,14 @@ void EditorPlugin::remove_export_plugin(const Ref<EditorExportPlugin> &p_exporte
EditorExport::get_singleton()->remove_export_plugin(p_exporter);
}
+void EditorPlugin::add_scene_import_plugin(const Ref<EditorSceneImporter> &p_importer) {
+ ResourceImporterScene::get_singleton()->add_importer(p_importer);
+}
+
+void EditorPlugin::remove_scene_import_plugin(const Ref<EditorSceneImporter> &p_importer) {
+ ResourceImporterScene::get_singleton()->remove_importer(p_importer);
+}
+
void EditorPlugin::set_window_layout(Ref<ConfigFile> p_layout) {
if (get_script_instance() && get_script_instance()->has_method("set_window_layout")) {
@@ -590,7 +635,7 @@ void EditorPlugin::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_custom_type", "type", "base", "script", "icon"), &EditorPlugin::add_custom_type);
ClassDB::bind_method(D_METHOD("remove_custom_type", "type"), &EditorPlugin::remove_custom_type);
- ClassDB::bind_method(D_METHOD("update_canvas"), &EditorPlugin::update_canvas);
+ ClassDB::bind_method(D_METHOD("update_overlays"), &EditorPlugin::update_overlays);
ClassDB::bind_method(D_METHOD("make_bottom_panel_item_visible", "item"), &EditorPlugin::make_bottom_panel_item_visible);
ClassDB::bind_method(D_METHOD("hide_bottom_panel"), &EditorPlugin::hide_bottom_panel);
@@ -599,20 +644,25 @@ void EditorPlugin::_bind_methods() {
ClassDB::bind_method(D_METHOD("queue_save_layout"), &EditorPlugin::queue_save_layout);
ClassDB::bind_method(D_METHOD("add_import_plugin", "importer"), &EditorPlugin::add_import_plugin);
ClassDB::bind_method(D_METHOD("remove_import_plugin", "importer"), &EditorPlugin::remove_import_plugin);
+ ClassDB::bind_method(D_METHOD("add_scene_import_plugin", "scene_importer"), &EditorPlugin::add_scene_import_plugin);
+ ClassDB::bind_method(D_METHOD("remove_scene_import_plugin", "scene_importer"), &EditorPlugin::remove_scene_import_plugin);
ClassDB::bind_method(D_METHOD("add_export_plugin", "exporter"), &EditorPlugin::add_export_plugin);
ClassDB::bind_method(D_METHOD("remove_export_plugin", "exporter"), &EditorPlugin::remove_export_plugin);
ClassDB::bind_method(D_METHOD("set_input_event_forwarding_always_enabled"), &EditorPlugin::set_input_event_forwarding_always_enabled);
+ ClassDB::bind_method(D_METHOD("set_force_draw_over_forwarding_enabled"), &EditorPlugin::set_force_draw_over_forwarding_enabled);
ClassDB::bind_method(D_METHOD("get_editor_interface"), &EditorPlugin::get_editor_interface);
ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "forward_canvas_gui_input", PropertyInfo(Variant::TRANSFORM2D, "canvas_xform"), PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent")));
- ClassDB::add_virtual_method(get_class_static(), MethodInfo("forward_draw_over_canvas", PropertyInfo(Variant::TRANSFORM2D, "canvas_xform"), PropertyInfo(Variant::OBJECT, "canvas", PROPERTY_HINT_RESOURCE_TYPE, "Control")));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo("forward_draw_over_viewport", PropertyInfo(Variant::OBJECT, "overlay", PROPERTY_HINT_RESOURCE_TYPE, "Control")));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo("forward_force_draw_over_viewport", PropertyInfo(Variant::OBJECT, "overlay", PROPERTY_HINT_RESOURCE_TYPE, "Control")));
ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "forward_spatial_gui_input", PropertyInfo(Variant::OBJECT, "camera", PROPERTY_HINT_RESOURCE_TYPE, "Camera"), PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent")));
MethodInfo gizmo = MethodInfo(Variant::OBJECT, "create_spatial_gizmo", PropertyInfo(Variant::OBJECT, "for_spatial", PROPERTY_HINT_RESOURCE_TYPE, "Spatial"));
gizmo.return_val.hint = PROPERTY_HINT_RESOURCE_TYPE;
gizmo.return_val.hint_string = "EditorSpatialGizmo";
ClassDB::add_virtual_method(get_class_static(), gizmo);
ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_plugin_name"));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::OBJECT, "get_plugin_icon"));
ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "has_main_screen"));
ClassDB::add_virtual_method(get_class_static(), MethodInfo("make_visible", PropertyInfo(Variant::BOOL, "visible")));
ClassDB::add_virtual_method(get_class_static(), MethodInfo("edit", PropertyInfo(Variant::OBJECT, "object")));
@@ -653,6 +703,7 @@ void EditorPlugin::_bind_methods() {
EditorPlugin::EditorPlugin() {
undo_redo = NULL;
input_event_forwarding_always_enabled = false;
+ force_draw_over_forwarding_enabled = false;
last_main_screen_name = "";
}
diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h
index 1d68eee117..f45d1c1ecc 100644
--- a/editor/editor_plugin.h
+++ b/editor/editor_plugin.h
@@ -31,6 +31,7 @@
#define EDITOR_PLUGIN_H
#include "editor/import/editor_import_plugin.h"
+#include "editor/import/resource_importer_scene.h"
#include "io/config_file.h"
#include "scene/gui/tool_button.h"
#include "scene/main/node.h"
@@ -102,6 +103,7 @@ class EditorPlugin : public Node {
UndoRedo *_get_undo_redo() { return undo_redo; }
bool input_event_forwarding_always_enabled;
+ bool force_draw_over_forwarding_enabled;
String last_main_screen_name;
@@ -151,15 +153,20 @@ public:
void set_input_event_forwarding_always_enabled();
bool is_input_event_forwarding_always_enabled() { return input_event_forwarding_always_enabled; }
+ void set_force_draw_over_forwarding_enabled();
+ bool is_force_draw_over_forwarding_enabled() { return force_draw_over_forwarding_enabled; }
+
void notify_main_screen_changed(const String &screen_name);
void notify_scene_changed(const Node *scn_root);
void notify_scene_closed(const String &scene_filepath);
virtual Ref<SpatialEditorGizmo> create_spatial_gizmo(Spatial *p_spatial);
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event);
- virtual void forward_draw_over_canvas(Control *p_canvas);
+ virtual void forward_draw_over_viewport(Control *p_overlay);
+ virtual void forward_force_draw_over_viewport(Control *p_overlay);
virtual bool forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event);
virtual String get_name() const;
+ virtual const Ref<Texture> get_icon() const;
virtual bool has_main_screen() const;
virtual void make_visible(bool p_visible);
virtual void selected_notify() {} //notify that it was raised by the user, not the editor
@@ -178,7 +185,7 @@ public:
EditorInterface *get_editor_interface();
- void update_canvas();
+ int update_overlays() const;
void queue_save_layout() const;
@@ -194,6 +201,9 @@ public:
void add_export_plugin(const Ref<EditorExportPlugin> &p_exporter);
void remove_export_plugin(const Ref<EditorExportPlugin> &p_exporter);
+ void add_scene_import_plugin(const Ref<EditorSceneImporter> &p_importer);
+ void remove_scene_import_plugin(const Ref<EditorSceneImporter> &p_importer);
+
EditorPlugin();
virtual ~EditorPlugin();
};
diff --git a/editor/editor_profiler.cpp b/editor/editor_profiler.cpp
index faf49ffd41..71c26244ee 100644
--- a/editor/editor_profiler.cpp
+++ b/editor/editor_profiler.cpp
@@ -221,7 +221,7 @@ void EditorProfiler::_update_plot() {
Vector<int> columnv;
columnv.resize(h * 4);
- int *column = columnv.ptr();
+ int *column = columnv.ptrw();
Map<StringName, int> plot_prev;
//Map<StringName,int> plot_max;
@@ -670,13 +670,13 @@ EditorProfiler::EditorProfiler() {
variables->set_hide_root(true);
variables->set_columns(3);
variables->set_column_titles_visible(true);
- variables->set_column_title(0, "Name");
+ variables->set_column_title(0, TTR("Name"));
variables->set_column_expand(0, true);
variables->set_column_min_width(0, 60);
- variables->set_column_title(1, "Time");
+ variables->set_column_title(1, TTR("Time"));
variables->set_column_expand(1, false);
variables->set_column_min_width(1, 60 * EDSCALE);
- variables->set_column_title(2, "Calls");
+ variables->set_column_title(2, TTR("Calls"));
variables->set_column_expand(2, false);
variables->set_column_min_width(2, 60 * EDSCALE);
variables->connect("item_edited", this, "_item_edited");
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index 582bb977b8..d199b27b83 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -75,10 +75,9 @@ bool EditorSettings::_set(const StringName &p_name, const Variant &p_value, bool
return true;
}
- if (p_value.get_type() == Variant::NIL)
+ if (p_value.get_type() == Variant::NIL) {
props.erase(p_name);
- else {
-
+ } else {
if (props.has(p_name))
props[p_name].variant = p_value;
else
@@ -349,7 +348,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
_initial_set("text_editor/files/autosave_interval_secs", 0);
_initial_set("text_editor/cursor/block_caret", false);
- _initial_set("text_editor/cursor/caret_blink", false);
+ _initial_set("text_editor/cursor/caret_blink", true);
_initial_set("text_editor/cursor/caret_blink_speed", 0.65);
hints["text_editor/cursor/caret_blink_speed"] = PropertyInfo(Variant::REAL, "text_editor/cursor/caret_blink_speed", PROPERTY_HINT_RANGE, "0.1, 10, 0.1");
@@ -370,8 +369,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
_initial_set("editors/3d/grid_color", Color::html("808080"));
hints["editors/3d/grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/grid_color", PROPERTY_HINT_COLOR_NO_ALPHA, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("editors/3d/default_fov", 55.0);
- _initial_set("editors/3d/default_z_near", 0.1);
+ _initial_set("editors/3d/default_fov", 70.0);
+ _initial_set("editors/3d/default_z_near", 0.05);
_initial_set("editors/3d/default_z_far", 500.0);
// navigation
@@ -417,6 +416,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
hints["editors/3d/freelook/freelook_modifier_speed_factor"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_modifier_speed_factor", PROPERTY_HINT_RANGE, "0.0, 10.0, 0.1");
_initial_set("editors/3d/freelook/freelook_speed_zoom_link", false);
+ _initial_set("editors/2d/guides_color", Color(0.6, 0.0, 0.8));
_initial_set("editors/2d/bone_width", 5);
_initial_set("editors/2d/bone_color1", Color(1.0, 1.0, 1.0, 0.9));
_initial_set("editors/2d/bone_color2", Color(0.75, 0.75, 0.75, 0.9));
@@ -462,6 +462,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
_initial_set("editors/animation/autorename_animation_tracks", true);
_initial_set("editors/animation/confirm_insert_track", true);
+ _initial_set("editors/animation/onion_layers_past_color", Color(1, 0, 0));
+ _initial_set("editors/animation/onion_layers_future_color", Color(0, 1, 0));
_initial_set("docks/property_editor/texture_preview_width", 48);
_initial_set("docks/property_editor/auto_refresh_interval", 0.3);
@@ -541,6 +543,7 @@ void EditorSettings::_load_default_text_editor_theme() {
_initial_set("text_editor/highlighting/line_length_guideline_color", Color(0.3, 0.5, 0.8, 0.1));
_initial_set("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4));
_initial_set("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2));
+ _initial_set("text_editor/highlighting/code_folding_color", Color(0.8, 0.8, 0.8, 0.8));
_initial_set("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15));
_initial_set("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1));
_initial_set("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1));
@@ -575,6 +578,7 @@ bool EditorSettings::_save_text_editor_theme(String p_file) {
cf->set_value(theme_section, "line_length_guideline_color", ((Color)get("text_editor/highlighting/line_length_guideline_color")).to_html());
cf->set_value(theme_section, "mark_color", ((Color)get("text_editor/highlighting/mark_color")).to_html());
cf->set_value(theme_section, "breakpoint_color", ((Color)get("text_editor/highlighting/breakpoint_color")).to_html());
+ cf->set_value(theme_section, "code_folding_color", ((Color)get("text_editor/highlighting/code_folding_color")).to_html());
cf->set_value(theme_section, "word_highlighted_color", ((Color)get("text_editor/highlighting/word_highlighted_color")).to_html());
cf->set_value(theme_section, "search_result_color", ((Color)get("text_editor/highlighting/search_result_color")).to_html());
cf->set_value(theme_section, "search_result_border_color", ((Color)get("text_editor/highlighting/search_result_border_color")).to_html());
@@ -965,6 +969,8 @@ void EditorSettings::raise_order(const String &p_setting) {
void EditorSettings::set_initial_value(const StringName &p_setting, const Variant &p_value) {
+ _THREAD_SAFE_METHOD_
+
if (!props.has(p_setting))
return;
props[p_setting].initial = p_value;
@@ -977,7 +983,8 @@ Variant _EDITOR_DEF(const String &p_setting, const Variant &p_default) {
if (EditorSettings::get_singleton()->has_setting(p_setting))
ret = EditorSettings::get_singleton()->get(p_setting);
else
- EditorSettings::get_singleton()->set(p_setting, p_default);
+ EditorSettings::get_singleton()->set_manually(p_setting, p_default);
+
if (!EditorSettings::get_singleton()->has_default_value(p_setting))
EditorSettings::get_singleton()->set_initial_value(p_setting, p_default);
@@ -995,12 +1002,15 @@ bool EditorSettings::property_can_revert(const String &p_setting) {
if (!props.has(p_setting))
return false;
+ if (!props[p_setting].has_default_value)
+ return false;
+
return props[p_setting].initial != props[p_setting].variant;
}
Variant EditorSettings::property_get_revert(const String &p_setting) {
- if (!props.has(p_setting))
+ if (!props.has(p_setting) || !props[p_setting].has_default_value)
return Variant();
return props[p_setting].initial;
@@ -1388,7 +1398,7 @@ EditorSettings::EditorSettings() {
Vector<uint8_t> data;
data.resize(etl->uncomp_size);
- Compression::decompress(data.ptr(), etl->uncomp_size, etl->data, etl->comp_size, Compression::MODE_DEFLATE);
+ Compression::decompress(data.ptrw(), etl->uncomp_size, etl->data, etl->comp_size, Compression::MODE_DEFLATE);
FileAccessMemory *fa = memnew(FileAccessMemory);
fa->open_custom(data.ptr(), data.size());
diff --git a/editor/editor_settings.h b/editor/editor_settings.h
index a8c991a6d9..5b15b1d6be 100644
--- a/editor/editor_settings.h
+++ b/editor/editor_settings.h
@@ -70,6 +70,8 @@ private:
bool hide_from_editor;
bool save;
VariantContainer() {
+ variant = Variant();
+ initial = Variant();
order = 0;
hide_from_editor = false;
has_default_value = false;
@@ -77,8 +79,11 @@ private:
}
VariantContainer(const Variant &p_variant, int p_order) {
variant = p_variant;
+ initial = Variant();
order = p_order;
hide_from_editor = false;
+ has_default_value = false;
+ save = false;
}
};
diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp
index 8bc932018a..8b9c261f8b 100644
--- a/editor/editor_themes.cpp
+++ b/editor/editor_themes.cpp
@@ -796,6 +796,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// TextEdit
theme->set_stylebox("normal", "TextEdit", style_widget);
theme->set_stylebox("focus", "TextEdit", style_widget_hover);
+ theme->set_stylebox("read_only", "TextEdit", style_widget_disabled);
theme->set_constant("side_margin", "TabContainer", 0);
theme->set_icon("tab", "TextEdit", theme->get_icon("GuiTab", "EditorIcons"));
theme->set_color("font_color", "TextEdit", font_color);
@@ -1041,6 +1042,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
const Color member_variable_color = mono_color;
const Color mark_color = Color(error_color.r, error_color.g, error_color.b, 0.3);
const Color breakpoint_color = error_color;
+ const Color code_folding_color = alpha4;
const Color search_result_color = alpha1;
const Color search_result_border_color = alpha4;
@@ -1071,6 +1073,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
theme->set_color("text_editor/theme/member_variable_color", "Editor", member_variable_color);
theme->set_color("text_editor/theme/mark_color", "Editor", mark_color);
theme->set_color("text_editor/theme/breakpoint_color", "Editor", breakpoint_color);
+ theme->set_color("text_editor/theme/code_folding_color", "Editor", code_folding_color);
theme->set_color("text_editor/theme/search_result_color", "Editor", search_result_color);
theme->set_color("text_editor/theme/search_result_border_color", "Editor", search_result_border_color);
diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp
index d208bbe662..2aad4774b0 100644
--- a/editor/export_template_manager.cpp
+++ b/editor/export_template_manager.cpp
@@ -207,7 +207,7 @@ void ExportTemplateManager::_install_from_file(const String &p_file) {
//read
unzOpenCurrentFile(pkg);
- ret = unzReadCurrentFile(pkg, data.ptr(), data.size());
+ ret = unzReadCurrentFile(pkg, data.ptrw(), data.size());
unzCloseCurrentFile(pkg);
String data_str;
@@ -277,7 +277,7 @@ void ExportTemplateManager::_install_from_file(const String &p_file) {
//read
unzOpenCurrentFile(pkg);
- unzReadCurrentFile(pkg, data.ptr(), data.size());
+ unzReadCurrentFile(pkg, data.ptrw(), data.size());
unzCloseCurrentFile(pkg);
print_line(fname);
diff --git a/editor/fileserver/editor_file_server.cpp b/editor/fileserver/editor_file_server.cpp
index fccf7c323c..ad035b48f3 100644
--- a/editor/fileserver/editor_file_server.cpp
+++ b/editor/fileserver/editor_file_server.cpp
@@ -31,7 +31,6 @@
#include "../editor_settings.h"
#include "io/marshalls.h"
-#include "io/marshalls.h"
//#define DEBUG_PRINT(m_p) print_line(m_p)
#define DEBUG_TIME(m_what) printf("MS: %s - %lu\n", m_what, OS::get_singleton()->get_ticks_usec());
@@ -240,7 +239,7 @@ void EditorFileServer::_subthread_start(void *s) {
cd->files[id]->seek(offset);
Vector<uint8_t> buf;
buf.resize(blocklen);
- int read = cd->files[id]->get_buffer(buf.ptr(), blocklen);
+ int read = cd->files[id]->get_buffer(buf.ptrw(), blocklen);
ERR_CONTINUE(read < 0);
print_line("GET BLOCK - offset: " + itos(offset) + ", blocklen: " + itos(blocklen));
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index 2ddfea00e3..9ece36ea80 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -781,6 +781,20 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_
}
}
+ // update scene if it is open
+ for (int i = 0; i < changed_paths.size(); ++i) {
+ String new_item_path = p_item.is_file ? new_path : changed_paths[i].replace_first(old_path, new_path);
+ if (ResourceLoader::get_resource_type(new_item_path) == "PackedScene" && editor->is_scene_open(changed_paths[i])) {
+ EditorData *ed = &editor->get_editor_data();
+ for (int j = 0; j < ed->get_edited_scene_count(); j++) {
+ if (ed->get_scene_path(j) == changed_paths[i]) {
+ ed->get_edited_scene_root(j)->set_filename(new_item_path);
+ break;
+ }
+ }
+ }
+ }
+
//Only treat as a changed dependency if it was successfully moved
for (int i = 0; i < changed_paths.size(); ++i) {
p_renames[changed_paths[i]] = changed_paths[i].replace_first(old_path, new_path);
@@ -792,6 +806,39 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_
memdelete(da);
}
+void FileSystemDock::_try_duplicate_item(const FileOrFolder &p_item, const String &p_new_path) const {
+ //Ensure folder paths end with "/"
+ String old_path = (p_item.is_file || p_item.path.ends_with("/")) ? p_item.path : (p_item.path + "/");
+ String new_path = (p_item.is_file || p_new_path.ends_with("/")) ? p_new_path : (p_new_path + "/");
+
+ if (new_path == old_path) {
+ return;
+ } else if (old_path == "res://") {
+ EditorNode::get_singleton()->add_io_error(TTR("Cannot move/rename resources root."));
+ return;
+ } else if (!p_item.is_file && new_path.begins_with(old_path)) {
+ //This check doesn't erroneously catch renaming to a longer name as folder paths always end with "/"
+ EditorNode::get_singleton()->add_io_error(TTR("Cannot move a folder into itself.\n") + old_path + "\n");
+ return;
+ }
+
+ DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
+ print_line("Duplicating " + old_path + " -> " + new_path);
+ Error err = da->copy(old_path, new_path);
+ if (err == OK) {
+ //Move/Rename any corresponding import settings too
+ if (p_item.is_file && FileAccess::exists(old_path + ".import")) {
+ err = da->copy(old_path + ".import", new_path + ".import");
+ if (err != OK) {
+ EditorNode::get_singleton()->add_io_error(TTR("Error duplicating:\n") + old_path + ".import\n");
+ }
+ }
+ } else {
+ EditorNode::get_singleton()->add_io_error(TTR("Error duplicating:\n") + old_path + "\n");
+ }
+ memdelete(da);
+}
+
void FileSystemDock::_update_dependencies_after_move(const Map<String, String> &p_renames) const {
//The following code assumes that the following holds:
// 1) EditorFileSystem contains the old paths/folder structure from before the rename/move.
@@ -803,7 +850,10 @@ void FileSystemDock::_update_dependencies_after_move(const Map<String, String> &
String file = p_renames.has(remaps[i]) ? p_renames[remaps[i]] : remaps[i];
print_line("Remapping dependencies for: " + file);
Error err = ResourceLoader::rename_dependencies(file, p_renames);
- if (err != OK) {
+ if (err == OK) {
+ if (ResourceLoader::get_resource_type(file) == "PackedScene")
+ editor->reload_scene(file);
+ } else {
EditorNode::get_singleton()->add_io_error(TTR("Unable to update dependencies:\n") + remaps[i] + "\n");
}
}
@@ -871,6 +921,39 @@ void FileSystemDock::_rename_operation_confirm() {
_rescan();
}
+void FileSystemDock::_duplicate_operation_confirm() {
+
+ String new_name = duplicate_dialog_text->get_text().strip_edges();
+ if (new_name.length() == 0) {
+ EditorNode::get_singleton()->show_warning(TTR("No name provided."));
+ return;
+ } else if (new_name.find("/") != -1 || new_name.find("\\") != -1 || new_name.find(":") != -1) {
+ EditorNode::get_singleton()->show_warning(TTR("Name contains invalid characters."));
+ return;
+ }
+
+ String old_path = to_duplicate.path.ends_with("/") ? to_duplicate.path.substr(0, to_duplicate.path.length() - 1) : to_rename.path;
+ String new_path = old_path.get_base_dir().plus_file(new_name);
+ if (old_path == new_path) {
+ return;
+ }
+
+ //Present a more user friendly warning for name conflict
+ DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
+ if (da->file_exists(new_path) || da->dir_exists(new_path)) {
+ EditorNode::get_singleton()->show_warning(TTR("A file or folder with this name already exists."));
+ memdelete(da);
+ return;
+ }
+ memdelete(da);
+
+ _try_duplicate_item(to_duplicate, new_name);
+
+ //Rescan everything
+ print_line("call rescan!");
+ _rescan();
+}
+
void FileSystemDock::_move_operation_confirm(const String &p_to_path) {
Map<String, String> renames;
@@ -892,10 +975,11 @@ void FileSystemDock::_file_option(int p_option) {
OS::get_singleton()->shell_open(String("file://") + dir);
} break;
case FILE_OPEN: {
- int idx = files->get_current();
- if (idx < 0 || idx >= files->get_item_count())
- break;
- _select_file(idx);
+ for (int i = 0; i < files->get_item_count(); i++) {
+ if (files->is_selected(i)) {
+ _select_file(i);
+ }
+ }
} break;
case FILE_INSTANCE: {
@@ -985,6 +1069,27 @@ void FileSystemDock::_file_option(int p_option) {
//2) warn
}
} break;
+ case FILE_DUPLICATE: {
+ int idx = files->get_current();
+ if (idx < 0 || idx >= files->get_item_count())
+ break;
+
+ to_duplicate.path = files->get_item_metadata(idx);
+ to_duplicate.is_file = !to_duplicate.path.ends_with("/");
+ if (to_duplicate.is_file) {
+ String name = to_duplicate.path.get_file();
+ duplicate_dialog->set_title(TTR("Duplicating file:") + " " + name);
+ duplicate_dialog_text->set_text(name);
+ duplicate_dialog_text->select(0, name.find_last("."));
+ } else {
+ String name = to_duplicate.path.substr(0, to_duplicate.path.length() - 1).get_file();
+ duplicate_dialog->set_title(TTR("Duplicating folder:") + " " + name);
+ duplicate_dialog_text->set_text(name);
+ duplicate_dialog_text->select(0, name.length());
+ }
+ duplicate_dialog->popup_centered_minsize(Size2(250, 80) * EDSCALE);
+ duplicate_dialog_text->grab_focus();
+ } break;
case FILE_INFO: {
} break;
@@ -1412,18 +1517,25 @@ void FileSystemDock::_files_list_rmb_select(int p_item, const Vector2 &p_pos) {
file_options->clear();
file_options->set_size(Size2(1, 1));
- if (all_files && filenames.size() > 0) {
- file_options->add_item(TTR("Open"), FILE_OPEN);
- if (all_files_scenes) {
+ if (all_files) {
+
+ if (all_files_scenes && filenames.size() >= 1) {
+ file_options->add_item(TTR("Open Scene(s)"), FILE_OPEN);
file_options->add_item(TTR("Instance"), FILE_INSTANCE);
+ file_options->add_separator();
+ }
+
+ if (!all_files_scenes && filenames.size() == 1) {
+ file_options->add_item(TTR("Open"), FILE_OPEN);
+ file_options->add_separator();
}
- file_options->add_separator();
if (filenames.size() == 1) {
file_options->add_item(TTR("Edit Dependencies.."), FILE_DEPENDENCIES);
file_options->add_item(TTR("View Owners.."), FILE_OWNERS);
file_options->add_separator();
}
+
} else if (all_folders && foldernames.size() > 0) {
file_options->add_item(TTR("Open"), FILE_OPEN);
file_options->add_separator();
@@ -1434,6 +1546,7 @@ void FileSystemDock::_files_list_rmb_select(int p_item, const Vector2 &p_pos) {
if (num_items == 1) {
file_options->add_item(TTR("Copy Path"), FILE_COPY_PATH);
file_options->add_item(TTR("Rename.."), FILE_RENAME);
+ file_options->add_item(TTR("Duplicate.."), FILE_DUPLICATE);
}
file_options->add_item(TTR("Move To.."), FILE_MOVE);
file_options->add_item(TTR("Delete"), FILE_REMOVE);
@@ -1545,6 +1658,7 @@ void FileSystemDock::_bind_methods() {
ClassDB::bind_method(D_METHOD("_make_dir_confirm"), &FileSystemDock::_make_dir_confirm);
ClassDB::bind_method(D_METHOD("_move_operation_confirm"), &FileSystemDock::_move_operation_confirm);
ClassDB::bind_method(D_METHOD("_rename_operation_confirm"), &FileSystemDock::_rename_operation_confirm);
+ ClassDB::bind_method(D_METHOD("_duplicate_operation_confirm"), &FileSystemDock::_duplicate_operation_confirm);
ClassDB::bind_method(D_METHOD("_search_changed"), &FileSystemDock::_search_changed);
@@ -1565,6 +1679,7 @@ void FileSystemDock::_bind_methods() {
FileSystemDock::FileSystemDock(EditorNode *p_editor) {
+ set_name("FileSystem");
editor = p_editor;
path = "res://";
@@ -1717,6 +1832,17 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
rename_dialog->register_text_enter(rename_dialog_text);
rename_dialog->connect("confirmed", this, "_rename_operation_confirm");
+ duplicate_dialog = memnew(ConfirmationDialog);
+ VBoxContainer *duplicate_dialog_vb = memnew(VBoxContainer);
+ duplicate_dialog->add_child(duplicate_dialog_vb);
+
+ duplicate_dialog_text = memnew(LineEdit);
+ duplicate_dialog_vb->add_margin_child(TTR("Name:"), duplicate_dialog_text);
+ duplicate_dialog->get_ok()->set_text(TTR("Duplicate"));
+ add_child(duplicate_dialog);
+ duplicate_dialog->register_text_enter(duplicate_dialog_text);
+ duplicate_dialog->connect("confirmed", this, "_duplicate_operation_confirm");
+
make_dir_dialog = memnew(ConfirmationDialog);
make_dir_dialog->set_title(TTR("Create Folder"));
VBoxContainer *make_folder_dialog_vb = memnew(VBoxContainer);
diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h
index f1fd342052..bc8d835ba1 100644
--- a/editor/filesystem_dock.h
+++ b/editor/filesystem_dock.h
@@ -70,6 +70,7 @@ private:
FILE_MOVE,
FILE_RENAME,
FILE_REMOVE,
+ FILE_DUPLICATE,
FILE_REIMPORT,
FILE_INFO,
FILE_NEW_FOLDER,
@@ -120,6 +121,8 @@ private:
EditorDirDialog *move_dialog;
ConfirmationDialog *rename_dialog;
LineEdit *rename_dialog_text;
+ ConfirmationDialog *duplicate_dialog;
+ LineEdit *duplicate_dialog_text;
ConfirmationDialog *make_dir_dialog;
LineEdit *make_dir_dialog_text;
@@ -128,12 +131,15 @@ private:
String path;
bool is_file;
- FileOrFolder()
- : path(""), is_file(false) {}
- FileOrFolder(const String &p_path, bool p_is_file)
- : path(p_path), is_file(p_is_file) {}
+ FileOrFolder() :
+ path(""),
+ is_file(false) {}
+ FileOrFolder(const String &p_path, bool p_is_file) :
+ path(p_path),
+ is_file(p_is_file) {}
};
FileOrFolder to_rename;
+ FileOrFolder to_duplicate;
Vector<FileOrFolder> to_move;
Vector<String> history;
@@ -170,10 +176,12 @@ private:
void _get_all_files_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files) const;
void _find_remaps(EditorFileSystemDirectory *efsd, const Map<String, String> &renames, Vector<String> &to_remaps) const;
void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_renames) const;
+ void _try_duplicate_item(const FileOrFolder &p_item, const String &p_new_path) const;
void _update_dependencies_after_move(const Map<String, String> &p_renames) const;
void _make_dir_confirm();
void _rename_operation_confirm();
+ void _duplicate_operation_confirm();
void _move_operation_confirm(const String &p_to_path);
void _file_option(int p_option);
diff --git a/editor/icons/icon_editor_handle_add.svg b/editor/icons/icon_editor_handle_add.svg
new file mode 100644
index 0000000000..be61cd53f9
--- /dev/null
+++ b/editor/icons/icon_editor_handle_add.svg
@@ -0,0 +1,5 @@
+<svg width="10" height="10" version="1.1" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
+ <circle cx="5" cy="5" r="5" fill-opacity=".29412"/>
+ <circle cx="5" cy="5" r="4" fill="#474747"/>
+ <path d="m4 2v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/>
+</svg>
diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp
index 3c73411dee..c4315f1b83 100644
--- a/editor/import/editor_import_collada.cpp
+++ b/editor/import/editor_import_collada.cpp
@@ -1913,8 +1913,6 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones
/*************************************** SCENE ***********************************/
/*********************************************************************************/
-#define DEBUG_ANIMATION
-
uint32_t EditorSceneImporterCollada::get_import_flags() const {
return IMPORT_SCENE | IMPORT_ANIMATION;
@@ -1981,7 +1979,7 @@ Node *EditorSceneImporterCollada::import_scene(const String &p_path, uint32_t p_
return state.scene;
}
-Ref<Animation> EditorSceneImporterCollada::import_animation(const String &p_path, uint32_t p_flags) {
+Ref<Animation> EditorSceneImporterCollada::import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps) {
ColladaImport state;
diff --git a/editor/import/editor_import_collada.h b/editor/import/editor_import_collada.h
index 865a72739f..904080c19b 100644
--- a/editor/import/editor_import_collada.h
+++ b/editor/import/editor_import_collada.h
@@ -40,7 +40,7 @@ public:
virtual uint32_t get_import_flags() const;
virtual void get_extensions(List<String> *r_extensions) const;
virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps = NULL, Error *r_err = NULL);
- virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags);
+ virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps);
EditorSceneImporterCollada();
};
diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp
index 397bb6ad68..00eb69a568 100644
--- a/editor/import/editor_scene_importer_gltf.cpp
+++ b/editor/import/editor_scene_importer_gltf.cpp
@@ -29,7 +29,7 @@ Error EditorSceneImporterGLTF::_parse_json(const String &p_path, GLTFState &stat
Vector<uint8_t> array;
array.resize(f->get_len());
- f->get_buffer(array.ptr(), array.size());
+ f->get_buffer(array.ptrw(), array.size());
String text;
text.parse_utf8((const char *)array.ptr(), array.size());
@@ -65,7 +65,7 @@ Error EditorSceneImporterGLTF::_parse_glb(const String &p_path, GLTFState &state
ERR_FAIL_COND_V(chunk_type != 0x4E4F534A, ERR_PARSE_ERROR); //JSON
Vector<uint8_t> json_data;
json_data.resize(chunk_length);
- uint32_t len = f->get_buffer(json_data.ptr(), chunk_length);
+ uint32_t len = f->get_buffer(json_data.ptrw(), chunk_length);
ERR_FAIL_COND_V(len != chunk_length, ERR_FILE_CORRUPT);
String text;
@@ -94,7 +94,7 @@ Error EditorSceneImporterGLTF::_parse_glb(const String &p_path, GLTFState &state
ERR_FAIL_COND_V(chunk_type != 0x004E4942, ERR_PARSE_ERROR); //BIN
state.glb_data.resize(chunk_length);
- len = f->get_buffer(state.glb_data.ptr(), chunk_length);
+ len = f->get_buffer(state.glb_data.ptrw(), chunk_length);
ERR_FAIL_COND_V(len != chunk_length, ERR_FILE_CORRUPT);
return OK;
@@ -467,9 +467,10 @@ Error EditorSceneImporterGLTF::_decode_buffer_view(GLTFState &state, int p_buffe
uint32_t offset = bv.byte_offset + byte_offset;
Vector<uint8_t> buffer = state.buffers[bv.buffer]; //copy on write, so no performance hit
+ const uint8_t *bufptr = buffer.ptr();
//use to debug
- print_line("type " + _get_type_name(type) + " component type: " + _get_component_type_name(component_type) + " stride: " + itos(stride) + " amount " + itos(count));
+ //print_line("type " + _get_type_name(type) + " component type: " + _get_component_type_name(component_type) + " stride: " + itos(stride) + " amount " + itos(count));
print_line("accessor offset" + itos(byte_offset) + " view offset: " + itos(bv.byte_offset) + " total buffer len: " + itos(buffer.size()) + " view len " + itos(bv.byte_length));
int buffer_end = (stride * (count - 1)) + element_size;
@@ -481,7 +482,7 @@ Error EditorSceneImporterGLTF::_decode_buffer_view(GLTFState &state, int p_buffe
for (int i = 0; i < count; i++) {
- const uint8_t *src = &buffer[offset + i * stride];
+ const uint8_t *src = &bufptr[offset + i * stride];
for (int j = 0; j < component_count; j++) {
@@ -605,7 +606,7 @@ Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, int p
Vector<double> dst_buffer;
dst_buffer.resize(component_count * a.count);
- double *dst = dst_buffer.ptr();
+ double *dst = dst_buffer.ptrw();
if (a.buffer_view >= 0) {
@@ -628,13 +629,13 @@ Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, int p
indices.resize(a.sparse_count);
int indices_component_size = _get_component_type_size(a.sparse_indices_component_type);
- Error err = _decode_buffer_view(state, a.sparse_indices_buffer_view, indices.ptr(), 0, 0, indices_component_size, a.sparse_count, TYPE_SCALAR, 1, a.sparse_indices_component_type, indices_component_size, false, a.sparse_indices_byte_offset, false);
+ Error err = _decode_buffer_view(state, a.sparse_indices_buffer_view, indices.ptrw(), 0, 0, indices_component_size, a.sparse_count, TYPE_SCALAR, 1, a.sparse_indices_component_type, indices_component_size, false, a.sparse_indices_byte_offset, false);
if (err != OK)
return Vector<double>();
Vector<double> data;
data.resize(component_count * a.sparse_count);
- err = _decode_buffer_view(state, a.sparse_values_buffer_view, data.ptr(), skip_every, skip_bytes, element_size, a.sparse_count, a.type, component_count, a.component_type, component_size, a.normalized, a.sparse_values_byte_offset, p_for_vertex);
+ err = _decode_buffer_view(state, a.sparse_values_buffer_view, data.ptrw(), skip_every, skip_bytes, element_size, a.sparse_count, a.type, component_count, a.component_type, component_size, a.normalized, a.sparse_values_byte_offset, p_for_vertex);
if (err != OK)
return Vector<double>();
@@ -813,6 +814,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) {
Array meshes = state.json["meshes"];
for (int i = 0; i < meshes.size(); i++) {
+ print_line("on mesh: " + itos(i));
Dictionary d = meshes[i];
GLTFMesh mesh;
@@ -1595,8 +1597,11 @@ void EditorSceneImporterGLTF::_generate_node(GLTFState &state, int p_node, Node
if (n->mesh >= 0) {
ERR_FAIL_INDEX(n->mesh, state.meshes.size());
MeshInstance *mi = memnew(MeshInstance);
- const GLTFMesh &mesh = state.meshes[n->mesh];
+ GLTFMesh &mesh = state.meshes[n->mesh];
mi->set_mesh(mesh.mesh);
+ if (mesh.mesh->get_name() == "") {
+ mesh.mesh->set_name(n->name);
+ }
for (int i = 0; i < mesh.blend_weights.size(); i++) {
mi->set("blend_shapes/" + mesh.mesh->get_blend_shape_name(i), mesh.blend_weights[i]);
}
@@ -2104,7 +2109,7 @@ Node *EditorSceneImporterGLTF::import_scene(const String &p_path, uint32_t p_fla
return scene;
}
-Ref<Animation> EditorSceneImporterGLTF::import_animation(const String &p_path, uint32_t p_flags) {
+Ref<Animation> EditorSceneImporterGLTF::import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps) {
return Ref<Animation>();
}
diff --git a/editor/import/editor_scene_importer_gltf.h b/editor/import/editor_scene_importer_gltf.h
index d9479fae6f..91c584a05a 100644
--- a/editor/import/editor_scene_importer_gltf.h
+++ b/editor/import/editor_scene_importer_gltf.h
@@ -296,7 +296,7 @@ public:
virtual uint32_t get_import_flags() const;
virtual void get_extensions(List<String> *r_extensions) const;
virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps = NULL, Error *r_err = NULL);
- virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags);
+ virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps);
EditorSceneImporterGLTF();
};
diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp
index bd24aac99b..0297a6c24e 100644
--- a/editor/import/resource_importer_obj.cpp
+++ b/editor/import/resource_importer_obj.cpp
@@ -58,6 +58,7 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati
current_name = l.replace("newmtl", "").strip_edges();
current.instance();
+ current->set_name(current_name);
material_map[current_name] = current;
} else if (l.begins_with("Ka ")) {
//uv
@@ -425,7 +426,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in
return scene;
}
-Ref<Animation> EditorOBJImporter::import_animation(const String &p_path, uint32_t p_flags) {
+Ref<Animation> EditorOBJImporter::import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps) {
return Ref<Animation>();
}
diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h
index 7eeceeabbe..e66ea47b69 100644
--- a/editor/import/resource_importer_obj.h
+++ b/editor/import/resource_importer_obj.h
@@ -40,7 +40,7 @@ public:
virtual uint32_t get_import_flags() const;
virtual void get_extensions(List<String> *r_extensions) const;
virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err = NULL);
- virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags);
+ virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps);
EditorOBJImporter();
};
diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp
index 63d4039295..08d2897250 100644
--- a/editor/import/resource_importer_scene.cpp
+++ b/editor/import/resource_importer_scene.cpp
@@ -47,6 +47,85 @@
#include "scene/resources/ray_shape.h"
#include "scene/resources/sphere_shape.h"
+uint32_t EditorSceneImporter::get_import_flags() const {
+
+ if (get_script_instance()) {
+ return get_script_instance()->call("_get_import_flags");
+ }
+
+ ERR_FAIL_V(0);
+}
+void EditorSceneImporter::get_extensions(List<String> *r_extensions) const {
+
+ if (get_script_instance()) {
+ Array arr = get_script_instance()->call("_get_extensions");
+ for (int i = 0; i < arr.size(); i++) {
+ r_extensions->push_back(arr[i]);
+ }
+ return;
+ }
+
+ ERR_FAIL();
+}
+Node *EditorSceneImporter::import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err) {
+
+ if (get_script_instance()) {
+ return get_script_instance()->call("_import_scene", p_path, p_flags, p_bake_fps);
+ }
+
+ ERR_FAIL_V(NULL);
+}
+
+Ref<Animation> EditorSceneImporter::import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps) {
+
+ if (get_script_instance()) {
+ return get_script_instance()->call("_import_animation", p_path, p_flags);
+ }
+
+ ERR_FAIL_V(NULL);
+}
+
+//for documenters, these functions are useful when an importer calls an external conversion helper (like, fbx2gltf),
+//and you want to load the resulting file
+
+Node *EditorSceneImporter::import_scene_from_other_importer(const String &p_path, uint32_t p_flags, int p_bake_fps) {
+
+ return ResourceImporterScene::get_singleton()->import_scene_from_other_importer(this, p_path, p_flags, p_bake_fps);
+}
+
+Ref<Animation> EditorSceneImporter::import_animation_from_other_importer(const String &p_path, uint32_t p_flags, int p_bake_fps) {
+
+ return ResourceImporterScene::get_singleton()->import_animation_from_other_importer(this, p_path, p_flags, p_bake_fps);
+}
+
+void EditorSceneImporter::_bind_methods() {
+
+ ClassDB::bind_method(D_METHOD("import_scene_from_other_importer", "path", "flags", "bake_fps"), &EditorSceneImporter::import_scene_from_other_importer);
+ ClassDB::bind_method(D_METHOD("import_animation_from_other_importer", "path", "flags", "bake_fps"), &EditorSceneImporter::import_animation_from_other_importer);
+
+ BIND_VMETHOD(MethodInfo(Variant::INT, "_get_import_flags"));
+ BIND_VMETHOD(MethodInfo(Variant::ARRAY, "_get_extensions"));
+
+ MethodInfo mi = MethodInfo(Variant::OBJECT, "_import_scene", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::INT, "flags"), PropertyInfo(Variant::INT, "bake_fps"));
+ mi.return_val.class_name = "Node";
+ BIND_VMETHOD(mi);
+ mi = MethodInfo(Variant::OBJECT, "_import_animation", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::INT, "flags"), PropertyInfo(Variant::INT, "bake_fps"));
+ mi.return_val.class_name = "Animation";
+ BIND_VMETHOD(mi);
+
+ BIND_CONSTANT(IMPORT_SCENE);
+ BIND_CONSTANT(IMPORT_ANIMATION);
+ BIND_CONSTANT(IMPORT_ANIMATION_DETECT_LOOP);
+ BIND_CONSTANT(IMPORT_ANIMATION_OPTIMIZE);
+ BIND_CONSTANT(IMPORT_ANIMATION_FORCE_ALL_TRACKS_IN_ALL_CLIPS);
+ BIND_CONSTANT(IMPORT_ANIMATION_KEEP_VALUE_TRACKS);
+ BIND_CONSTANT(IMPORT_GENERATE_TANGENT_ARRAYS);
+ BIND_CONSTANT(IMPORT_FAIL_ON_MISSING_DEPENDENCIES);
+ BIND_CONSTANT(IMPORT_MATERIALS_IN_INSTANCES);
+ BIND_CONSTANT(IMPORT_USE_COMPRESSION);
+}
+
+/////////////////////////////////
void EditorScenePostImport::_bind_methods() {
BIND_VMETHOD(MethodInfo("post_import", PropertyInfo(Variant::OBJECT, "scene")));
@@ -95,6 +174,9 @@ bool ResourceImporterScene::get_option_visibility(const String &p_option, const
if (p_option != "animation/import" && !bool(p_options["animation/import"]))
return false;
+ if (p_option == "animation/keep_custom_tracks" && int(p_options["animation/storage"]) == 0)
+ return false;
+
if (p_option.begins_with("animation/optimizer/") && p_option != "animation/optimizer/enabled" && !bool(p_options["animation/optimizer/enabled"]))
return false;
@@ -110,6 +192,10 @@ bool ResourceImporterScene::get_option_visibility(const String &p_option, const
return false;
}
+ if (p_option == "meshes/lightmap_texel_size" && int(p_options["meshes/light_baking"]) < 2) {
+ return false;
+ }
+
return true;
}
@@ -156,12 +242,12 @@ static String _fixstr(const String &p_what, const String &p_str) {
return p_what;
}
-Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<ArrayMesh>, Ref<Shape> > &collision_map) {
+Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<ArrayMesh>, Ref<Shape> > &collision_map, LightBakeMode p_light_bake_mode) {
// children first..
for (int i = 0; i < p_node->get_child_count(); i++) {
- Node *r = _fix_node(p_node->get_child(i), p_root, collision_map);
+ Node *r = _fix_node(p_node->get_child(i), p_root, collision_map, p_light_bake_mode);
if (!r) {
print_line("was erased..");
i--; //was erased
@@ -205,6 +291,11 @@ Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<Array
}
}
}
+
+ if (p_light_bake_mode != LIGHT_BAKE_DISABLED) {
+
+ mi->set_flag(GeometryInstance::FLAG_USE_BAKED_LIGHT, true);
+ }
}
if (Object::cast_to<AnimationPlayer>(p_node)) {
@@ -865,7 +956,37 @@ static String _make_extname(const String &p_str) {
return ext_name;
}
-void ResourceImporterScene::_make_external_resources(Node *p_node, const String &p_base_path, bool p_make_animations, bool p_make_materials, bool p_keep_materials, bool p_make_meshes, Map<Ref<Animation>, Ref<Animation> > &p_animations, Map<Ref<Material>, Ref<Material> > &p_materials, Map<Ref<ArrayMesh>, Ref<ArrayMesh> > &p_meshes) {
+void ResourceImporterScene::_find_meshes(Node *p_node, Map<Ref<ArrayMesh>, Transform> &meshes) {
+
+ List<PropertyInfo> pi;
+ p_node->get_property_list(&pi);
+
+ MeshInstance *mi = Object::cast_to<MeshInstance>(p_node);
+
+ if (mi) {
+
+ Ref<ArrayMesh> mesh = mi->get_mesh();
+
+ if (mesh.is_valid() && !meshes.has(mesh)) {
+ Spatial *s = mi;
+ while (s->get_parent_spatial()) {
+ s = s->get_parent_spatial();
+ }
+
+ if (s == mi) {
+ meshes[mesh] = s->get_transform();
+ } else {
+ meshes[mesh] = s->get_transform() * mi->get_relative_transform(s);
+ }
+ }
+ }
+ for (int i = 0; i < p_node->get_child_count(); i++) {
+
+ _find_meshes(p_node->get_child(i), meshes);
+ }
+}
+
+void ResourceImporterScene::_make_external_resources(Node *p_node, const String &p_base_path, bool p_make_animations, bool p_keep_animations, bool p_make_materials, bool p_keep_materials, bool p_make_meshes, Map<Ref<Animation>, Ref<Animation> > &p_animations, Map<Ref<Material>, Ref<Material> > &p_materials, Map<Ref<ArrayMesh>, Ref<ArrayMesh> > &p_meshes) {
List<PropertyInfo> pi;
@@ -884,7 +1005,26 @@ void ResourceImporterScene::_make_external_resources(Node *p_node, const String
if (!p_animations.has(anim)) {
+ //mark what comes from the file first, this helps eventually keep user data
+ for (int i = 0; i < anim->get_track_count(); i++) {
+ anim->track_set_imported(i, true);
+ }
+
String ext_name = p_base_path.plus_file(_make_extname(E->get()) + ".anim");
+
+ if (FileAccess::exists(ext_name) && p_keep_animations) {
+ //try to keep custom animation tracks
+ Ref<Animation> old_anim = ResourceLoader::load(ext_name, "Animation", true);
+ if (old_anim.is_valid()) {
+ //meergeee
+ for (int i = 0; i < old_anim->get_track_count(); i++) {
+ if (!old_anim->track_is_imported(i)) {
+ old_anim->copy_track(i, anim);
+ }
+ }
+ }
+ }
+
ResourceSaver::save(ext_name, anim, ResourceSaver::FLAG_CHANGE_PATH);
p_animations[anim] = anim;
}
@@ -947,7 +1087,10 @@ void ResourceImporterScene::_make_external_resources(Node *p_node, const String
for (int i = 0; i < mesh->get_surface_count(); i++) {
mat = mesh->surface_get_material(i);
- if (!mat.is_valid() || mat->get_name() == "")
+
+ if (!mat.is_valid())
+ continue;
+ if (mat->get_name() == "")
continue;
if (!p_materials.has(mat)) {
@@ -989,7 +1132,7 @@ void ResourceImporterScene::_make_external_resources(Node *p_node, const String
for (int i = 0; i < p_node->get_child_count(); i++) {
- _make_external_resources(p_node->get_child(i), p_base_path, p_make_animations, p_make_materials, p_keep_materials, p_make_meshes, p_animations, p_materials, p_meshes);
+ _make_external_resources(p_node->get_child(i), p_base_path, p_make_animations, p_keep_animations, p_make_materials, p_keep_materials, p_make_meshes, p_animations, p_materials, p_meshes);
}
}
@@ -1022,11 +1165,14 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/compress"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/ensure_tangents"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "meshes/storage", PROPERTY_HINT_ENUM, "Built-In,Files"), meshes_out ? 1 : 0));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "meshes/light_baking", PROPERTY_HINT_ENUM, "Disabled,Enable,Gen Lightmaps"), 0));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "meshes/lightmap_texel_size", PROPERTY_HINT_RANGE, "0.001,100,0.001"), 0.05));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "external_files/store_in_subdir"), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/import", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "animation/fps", PROPERTY_HINT_RANGE, "1,120,1"), 15));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "animation/filter_script", PROPERTY_HINT_MULTILINE_TEXT), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "animation/storage", PROPERTY_HINT_ENUM, "Built-In,Files"), animations_out ? true : false));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/keep_custom_tracks"), animations_out ? true : false));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/optimizer/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "animation/optimizer/max_linear_error"), 0.05));
r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "animation/optimizer/max_angular_error"), 0.01));
@@ -1053,6 +1199,68 @@ void ResourceImporterScene::_replace_owner(Node *p_node, Node *p_scene, Node *p_
}
}
+Node *ResourceImporterScene::import_scene_from_other_importer(EditorSceneImporter *p_exception, const String &p_path, uint32_t p_flags, int p_bake_fps) {
+
+ Ref<EditorSceneImporter> importer;
+ String ext = p_path.get_extension().to_lower();
+
+ for (Set<Ref<EditorSceneImporter> >::Element *E = importers.front(); E; E = E->next()) {
+
+ if (E->get().ptr() == p_exception)
+ continue;
+ List<String> extensions;
+ E->get()->get_extensions(&extensions);
+
+ for (List<String>::Element *F = extensions.front(); F; F = F->next()) {
+
+ if (F->get().to_lower() == ext) {
+
+ importer = E->get();
+ break;
+ }
+ }
+
+ if (importer.is_valid())
+ break;
+ }
+
+ ERR_FAIL_COND_V(!importer.is_valid(), NULL);
+
+ List<String> missing;
+ Error err;
+ return importer->import_scene(p_path, p_flags, p_bake_fps, &missing, &err);
+}
+
+Ref<Animation> ResourceImporterScene::import_animation_from_other_importer(EditorSceneImporter *p_exception, const String &p_path, uint32_t p_flags, int p_bake_fps) {
+
+ Ref<EditorSceneImporter> importer;
+ String ext = p_path.get_extension().to_lower();
+
+ for (Set<Ref<EditorSceneImporter> >::Element *E = importers.front(); E; E = E->next()) {
+
+ if (E->get().ptr() == p_exception)
+ continue;
+ List<String> extensions;
+ E->get()->get_extensions(&extensions);
+
+ for (List<String>::Element *F = extensions.front(); F; F = F->next()) {
+
+ if (F->get().to_lower() == ext) {
+
+ importer = E->get();
+ break;
+ }
+ }
+
+ if (importer.is_valid())
+ break;
+ }
+
+ ERR_FAIL_COND_V(!importer.is_valid(), NULL);
+
+ return importer->import_animation(p_path, p_flags, p_bake_fps);
+}
+
Error ResourceImporterScene::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files) {
String src_path = p_source_file;
@@ -1131,10 +1339,11 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p
float anim_optimizer_linerr = p_options["animation/optimizer/max_linear_error"];
float anim_optimizer_angerr = p_options["animation/optimizer/max_angular_error"];
float anim_optimizer_maxang = p_options["animation/optimizer/max_angle"];
+ int light_bake_mode = p_options["meshes/light_baking"];
Map<Ref<ArrayMesh>, Ref<Shape> > collision_map;
- scene = _fix_node(scene, scene, collision_map);
+ scene = _fix_node(scene, scene, collision_map, LightBakeMode(light_bake_mode));
if (use_optimizer) {
_optimize_animations(scene, anim_optimizer_linerr, anim_optimizer_angerr, anim_optimizer_maxang);
@@ -1166,6 +1375,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p
}
bool external_animations = int(p_options["animation/storage"]) == 1;
+ bool keep_custom_tracks = p_options["animation/keep_custom_tracks"];
bool external_materials = p_options["materials/storage"];
bool external_meshes = p_options["meshes/storage"];
bool external_scenes = int(p_options["nodes/storage"]) == 1;
@@ -1185,6 +1395,37 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p
}
}
+ if (light_bake_mode == 2 /* || generate LOD */) {
+
+ Map<Ref<ArrayMesh>, Transform> meshes;
+ _find_meshes(scene, meshes);
+
+ if (light_bake_mode == 2) {
+
+ float texel_size = p_options["meshes/lightmap_texel_size"];
+ texel_size = MAX(0.001, texel_size);
+
+ EditorProgress progress("gen_lightmaps", TTR("Generating Lightmaps"), meshes.size());
+ int step = 0;
+ for (Map<Ref<ArrayMesh>, Transform>::Element *E = meshes.front(); E; E = E->next()) {
+
+ Ref<ArrayMesh> mesh = E->key();
+ String name = mesh->get_name();
+ if (name == "") { //should not happen but..
+ name = "Mesh " + itos(step);
+ }
+
+ progress.step(TTR("Generating for Mesh: ") + name + " (" + itos(step) + "/" + itos(meshes.size()) + ")", step);
+
+ Error err = mesh->lightmap_unwrap(E->get(), texel_size);
+ if (err != OK) {
+ EditorNode::add_io_error("Mesh '" + name + "' failed lightmap generation. Please fix geometry.");
+ }
+ step++;
+ }
+ }
+ }
+
if (external_animations || external_materials || external_meshes) {
Map<Ref<Animation>, Ref<Animation> > anim_map;
Map<Ref<Material>, Ref<Material> > mat_map;
@@ -1192,7 +1433,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p
bool keep_materials = bool(p_options["materials/keep_on_reimport"]);
- _make_external_resources(scene, base_path, external_animations, external_materials, keep_materials, external_meshes, anim_map, mat_map, mesh_map);
+ _make_external_resources(scene, base_path, external_animations, keep_custom_tracks, external_materials, keep_materials, external_meshes, anim_map, mat_map, mesh_map);
}
progress.step(TTR("Running Custom Script.."), 2);
diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h
index 5bf3145148..933585a48c 100644
--- a/editor/import/resource_importer_scene.h
+++ b/editor/import/resource_importer_scene.h
@@ -41,6 +41,12 @@ class EditorSceneImporter : public Reference {
GDCLASS(EditorSceneImporter, Reference);
+protected:
+ static void _bind_methods();
+
+ Node *import_scene_from_other_importer(const String &p_path, uint32_t p_flags, int p_bake_fps);
+ Ref<Animation> import_animation_from_other_importer(const String &p_path, uint32_t p_flags, int p_bake_fps);
+
public:
enum ImportFlags {
IMPORT_SCENE = 1,
@@ -56,10 +62,10 @@ public:
};
- virtual uint32_t get_import_flags() const = 0;
- virtual void get_extensions(List<String> *r_extensions) const = 0;
- virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err = NULL) = 0;
- virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags) = 0;
+ virtual uint32_t get_import_flags() const;
+ virtual void get_extensions(List<String> *r_extensions) const;
+ virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err = NULL);
+ virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps);
EditorSceneImporter() {}
};
@@ -100,6 +106,12 @@ class ResourceImporterScene : public ResourceImporter {
PRESET_MAX
};
+ enum LightBakeMode {
+ LIGHT_BAKE_DISABLED,
+ LIGHT_BAKE_ENABLE,
+ //LIGHT_BAKE_LIGHTMAPS
+ };
+
void _replace_owner(Node *p_node, Node *p_scene, Node *p_new_owner);
public:
@@ -108,6 +120,7 @@ public:
const Set<Ref<EditorSceneImporter> > &get_importers() const { return importers; }
void add_importer(Ref<EditorSceneImporter> p_importer) { importers.insert(p_importer); }
+ void remove_importer(Ref<EditorSceneImporter> p_importer) { importers.erase(p_importer); }
virtual String get_importer_name() const;
virtual String get_visible_name() const;
@@ -122,9 +135,11 @@ public:
virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const;
virtual int get_import_order() const { return 100; } //after everything
- void _make_external_resources(Node *p_node, const String &p_base_path, bool p_make_animations, bool p_make_materials, bool p_keep_materials, bool p_make_meshes, Map<Ref<Animation>, Ref<Animation> > &p_animations, Map<Ref<Material>, Ref<Material> > &p_materials, Map<Ref<ArrayMesh>, Ref<ArrayMesh> > &p_meshes);
+ void _find_meshes(Node *p_node, Map<Ref<ArrayMesh>, Transform> &meshes);
- Node *_fix_node(Node *p_node, Node *p_root, Map<Ref<ArrayMesh>, Ref<Shape> > &collision_map);
+ void _make_external_resources(Node *p_node, const String &p_base_path, bool p_make_animations, bool p_keep_animations, bool p_make_materials, bool p_keep_materials, bool p_make_meshes, Map<Ref<Animation>, Ref<Animation> > &p_animations, Map<Ref<Material>, Ref<Material> > &p_materials, Map<Ref<ArrayMesh>, Ref<ArrayMesh> > &p_meshes);
+
+ Node *_fix_node(Node *p_node, Node *p_root, Map<Ref<ArrayMesh>, Ref<Shape> > &collision_map, LightBakeMode p_light_bake_mode);
void _create_clips(Node *scene, const Array &p_clips, bool p_bake_all);
void _filter_anim_tracks(Ref<Animation> anim, Set<String> &keep);
@@ -133,6 +148,9 @@ public:
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = NULL);
+ Node *import_scene_from_other_importer(EditorSceneImporter *p_exception, const String &p_path, uint32_t p_flags, int p_bake_fps);
+ Ref<Animation> import_animation_from_other_importer(EditorSceneImporter *p_exception, const String &p_path, uint32_t p_flags, int p_bake_fps);
+
ResourceImporterScene();
};
diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp
index 84d55b4d14..8a16f125b7 100644
--- a/editor/import_dock.cpp
+++ b/editor/import_dock.cpp
@@ -403,6 +403,7 @@ void ImportDock::initialize_import_options() const {
ImportDock::ImportDock() {
+ set_name("Import");
imported = memnew(Label);
imported->add_style_override("normal", EditorNode::get_singleton()->get_gui_base()->get_stylebox("normal", "LineEdit"));
add_child(imported);
diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp
index 20392a67a7..366230be51 100644
--- a/editor/node_dock.cpp
+++ b/editor/node_dock.cpp
@@ -93,9 +93,10 @@ void NodeDock::set_node(Node *p_node) {
}
NodeDock::NodeDock() {
+
singleton = this;
- set_name(TTR("Node"));
+ set_name("Node");
mode_hb = memnew(HBoxContainer);
add_child(mode_hb);
mode_hb->hide();
diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp
index 736e176ab8..ff72a5a25e 100644
--- a/editor/plugins/abstract_polygon_2d_editor.cpp
+++ b/editor/plugins/abstract_polygon_2d_editor.cpp
@@ -32,18 +32,21 @@
#include "canvas_item_editor_plugin.h"
#include "core/os/keyboard.h"
-AbstractPolygon2DEditor::Vertex::Vertex()
- : polygon(-1), vertex(-1) {
+AbstractPolygon2DEditor::Vertex::Vertex() :
+ polygon(-1),
+ vertex(-1) {
// invalid vertex
}
-AbstractPolygon2DEditor::Vertex::Vertex(int p_vertex)
- : polygon(-1), vertex(p_vertex) {
+AbstractPolygon2DEditor::Vertex::Vertex(int p_vertex) :
+ polygon(-1),
+ vertex(p_vertex) {
// vertex p_vertex of current wip polygon
}
-AbstractPolygon2DEditor::Vertex::Vertex(int p_polygon, int p_vertex)
- : polygon(p_polygon), vertex(p_vertex) {
+AbstractPolygon2DEditor::Vertex::Vertex(int p_polygon, int p_vertex) :
+ polygon(p_polygon),
+ vertex(p_vertex) {
// vertex p_vertex of polygon p_polygon
}
@@ -66,12 +69,14 @@ AbstractPolygon2DEditor::PosVertex::PosVertex() {
// invalid vertex
}
-AbstractPolygon2DEditor::PosVertex::PosVertex(const Vertex &p_vertex, const Vector2 &p_pos)
- : Vertex(p_vertex.polygon, p_vertex.vertex), pos(p_pos) {
+AbstractPolygon2DEditor::PosVertex::PosVertex(const Vertex &p_vertex, const Vector2 &p_pos) :
+ Vertex(p_vertex.polygon, p_vertex.vertex),
+ pos(p_pos) {
}
-AbstractPolygon2DEditor::PosVertex::PosVertex(int p_polygon, int p_vertex, const Vector2 &p_pos)
- : Vertex(p_polygon, p_vertex), pos(p_pos) {
+AbstractPolygon2DEditor::PosVertex::PosVertex(int p_polygon, int p_vertex, const Vector2 &p_pos) :
+ Vertex(p_polygon, p_vertex),
+ pos(p_pos) {
}
bool AbstractPolygon2DEditor::_is_empty() const {
@@ -167,7 +172,7 @@ void AbstractPolygon2DEditor::_menu_option(int p_option) {
} break;
case MODE_EDIT: {
- wip_active = false;
+ _wip_close();
mode = MODE_EDIT;
button_create->set_pressed(false);
button_edit->set_pressed(true);
@@ -175,7 +180,7 @@ void AbstractPolygon2DEditor::_menu_option(int p_option) {
} break;
case MODE_DELETE: {
- wip_active = false;
+ _wip_close();
mode = MODE_DELETE;
button_create->set_pressed(false);
button_edit->set_pressed(false);
@@ -224,6 +229,9 @@ void AbstractPolygon2DEditor::_wip_changed() {
}
void AbstractPolygon2DEditor::_wip_close() {
+ if (!wip_active)
+ return;
+
if (_is_line()) {
_set_polygon(0, wip);
@@ -490,15 +498,14 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
return false;
}
-void AbstractPolygon2DEditor::forward_draw_over_canvas(Control *p_canvas) {
+void AbstractPolygon2DEditor::forward_draw_over_viewport(Control *p_overlay) {
if (!_get_node())
return;
Control *vpc = canvas_item_editor->get_viewport_control();
Transform2D xform = canvas_item_editor->get_canvas_transform() * _get_node()->get_global_transform();
- Ref<Texture> default_handle = get_icon("EditorHandle", "EditorIcons");
- Ref<Texture> selected_handle = get_icon("EditorHandleSelected", "EditorIcons");
+ const Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons");
const Vertex active_point = get_active_point();
const int n_polygons = _get_polygon_count();
@@ -572,8 +579,8 @@ void AbstractPolygon2DEditor::forward_draw_over_canvas(Control *p_canvas) {
const Vector2 p = (vertex == edited_point) ? edited_point.pos : (points[i] + offset);
const Vector2 point = xform.xform(p);
- Ref<Texture> handle = vertex == active_point ? selected_handle : default_handle;
- vpc->draw_texture(handle, point - handle->get_size() * 0.5);
+ const Color modulate = vertex == active_point ? Color(0.5, 1, 2) : Color(1, 1, 1);
+ vpc->draw_texture(handle, point - handle->get_size() * 0.5, modulate);
}
}
diff --git a/editor/plugins/abstract_polygon_2d_editor.h b/editor/plugins/abstract_polygon_2d_editor.h
index 915fe0803e..545eff6ef4 100644
--- a/editor/plugins/abstract_polygon_2d_editor.h
+++ b/editor/plugins/abstract_polygon_2d_editor.h
@@ -136,7 +136,7 @@ protected:
public:
bool forward_gui_input(const Ref<InputEvent> &p_event);
- void forward_draw_over_canvas(Control *p_canvas);
+ void forward_draw_over_viewport(Control *p_overlay);
void edit(Node *p_polygon);
AbstractPolygon2DEditor(EditorNode *p_editor, bool p_wip_destructive = true);
@@ -152,7 +152,7 @@ class AbstractPolygon2DEditorPlugin : public EditorPlugin {
public:
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return polygon_editor->forward_gui_input(p_event); }
- virtual void forward_draw_over_canvas(Control *p_canvas) { polygon_editor->forward_draw_over_canvas(p_canvas); }
+ virtual void forward_draw_over_viewport(Control *p_overlay) { polygon_editor->forward_draw_over_viewport(p_overlay); }
bool has_main_screen() const { return false; }
virtual String get_name() const { return klass; }
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index 2b9c625aa4..019e32f847 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -36,6 +36,12 @@
#include "os/keyboard.h"
#include "project_settings.h"
+// For onion skinning
+#include "editor/plugins/canvas_item_editor_plugin.h"
+#include "editor/plugins/spatial_editor_plugin.h"
+#include "scene/main/viewport.h"
+#include "servers/visual_server.h"
+
void AnimationPlayerEditor::_node_removed(Node *p_node) {
if (player && player == p_node) {
@@ -98,6 +104,8 @@ void AnimationPlayerEditor::_notification(int p_what) {
tool_anim->get_popup()->connect("id_pressed", this, "_animation_tool_menu");
+ onion_skinning->get_popup()->connect("id_pressed", this, "_onion_skinning_menu");
+
blend_editor.next->connect("item_selected", this, "_blend_editor_next_changed");
get_tree()->connect("node_removed", this, "_node_removed");
@@ -132,6 +140,7 @@ void AnimationPlayerEditor::_notification(int p_what) {
resource_edit_anim->set_icon(get_icon("EditResource", "EditorIcons"));
pin->set_icon(get_icon("Pin", "EditorIcons"));
tool_anim->set_icon(get_icon("Tools", "EditorIcons"));
+ onion_skinning->set_icon(get_icon("Onion", "EditorIcons"));
} break;
}
@@ -809,6 +818,7 @@ void AnimationPlayerEditor::_update_player() {
resource_edit_anim->set_disabled(animlist.size() == 0);
save_anim->set_disabled(animlist.size() == 0);
tool_anim->set_disabled(player == NULL);
+ onion_skinning->set_disabled(player == NULL);
int active_idx = -1;
for (List<StringName>::Element *E = animlist.front(); E; E = E->next()) {
@@ -855,6 +865,9 @@ void AnimationPlayerEditor::_update_player() {
void AnimationPlayerEditor::edit(AnimationPlayer *p_player) {
+ if (onion.enabled)
+ _start_onion_skinning();
+
if (player && pin->is_pressed())
return; //ignore, pinned
player = p_player;
@@ -869,6 +882,55 @@ void AnimationPlayerEditor::edit(AnimationPlayer *p_player) {
}
}
+void AnimationPlayerEditor::forward_force_draw_over_viewport(Control *p_overlay) {
+
+ if (!onion.can_overlay)
+ return;
+
+ // Can happen on viewport resize, at least
+ if (!_are_onion_layers_valid())
+ return;
+
+ RID ci = p_overlay->get_canvas_item();
+ Rect2 src_rect = p_overlay->get_global_rect();
+ // Re-flip since captures are already flipped
+ src_rect.position.y = onion.capture_size.y - (src_rect.position.y + src_rect.size.y);
+ src_rect.size.y *= -1;
+
+ Rect2 dst_rect = Rect2(Point2(), p_overlay->get_size());
+
+ float alpha_step = 1.0 / (onion.steps + 1);
+
+ int cidx = 0;
+ if (onion.past) {
+ float alpha = 0;
+ do {
+ alpha += alpha_step;
+
+ if (onion.captures_valid[cidx]) {
+ VS::get_singleton()->canvas_item_add_texture_rect_region(
+ ci, dst_rect, VS::get_singleton()->viewport_get_texture(onion.captures[cidx]), src_rect, Color(1, 1, 1, alpha));
+ }
+
+ cidx++;
+ } while (cidx < onion.steps);
+ }
+ if (onion.future) {
+ float alpha = 1;
+ int base_cidx = cidx;
+ do {
+ alpha -= alpha_step;
+
+ if (onion.captures_valid[cidx]) {
+ VS::get_singleton()->canvas_item_add_texture_rect_region(
+ ci, dst_rect, VS::get_singleton()->viewport_get_texture(onion.captures[cidx]), src_rect, Color(1, 1, 1, alpha));
+ }
+
+ cidx++;
+ } while (cidx < base_cidx + onion.steps); // In case there's the present capture at the end, skip it
+ }
+}
+
void AnimationPlayerEditor::_animation_duplicate() {
if (!animation->get_item_count())
@@ -1100,6 +1162,70 @@ void AnimationPlayerEditor::_animation_save_menu(int p_option) {
}
}
+void AnimationPlayerEditor::_onion_skinning_menu(int p_option) {
+
+ PopupMenu *menu = onion_skinning->get_popup();
+ int idx = menu->get_item_index(p_option);
+
+ switch (p_option) {
+
+ case ONION_SKINNING_ENABLE: {
+
+ onion.enabled = !onion.enabled;
+ menu->set_item_checked(idx, onion.enabled);
+
+ if (onion.enabled)
+ _start_onion_skinning();
+ else
+ _stop_onion_skinning();
+
+ } break;
+
+ case ONION_SKINNING_PAST: {
+
+ // Ensure at least one of past/future is checjed
+ onion.past = onion.future ? !onion.past : true;
+ menu->set_item_checked(idx, onion.past);
+ } break;
+
+ case ONION_SKINNING_FUTURE: {
+
+ // Ensure at least one of past/future is checjed
+ onion.future = onion.past ? !onion.future : true;
+ menu->set_item_checked(idx, onion.future);
+ } break;
+
+ case ONION_SKINNING_1_STEP: // Fall-through
+ case ONION_SKINNING_2_STEPS:
+ case ONION_SKINNING_3_STEPS: {
+
+ onion.steps = (p_option - ONION_SKINNING_1_STEP) + 1;
+ int one_frame_idx = menu->get_item_index(ONION_SKINNING_1_STEP);
+ for (int i = 0; i <= ONION_SKINNING_LAST_STEPS_OPTION - ONION_SKINNING_1_STEP; i++) {
+ menu->set_item_checked(one_frame_idx + i, onion.steps == i + 1);
+ }
+ } break;
+
+ case ONION_SKINNING_DIFFERENCES_ONLY: {
+
+ onion.differences_only = !onion.differences_only;
+ menu->set_item_checked(idx, onion.differences_only);
+ } break;
+
+ case ONION_SKINNING_FORCE_WHITE_MODULATE: {
+
+ onion.force_white_modulate = !onion.force_white_modulate;
+ menu->set_item_checked(idx, onion.force_white_modulate);
+ } break;
+
+ case ONION_SKINNING_INCLUDE_GIZMOS: {
+
+ onion.include_gizmos = !onion.include_gizmos;
+ menu->set_item_checked(idx, onion.include_gizmos);
+ } break;
+ }
+}
+
void AnimationPlayerEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) {
Ref<InputEventKey> k = p_ev;
@@ -1126,6 +1252,237 @@ void AnimationPlayerEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) {
}
}
+void AnimationPlayerEditor::_editor_visibility_changed() {
+
+ if (is_visible()) {
+ _start_onion_skinning();
+ }
+}
+
+bool AnimationPlayerEditor::_are_onion_layers_valid() {
+
+ ERR_FAIL_COND_V(!onion.past && !onion.future, false);
+
+ Point2 capture_size = get_tree()->get_root()->get_size();
+ return onion.captures.size() == onion.get_needed_capture_count() && onion.capture_size == capture_size;
+}
+
+void AnimationPlayerEditor::_allocate_onion_layers() {
+
+ _free_onion_layers();
+
+ int captures = onion.get_needed_capture_count();
+ Point2 capture_size = get_tree()->get_root()->get_size();
+
+ onion.captures.resize(captures);
+ onion.captures_valid.resize(captures);
+
+ for (int i = 0; i < captures; i++) {
+ bool is_present = onion.differences_only && i == captures - 1;
+
+ // Each capture is a viewport with a canvas item attached that renders a full-size rect with the contents of the main viewport
+ onion.captures[i] = VS::get_singleton()->viewport_create();
+ VS::get_singleton()->viewport_set_usage(onion.captures[i], VS::VIEWPORT_USAGE_2D);
+ VS::get_singleton()->viewport_set_size(onion.captures[i], capture_size.width, capture_size.height);
+ VS::get_singleton()->viewport_set_update_mode(onion.captures[i], VS::VIEWPORT_UPDATE_ALWAYS);
+ VS::get_singleton()->viewport_set_transparent_background(onion.captures[i], !is_present);
+ VS::get_singleton()->viewport_set_vflip(onion.captures[i], true);
+ VS::get_singleton()->viewport_attach_canvas(onion.captures[i], onion.capture.canvas);
+ }
+
+ // Reset the capture canvas item to the current root viewport texture (defensive)
+ VS::get_singleton()->canvas_item_clear(onion.capture.canvas_item);
+ VS::get_singleton()->canvas_item_add_texture_rect(onion.capture.canvas_item, Rect2(Point2(), capture_size), get_tree()->get_root()->get_texture()->get_rid());
+
+ onion.capture_size = capture_size;
+}
+
+void AnimationPlayerEditor::_free_onion_layers() {
+
+ for (int i = 0; i < onion.captures.size(); i++) {
+ if (onion.captures[i].is_valid()) {
+ VS::get_singleton()->free(onion.captures[i]);
+ }
+ }
+ onion.captures.clear();
+ onion.captures_valid.clear();
+}
+
+void AnimationPlayerEditor::_prepare_onion_layers_1() {
+
+ // This would be called per viewport and we want to act once only
+ int64_t frame = get_tree()->get_frame();
+ if (frame == onion.last_frame)
+ return;
+
+ if (!onion.enabled || !is_processing() || !is_visible() || !get_player()) {
+ _stop_onion_skinning();
+ return;
+ }
+
+ onion.last_frame = frame;
+
+ // Refresh viewports with no onion layers overlaid
+ onion.can_overlay = false;
+ plugin->update_overlays();
+
+ if (player->is_playing())
+ return;
+
+ // And go to next step afterwards
+ call_deferred("_prepare_onion_layers_2");
+}
+
+void AnimationPlayerEditor::_prepare_onion_layers_2() {
+
+ Ref<Animation> anim = player->get_animation(player->get_current_animation());
+ if (!anim.is_valid())
+ return;
+
+ if (!_are_onion_layers_valid())
+ _allocate_onion_layers();
+
+ // Hide superfluous elements that would make the overlay unnecessary cluttered
+ Dictionary canvas_edit_state;
+ Dictionary spatial_edit_state;
+ if (SpatialEditor::get_singleton()->is_visible()) {
+ // 3D
+ spatial_edit_state = SpatialEditor::get_singleton()->get_state();
+ Dictionary new_state = spatial_edit_state.copy();
+ new_state["show_grid"] = false;
+ new_state["show_origin"] = false;
+ Array orig_vp = spatial_edit_state["viewports"];
+ Array vp;
+ vp.resize(4);
+ for (int i = 0; i < vp.size(); i++) {
+ Dictionary d = ((Dictionary)orig_vp[i]).copy();
+ d["use_environment"] = false;
+ d["doppler"] = false;
+ d["gizmos"] = onion.include_gizmos ? d["gizmos"] : Variant(false);
+ d["information"] = false;
+ vp[i] = d;
+ }
+ new_state["viewports"] = vp;
+ // TODO: Save/restore only affected entries
+ SpatialEditor::get_singleton()->set_state(new_state);
+ } else { // CanvasItemEditor
+ // 2D
+ canvas_edit_state = CanvasItemEditor::get_singleton()->get_state();
+ Dictionary new_state = canvas_edit_state.copy();
+ new_state["show_grid"] = false;
+ new_state["show_rulers"] = false;
+ new_state["show_guides"] = false;
+ new_state["show_helpers"] = false;
+ // TODO: Save/restore only affected entries
+ CanvasItemEditor::get_singleton()->set_state(new_state);
+ }
+
+ // Tweak the root viewport to ensure it's rendered before our target
+ RID root_vp = get_tree()->get_root()->get_viewport_rid();
+ Rect2 root_vp_screen_rect = get_tree()->get_root()->get_attach_to_screen_rect();
+ VS::get_singleton()->viewport_attach_to_screen(root_vp, Rect2());
+ VS::get_singleton()->viewport_set_update_mode(root_vp, VS::VIEWPORT_UPDATE_ALWAYS);
+
+ RID present_rid;
+ if (onion.differences_only) {
+ // Capture present scene as it is
+ VS::get_singleton()->canvas_item_set_material(onion.capture.canvas_item, RID());
+ present_rid = onion.captures[onion.captures.size() - 1];
+ VS::get_singleton()->viewport_set_active(present_rid, true);
+ VS::get_singleton()->viewport_set_parent_viewport(root_vp, present_rid);
+ VS::get_singleton()->draw(false);
+ VS::get_singleton()->viewport_set_active(present_rid, false);
+ }
+
+ // Backup current animation state
+ AnimatedValuesBackup values_backup = player->backup_animated_values();
+ float cpos = player->get_current_animation_position();
+
+ // Render every past/future step with the capture shader
+
+ VS::get_singleton()->canvas_item_set_material(onion.capture.canvas_item, onion.capture.material->get_rid());
+ onion.capture.material->set_shader_param("bkg_color", GLOBAL_GET("rendering/environment/default_clear_color"));
+ onion.capture.material->set_shader_param("differences_only", onion.differences_only);
+ onion.capture.material->set_shader_param("present", onion.differences_only ? VS::get_singleton()->viewport_get_texture(present_rid) : RID());
+
+ int step_off_a = onion.past ? -onion.steps : 0;
+ int step_off_b = onion.future ? onion.steps : 0;
+ int cidx = 0;
+ onion.capture.material->set_shader_param("dir_color", onion.force_white_modulate ? Color(1, 1, 1) : Color(EDITOR_GET("editors/animation/onion_layers_past_color")));
+ for (int step_off = step_off_a; step_off <= step_off_b; step_off++) {
+
+ if (step_off == 0) {
+ // Skip present step and switch to the color of future
+ if (!onion.force_white_modulate)
+ onion.capture.material->set_shader_param("dir_color", EDITOR_GET("editors/animation/onion_layers_future_color"));
+ continue;
+ }
+
+ float pos = cpos + step_off * anim->get_step();
+
+ bool valid = anim->has_loop() || pos >= 0 && pos <= anim->get_length();
+ onion.captures_valid[cidx] = valid;
+ if (valid) {
+ player->seek(pos, true);
+ get_tree()->flush_transform_notifications(); // Needed for transforms of Spatials
+ values_backup.update_skeletons(); // Needed for Skeletons
+
+ VS::get_singleton()->viewport_set_active(onion.captures[cidx], true);
+ VS::get_singleton()->viewport_set_parent_viewport(root_vp, onion.captures[cidx]);
+ VS::get_singleton()->draw(false);
+ VS::get_singleton()->viewport_set_active(onion.captures[cidx], false);
+ }
+
+ cidx++;
+ }
+
+ // Restore root viewport
+ VS::get_singleton()->viewport_set_parent_viewport(root_vp, RID());
+ VS::get_singleton()->viewport_attach_to_screen(root_vp, root_vp_screen_rect);
+ VS::get_singleton()->viewport_set_update_mode(root_vp, VS::VIEWPORT_UPDATE_WHEN_VISIBLE);
+
+ // Restore animation state
+ // (Seeking with update=true wouldn't do the trick because the current value of the properties
+ // may not match their value for the current point in the animation)
+ player->seek(cpos, false);
+ player->restore_animated_values(values_backup);
+
+ // Restor state of main editors
+ if (SpatialEditor::get_singleton()->is_visible()) {
+ // 3D
+ SpatialEditor::get_singleton()->set_state(spatial_edit_state);
+ } else { // CanvasItemEditor
+ // 2D
+ CanvasItemEditor::get_singleton()->set_state(canvas_edit_state);
+ }
+
+ // Update viewports with skin layers overlaid for the actual engine loop render
+ onion.can_overlay = true;
+ plugin->update_overlays();
+}
+
+void AnimationPlayerEditor::_start_onion_skinning() {
+
+ // FIXME: Using "idle_frame" makes onion layers update one frame behing the current
+ if (!get_tree()->is_connected("idle_frame", this, "call_deferred")) {
+ get_tree()->connect("idle_frame", this, "call_deferred", varray("_prepare_onion_layers_1"));
+ }
+}
+
+void AnimationPlayerEditor::_stop_onion_skinning() {
+
+ if (get_tree()->is_connected("idle_frame", this, "call_deferred")) {
+
+ get_tree()->disconnect("idle_frame", this, "call_deferred");
+
+ _free_onion_layers();
+
+ // Clean up the overlay
+ onion.can_overlay = false;
+ plugin->update_overlays();
+ }
+}
+
void AnimationPlayerEditor::_bind_methods() {
ClassDB::bind_method(D_METHOD("_gui_input"), &AnimationPlayerEditor::_gui_input);
@@ -1165,6 +1522,10 @@ void AnimationPlayerEditor::_bind_methods() {
ClassDB::bind_method(D_METHOD("_unhandled_key_input"), &AnimationPlayerEditor::_unhandled_key_input);
ClassDB::bind_method(D_METHOD("_animation_tool_menu"), &AnimationPlayerEditor::_animation_tool_menu);
ClassDB::bind_method(D_METHOD("_animation_save_menu"), &AnimationPlayerEditor::_animation_save_menu);
+ ClassDB::bind_method(D_METHOD("_onion_skinning_menu"), &AnimationPlayerEditor::_onion_skinning_menu);
+ ClassDB::bind_method(D_METHOD("_editor_visibility_changed"), &AnimationPlayerEditor::_editor_visibility_changed);
+ ClassDB::bind_method(D_METHOD("_prepare_onion_layers_1"), &AnimationPlayerEditor::_prepare_onion_layers_1);
+ ClassDB::bind_method(D_METHOD("_prepare_onion_layers_2"), &AnimationPlayerEditor::_prepare_onion_layers_2);
}
AnimationPlayerEditor *AnimationPlayerEditor::singleton = NULL;
@@ -1173,8 +1534,10 @@ AnimationPlayer *AnimationPlayerEditor::get_player() const {
return player;
}
-AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
+
+AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlayerEditorPlugin *p_plugin) {
editor = p_editor;
+ plugin = p_plugin;
singleton = this;
updating = false;
@@ -1301,6 +1664,29 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
//tool_anim->get_popup()->add_item("Edit Anim Resource",TOOL_PASTE_ANIM);
hb->add_child(tool_anim);
+ onion_skinning = memnew(MenuButton);
+ //onion_skinning->set_flat(false);
+ onion_skinning->set_tooltip(TTR("Onion Skinning"));
+ onion_skinning->get_popup()->add_check_shortcut(ED_SHORTCUT("animation_player_editor/onion_skinning", TTR("Enable Onion Skinning")), ONION_SKINNING_ENABLE);
+ onion_skinning->get_popup()->add_separator();
+ onion_skinning->get_popup()->add_item(TTR("Directions"), -1);
+ onion_skinning->get_popup()->set_item_disabled(onion_skinning->get_popup()->get_item_count() - 1, true);
+ onion_skinning->get_popup()->add_check_item(TTR("Past"), ONION_SKINNING_PAST);
+ onion_skinning->get_popup()->set_item_checked(onion_skinning->get_popup()->get_item_count() - 1, true);
+ onion_skinning->get_popup()->add_check_item(TTR("Future"), ONION_SKINNING_FUTURE);
+ onion_skinning->get_popup()->add_separator();
+ onion_skinning->get_popup()->add_item(TTR("Depth"), -1);
+ onion_skinning->get_popup()->set_item_disabled(onion_skinning->get_popup()->get_item_count() - 1, true);
+ onion_skinning->get_popup()->add_check_item(TTR("1 step"), ONION_SKINNING_1_STEP);
+ onion_skinning->get_popup()->set_item_checked(onion_skinning->get_popup()->get_item_count() - 1, true);
+ onion_skinning->get_popup()->add_check_item(TTR("2 steps"), ONION_SKINNING_2_STEPS);
+ onion_skinning->get_popup()->add_check_item(TTR("3 steps"), ONION_SKINNING_3_STEPS);
+ onion_skinning->get_popup()->add_separator();
+ onion_skinning->get_popup()->add_check_item(TTR("Differences Only"), ONION_SKINNING_DIFFERENCES_ONLY);
+ onion_skinning->get_popup()->add_check_item(TTR("Force White Modulate"), ONION_SKINNING_FORCE_WHITE_MODULATE);
+ onion_skinning->get_popup()->add_check_item(TTR("Include Gizmos (3D)"), ONION_SKINNING_INCLUDE_GIZMOS);
+ hb->add_child(onion_skinning);
+
pin = memnew(ToolButton);
pin->set_toggle_mode(true);
hb->add_child(pin);
@@ -1387,6 +1773,68 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
key_editor->connect("animation_step_changed", this, "_animation_key_editor_anim_step_changed");
_update_player();
+
+ // Onion skinning
+
+ key_editor->connect("visibility_changed", this, "_editor_visibility_changed");
+
+ onion.enabled = false;
+ onion.past = true;
+ onion.future = false;
+ onion.steps = 1;
+ onion.differences_only = false;
+ onion.force_white_modulate = false;
+ onion.include_gizmos = false;
+
+ onion.last_frame = 0;
+ onion.can_overlay = false;
+ onion.capture_size = Size2();
+ onion.capture.canvas = VS::get_singleton()->canvas_create();
+ onion.capture.canvas_item = VS::get_singleton()->canvas_item_create();
+ VS::get_singleton()->canvas_item_set_parent(onion.capture.canvas_item, onion.capture.canvas);
+
+ onion.capture.material = Ref<ShaderMaterial>(memnew(ShaderMaterial));
+
+ onion.capture.shader = Ref<Shader>(memnew(Shader));
+ onion.capture.shader->set_code(" \
+ shader_type canvas_item; \
+ \
+ uniform vec4 bkg_color; \
+ uniform vec4 dir_color; \
+ uniform bool differences_only; \
+ uniform sampler2D present; \
+ \
+ float zero_if_equal(vec4 a, vec4 b) { \
+ return smoothstep(0.0, 0.005, length(a.rgb - b.rgb) / sqrt(3.0)); \
+ } \
+ \
+ void fragment() { \
+ vec4 capture_samp = texture(TEXTURE, UV); \
+ vec4 present_samp = texture(present, UV); \
+ float bkg_mask = zero_if_equal(capture_samp, bkg_color); \
+ float diff_mask = 1.0 - zero_if_equal(present_samp, bkg_color); \
+ diff_mask = min(1.0, diff_mask + float(!differences_only)); \
+ COLOR = vec4(capture_samp.rgb * dir_color.rgb, bkg_mask * diff_mask); \
+ } \
+ ");
+ VS::get_singleton()->material_set_shader(onion.capture.material->get_rid(), onion.capture.shader->get_rid());
+}
+
+AnimationPlayerEditor::~AnimationPlayerEditor() {
+
+ _free_onion_layers();
+ VS::get_singleton()->free(onion.capture.canvas);
+ VS::get_singleton()->free(onion.capture.canvas_item);
+}
+
+void AnimationPlayerEditorPlugin::_notification(int p_what) {
+
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+
+ set_force_draw_over_forwarding_enabled();
+ } break;
+ }
}
void AnimationPlayerEditorPlugin::edit(Object *p_object) {
@@ -1420,7 +1868,7 @@ void AnimationPlayerEditorPlugin::make_visible(bool p_visible) {
AnimationPlayerEditorPlugin::AnimationPlayerEditorPlugin(EditorNode *p_node) {
editor = p_node;
- anim_editor = memnew(AnimationPlayerEditor(editor));
+ anim_editor = memnew(AnimationPlayerEditor(editor, this));
anim_editor->set_undo_redo(editor->get_undo_redo());
editor->add_bottom_panel_item(TTR("Animation"), anim_editor);
diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h
index cea6b05ed4..1a1e92d7b7 100644
--- a/editor/plugins/animation_player_editor_plugin.h
+++ b/editor/plugins/animation_player_editor_plugin.h
@@ -42,11 +42,13 @@
@author Juan Linietsky <reduzio@gmail.com>
*/
class AnimationKeyEditor;
+class AnimationPlayerEditorPlugin;
class AnimationPlayerEditor : public VBoxContainer {
GDCLASS(AnimationPlayerEditor, VBoxContainer);
EditorNode *editor;
+ AnimationPlayerEditorPlugin *plugin;
AnimationPlayer *player;
enum {
@@ -56,6 +58,19 @@ class AnimationPlayerEditor : public VBoxContainer {
};
enum {
+ ONION_SKINNING_ENABLE,
+ ONION_SKINNING_PAST,
+ ONION_SKINNING_FUTURE,
+ ONION_SKINNING_1_STEP,
+ ONION_SKINNING_2_STEPS,
+ ONION_SKINNING_3_STEPS,
+ ONION_SKINNING_LAST_STEPS_OPTION = ONION_SKINNING_3_STEPS,
+ ONION_SKINNING_DIFFERENCES_ONLY,
+ ONION_SKINNING_FORCE_WHITE_MODULATE,
+ ONION_SKINNING_INCLUDE_GIZMOS,
+ };
+
+ enum {
ANIM_SAVE,
ANIM_SAVE_AS
};
@@ -84,6 +99,7 @@ class AnimationPlayerEditor : public VBoxContainer {
Button *blend_anim;
Button *remove_anim;
MenuButton *tool_anim;
+ MenuButton *onion_skinning;
ToolButton *pin;
SpinBox *frame;
LineEdit *scale;
@@ -115,6 +131,36 @@ class AnimationPlayerEditor : public VBoxContainer {
AnimationKeyEditor *key_editor;
+ // Onion skinning
+ struct {
+ // Settings
+ bool enabled;
+ bool past;
+ bool future;
+ int steps;
+ bool differences_only;
+ bool force_white_modulate;
+ bool include_gizmos;
+
+ int get_needed_capture_count() const {
+ // 'Differences only' needs a capture of the present
+ return (past && future ? 2 * steps : steps) + (differences_only ? 1 : 0);
+ }
+
+ // Rendering
+ int64_t last_frame;
+ int can_overlay;
+ Size2 capture_size;
+ Vector<RID> captures;
+ Vector<bool> captures_valid;
+ struct {
+ RID canvas;
+ RID canvas_item;
+ Ref<ShaderMaterial> material;
+ Ref<Shader> shader;
+ } capture;
+ } onion;
+
void _select_anim_by_name(const String &p_anim);
void _play_pressed();
void _play_from_pressed();
@@ -161,8 +207,19 @@ class AnimationPlayerEditor : public VBoxContainer {
void _unhandled_key_input(const Ref<InputEvent> &p_ev);
void _animation_tool_menu(int p_option);
void _animation_save_menu(int p_option);
+ void _onion_skinning_menu(int p_option);
+
+ void _editor_visibility_changed();
+ bool _are_onion_layers_valid();
+ void _allocate_onion_layers();
+ void _free_onion_layers();
+ void _prepare_onion_layers_1();
+ void _prepare_onion_layers_2();
+ void _start_onion_skinning();
+ void _stop_onion_skinning();
AnimationPlayerEditor();
+ ~AnimationPlayerEditor();
protected:
void _notification(int p_what);
@@ -182,7 +239,9 @@ public:
void set_undo_redo(UndoRedo *p_undo_redo) { undo_redo = p_undo_redo; }
void edit(AnimationPlayer *p_player);
- AnimationPlayerEditor(EditorNode *p_editor);
+ void forward_force_draw_over_viewport(Control *p_overlay);
+
+ AnimationPlayerEditor(EditorNode *p_editor, AnimationPlayerEditorPlugin *p_plugin);
};
class AnimationPlayerEditorPlugin : public EditorPlugin {
@@ -192,6 +251,9 @@ class AnimationPlayerEditorPlugin : public EditorPlugin {
AnimationPlayerEditor *anim_editor;
EditorNode *editor;
+protected:
+ void _notification(int p_what);
+
public:
virtual Dictionary get_state() const { return anim_editor->get_state(); }
virtual void set_state(const Dictionary &p_state) { anim_editor->set_state(p_state); }
@@ -202,6 +264,8 @@ public:
virtual bool handles(Object *p_object) const;
virtual void make_visible(bool p_visible);
+ virtual void forward_force_draw_over_viewport(Control *p_overlay) { anim_editor->forward_force_draw_over_viewport(p_overlay); }
+
AnimationPlayerEditorPlugin(EditorNode *p_node);
~AnimationPlayerEditorPlugin();
};
diff --git a/editor/plugins/animation_tree_editor_plugin.cpp b/editor/plugins/animation_tree_editor_plugin.cpp
index 22d23e1c72..8fe6538653 100644
--- a/editor/plugins/animation_tree_editor_plugin.cpp
+++ b/editor/plugins/animation_tree_editor_plugin.cpp
@@ -1196,14 +1196,14 @@ void AnimationTreeEditor::_edit_filters() {
if (base) {
NodePath np = E->get();
- if (np.get_property() != StringName()) {
+ if (np.get_subname_count() == 1) {
Node *n = base->get_node(np);
Skeleton *s = Object::cast_to<Skeleton>(n);
if (s) {
String skelbase = E->get().substr(0, E->get().find(":"));
- int bidx = s->find_bone(np.get_property());
+ int bidx = s->find_bone(np.get_subname(0));
if (bidx != -1) {
int bparent = s->get_bone_parent(bidx);
@@ -1213,7 +1213,7 @@ void AnimationTreeEditor::_edit_filters() {
String bpn = skelbase + ":" + s->get_bone_name(bparent);
if (pm.has(bpn)) {
parent = pm[bpn];
- descr = np.get_property();
+ descr = np.get_subname(0);
}
} else {
diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp
index b63352389e..3ab8f318a7 100644
--- a/editor/plugins/asset_library_editor_plugin.cpp
+++ b/editor/plugins/asset_library_editor_plugin.cpp
@@ -915,6 +915,11 @@ void EditorAssetLibrary::_search(int p_page) {
_api_request("asset", REQUESTING_SEARCH, args);
}
+void EditorAssetLibrary::_search_text_entered(const String &p_text) {
+
+ _search();
+}
+
HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int p_page_len, int p_total_items, int p_current_items) {
HBoxContainer *hbc = memnew(HBoxContainer);
@@ -1268,6 +1273,10 @@ void EditorAssetLibrary::_install_external_asset(String p_zip_path, String p_tit
emit_signal("install_asset", p_zip_path, p_title);
}
+void EditorAssetLibrary::disable_community_support() {
+ support->get_popup()->set_item_checked(SUPPORT_COMMUNITY, false);
+}
+
void EditorAssetLibrary::_bind_methods() {
ClassDB::bind_method("_http_request_completed", &EditorAssetLibrary::_http_request_completed);
@@ -1276,6 +1285,7 @@ void EditorAssetLibrary::_bind_methods() {
ClassDB::bind_method("_select_category", &EditorAssetLibrary::_select_category);
ClassDB::bind_method("_image_request_completed", &EditorAssetLibrary::_image_request_completed);
ClassDB::bind_method("_search", &EditorAssetLibrary::_search, DEFVAL(0));
+ ClassDB::bind_method("_search_text_entered", &EditorAssetLibrary::_search_text_entered);
ClassDB::bind_method("_install_asset", &EditorAssetLibrary::_install_asset);
ClassDB::bind_method("_manage_plugins", &EditorAssetLibrary::_manage_plugins);
ClassDB::bind_method("_asset_open", &EditorAssetLibrary::_asset_open);
@@ -1305,7 +1315,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) {
filter = memnew(LineEdit);
search_hb->add_child(filter);
filter->set_h_size_flags(SIZE_EXPAND_FILL);
- filter->connect("text_entered", this, "_search");
+ filter->connect("text_entered", this, "_search_text_entered");
search = memnew(Button(TTR("Search")));
search->connect("pressed", this, "_search");
search_hb->add_child(search);
diff --git a/editor/plugins/asset_library_editor_plugin.h b/editor/plugins/asset_library_editor_plugin.h
index 35977f3949..5536fbb2ec 100644
--- a/editor/plugins/asset_library_editor_plugin.h
+++ b/editor/plugins/asset_library_editor_plugin.h
@@ -284,6 +284,7 @@ class EditorAssetLibrary : public PanelContainer {
void _search(int p_page = 0);
void _rerun_search(int p_ignore);
+ void _search_text_entered(const String &p_text = "");
void _api_request(const String &p_request, RequestType p_request_type, const String &p_arguments = "");
void _http_request_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data);
void _http_download_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data);
@@ -301,6 +302,8 @@ protected:
void _notification(int p_what);
public:
+ void disable_community_support();
+
EditorAssetLibrary(bool p_templates_only = false);
};
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index 3940dd9044..150c184e90 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -69,8 +69,8 @@ class SnapDialog : public ConfirmationDialog {
SpinBox *rotation_step;
public:
- SnapDialog()
- : ConfirmationDialog() {
+ SnapDialog() :
+ ConfirmationDialog() {
const int SPIN_BOX_GRID_RANGE = 256;
const int SPIN_BOX_ROTATION_RANGE = 360;
Label *label;
@@ -2294,7 +2294,7 @@ void CanvasItemEditor::_draw_focus() {
void CanvasItemEditor::_draw_guides() {
- Color guide_color = Color(0.6, 0.0, 0.8);
+ Color guide_color = EditorSettings::get_singleton()->get("editors/2d/guides_color");
Transform2D xform = viewport_scrollable->get_transform() * transform;
// Guides already there
@@ -2955,8 +2955,13 @@ void CanvasItemEditor::_draw_viewport() {
EditorPluginList *over_plugin_list = editor->get_editor_plugins_over();
if (!over_plugin_list->empty()) {
- over_plugin_list->forward_draw_over_canvas(viewport);
+ over_plugin_list->forward_draw_over_viewport(viewport);
}
+ EditorPluginList *force_over_plugin_list = editor->get_editor_plugins_force_over();
+ if (!force_over_plugin_list->empty()) {
+ force_over_plugin_list->forward_force_draw_over_viewport(viewport);
+ }
+
_draw_bones();
}
@@ -4309,7 +4314,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
show_grid = false;
show_helpers = false;
- show_rulers = false;
+ show_rulers = true;
show_guides = true;
zoom = 1;
grid_offset = Point2();
@@ -4337,6 +4342,9 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
drag = DRAG_NONE;
bone_last_frame = 0;
additive_selection = false;
+
+ // Update the menus checkboxes
+ call_deferred("set_state", get_state());
}
CanvasItemEditor *CanvasItemEditor::singleton = NULL;
@@ -4481,15 +4489,24 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &
Ref<Texture> texture = Ref<Texture>(Object::cast_to<Texture>(ResourceCache::get(path)));
Size2 texture_size = texture->get_size();
- editor_data->get_undo_redo().add_do_method(parent, "add_child", child);
- editor_data->get_undo_redo().add_do_method(child, "set_owner", editor->get_edited_scene());
- editor_data->get_undo_redo().add_do_reference(child);
- editor_data->get_undo_redo().add_undo_method(parent, "remove_child", child);
+ if (parent) {
+ editor_data->get_undo_redo().add_do_method(parent, "add_child", child);
+ editor_data->get_undo_redo().add_do_method(child, "set_owner", editor->get_edited_scene());
+ editor_data->get_undo_redo().add_do_reference(child);
+ editor_data->get_undo_redo().add_undo_method(parent, "remove_child", child);
+ } else { // if we haven't parent, lets try to make a child as a parent.
+ editor_data->get_undo_redo().add_do_method(editor, "set_edited_scene", child);
+ editor_data->get_undo_redo().add_do_method(child, "set_owner", editor->get_edited_scene());
+ editor_data->get_undo_redo().add_do_reference(child);
+ editor_data->get_undo_redo().add_undo_method(editor, "set_edited_scene", (Object *)NULL);
+ }
- String new_name = parent->validate_child_name(child);
- ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger();
- editor_data->get_undo_redo().add_do_method(sed, "live_debug_create_node", editor->get_edited_scene()->get_path_to(parent), child->get_class(), new_name);
- editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name));
+ if (parent) {
+ String new_name = parent->validate_child_name(child);
+ ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger();
+ editor_data->get_undo_redo().add_do_method(sed, "live_debug_create_node", editor->get_edited_scene()->get_path_to(parent), child->get_class(), new_name);
+ editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name));
+ }
// handle with different property for texture
String property = "texture";
@@ -4522,8 +4539,8 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &
}
// locate at preview position
- Point2 pos;
- if (parent->has_method("get_global_position")) {
+ Point2 pos = Point2(0, 0);
+ if (parent && parent->has_method("get_global_position")) {
pos = parent->call("get_global_position");
}
Transform2D trans = canvas->get_canvas_transform();
@@ -4684,6 +4701,18 @@ bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Varian
return false;
}
+void CanvasItemEditorViewport::_show_resource_type_selector() {
+ List<BaseButton *> btn_list;
+ button_group->get_buttons(&btn_list);
+
+ for (int i = 0; i < btn_list.size(); i++) {
+ CheckBox *check = Object::cast_to<CheckBox>(btn_list[i]);
+ check->set_pressed(check->get_text() == default_type);
+ }
+ selector->set_title(vformat(TTR("Add %s"), default_type));
+ selector->popup_centered_minsize();
+}
+
void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p_data) {
bool is_shift = Input::get_singleton()->is_key_pressed(KEY_SHIFT);
bool is_alt = Input::get_singleton()->is_key_pressed(KEY_ALT);
@@ -4700,10 +4729,8 @@ void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p
if (root_node) {
list.push_back(root_node);
} else {
- accept->get_ok()->set_text(TTR("OK :("));
- accept->set_text(TTR("No parent to instance a child at."));
- accept->popup_centered_minsize();
- _remove_preview();
+ drop_pos = p_point;
+ _show_resource_type_selector();
return;
}
}
@@ -4722,15 +4749,7 @@ void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p
drop_pos = p_point;
if (is_alt) {
- List<BaseButton *> btn_list;
- button_group->get_buttons(&btn_list);
-
- for (int i = 0; i < btn_list.size(); i++) {
- CheckBox *check = Object::cast_to<CheckBox>(btn_list[i]);
- check->set_pressed(check->get_text() == default_type);
- }
- selector->set_title(vformat(TTR("Add %s"), default_type));
- selector->popup_centered_minsize();
+ _show_resource_type_selector();
} else {
_perform_drop_data();
}
diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h
index 457833e1a7..4be09a16e9 100644
--- a/editor/plugins/canvas_item_editor_plugin.h
+++ b/editor/plugins/canvas_item_editor_plugin.h
@@ -578,6 +578,7 @@ class CanvasItemEditorViewport : public Control {
void _create_nodes(Node *parent, Node *child, String &path, const Point2 &p_point);
bool _create_instance(Node *parent, String &path, const Point2 &p_point);
void _perform_drop_data();
+ void _show_resource_type_selector();
static void _bind_methods();
diff --git a/editor/plugins/collision_polygon_2d_editor_plugin.cpp b/editor/plugins/collision_polygon_2d_editor_plugin.cpp
index 00e6d617a1..6ac80caf94 100644
--- a/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+++ b/editor/plugins/collision_polygon_2d_editor_plugin.cpp
@@ -39,10 +39,10 @@ void CollisionPolygon2DEditor::_set_node(Node *p_polygon) {
node = Object::cast_to<CollisionPolygon2D>(p_polygon);
}
-CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor)
- : AbstractPolygon2DEditor(p_editor) {
+CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) :
+ AbstractPolygon2DEditor(p_editor) {
}
-CollisionPolygon2DEditorPlugin::CollisionPolygon2DEditorPlugin(EditorNode *p_node)
- : AbstractPolygon2DEditorPlugin(p_node, memnew(CollisionPolygon2DEditor(p_node)), "CollisionPolygon2D") {
+CollisionPolygon2DEditorPlugin::CollisionPolygon2DEditorPlugin(EditorNode *p_node) :
+ AbstractPolygon2DEditorPlugin(p_node, memnew(CollisionPolygon2DEditor(p_node)), "CollisionPolygon2D") {
}
diff --git a/editor/plugins/collision_shape_2d_editor_plugin.cpp b/editor/plugins/collision_shape_2d_editor_plugin.cpp
index 005de096cd..029e3a558d 100644
--- a/editor/plugins/collision_shape_2d_editor_plugin.cpp
+++ b/editor/plugins/collision_shape_2d_editor_plugin.cpp
@@ -414,7 +414,7 @@ void CollisionShape2DEditor::_get_current_shape_type() {
canvas_item_editor->get_viewport_control()->update();
}
-void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) {
+void CollisionShape2DEditor::forward_draw_over_viewport(Control *p_overlay) {
if (!node) {
return;
@@ -448,8 +448,8 @@ void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) {
handles[0] = Point2(radius, -height);
handles[1] = Point2(0, -(height + radius));
- p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
- p_canvas->draw_texture(h, gt.xform(handles[1]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[0]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[1]) - size);
} break;
@@ -459,7 +459,7 @@ void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) {
handles.resize(1);
handles[0] = Point2(shape->get_radius(), 0);
- p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[0]) - size);
} break;
@@ -478,8 +478,8 @@ void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) {
handles[0] = shape->get_normal() * shape->get_d();
handles[1] = shape->get_normal() * (shape->get_d() + 30.0);
- p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
- p_canvas->draw_texture(h, gt.xform(handles[1]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[0]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[1]) - size);
} break;
@@ -489,7 +489,7 @@ void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) {
handles.resize(1);
handles[0] = Point2(0, shape->get_length());
- p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[0]) - size);
} break;
@@ -501,8 +501,8 @@ void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) {
handles[0] = Point2(ext.x, 0);
handles[1] = Point2(0, -ext.y);
- p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
- p_canvas->draw_texture(h, gt.xform(handles[1]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[0]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[1]) - size);
} break;
@@ -513,8 +513,8 @@ void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) {
handles[0] = shape->get_a();
handles[1] = shape->get_b();
- p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
- p_canvas->draw_texture(h, gt.xform(handles[1]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[0]) - size);
+ p_overlay->draw_texture(h, gt.xform(handles[1]) - size);
} break;
}
diff --git a/editor/plugins/collision_shape_2d_editor_plugin.h b/editor/plugins/collision_shape_2d_editor_plugin.h
index d4fbe87fb3..1e930ef371 100644
--- a/editor/plugins/collision_shape_2d_editor_plugin.h
+++ b/editor/plugins/collision_shape_2d_editor_plugin.h
@@ -74,7 +74,7 @@ protected:
public:
bool forward_canvas_gui_input(const Ref<InputEvent> &p_event);
- void forward_draw_over_canvas(Control *p_canvas);
+ void forward_draw_over_viewport(Control *p_overlay);
void edit(Node *p_node);
CollisionShape2DEditor(EditorNode *p_editor);
@@ -88,7 +88,7 @@ class CollisionShape2DEditorPlugin : public EditorPlugin {
public:
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return collision_shape_2d_editor->forward_canvas_gui_input(p_event); }
- virtual void forward_draw_over_canvas(Control *p_canvas) { return collision_shape_2d_editor->forward_draw_over_canvas(p_canvas); }
+ virtual void forward_draw_over_viewport(Control *p_overlay) { return collision_shape_2d_editor->forward_draw_over_viewport(p_overlay); }
virtual String get_name() const { return "CollisionShape2D"; }
bool has_main_screen() const { return false; }
diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp
index 2754aeed06..f77016c1d6 100644
--- a/editor/plugins/curve_editor_plugin.cpp
+++ b/editor/plugins/curve_editor_plugin.cpp
@@ -586,8 +586,10 @@ struct CanvasItemPlotCurve {
Color color1;
Color color2;
- CanvasItemPlotCurve(CanvasItem &p_ci, Color p_color1, Color p_color2)
- : ci(p_ci), color1(p_color1), color2(p_color2) {}
+ CanvasItemPlotCurve(CanvasItem &p_ci, Color p_color1, Color p_color2) :
+ ci(p_ci),
+ color1(p_color1),
+ color2(p_color2) {}
void operator()(Vector2 pos0, Vector2 pos1, bool in_definition) {
ci.draw_line(pos0, pos1, in_definition ? color1 : color2);
diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp
index ed04c90cc5..558f44769d 100644
--- a/editor/plugins/editor_preview_plugins.cpp
+++ b/editor/plugins/editor_preview_plugins.cpp
@@ -235,29 +235,34 @@ Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES &p_from) {
Ref<Material> material = p_from;
ERR_FAIL_COND_V(material.is_null(), Ref<Texture>());
- VS::get_singleton()->mesh_surface_set_material(sphere, 0, material->get_rid());
+ if (material->get_shader_mode() == Shader::MODE_SPATIAL) {
- VS::get_singleton()->viewport_set_update_mode(viewport, VS::VIEWPORT_UPDATE_ONCE); //once used for capture
+ VS::get_singleton()->mesh_surface_set_material(sphere, 0, material->get_rid());
- preview_done = false;
- VS::get_singleton()->request_frame_drawn_callback(this, "_preview_done", Variant());
+ VS::get_singleton()->viewport_set_update_mode(viewport, VS::VIEWPORT_UPDATE_ONCE); //once used for capture
- while (!preview_done) {
- OS::get_singleton()->delay_usec(10);
- }
+ preview_done = false;
+ VS::get_singleton()->request_frame_drawn_callback(this, "_preview_done", Variant());
- Ref<Image> img = VS::get_singleton()->VS::get_singleton()->texture_get_data(viewport_texture);
- VS::get_singleton()->mesh_surface_set_material(sphere, 0, RID());
+ while (!preview_done) {
+ OS::get_singleton()->delay_usec(10);
+ }
- ERR_FAIL_COND_V(!img.is_valid(), Ref<ImageTexture>());
+ Ref<Image> img = VS::get_singleton()->VS::get_singleton()->texture_get_data(viewport_texture);
+ VS::get_singleton()->mesh_surface_set_material(sphere, 0, RID());
- int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size");
- thumbnail_size *= EDSCALE;
- img->convert(Image::FORMAT_RGBA8);
- img->resize(thumbnail_size, thumbnail_size);
- Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture));
- ptex->create_from_image(img, 0);
- return ptex;
+ ERR_FAIL_COND_V(!img.is_valid(), Ref<ImageTexture>());
+
+ int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size");
+ thumbnail_size *= EDSCALE;
+ img->convert(Image::FORMAT_RGBA8);
+ img->resize(thumbnail_size, thumbnail_size);
+ Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture));
+ ptex->create_from_image(img, 0);
+ return ptex;
+ }
+
+ return Ref<Texture>();
}
EditorMaterialPreviewPlugin::EditorMaterialPreviewPlugin() {
diff --git a/editor/plugins/light_occluder_2d_editor_plugin.cpp b/editor/plugins/light_occluder_2d_editor_plugin.cpp
index 485657d2c9..3febc99239 100644
--- a/editor/plugins/light_occluder_2d_editor_plugin.cpp
+++ b/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -318,7 +318,7 @@ bool LightOccluder2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
return false;
}
-void LightOccluder2DEditor::forward_draw_over_canvas(Control *p_canvas) {
+void LightOccluder2DEditor::forward_draw_over_viewport(Control *p_overlay) {
if (!node || !node->get_occluder_polygon().is_valid())
return;
diff --git a/editor/plugins/light_occluder_2d_editor_plugin.h b/editor/plugins/light_occluder_2d_editor_plugin.h
index 068832d8ed..dc3ff74052 100644
--- a/editor/plugins/light_occluder_2d_editor_plugin.h
+++ b/editor/plugins/light_occluder_2d_editor_plugin.h
@@ -82,7 +82,7 @@ protected:
public:
Vector2 snap_point(const Vector2 &p_point) const;
- void forward_draw_over_canvas(Control *p_canvas);
+ void forward_draw_over_viewport(Control *p_overlay);
bool forward_gui_input(const Ref<InputEvent> &p_event);
void edit(Node *p_collision_polygon);
LightOccluder2DEditor(EditorNode *p_editor);
@@ -97,7 +97,7 @@ class LightOccluder2DEditorPlugin : public EditorPlugin {
public:
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return light_occluder_editor->forward_gui_input(p_event); }
- virtual void forward_draw_over_canvas(Control *p_canvas) { return light_occluder_editor->forward_draw_over_canvas(p_canvas); }
+ virtual void forward_draw_over_viewport(Control *p_overlay) { return light_occluder_editor->forward_draw_over_viewport(p_overlay); }
virtual String get_name() const { return "LightOccluder2D"; }
bool has_main_screen() const { return false; }
diff --git a/editor/plugins/line_2d_editor_plugin.cpp b/editor/plugins/line_2d_editor_plugin.cpp
index 51fa488b43..04d8519b2f 100644
--- a/editor/plugins/line_2d_editor_plugin.cpp
+++ b/editor/plugins/line_2d_editor_plugin.cpp
@@ -61,10 +61,10 @@ void Line2DEditor::_action_set_polygon(int p_idx, const Variant &p_previous, con
undo_redo->add_undo_method(node, "set_points", p_previous);
}
-Line2DEditor::Line2DEditor(EditorNode *p_editor)
- : AbstractPolygon2DEditor(p_editor) {
+Line2DEditor::Line2DEditor(EditorNode *p_editor) :
+ AbstractPolygon2DEditor(p_editor) {
}
-Line2DEditorPlugin::Line2DEditorPlugin(EditorNode *p_node)
- : AbstractPolygon2DEditorPlugin(p_node, memnew(Line2DEditor(p_node)), "Line2D") {
+Line2DEditorPlugin::Line2DEditorPlugin(EditorNode *p_node) :
+ AbstractPolygon2DEditorPlugin(p_node, memnew(Line2DEditor(p_node)), "Line2D") {
}
diff --git a/editor/plugins/mesh_instance_editor_plugin.cpp b/editor/plugins/mesh_instance_editor_plugin.cpp
index 84fc0cecf2..9d116349c0 100644
--- a/editor/plugins/mesh_instance_editor_plugin.cpp
+++ b/editor/plugins/mesh_instance_editor_plugin.cpp
@@ -195,7 +195,139 @@ void MeshInstanceEditor::_menu_option(int p_option) {
outline_dialog->popup_centered(Vector2(200, 90));
} break;
+ case MENU_OPTION_CREATE_UV2: {
+
+ Ref<ArrayMesh> mesh = node->get_mesh();
+ if (!mesh.is_valid()) {
+ err_dialog->set_text(TTR("Contained Mesh is not of type ArrayMesh."));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+
+ Error err = mesh->lightmap_unwrap(node->get_global_transform());
+ if (err != OK) {
+ err_dialog->set_text(TTR("UV Unwrap failed, mesh may not be manifold?"));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+
+ } break;
+ case MENU_OPTION_DEBUG_UV1: {
+ Ref<Mesh> mesh = node->get_mesh();
+ if (!mesh.is_valid()) {
+ err_dialog->set_text(TTR("No mesh to debug."));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+ _create_uv_lines(0);
+ } break;
+ case MENU_OPTION_DEBUG_UV2: {
+ Ref<Mesh> mesh = node->get_mesh();
+ if (!mesh.is_valid()) {
+ err_dialog->set_text(TTR("No mesh to debug."));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+ _create_uv_lines(1);
+ } break;
+ }
+}
+
+struct MeshInstanceEditorEdgeSort {
+
+ Vector2 a;
+ Vector2 b;
+
+ bool operator<(const MeshInstanceEditorEdgeSort &p_b) const {
+ if (a == p_b.a)
+ return b < p_b.b;
+ else
+ return a < p_b.a;
+ }
+
+ MeshInstanceEditorEdgeSort() {}
+ MeshInstanceEditorEdgeSort(const Vector2 &p_a, const Vector2 &p_b) {
+ if (p_a < p_b) {
+ a = p_a;
+ b = p_b;
+ } else {
+ b = p_a;
+ a = p_b;
+ }
+ }
+};
+
+void MeshInstanceEditor::_create_uv_lines(int p_layer) {
+
+ Ref<Mesh> mesh = node->get_mesh();
+ ERR_FAIL_COND(!mesh.is_valid());
+
+ Set<MeshInstanceEditorEdgeSort> edges;
+ uv_lines.clear();
+ for (int i = 0; i < mesh->get_surface_count(); i++) {
+ if (mesh->surface_get_primitive_type(i) != Mesh::PRIMITIVE_TRIANGLES)
+ continue;
+ Array a = mesh->surface_get_arrays(i);
+
+ PoolVector<Vector2> uv = a[p_layer == 0 ? Mesh::ARRAY_TEX_UV : Mesh::ARRAY_TEX_UV2];
+ if (uv.size() == 0) {
+ err_dialog->set_text(TTR("Model has no UV in this layer"));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+
+ PoolVector<Vector2>::Read r = uv.read();
+
+ PoolVector<int> indices = a[Mesh::ARRAY_INDEX];
+ PoolVector<int>::Read ri;
+
+ int ic;
+ bool use_indices;
+
+ if (indices.size()) {
+ ic = indices.size();
+ ri = indices.read();
+ use_indices = true;
+ } else {
+ ic = uv.size();
+ use_indices = false;
+ }
+
+ for (int j = 0; j < ic; j += 3) {
+
+ for (int k = 0; k < 3; k++) {
+
+ MeshInstanceEditorEdgeSort edge;
+ if (use_indices) {
+ edge.a = r[ri[j + k]];
+ edge.b = r[ri[j + ((k + 1) % 3)]];
+ } else {
+ edge.a = r[j + k];
+ edge.b = r[j + ((k + 1) % 3)];
+ }
+
+ if (edges.has(edge))
+ continue;
+
+ uv_lines.push_back(edge.a);
+ uv_lines.push_back(edge.b);
+ edges.insert(edge);
+ }
+ }
}
+
+ debug_uv_dialog->popup_centered_minsize();
+}
+
+void MeshInstanceEditor::_debug_uv_draw() {
+
+ if (uv_lines.size() == 0)
+ return;
+
+ debug_uv->set_clip_contents(true);
+ debug_uv->draw_rect(Rect2(Vector2(), debug_uv->get_size()), Color(0.2, 0.2, 0.0));
+ debug_uv->draw_set_transform(Vector2(), 0, debug_uv->get_size());
+ debug_uv->draw_multiline(uv_lines, Color(1.0, 0.8, 0.7));
}
void MeshInstanceEditor::_create_outline_mesh() {
@@ -244,6 +376,7 @@ void MeshInstanceEditor::_bind_methods() {
ClassDB::bind_method("_menu_option", &MeshInstanceEditor::_menu_option);
ClassDB::bind_method("_create_outline_mesh", &MeshInstanceEditor::_create_outline_mesh);
+ ClassDB::bind_method("_debug_uv_draw", &MeshInstanceEditor::_debug_uv_draw);
}
MeshInstanceEditor::MeshInstanceEditor() {
@@ -263,6 +396,10 @@ MeshInstanceEditor::MeshInstanceEditor() {
options->get_popup()->add_item(TTR("Create Navigation Mesh"), MENU_OPTION_CREATE_NAVMESH);
options->get_popup()->add_separator();
options->get_popup()->add_item(TTR("Create Outline Mesh.."), MENU_OPTION_CREATE_OUTLINE_MESH);
+ options->get_popup()->add_separator();
+ options->get_popup()->add_item(TTR("View UV1"), MENU_OPTION_DEBUG_UV1);
+ options->get_popup()->add_item(TTR("View UV2"), MENU_OPTION_DEBUG_UV2);
+ options->get_popup()->add_item(TTR("Unwrap UV2 for Lightmap/AO"), MENU_OPTION_CREATE_UV2);
options->get_popup()->connect("id_pressed", this, "_menu_option");
@@ -286,6 +423,14 @@ MeshInstanceEditor::MeshInstanceEditor() {
err_dialog = memnew(AcceptDialog);
add_child(err_dialog);
+
+ debug_uv_dialog = memnew(AcceptDialog);
+ debug_uv_dialog->set_title("UV Channel Debug");
+ add_child(debug_uv_dialog);
+ debug_uv = memnew(Control);
+ debug_uv->set_custom_minimum_size(Size2(600, 600) * EDSCALE);
+ debug_uv->connect("draw", this, "_debug_uv_draw");
+ debug_uv_dialog->add_child(debug_uv);
}
void MeshInstanceEditorPlugin::edit(Object *p_object) {
diff --git a/editor/plugins/mesh_instance_editor_plugin.h b/editor/plugins/mesh_instance_editor_plugin.h
index fa851458ce..68c149f98a 100644
--- a/editor/plugins/mesh_instance_editor_plugin.h
+++ b/editor/plugins/mesh_instance_editor_plugin.h
@@ -47,6 +47,9 @@ class MeshInstanceEditor : public Node {
MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE,
MENU_OPTION_CREATE_NAVMESH,
MENU_OPTION_CREATE_OUTLINE_MESH,
+ MENU_OPTION_CREATE_UV2,
+ MENU_OPTION_DEBUG_UV1,
+ MENU_OPTION_DEBUG_UV2,
};
MeshInstance *node;
@@ -58,11 +61,18 @@ class MeshInstanceEditor : public Node {
AcceptDialog *err_dialog;
+ AcceptDialog *debug_uv_dialog;
+ Control *debug_uv;
+ Vector<Vector2> uv_lines;
+
void _menu_option(int p_option);
void _create_outline_mesh();
+ void _create_uv_lines(int p_layer);
friend class MeshInstanceEditorPlugin;
+ void _debug_uv_draw();
+
protected:
void _node_removed(Node *p_node);
static void _bind_methods();
diff --git a/editor/plugins/navigation_mesh_generator.cpp b/editor/plugins/navigation_mesh_generator.cpp
index 5d50e9c855..005a132e22 100644
--- a/editor/plugins/navigation_mesh_generator.cpp
+++ b/editor/plugins/navigation_mesh_generator.cpp
@@ -189,8 +189,8 @@ void NavigationMeshGenerator::_build_recast_navigation_mesh(Ref<NavigationMesh>
ERR_FAIL_COND(tri_areas.size() == 0);
- memset(tri_areas.ptr(), 0, ntris * sizeof(unsigned char));
- rcMarkWalkableTriangles(&ctx, cfg.walkableSlopeAngle, verts, nverts, tris, ntris, tri_areas.ptr());
+ memset(tri_areas.ptrw(), 0, ntris * sizeof(unsigned char));
+ rcMarkWalkableTriangles(&ctx, cfg.walkableSlopeAngle, verts, nverts, tris, ntris, tri_areas.ptrw());
ERR_FAIL_COND(!rcRasterizeTriangles(&ctx, verts, nverts, tris, tri_areas.ptr(), ntris, *hf, cfg.walkableClimb));
}
diff --git a/editor/plugins/navigation_polygon_editor_plugin.cpp b/editor/plugins/navigation_polygon_editor_plugin.cpp
index 6560a8dac7..36c608310b 100644
--- a/editor/plugins/navigation_polygon_editor_plugin.cpp
+++ b/editor/plugins/navigation_polygon_editor_plugin.cpp
@@ -120,10 +120,10 @@ void NavigationPolygonEditor::_create_resource() {
_menu_option(MODE_CREATE);
}
-NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor)
- : AbstractPolygon2DEditor(p_editor) {
+NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) :
+ AbstractPolygon2DEditor(p_editor) {
}
-NavigationPolygonEditorPlugin::NavigationPolygonEditorPlugin(EditorNode *p_node)
- : AbstractPolygon2DEditorPlugin(p_node, memnew(NavigationPolygonEditor(p_node)), "NavigationPolygonInstance") {
+NavigationPolygonEditorPlugin::NavigationPolygonEditorPlugin(EditorNode *p_node) :
+ AbstractPolygon2DEditorPlugin(p_node, memnew(NavigationPolygonEditor(p_node)), "NavigationPolygonInstance") {
}
diff --git a/editor/plugins/path_2d_editor_plugin.cpp b/editor/plugins/path_2d_editor_plugin.cpp
index 2174f08e23..5e811bfa11 100644
--- a/editor/plugins/path_2d_editor_plugin.cpp
+++ b/editor/plugins/path_2d_editor_plugin.cpp
@@ -269,7 +269,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
return false;
}
-void Path2DEditor::forward_draw_over_canvas(Control *p_canvas) {
+void Path2DEditor::forward_draw_over_viewport(Control *p_overlay) {
if (!node)
return;
diff --git a/editor/plugins/path_2d_editor_plugin.h b/editor/plugins/path_2d_editor_plugin.h
index 516e48c471..638d933797 100644
--- a/editor/plugins/path_2d_editor_plugin.h
+++ b/editor/plugins/path_2d_editor_plugin.h
@@ -94,7 +94,7 @@ protected:
public:
bool forward_gui_input(const Ref<InputEvent> &p_event);
- void forward_draw_over_canvas(Control *p_canvas);
+ void forward_draw_over_viewport(Control *p_overlay);
void edit(Node *p_path2d);
Path2DEditor(EditorNode *p_editor);
};
@@ -108,7 +108,7 @@ class Path2DEditorPlugin : public EditorPlugin {
public:
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return path2d_editor->forward_gui_input(p_event); }
- virtual void forward_draw_over_canvas(Control *p_canvas) { return path2d_editor->forward_draw_over_canvas(p_canvas); }
+ virtual void forward_draw_over_viewport(Control *p_overlay) { return path2d_editor->forward_draw_over_viewport(p_overlay); }
virtual String get_name() const { return "Path2D"; }
bool has_main_screen() const { return false; }
diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp
index ebb5f57e99..25e734187d 100644
--- a/editor/plugins/polygon_2d_editor_plugin.cpp
+++ b/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -459,8 +459,8 @@ Vector2 Polygon2DEditor::snap_point(Vector2 p_target) const {
return p_target;
}
-Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor)
- : AbstractPolygon2DEditor(p_editor) {
+Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) :
+ AbstractPolygon2DEditor(p_editor) {
snap_step = Vector2(10, 10);
use_snap = false;
@@ -609,6 +609,6 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor)
uv_edit_draw->set_clip_contents(true);
}
-Polygon2DEditorPlugin::Polygon2DEditorPlugin(EditorNode *p_node)
- : AbstractPolygon2DEditorPlugin(p_node, memnew(Polygon2DEditor(p_node)), "Polygon2D") {
+Polygon2DEditorPlugin::Polygon2DEditorPlugin(EditorNode *p_node) :
+ AbstractPolygon2DEditorPlugin(p_node, memnew(Polygon2DEditor(p_node)), "Polygon2D") {
}
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp
index 3c2d52c128..c02b3458e5 100644
--- a/editor/plugins/script_editor_plugin.cpp
+++ b/editor/plugins/script_editor_plugin.cpp
@@ -586,6 +586,12 @@ void ScriptEditor::_close_docs_tab() {
}
}
+void ScriptEditor::_copy_script_path() {
+ ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(tab_container->get_current_tab()));
+ Ref<Script> script = se->get_edited_script();
+ OS::get_singleton()->set_clipboard(script->get_path());
+}
+
void ScriptEditor::_close_other_tabs() {
int child_count = tab_container->get_child_count();
@@ -1026,6 +1032,9 @@ void ScriptEditor::_menu_option(int p_option) {
_close_current_tab();
}
} break;
+ case FILE_COPY_PATH: {
+ _copy_script_path();
+ } break;
case CLOSE_DOCS: {
_close_docs_tab();
} break;
@@ -2175,6 +2184,7 @@ void ScriptEditor::_make_script_list_context_menu() {
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_all"), CLOSE_ALL);
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_other_tabs"), CLOSE_OTHER_TABS);
context_menu->add_separator();
+ context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/copy_path"), FILE_COPY_PATH);
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/reload_script_soft"), FILE_TOOL_RELOAD_SOFT);
Ref<Script> scr = se->get_edited_script();
@@ -2507,6 +2517,7 @@ void ScriptEditor::_bind_methods() {
ClassDB::bind_method("_help_search", &ScriptEditor::_help_search);
ClassDB::bind_method("_help_index", &ScriptEditor::_help_index);
ClassDB::bind_method("_save_history", &ScriptEditor::_save_history);
+ ClassDB::bind_method("_copy_script_path", &ScriptEditor::_copy_script_path);
ClassDB::bind_method("_breaked", &ScriptEditor::_breaked);
ClassDB::bind_method("_show_debugger", &ScriptEditor::_show_debugger);
@@ -2626,6 +2637,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_all", TTR("Save All"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_MASK_ALT | KEY_S), FILE_SAVE_ALL);
file_menu->get_popup()->add_separator();
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_script_soft", TTR("Soft Reload Script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R), FILE_TOOL_RELOAD_SOFT);
+ file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/copy_path", TTR("Copy Script Path")), FILE_COPY_PATH);
file_menu->get_popup()->add_separator();
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_previous", TTR("History Prev"), KEY_MASK_ALT | KEY_LEFT), WINDOW_PREV);
diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h
index 77ca4bc9d9..ffd42d18ca 100644
--- a/editor/plugins/script_editor_plugin.h
+++ b/editor/plugins/script_editor_plugin.h
@@ -137,6 +137,7 @@ class ScriptEditor : public PanelContainer {
CLOSE_ALL,
CLOSE_OTHER_TABS,
TOGGLE_SCRIPTS_PANEL,
+ FILE_COPY_PATH,
FILE_TOOL_RELOAD,
FILE_TOOL_RELOAD_SOFT,
DEBUG_NEXT,
@@ -255,6 +256,8 @@ class ScriptEditor : public PanelContainer {
void _close_other_tabs();
void _close_all_tabs();
+ void _copy_script_path();
+
void _ask_close_current_unsaved_tab(ScriptEditorBase *current);
bool grab_focus_block;
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index 214f24b386..95f2739927 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -96,10 +96,10 @@ void ScriptTextEditor::_load_theme_settings() {
Color member_variable_color = EDITOR_DEF("text_editor/highlighting/member_variable_color", Color(0.9, 0.3, 0.3));
Color mark_color = EDITOR_DEF("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4));
Color breakpoint_color = EDITOR_DEF("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2));
+ Color code_folding_color = EDITOR_DEF("text_editor/highlighting/code_folding_color", Color(0.8, 0.8, 0.8, 0.8));
Color search_result_color = EDITOR_DEF("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1));
Color search_result_border_color = EDITOR_DEF("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1));
Color symbol_color = EDITOR_DEF("text_editor/highlighting/symbol_color", Color::hex(0x005291ff));
-
Color keyword_color = EDITOR_DEF("text_editor/highlighting/keyword_color", Color(0.5, 0.0, 0.2));
Color basetype_color = EDITOR_DEF("text_editor/highlighting/base_type_color", Color(0.3, 0.3, 0.0));
Color type_color = EDITOR_DEF("text_editor/highlighting/engine_type_color", Color(0.0, 0.2, 0.4));
@@ -137,6 +137,7 @@ void ScriptTextEditor::_load_theme_settings() {
member_variable_color = tm->get_color("text_editor/theme/member_variable_color", "Editor");
mark_color = tm->get_color("text_editor/theme/mark_color", "Editor");
breakpoint_color = tm->get_color("text_editor/theme/breakpoint_color", "Editor");
+ code_folding_color = tm->get_color("text_editor/theme/code_folding_color", "Editor");
search_result_color = tm->get_color("text_editor/theme/search_result_color", "Editor");
search_result_border_color = tm->get_color("text_editor/theme/search_result_border_color", "Editor");
}
@@ -160,8 +161,9 @@ void ScriptTextEditor::_load_theme_settings() {
text_edit->add_color_override("number_color", number_color);
text_edit->add_color_override("function_color", function_color);
text_edit->add_color_override("member_variable_color", member_variable_color);
- text_edit->add_color_override("mark_color", mark_color);
text_edit->add_color_override("breakpoint_color", breakpoint_color);
+ text_edit->add_color_override("mark_color", mark_color);
+ text_edit->add_color_override("code_folding_color", code_folding_color);
text_edit->add_color_override("search_result_color", search_result_color);
text_edit->add_color_override("search_result_border_color", search_result_border_color);
text_edit->add_color_override("symbol_color", symbol_color);
@@ -1013,14 +1015,9 @@ void ScriptTextEditor::_edit_option(int p_op) {
tx->end_complex_operation();
tx->update();
} break;
- case EDIT_FOLD_LINE: {
+ case EDIT_TOGGLE_FOLD_LINE: {
- tx->fold_line(tx->cursor_get_line());
- tx->update();
- } break;
- case EDIT_UNFOLD_LINE: {
-
- tx->unfold_line(tx->cursor_get_line());
+ tx->toggle_fold_line(tx->cursor_get_line());
tx->update();
} break;
case EDIT_FOLD_ALL_LINES: {
@@ -1039,6 +1036,18 @@ void ScriptTextEditor::_edit_option(int p_op) {
if (scr.is_null())
return;
+ String delimiter = "#";
+ List<String> comment_delimiters;
+ scr->get_language()->get_comment_delimiters(&comment_delimiters);
+
+ for (List<String>::Element *E = comment_delimiters.front(); E; E = E->next()) {
+ String script_delimiter = E->get();
+ if (script_delimiter.find(" ") == -1) {
+ delimiter = script_delimiter;
+ break;
+ }
+ }
+
tx->begin_complex_operation();
if (tx->is_selection_active()) {
int begin = tx->get_selection_from_line();
@@ -1051,7 +1060,7 @@ void ScriptTextEditor::_edit_option(int p_op) {
// Check if all lines in the selected block are commented
bool is_commented = true;
for (int i = begin; i <= end; i++) {
- if (!tx->get_line(i).begins_with("#")) {
+ if (!tx->get_line(i).begins_with(delimiter)) {
is_commented = false;
break;
}
@@ -1060,12 +1069,12 @@ void ScriptTextEditor::_edit_option(int p_op) {
String line_text = tx->get_line(i);
if (line_text.strip_edges().empty()) {
- line_text = "#";
+ line_text = delimiter;
} else {
if (is_commented) {
- line_text = line_text.substr(1, line_text.length());
+ line_text = line_text.substr(delimiter.length(), line_text.length());
} else {
- line_text = "#" + line_text;
+ line_text = delimiter + line_text;
}
}
tx->set_line(i, line_text);
@@ -1074,10 +1083,10 @@ void ScriptTextEditor::_edit_option(int p_op) {
int begin = tx->cursor_get_line();
String line_text = tx->get_line(begin);
- if (line_text.begins_with("#"))
- line_text = line_text.substr(1, line_text.length());
+ if (line_text.begins_with(delimiter))
+ line_text = line_text.substr(delimiter.length(), line_text.length());
else
- line_text = "#" + line_text;
+ line_text = delimiter + line_text;
tx->set_line(begin, line_text);
}
tx->end_complex_operation();
@@ -1497,17 +1506,15 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p
if (p_selection) {
context_menu->add_separator();
+ context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_to_uppercase"), EDIT_TO_UPPERCASE);
+ context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_to_lowercase"), EDIT_TO_LOWERCASE);
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/indent_left"), EDIT_INDENT_LEFT);
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/indent_right"), EDIT_INDENT_RIGHT);
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_comment"), EDIT_TOGGLE_COMMENT);
}
- if (p_can_fold) {
- // can fold
- context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/fold_line"), EDIT_FOLD_LINE);
- } else if (p_is_folded) {
- // can unfold
- context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/unfold_line"), EDIT_UNFOLD_LINE);
- }
+ if (p_can_fold || p_is_folded)
+ context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_fold_line"), EDIT_TOGGLE_FOLD_LINE);
+
if (p_color) {
context_menu->add_separator();
context_menu->add_item(TTR("Pick Color"), EDIT_PICK_COLOR);
@@ -1571,9 +1578,8 @@ ScriptTextEditor::ScriptTextEditor() {
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/delete_line"), EDIT_DELETE_LINE);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_comment"), EDIT_TOGGLE_COMMENT);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/clone_down"), EDIT_CLONE_DOWN);
- edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/fold_line"), EDIT_FOLD_LINE);
+ edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_fold_line"), EDIT_TOGGLE_FOLD_LINE);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/fold_all_lines"), EDIT_FOLD_ALL_LINES);
- edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/unfold_line"), EDIT_UNFOLD_LINE);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/unfold_all_lines"), EDIT_UNFOLD_ALL_LINES);
edit_menu->get_popup()->add_separator();
#ifdef OSX_ENABLED
@@ -1652,8 +1658,7 @@ void ScriptTextEditor::register_editor() {
ED_SHORTCUT("script_text_editor/indent_right", TTR("Indent Right"), 0);
ED_SHORTCUT("script_text_editor/toggle_comment", TTR("Toggle Comment"), KEY_MASK_CMD | KEY_K);
ED_SHORTCUT("script_text_editor/clone_down", TTR("Clone Down"), KEY_MASK_CMD | KEY_B);
- ED_SHORTCUT("script_text_editor/fold_line", TTR("Fold Line"), KEY_MASK_ALT | KEY_LEFT);
- ED_SHORTCUT("script_text_editor/unfold_line", TTR("Unfold Line"), KEY_MASK_ALT | KEY_RIGHT);
+ ED_SHORTCUT("script_text_editor/toggle_fold_line", TTR("Fold/Unfold Line"), KEY_MASK_ALT | KEY_F);
ED_SHORTCUT("script_text_editor/fold_all_lines", TTR("Fold All Lines"), 0);
ED_SHORTCUT("script_text_editor/unfold_all_lines", TTR("Unfold All Lines"), 0);
#ifdef OSX_ENABLED
diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h
index 722015ef3e..e3b81e7c3f 100644
--- a/editor/plugins/script_text_editor.h
+++ b/editor/plugins/script_text_editor.h
@@ -91,8 +91,7 @@ class ScriptTextEditor : public ScriptEditorBase {
EDIT_TO_UPPERCASE,
EDIT_TO_LOWERCASE,
EDIT_CAPITALIZE,
- EDIT_FOLD_LINE,
- EDIT_UNFOLD_LINE,
+ EDIT_TOGGLE_FOLD_LINE,
EDIT_FOLD_ALL_LINES,
EDIT_UNFOLD_ALL_LINES,
SEARCH_FIND,
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index 49e4642049..b390070b4a 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -81,6 +81,7 @@ void ShaderTextEditor::_load_theme_settings() {
Color member_variable_color = EDITOR_DEF("text_editor/highlighting/member_variable_color", Color(0.9, 0.3, 0.3));
Color mark_color = EDITOR_DEF("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4));
Color breakpoint_color = EDITOR_DEF("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2));
+ Color code_folding_color = EDITOR_DEF("text_editor/highlighting/code_folding_color", Color(0.8, 0.8, 0.8, 0.8));
Color search_result_color = EDITOR_DEF("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1));
Color search_result_border_color = EDITOR_DEF("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1));
Color symbol_color = EDITOR_DEF("text_editor/highlighting/symbol_color", Color::hex(0x005291ff));
@@ -122,6 +123,7 @@ void ShaderTextEditor::_load_theme_settings() {
member_variable_color = tm->get_color("text_editor/theme/member_variable_color", "Editor");
mark_color = tm->get_color("text_editor/theme/mark_color", "Editor");
breakpoint_color = tm->get_color("text_editor/theme/breakpoint_color", "Editor");
+ code_folding_color = tm->get_color("text_editor/theme/code_folding_color", "Editor");
search_result_color = tm->get_color("text_editor/theme/search_result_color", "Editor");
search_result_border_color = tm->get_color("text_editor/theme/search_result_border_color", "Editor");
}
@@ -147,6 +149,7 @@ void ShaderTextEditor::_load_theme_settings() {
get_text_edit()->add_color_override("member_variable_color", member_variable_color);
get_text_edit()->add_color_override("mark_color", mark_color);
get_text_edit()->add_color_override("breakpoint_color", breakpoint_color);
+ get_text_edit()->add_color_override("code_folding_color", code_folding_color);
get_text_edit()->add_color_override("search_result_color", search_result_color);
get_text_edit()->add_color_override("search_result_border_color", search_result_border_color);
get_text_edit()->add_color_override("symbol_color", symbol_color);
diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp
index 5273d0ed89..80638c6f1e 100644
--- a/editor/plugins/spatial_editor_plugin.cpp
+++ b/editor/plugins/spatial_editor_plugin.cpp
@@ -2332,6 +2332,16 @@ static void draw_indicator_bar(Control &surface, real_t fill, Ref<Texture> icon)
void SpatialEditorViewport::_draw() {
+ EditorPluginList *over_plugin_list = EditorNode::get_singleton()->get_editor_plugins_over();
+ if (!over_plugin_list->empty()) {
+ over_plugin_list->forward_draw_over_viewport(surface);
+ }
+
+ EditorPluginList *force_over_plugin_list = editor->get_editor_plugins_force_over();
+ if (!force_over_plugin_list->empty()) {
+ force_over_plugin_list->forward_force_draw_over_viewport(surface);
+ }
+
if (surface->has_focus()) {
Size2 size = surface->get_size();
Rect2 r = Rect2(Point2(), size);
@@ -2838,6 +2848,20 @@ void SpatialEditorViewport::set_state(const Dictionary &p_state) {
camera->set_doppler_tracking(doppler ? Camera::DOPPLER_TRACKING_IDLE_STEP : Camera::DOPPLER_TRACKING_DISABLED);
view_menu->get_popup()->set_item_checked(idx, doppler);
}
+ if (p_state.has("gizmos")) {
+ bool gizmos = p_state["gizmos"];
+
+ int idx = view_menu->get_popup()->get_item_index(VIEW_GIZMOS);
+ if (view_menu->get_popup()->is_item_checked(idx) != gizmos)
+ _menu_option(VIEW_GIZMOS);
+ }
+ if (p_state.has("information")) {
+ bool information = p_state["information"];
+
+ int idx = view_menu->get_popup()->get_item_index(VIEW_INFORMATION);
+ if (view_menu->get_popup()->is_item_checked(idx) != information)
+ _menu_option(VIEW_INFORMATION);
+ }
if (p_state.has("half_res")) {
bool half_res = p_state["half_res"];
@@ -2869,6 +2893,9 @@ Dictionary SpatialEditorViewport::get_state() const {
d["use_environment"] = camera->get_environment().is_valid();
d["use_orthogonal"] = camera->get_projection() == Camera::PROJECTION_ORTHOGONAL;
d["listener"] = viewport->is_audio_listener();
+ d["doppler"] = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_AUDIO_DOPPLER));
+ d["gizmos"] = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_GIZMOS));
+ d["information"] = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_INFORMATION));
d["half_res"] = viewport_container->get_stretch_shrink() > 1;
if (previewing) {
d["previewing"] = EditorNode::get_singleton()->get_edited_scene()->get_path_to(previewing);
@@ -3361,6 +3388,8 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
preview_camera->set_toggle_mode(true);
preview_camera->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -90 * EDSCALE);
preview_camera->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE);
+ preview_camera->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -10 * EDSCALE);
+ preview_camera->set_h_grow_direction(GROW_DIRECTION_BEGIN);
preview_camera->set_text(TTR("preview"));
surface->add_child(preview_camera);
preview_camera->hide();
@@ -4869,8 +4898,8 @@ void SpatialEditor::_bind_methods() {
void SpatialEditor::clear() {
- settings_fov->set_value(EDITOR_DEF("editors/3d/default_fov", 55.0));
- settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.1));
+ settings_fov->set_value(EDITOR_DEF("editors/3d/default_fov", 70.0));
+ settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.05));
settings_zfar->set_value(EDITOR_DEF("editors/3d/default_z_far", 1500.0));
for (uint32_t i = 0; i < VIEWPORTS_COUNT; i++) {
@@ -5113,14 +5142,14 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
settings_fov->set_max(MAX_FOV);
settings_fov->set_min(MIN_FOV);
settings_fov->set_step(0.01);
- settings_fov->set_value(EDITOR_DEF("editors/3d/default_fov", 55.0));
+ settings_fov->set_value(EDITOR_DEF("editors/3d/default_fov", 70.0));
settings_vbc->add_margin_child(TTR("Perspective FOV (deg.):"), settings_fov);
settings_znear = memnew(SpinBox);
settings_znear->set_max(MAX_Z);
settings_znear->set_min(MIN_Z);
settings_znear->set_step(0.01);
- settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.1));
+ settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.05));
settings_vbc->add_margin_child(TTR("View Z-Near:"), settings_znear);
settings_zfar = memnew(SpinBox);
diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h
index 9571c96506..8369a5de54 100644
--- a/editor/plugins/spatial_editor_plugin.h
+++ b/editor/plugins/spatial_editor_plugin.h
@@ -311,6 +311,7 @@ protected:
static void _bind_methods();
public:
+ void update_surface() { surface->update(); }
void update_transform_gizmo_view();
void set_can_preview(Camera *p_preview);
@@ -389,6 +390,8 @@ class SpatialEditor : public VBoxContainer {
GDCLASS(SpatialEditor, VBoxContainer);
public:
+ static const unsigned int VIEWPORTS_COUNT = 4;
+
enum ToolMode {
TOOL_MODE_SELECT,
@@ -403,8 +406,6 @@ public:
};
private:
- static const unsigned int VIEWPORTS_COUNT = 4;
-
EditorNode *editor;
EditorSelection *editor_selection;
diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp
index b3bb103577..175655119f 100644
--- a/editor/plugins/sprite_frames_editor_plugin.cpp
+++ b/editor/plugins/sprite_frames_editor_plugin.cpp
@@ -394,6 +394,7 @@ void SpriteFramesEditor::_animation_add() {
edited_anim = name;
undo_redo->commit_action();
+ animations->grab_focus();
}
void SpriteFramesEditor::_animation_remove() {
diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp
index ffddd8a3a9..4d06342fe0 100644
--- a/editor/plugins/tile_map_editor_plugin.cpp
+++ b/editor/plugins/tile_map_editor_plugin.cpp
@@ -123,12 +123,14 @@ void TileMapEditor::_menu_option(int p_option) {
return;
undo_redo->create_action(TTR("Erase Selection"));
+ undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data"));
for (int i = rectangle.position.y; i <= rectangle.position.y + rectangle.size.y; i++) {
for (int j = rectangle.position.x; j <= rectangle.position.x + rectangle.size.x; j++) {
- _set_cell(Point2i(j, i), TileMap::INVALID_CELL, false, false, false, true);
+ _set_cell(Point2i(j, i), TileMap::INVALID_CELL, false, false, false);
}
}
+ undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data"));
undo_redo->commit_action();
selection_active = false;
@@ -171,7 +173,7 @@ void TileMapEditor::set_selected_tile(int p_tile) {
}
}
-void TileMapEditor::_set_cell(const Point2i &p_pos, int p_value, bool p_flip_h, bool p_flip_v, bool p_transpose, bool p_with_undo) {
+void TileMapEditor::_set_cell(const Point2i &p_pos, int p_value, bool p_flip_h, bool p_flip_v, bool p_transpose) {
ERR_FAIL_COND(!node);
@@ -184,14 +186,8 @@ void TileMapEditor::_set_cell(const Point2i &p_pos, int p_value, bool p_flip_h,
if (p_value == prev_val && p_flip_h == prev_flip_h && p_flip_v == prev_flip_v && p_transpose == prev_transpose)
return; //check that it's actually different
- if (p_with_undo) {
-
- undo_redo->add_do_method(node, "set_cellv", Point2(p_pos), p_value, p_flip_h, p_flip_v, p_transpose);
- undo_redo->add_undo_method(node, "set_cellv", Point2(p_pos), prev_val, prev_flip_h, prev_flip_v, prev_transpose);
- } else {
-
- node->set_cell(p_pos.x, p_pos.y, p_value, p_flip_h, p_flip_v, p_transpose);
- }
+ node->set_cell(p_pos.x, p_pos.y, p_value, p_flip_h, p_flip_v, p_transpose);
+ node->update_bitmask_area(Point2(p_pos));
}
void TileMapEditor::_text_entered(const String &p_text) {
@@ -306,6 +302,12 @@ void TileMapEditor::_update_palette() {
if (tex.is_valid()) {
Rect2 region = tileset->tile_get_region(entries[i].id);
+ if (tileset->tile_get_is_autotile(entries[i].id)) {
+ int spacing = tileset->autotile_get_spacing(entries[i].id);
+ region.size = tileset->autotile_get_size(entries[i].id);
+ region.position += (region.size + Vector2(spacing, spacing)) * tileset->autotile_get_icon_coordinate(entries[i].id);
+ }
+
if (!region.has_no_area())
palette->set_item_icon_region(palette->get_item_count() - 1, region);
@@ -395,6 +397,7 @@ PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool era
}
PoolVector<Vector2> points;
+ Vector<Vector2> non_preview_cache;
int count = 0;
int limit = 0;
@@ -423,8 +426,10 @@ PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool era
bucket_cache_visited[loc] = true;
bucket_cache.push_back(n);
} else {
- node->set_cellv(n, id, flip_h, flip_v, transpose);
+ if (non_preview_cache.find(n) >= 0)
+ continue;
points.push_back(n);
+ non_preview_cache.push_back(n);
}
bucket_queue.push_back(Point2i(n.x, n.y + 1));
@@ -453,9 +458,10 @@ void TileMapEditor::_fill_points(const PoolVector<Vector2> p_points, const Dicti
bool tr = p_op["transpose"];
for (int i = 0; i < len; i++) {
-
_set_cell(pr[i], id, xf, yf, tr);
+ node->make_bitmask_area_dirty(pr[i]);
}
+ node->update_dirty_bitmask();
}
void TileMapEditor::_erase_points(const PoolVector<Vector2> p_points) {
@@ -499,6 +505,11 @@ void TileMapEditor::_draw_cell(int p_cell, const Point2i &p_point, bool p_flip_h
Vector2 tile_ofs = node->get_tileset()->tile_get_texture_offset(p_cell);
Rect2 r = node->get_tileset()->tile_get_region(p_cell);
+ if (node->get_tileset()->tile_get_is_autotile(p_cell)) {
+ int spacing = node->get_tileset()->autotile_get_spacing(p_cell);
+ r.size = node->get_tileset()->autotile_get_size(p_cell);
+ r.position += (r.size + Vector2(spacing, spacing)) * node->get_tileset()->autotile_get_icon_coordinate(p_cell);
+ }
Size2 sc = p_xform.get_scale();
Rect2 rect = Rect2();
@@ -551,20 +562,19 @@ void TileMapEditor::_draw_cell(int p_cell, const Point2i &p_point, bool p_flip_h
}
} else if (node->get_tile_origin() == TileMap::TILE_ORIGIN_CENTER) {
- rect.position += node->get_cell_size() / 2;
- Vector2 s = r.size;
+ Size2 cell_size = node->get_cell_size();
- Vector2 center = (s / 2) - tile_ofs;
+ rect.position += tile_ofs;
if (p_flip_h)
- rect.position.x -= s.x - center.x;
+ rect.position.x -= cell_size.x / 2;
else
- rect.position.x -= center.x;
+ rect.position.x += cell_size.x / 2;
if (p_flip_v)
- rect.position.y -= s.y - center.y;
+ rect.position.y -= cell_size.y / 2;
else
- rect.position.y -= center.y;
+ rect.position.y += cell_size.y / 2;
}
rect.position = p_xform.xform(rect.position);
@@ -717,10 +727,8 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
tool = TOOL_PAINTING;
- paint_undo.clear();
- paint_undo[over_tile] = _get_op_from_cell(over_tile);
-
- _set_cell(over_tile, id, flip_h, flip_v, transpose);
+ undo_redo->create_action(TTR("Paint TileMap"));
+ undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data"));
}
} else if (tool == TOOL_PICKING) {
@@ -741,15 +749,9 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
int id = get_selected_tile();
- if (id != TileMap::INVALID_CELL && paint_undo.size()) {
-
- undo_redo->create_action(TTR("Paint TileMap"));
- for (Map<Point2i, CellOp>::Element *E = paint_undo.front(); E; E = E->next()) {
+ if (id != TileMap::INVALID_CELL) {
- Point2 p = E->key();
- undo_redo->add_do_method(node, "set_cellv", p, id, flip_h, flip_v, transpose);
- undo_redo->add_undo_method(node, "set_cellv", p, E->get().idx, E->get().xf, E->get().yf, E->get().tr);
- }
+ undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data"));
undo_redo->commit_action();
paint_undo.clear();
@@ -761,10 +763,12 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
if (id != TileMap::INVALID_CELL) {
undo_redo->create_action(TTR("Line Draw"));
+ undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data"));
for (Map<Point2i, CellOp>::Element *E = paint_undo.front(); E; E = E->next()) {
- _set_cell(E->key(), id, flip_h, flip_v, transpose, true);
+ _set_cell(E->key(), id, flip_h, flip_v, transpose);
}
+ undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data"));
undo_redo->commit_action();
paint_undo.clear();
@@ -778,12 +782,14 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
if (id != TileMap::INVALID_CELL) {
undo_redo->create_action(TTR("Rectangle Paint"));
+ undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data"));
for (int i = rectangle.position.y; i <= rectangle.position.y + rectangle.size.y; i++) {
for (int j = rectangle.position.x; j <= rectangle.position.x + rectangle.size.x; j++) {
- _set_cell(Point2i(j, i), id, flip_h, flip_v, transpose, true);
+ _set_cell(Point2i(j, i), id, flip_h, flip_v, transpose);
}
}
+ undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data"));
undo_redo->commit_action();
canvas_item_editor->update();
@@ -793,10 +799,12 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
Point2 ofs = over_tile - rectangle.position;
undo_redo->create_action(TTR("Duplicate"));
+ undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data"));
for (List<TileData>::Element *E = copydata.front(); E; E = E->next()) {
- _set_cell(E->get().pos + ofs, E->get().cell, E->get().flip_h, E->get().flip_v, E->get().transpose, true);
+ _set_cell(E->get().pos + ofs, E->get().cell, E->get().flip_h, E->get().flip_v, E->get().transpose);
}
+ undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data"));
undo_redo->commit_action();
copydata.clear();
@@ -809,28 +817,23 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
} else if (tool == TOOL_BUCKET) {
- Dictionary pop;
- pop["id"] = node->get_cell(over_tile.x, over_tile.y);
- pop["flip_h"] = node->is_cell_x_flipped(over_tile.x, over_tile.y);
- pop["flip_v"] = node->is_cell_y_flipped(over_tile.x, over_tile.y);
- pop["transpose"] = node->is_cell_transposed(over_tile.x, over_tile.y);
-
PoolVector<Vector2> points = _bucket_fill(over_tile);
if (points.size() == 0)
return false;
+ undo_redo->create_action(TTR("Bucket Fill"));
+ undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data"));
+
Dictionary op;
op["id"] = get_selected_tile();
op["flip_h"] = flip_h;
op["flip_v"] = flip_v;
op["transpose"] = transpose;
- undo_redo->create_action(TTR("Bucket Fill"));
-
- undo_redo->add_do_method(this, "_fill_points", points, op);
- undo_redo->add_undo_method(this, "_fill_points", points, pop);
+ _fill_points(points, op);
+ undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data"));
undo_redo->commit_action();
// We want to keep the bucket-tool active
@@ -872,6 +875,9 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
Point2 local = node->world_to_map(xform_inv.xform(mb->get_position()));
+ undo_redo->create_action(TTR("Erase TileMap"));
+ undo_redo->add_undo_method(node, "set", "tile_data", node->get("tile_data"));
+
if (mb->get_shift()) {
if (mb->get_control())
@@ -885,7 +891,6 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
tool = TOOL_ERASING;
- paint_undo[local] = _get_op_from_cell(local);
_set_cell(local, TileMap::INVALID_CELL);
}
@@ -895,18 +900,8 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
} else {
if (tool == TOOL_ERASING || tool == TOOL_RECTANGLE_ERASE || tool == TOOL_LINE_ERASE) {
- if (paint_undo.size()) {
- undo_redo->create_action(TTR("Erase TileMap"));
- for (Map<Point2i, CellOp>::Element *E = paint_undo.front(); E; E = E->next()) {
-
- Point2 p = E->key();
- undo_redo->add_do_method(node, "set_cellv", p, TileMap::INVALID_CELL, false, false, false);
- undo_redo->add_undo_method(node, "set_cellv", p, E->get().idx, E->get().xf, E->get().yf, E->get().tr);
- }
-
- undo_redo->commit_action();
- paint_undo.clear();
- }
+ undo_redo->add_do_method(node, "set", "tile_data", node->get("tile_data"));
+ undo_redo->commit_action();
if (tool == TOOL_RECTANGLE_ERASE || tool == TOOL_LINE_ERASE) {
canvas_item_editor->update();
@@ -993,10 +988,6 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
Point2i pos = points[i];
- if (!paint_undo.has(pos)) {
- paint_undo[pos] = _get_op_from_cell(pos);
- }
-
_set_cell(pos, TileMap::INVALID_CELL);
}
@@ -1169,7 +1160,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
return false;
}
-void TileMapEditor::forward_draw_over_canvas(Control *p_canvas) {
+void TileMapEditor::forward_draw_over_viewport(Control *p_overlay) {
if (!node)
return;
diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h
index 73474a3f3d..b5f2618576 100644
--- a/editor/plugins/tile_map_editor_plugin.h
+++ b/editor/plugins/tile_map_editor_plugin.h
@@ -137,6 +137,8 @@ class TileMapEditor : public VBoxContainer {
bool flip_h;
bool flip_v;
bool transpose;
+ int auto_x;
+ int auto_y;
};
List<TileData> copydata;
@@ -165,7 +167,7 @@ class TileMapEditor : public VBoxContainer {
void _update_palette();
void _menu_option(int p_option);
- void _set_cell(const Point2i &p_pos, int p_value, bool p_flip_h = false, bool p_flip_v = false, bool p_transpose = false, bool p_with_undo = false);
+ void _set_cell(const Point2i &p_pos, int p_value, bool p_flip_h = false, bool p_flip_v = false, bool p_transpose = false);
void _canvas_mouse_enter();
void _canvas_mouse_exit();
@@ -182,7 +184,7 @@ public:
HBoxContainer *get_toolbar() const { return toolbar; }
bool forward_gui_input(const Ref<InputEvent> &p_event);
- void forward_draw_over_canvas(Control *p_canvas);
+ void forward_draw_over_viewport(Control *p_overlay);
void edit(Node *p_tile_map);
@@ -198,7 +200,7 @@ class TileMapEditorPlugin : public EditorPlugin {
public:
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return tile_map_editor->forward_gui_input(p_event); }
- virtual void forward_draw_over_canvas(Control *p_canvas) { tile_map_editor->forward_draw_over_canvas(p_canvas); }
+ virtual void forward_draw_over_viewport(Control *p_overlay) { tile_map_editor->forward_draw_over_viewport(p_overlay); }
virtual String get_name() const { return "TileMap"; }
bool has_main_screen() const { return false; }
diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp
index f2f71ba6b1..b8c57fd959 100644
--- a/editor/plugins/tile_set_editor_plugin.cpp
+++ b/editor/plugins/tile_set_editor_plugin.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "tile_set_editor_plugin.h"
+#include "editor/plugins/canvas_item_editor_plugin.h"
#include "scene/2d/physics_body_2d.h"
#include "scene/2d/sprite.h"
@@ -271,6 +272,7 @@ void TileSetEditorPlugin::edit(Object *p_node) {
if (Object::cast_to<TileSet>(p_node)) {
tileset_editor->edit(Object::cast_to<TileSet>(p_node));
tileset_editor->show();
+ autotile_editor->edit(p_node);
} else
tileset_editor->hide();
}
@@ -282,19 +284,1177 @@ bool TileSetEditorPlugin::handles(Object *p_node) const {
void TileSetEditorPlugin::make_visible(bool p_visible) {
- if (p_visible)
+ if (p_visible) {
tileset_editor->show();
- else
+ autotile_button->show();
+ autotile_editor->side_panel->show();
+ if (autotile_button->is_pressed()) {
+ autotile_editor->show();
+ }
+ } else {
tileset_editor->hide();
+ autotile_editor->side_panel->hide();
+ autotile_editor->hide();
+ autotile_button->hide();
+ }
}
TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) {
tileset_editor = memnew(TileSetEditor(p_node));
- p_node->get_viewport()->add_child(tileset_editor);
+ add_control_to_container(CONTAINER_CANVAS_EDITOR_MENU, tileset_editor);
tileset_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE);
tileset_editor->set_anchor(MARGIN_BOTTOM, Control::ANCHOR_BEGIN);
tileset_editor->set_end(Point2(0, 22));
tileset_editor->hide();
+
+ autotile_editor = memnew(AutotileEditor(p_node));
+ add_control_to_container(CONTAINER_CANVAS_EDITOR_SIDE, autotile_editor->side_panel);
+ autotile_editor->side_panel->set_anchors_and_margins_preset(Control::PRESET_WIDE);
+ autotile_editor->side_panel->set_custom_minimum_size(Size2(200, 0));
+ autotile_editor->side_panel->hide();
+ autotile_button = p_node->add_bottom_panel_item("Autotiles", autotile_editor);
+ autotile_button->hide();
+}
+
+AutotileEditor::AutotileEditor(EditorNode *p_editor) {
+
+ editor = p_editor;
+
+ //Side Panel
+ side_panel = memnew(Control);
+ side_panel->set_name("Autotiles");
+
+ VSplitContainer *split = memnew(VSplitContainer);
+ side_panel->add_child(split);
+ split->set_anchors_and_margins_preset(Control::PRESET_WIDE);
+
+ autotile_list = memnew(ItemList);
+ autotile_list->set_v_size_flags(SIZE_EXPAND_FILL);
+ autotile_list->set_h_size_flags(SIZE_EXPAND_FILL);
+ autotile_list->set_custom_minimum_size(Size2(02, 200));
+ autotile_list->connect("item_selected", this, "_on_autotile_selected");
+ split->add_child(autotile_list);
+
+ property_editor = memnew(PropertyEditor);
+ property_editor->set_v_size_flags(SIZE_EXPAND_FILL);
+ property_editor->set_h_size_flags(SIZE_EXPAND_FILL);
+ split->add_child(property_editor);
+
+ helper = memnew(AutotileEditorHelper(this));
+ property_editor->call_deferred("edit", helper);
+
+ // Editor
+
+ dragging_point = -1;
+ creating_shape = false;
+
+ set_custom_minimum_size(Size2(0, 150));
+
+ VBoxContainer *main_vb = memnew(VBoxContainer);
+ add_child(main_vb);
+ main_vb->set_anchors_and_margins_preset(Control::PRESET_WIDE);
+
+ HBoxContainer *tool_hb = memnew(HBoxContainer);
+ Ref<ButtonGroup> g(memnew(ButtonGroup));
+
+ String label[EDITMODE_MAX] = { "Icon", "Bitmask", "Collision", "Occlusion", "Navigation", "Priority" };
+
+ for (int i = 0; i < (int)EDITMODE_MAX; i++) {
+ tool_editmode[i] = memnew(Button);
+ tool_editmode[i]->set_text(label[i]);
+ tool_editmode[i]->set_toggle_mode(true);
+ tool_editmode[i]->set_button_group(g);
+ Vector<Variant> args;
+ args.push_back(i);
+ tool_editmode[i]->connect("pressed", this, "_on_edit_mode_changed", args);
+ tool_hb->add_child(tool_editmode[i]);
+ }
+ tool_editmode[EDITMODE_ICON]->set_pressed(true);
+
+ main_vb->add_child(tool_hb);
+ main_vb->add_child(memnew(HSeparator));
+
+ toolbar = memnew(HBoxContainer);
+ for (int i = 0; i < (int)TOOLBAR_MAX; i++) {
+ tool_containers[i] = memnew(HBoxContainer);
+ toolbar->add_child(tool_containers[i]);
+ tool_containers[i]->hide();
+ }
+
+ Ref<ButtonGroup> tg(memnew(ButtonGroup));
+
+ tools[TOOL_SELECT] = memnew(ToolButton);
+ tool_containers[TOOLBAR_DUMMY]->add_child(tools[TOOL_SELECT]);
+ tools[TOOL_SELECT]->set_tooltip("Select sub-tile to use as icon, this will be also used on invalid autotile bindings.");
+ tools[TOOL_SELECT]->set_toggle_mode(true);
+ tools[TOOL_SELECT]->set_button_group(tg);
+ tools[TOOL_SELECT]->set_pressed(true);
+ tool_containers[TOOLBAR_DUMMY]->show();
+
+ Vector<Variant> p;
+ tools[BITMASK_COPY] = memnew(ToolButton);
+ p.push_back((int)BITMASK_COPY);
+ tools[BITMASK_COPY]->connect("pressed", this, "_on_tool_clicked", p);
+ tool_containers[TOOLBAR_BITMASK]->add_child(tools[BITMASK_COPY]);
+ tools[BITMASK_PASTE] = memnew(ToolButton);
+ p = Vector<Variant>();
+ p.push_back((int)BITMASK_PASTE);
+ tools[BITMASK_PASTE]->connect("pressed", this, "_on_tool_clicked", p);
+ tool_containers[TOOLBAR_BITMASK]->add_child(tools[BITMASK_PASTE]);
+ tools[BITMASK_CLEAR] = memnew(ToolButton);
+ p = Vector<Variant>();
+ p.push_back((int)BITMASK_CLEAR);
+ tools[BITMASK_CLEAR]->connect("pressed", this, "_on_tool_clicked", p);
+ tool_containers[TOOLBAR_BITMASK]->add_child(tools[BITMASK_CLEAR]);
+
+ tools[SHAPE_NEW_POLYGON] = memnew(ToolButton);
+ tool_containers[TOOLBAR_SHAPE]->add_child(tools[SHAPE_NEW_POLYGON]);
+ tools[SHAPE_NEW_POLYGON]->set_toggle_mode(true);
+ tools[SHAPE_NEW_POLYGON]->set_button_group(tg);
+ tool_containers[TOOLBAR_SHAPE]->add_child(memnew(VSeparator));
+ tools[SHAPE_DELETE] = memnew(ToolButton);
+ p = Vector<Variant>();
+ p.push_back((int)SHAPE_DELETE);
+ tools[SHAPE_DELETE]->connect("pressed", this, "_on_tool_clicked", p);
+ tool_containers[TOOLBAR_SHAPE]->add_child(tools[SHAPE_DELETE]);
+ //tools[SHAPE_CREATE_FROM_NOT_BITMASKED] = memnew(ToolButton);
+ //tool_containers[TOOLBAR_SHAPE]->add_child(tools[SHAPE_CREATE_FROM_NOT_BITMASKED]);
+ tool_containers[TOOLBAR_SHAPE]->add_change_receptor(memnew(VSeparator));
+ tools[SHAPE_KEEP_INSIDE_TILE] = memnew(ToolButton);
+ tools[SHAPE_KEEP_INSIDE_TILE]->set_toggle_mode(true);
+ tools[SHAPE_KEEP_INSIDE_TILE]->set_pressed(true);
+ tool_containers[TOOLBAR_SHAPE]->add_child(tools[SHAPE_KEEP_INSIDE_TILE]);
+ tools[SHAPE_SNAP_TO_BITMASK_GRID] = memnew(ToolButton);
+ tools[SHAPE_SNAP_TO_BITMASK_GRID]->set_toggle_mode(true);
+ tools[SHAPE_SNAP_TO_BITMASK_GRID]->set_pressed(true);
+ tool_containers[TOOLBAR_SHAPE]->add_child(tools[SHAPE_SNAP_TO_BITMASK_GRID]);
+
+ spin_priority = memnew(SpinBox);
+ spin_priority->set_min(1);
+ spin_priority->set_max(255);
+ spin_priority->set_step(1);
+ spin_priority->set_custom_minimum_size(Size2(100, 0));
+ spin_priority->connect("value_changed", this, "_on_priority_changed");
+ spin_priority->hide();
+ toolbar->add_child(spin_priority);
+
+ Control *separator = memnew(Control);
+ separator->set_h_size_flags(SIZE_EXPAND_FILL);
+ toolbar->add_child(separator);
+
+ tools[ZOOM_OUT] = memnew(ToolButton);
+ p = Vector<Variant>();
+ p.push_back((int)ZOOM_OUT);
+ tools[ZOOM_OUT]->connect("pressed", this, "_on_tool_clicked", p);
+ toolbar->add_child(tools[ZOOM_OUT]);
+ tools[ZOOM_1] = memnew(ToolButton);
+ p = Vector<Variant>();
+ p.push_back((int)ZOOM_1);
+ tools[ZOOM_1]->connect("pressed", this, "_on_tool_clicked", p);
+ toolbar->add_child(tools[ZOOM_1]);
+ tools[ZOOM_IN] = memnew(ToolButton);
+ p = Vector<Variant>();
+ p.push_back((int)ZOOM_IN);
+ tools[ZOOM_IN]->connect("pressed", this, "_on_tool_clicked", p);
+ toolbar->add_child(tools[ZOOM_IN]);
+
+ main_vb->add_child(toolbar);
+
+ ScrollContainer *scroll = memnew(ScrollContainer);
+ main_vb->add_child(scroll);
+ scroll->set_v_size_flags(SIZE_EXPAND_FILL);
+
+ workspace_container = memnew(Control);
+ scroll->add_child(workspace_container);
+
+ workspace = memnew(Control);
+ workspace->connect("draw", this, "_on_workspace_draw");
+ workspace->connect("gui_input", this, "_on_workspace_input");
+ workspace_container->add_child(workspace);
+
+ preview = memnew(Sprite);
+ workspace->add_child(preview);
+ preview->set_centered(false);
+ preview->set_draw_behind_parent(true);
+ preview->set_region(true);
+}
+
+void AutotileEditor::_bind_methods() {
+
+ ClassDB::bind_method("_on_autotile_selected", &AutotileEditor::_on_autotile_selected);
+ ClassDB::bind_method("_on_edit_mode_changed", &AutotileEditor::_on_edit_mode_changed);
+ ClassDB::bind_method("_on_workspace_draw", &AutotileEditor::_on_workspace_draw);
+ ClassDB::bind_method("_on_workspace_input", &AutotileEditor::_on_workspace_input);
+ ClassDB::bind_method("_on_tool_clicked", &AutotileEditor::_on_tool_clicked);
+ ClassDB::bind_method("_on_priority_changed", &AutotileEditor::_on_priority_changed);
+}
+
+void AutotileEditor::_notification(int p_what) {
+
+ if (p_what == NOTIFICATION_ENTER_TREE) {
+ tools[TOOL_SELECT]->set_icon(get_icon("ToolSelect", "EditorIcons"));
+ tools[BITMASK_COPY]->set_icon(get_icon("Duplicate", "EditorIcons"));
+ tools[BITMASK_PASTE]->set_icon(get_icon("Override", "EditorIcons"));
+ tools[BITMASK_CLEAR]->set_icon(get_icon("Clear", "EditorIcons"));
+ tools[SHAPE_NEW_POLYGON]->set_icon(get_icon("CollisionPolygon2D", "EditorIcons"));
+ tools[SHAPE_DELETE]->set_icon(get_icon("Remove", "EditorIcons"));
+ tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_icon("Snap", "EditorIcons"));
+ tools[SHAPE_SNAP_TO_BITMASK_GRID]->set_icon(get_icon("SnapGrid", "EditorIcons"));
+ tools[ZOOM_OUT]->set_icon(get_icon("ZoomLess", "EditorIcons"));
+ tools[ZOOM_1]->set_icon(get_icon("ZoomReset", "EditorIcons"));
+ tools[ZOOM_IN]->set_icon(get_icon("ZoomMore", "EditorIcons"));
+ }
+}
+
+void AutotileEditor::_on_autotile_selected(int p_index) {
+
+ if (get_current_tile() >= 0) {
+ current_item_index = p_index;
+ preview->set_texture(tile_set->tile_get_texture(get_current_tile()));
+ preview->set_region_rect(tile_set->tile_get_region(get_current_tile()));
+ workspace->set_custom_minimum_size(tile_set->tile_get_region(get_current_tile()).size);
+ } else {
+ current_item_index = -1;
+ preview->set_texture(NULL);
+ workspace->set_custom_minimum_size(Size2i());
+ }
+ helper->_change_notify("");
+ workspace->update();
+}
+
+void AutotileEditor::_on_edit_mode_changed(int p_edit_mode) {
+
+ edit_mode = (EditMode)p_edit_mode;
+ switch (edit_mode) {
+ case EDITMODE_BITMASK: {
+ tool_containers[TOOLBAR_DUMMY]->show();
+ tool_containers[TOOLBAR_BITMASK]->show();
+ tool_containers[TOOLBAR_SHAPE]->hide();
+ tools[TOOL_SELECT]->set_pressed(true);
+ tools[TOOL_SELECT]->set_tooltip("LMB: set bit on.\nRMB: set bit off.");
+ spin_priority->hide();
+ } break;
+ case EDITMODE_COLLISION:
+ case EDITMODE_NAVIGATION:
+ case EDITMODE_OCCLUSION: {
+ tool_containers[TOOLBAR_DUMMY]->show();
+ tool_containers[TOOLBAR_BITMASK]->hide();
+ tool_containers[TOOLBAR_SHAPE]->show();
+ tools[TOOL_SELECT]->set_tooltip("Select current edited sub-tile.");
+ spin_priority->hide();
+ } break;
+ default: {
+ tool_containers[TOOLBAR_DUMMY]->show();
+ tool_containers[TOOLBAR_BITMASK]->hide();
+ tool_containers[TOOLBAR_SHAPE]->hide();
+ if (edit_mode == EDITMODE_ICON) {
+ tools[TOOL_SELECT]->set_tooltip("Select sub-tile to use as icon, this will be also used on invalid autotile bindings.");
+ spin_priority->hide();
+ } else {
+ tools[TOOL_SELECT]->set_tooltip("Select sub-tile to change it's priority.");
+ spin_priority->show();
+ }
+ } break;
+ }
+ workspace->update();
+}
+
+void AutotileEditor::_on_workspace_draw() {
+
+ if (get_current_tile() >= 0 && !tile_set.is_null()) {
+ int spacing = tile_set->autotile_get_spacing(get_current_tile());
+ Vector2 size = tile_set->autotile_get_size(get_current_tile());
+ Rect2i region = tile_set->tile_get_region(get_current_tile());
+ Color c(0.347214, 0.722656, 0.617063);
+
+ switch (edit_mode) {
+ case EDITMODE_ICON: {
+ Vector2 coord = tile_set->autotile_get_icon_coordinate(get_current_tile());
+ draw_highlight_tile(coord);
+ } break;
+ case EDITMODE_BITMASK: {
+ c = Color(1, 0, 0, 0.5);
+ for (float x = 0; x < region.size.x / (spacing + size.x); x++) {
+ for (float y = 0; y < region.size.y / (spacing + size.y); y++) {
+ Vector2 coord(x, y);
+ Point2 anchor(coord.x * (spacing + size.x), coord.y * (spacing + size.y));
+ uint16_t mask = tile_set->autotile_get_bitmask(get_current_tile(), coord);
+ if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) {
+ if (mask & TileSet::BIND_TOPLEFT) {
+ workspace->draw_rect(Rect2(anchor, size / 2), c);
+ }
+ if (mask & TileSet::BIND_TOPRIGHT) {
+ workspace->draw_rect(Rect2(anchor + Vector2(size.x / 2, 0), size / 2), c);
+ }
+ if (mask & TileSet::BIND_BOTTOMLEFT) {
+ workspace->draw_rect(Rect2(anchor + Vector2(0, size.y / 2), size / 2), c);
+ }
+ if (mask & TileSet::BIND_BOTTOMRIGHT) {
+ workspace->draw_rect(Rect2(anchor + size / 2, size / 2), c);
+ }
+ } else if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) {
+ if (mask & TileSet::BIND_TOPLEFT) {
+ workspace->draw_rect(Rect2(anchor, size / 3), c);
+ }
+ if (mask & TileSet::BIND_TOP) {
+ workspace->draw_rect(Rect2(anchor + Vector2(size.x / 3, 0), size / 3), c);
+ }
+ if (mask & TileSet::BIND_TOPRIGHT) {
+ workspace->draw_rect(Rect2(anchor + Vector2((size.x / 3) * 2, 0), size / 3), c);
+ }
+ if (mask & TileSet::BIND_LEFT) {
+ workspace->draw_rect(Rect2(anchor + Vector2(0, size.y / 3), size / 3), c);
+ }
+ if (mask & TileSet::BIND_CENTER) {
+ workspace->draw_rect(Rect2(anchor + Vector2(size.x / 3, size.y / 3), size / 3), c);
+ }
+ if (mask & TileSet::BIND_RIGHT) {
+ workspace->draw_rect(Rect2(anchor + Vector2((size.x / 3) * 2, size.y / 3), size / 3), c);
+ }
+ if (mask & TileSet::BIND_BOTTOMLEFT) {
+ workspace->draw_rect(Rect2(anchor + Vector2(0, (size.y / 3) * 2), size / 3), c);
+ }
+ if (mask & TileSet::BIND_BOTTOM) {
+ workspace->draw_rect(Rect2(anchor + Vector2(size.x / 3, (size.y / 3) * 2), size / 3), c);
+ }
+ if (mask & TileSet::BIND_BOTTOMRIGHT) {
+ workspace->draw_rect(Rect2(anchor + (size / 3) * 2, size / 3), c);
+ }
+ }
+ }
+ }
+ } break;
+ case EDITMODE_COLLISION:
+ case EDITMODE_OCCLUSION:
+ case EDITMODE_NAVIGATION: {
+ Vector2 coord = edited_shape_coord;
+ draw_highlight_tile(coord);
+ draw_polygon_shapes();
+ } break;
+ case EDITMODE_PRIORITY: {
+ spin_priority->set_value(tile_set->autotile_get_subtile_priority(get_current_tile(), edited_shape_coord));
+ uint16_t mask = tile_set->autotile_get_bitmask(get_current_tile(), edited_shape_coord);
+ Vector<Vector2> queue_others;
+ int total = 0;
+ for (Map<Vector2, uint16_t>::Element *E = tile_set->autotile_get_bitmask_map(get_current_tile()).front(); E; E = E->next()) {
+ if (E->value() == mask) {
+ total += tile_set->autotile_get_subtile_priority(get_current_tile(), E->key());
+ if (E->key() != edited_shape_coord) {
+ queue_others.push_back(E->key());
+ }
+ }
+ }
+ spin_priority->set_suffix(" / " + String::num(total, 0));
+ draw_highlight_tile(edited_shape_coord, queue_others);
+ } break;
+ }
+
+ float j = -size.x; //make sure to draw at 0
+ while (j < region.size.x) {
+ j += size.x;
+ if (spacing <= 0) {
+ workspace->draw_line(Point2(j, 0), Point2(j, region.size.y), c);
+ } else {
+ workspace->draw_rect(Rect2(Point2(j, 0), Size2(spacing, region.size.y)), c);
+ }
+ j += spacing;
+ }
+ j = -size.y; //make sure to draw at 0
+ while (j < region.size.y) {
+ j += size.y;
+ if (spacing <= 0) {
+ workspace->draw_line(Point2(0, j), Point2(region.size.x, j), c);
+ } else {
+ workspace->draw_rect(Rect2(Point2(0, j), Size2(region.size.x, spacing)), c);
+ }
+ j += spacing;
+ }
+ }
+}
+
+#define MIN_DISTANCE_SQUARED 10
+void AutotileEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) {
+
+ if (get_current_tile() >= 0 && !tile_set.is_null()) {
+ Ref<InputEventMouseButton> mb = p_ie;
+ Ref<InputEventMouseMotion> mm = p_ie;
+
+ static bool dragging;
+ static bool erasing;
+
+ int spacing = tile_set->autotile_get_spacing(get_current_tile());
+ Vector2 size = tile_set->autotile_get_size(get_current_tile());
+ switch (edit_mode) {
+ case EDITMODE_ICON: {
+ if (mb.is_valid()) {
+ if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) {
+ Vector2 coord((int)(mb->get_position().x / (spacing + size.x)), (int)(mb->get_position().y / (spacing + size.y)));
+ tile_set->autotile_set_icon_coordinate(get_current_tile(), coord);
+ Rect2 region = tile_set->tile_get_region(get_current_tile());
+ region.size = size;
+ coord.x *= (spacing + size.x);
+ coord.y *= (spacing + size.y);
+ region.position += coord;
+ autotile_list->set_item_icon_region(current_item_index, region);
+ workspace->update();
+ }
+ }
+ } break;
+ case EDITMODE_BITMASK: {
+ if (mb.is_valid()) {
+ if (mb->is_pressed()) {
+ if (dragging) {
+ return;
+ }
+ if (mb->get_button_index() == BUTTON_RIGHT || mb->get_button_index() == BUTTON_LEFT) {
+ dragging = true;
+ erasing = (mb->get_button_index() == BUTTON_RIGHT);
+ Vector2 coord((int)(mb->get_position().x / (spacing + size.x)), (int)(mb->get_position().y / (spacing + size.y)));
+ Vector2 pos(coord.x * (spacing + size.x), coord.y * (spacing + size.y));
+ pos = mb->get_position() - pos;
+ uint16_t bit;
+ if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) {
+ if (pos.x < size.x / 2) {
+ if (pos.y < size.y / 2) {
+ bit = TileSet::BIND_TOPLEFT;
+ } else {
+ bit = TileSet::BIND_BOTTOMLEFT;
+ }
+ } else {
+ if (pos.y < size.y / 2) {
+ bit = TileSet::BIND_TOPRIGHT;
+ } else {
+ bit = TileSet::BIND_BOTTOMRIGHT;
+ }
+ }
+ } else if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) {
+ if (pos.x < size.x / 3) {
+ if (pos.y < size.y / 3) {
+ bit = TileSet::BIND_TOPLEFT;
+ } else if (pos.y > (size.y / 3) * 2) {
+ bit = TileSet::BIND_BOTTOMLEFT;
+ } else {
+ bit = TileSet::BIND_LEFT;
+ }
+ } else if (pos.x > (size.x / 3) * 2) {
+ if (pos.y < size.y / 3) {
+ bit = TileSet::BIND_TOPRIGHT;
+ } else if (pos.y > (size.y / 3) * 2) {
+ bit = TileSet::BIND_BOTTOMRIGHT;
+ } else {
+ bit = TileSet::BIND_RIGHT;
+ }
+ } else {
+ if (pos.y < size.y / 3) {
+ bit = TileSet::BIND_TOP;
+ } else if (pos.y > (size.y / 3) * 2) {
+ bit = TileSet::BIND_BOTTOM;
+ } else {
+ bit = TileSet::BIND_CENTER;
+ }
+ }
+ }
+ uint16_t mask = tile_set->autotile_get_bitmask(get_current_tile(), coord);
+ if (erasing) {
+ mask &= ~bit;
+ } else {
+ mask |= bit;
+ }
+ tile_set->autotile_set_bitmask(get_current_tile(), coord, mask);
+ workspace->update();
+ }
+ } else {
+ if ((erasing && mb->get_button_index() == BUTTON_RIGHT) || (!erasing && mb->get_button_index() == BUTTON_LEFT)) {
+ dragging = false;
+ erasing = false;
+ }
+ }
+ }
+ if (mm.is_valid()) {
+ if (dragging) {
+ Vector2 coord((int)(mm->get_position().x / (spacing + size.x)), (int)(mm->get_position().y / (spacing + size.y)));
+ Vector2 pos(coord.x * (spacing + size.x), coord.y * (spacing + size.y));
+ pos = mm->get_position() - pos;
+ uint16_t bit;
+ if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) {
+ if (pos.x < size.x / 2) {
+ if (pos.y < size.y / 2) {
+ bit = TileSet::BIND_TOPLEFT;
+ } else {
+ bit = TileSet::BIND_BOTTOMLEFT;
+ }
+ } else {
+ if (pos.y < size.y / 2) {
+ bit = TileSet::BIND_TOPRIGHT;
+ } else {
+ bit = TileSet::BIND_BOTTOMRIGHT;
+ }
+ }
+ } else if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) {
+ if (pos.x < size.x / 3) {
+ if (pos.y < size.y / 3) {
+ bit = TileSet::BIND_TOPLEFT;
+ } else if (pos.y > (size.y / 3) * 2) {
+ bit = TileSet::BIND_BOTTOMLEFT;
+ } else {
+ bit = TileSet::BIND_LEFT;
+ }
+ } else if (pos.x > (size.x / 3) * 2) {
+ if (pos.y < size.y / 3) {
+ bit = TileSet::BIND_TOPRIGHT;
+ } else if (pos.y > (size.y / 3) * 2) {
+ bit = TileSet::BIND_BOTTOMRIGHT;
+ } else {
+ bit = TileSet::BIND_RIGHT;
+ }
+ } else {
+ if (pos.y < size.y / 3) {
+ bit = TileSet::BIND_TOP;
+ } else if (pos.y > (size.y / 3) * 2) {
+ bit = TileSet::BIND_BOTTOM;
+ } else {
+ bit = TileSet::BIND_CENTER;
+ }
+ }
+ }
+ uint16_t mask = tile_set->autotile_get_bitmask(get_current_tile(), coord);
+ if (erasing) {
+ mask &= ~bit;
+ } else {
+ mask |= bit;
+ }
+ tile_set->autotile_set_bitmask(get_current_tile(), coord, mask);
+ workspace->update();
+ }
+ }
+ } break;
+ case EDITMODE_COLLISION:
+ case EDITMODE_OCCLUSION:
+ case EDITMODE_NAVIGATION:
+ case EDITMODE_PRIORITY: {
+ Vector2 shape_anchor = edited_shape_coord;
+ shape_anchor.x *= (size.x + spacing);
+ shape_anchor.y *= (size.y + spacing);
+ if (tools[TOOL_SELECT]->is_pressed()) {
+ if (mb.is_valid()) {
+ if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) {
+ if (edit_mode != EDITMODE_PRIORITY && current_shape.size() > 0) {
+ for (int i = 0; i < current_shape.size(); i++) {
+ if ((current_shape[i] - mb->get_position()).length_squared() <= MIN_DISTANCE_SQUARED) {
+ dragging_point = i;
+ workspace->update();
+ return;
+ }
+ }
+ }
+ Vector2 coord((int)(mb->get_position().x / (spacing + size.x)), (int)(mb->get_position().y / (spacing + size.y)));
+ if (edited_shape_coord != coord) {
+ edited_shape_coord = coord;
+ edited_occlusion_shape = tile_set->autotile_get_light_occluder(get_current_tile(), edited_shape_coord);
+ edited_navigation_shape = tile_set->autotile_get_navigation_polygon(get_current_tile(), edited_shape_coord);
+ shape_anchor = edited_shape_coord;
+ shape_anchor.x *= (size.x + spacing);
+ shape_anchor.y *= (size.y + spacing);
+ if (edit_mode == EDITMODE_OCCLUSION) {
+ current_shape.resize(0);
+ if (edited_occlusion_shape.is_valid()) {
+ for (int i = 0; i < edited_occlusion_shape->get_polygon().size(); i++) {
+ current_shape.push_back(edited_occlusion_shape->get_polygon()[i] + shape_anchor);
+ }
+ }
+ } else if (edit_mode == EDITMODE_NAVIGATION) {
+ current_shape.resize(0);
+ if (edited_navigation_shape.is_valid()) {
+ if (edited_navigation_shape->get_polygon_count() > 0) {
+ PoolVector<Vector2> vertices = edited_navigation_shape->get_vertices();
+ for (int i = 0; i < edited_navigation_shape->get_polygon(0).size(); i++) {
+ current_shape.push_back(vertices[edited_navigation_shape->get_polygon(0)[i]] + shape_anchor);
+ }
+ }
+ }
+ }
+ } else {
+ if (edit_mode == EDITMODE_COLLISION) {
+ Vector<TileSet::ShapeData> sd = tile_set->tile_get_shapes(get_current_tile());
+ for (int i = 0; i < sd.size(); i++) {
+ if (sd[i].autotile_coord == coord) {
+ Ref<ConcavePolygonShape2D> shape = sd[i].shape;
+ if (shape.is_valid()) {
+ //FIXME: i need a way to know if the point is countained on the polygon instead of the rect
+ Rect2 bounding_rect;
+ PoolVector2Array polygon;
+ bounding_rect.position = shape->get_segments()[0];
+ for (int j = 0; j < shape->get_segments().size(); j += 2) {
+ polygon.push_back(shape->get_segments()[j] + shape_anchor);
+ bounding_rect.expand_to(shape->get_segments()[j] + shape_anchor);
+ }
+ if (bounding_rect.has_point(mb->get_position())) {
+ current_shape = polygon;
+ edited_collision_shape = shape;
+ }
+ }
+ }
+ }
+ }
+ }
+ workspace->update();
+ } else if (!mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) {
+ if (edit_mode == EDITMODE_COLLISION) {
+ if (dragging_point >= 0) {
+ dragging_point = -1;
+
+ PoolVector<Vector2> segments;
+ segments.resize(current_shape.size() * 2);
+ PoolVector<Vector2>::Write w = segments.write();
+
+ for (int i = 0; i < current_shape.size(); i++) {
+ w[(i << 1) + 0] = current_shape[i] - shape_anchor;
+ w[(i << 1) + 1] = current_shape[(i + 1) % current_shape.size()] - shape_anchor;
+ }
+
+ w = PoolVector<Vector2>::Write();
+ edited_collision_shape->set_segments(segments);
+
+ workspace->update();
+ }
+ } else if (edit_mode == EDITMODE_OCCLUSION) {
+ if (dragging_point >= 0) {
+ dragging_point = -1;
+
+ PoolVector<Vector2> polygon;
+ polygon.resize(current_shape.size());
+ PoolVector<Vector2>::Write w = polygon.write();
+
+ for (int i = 0; i < current_shape.size(); i++) {
+ w[i] = current_shape[i] - shape_anchor;
+ }
+
+ w = PoolVector<Vector2>::Write();
+ edited_occlusion_shape->set_polygon(polygon);
+
+ workspace->update();
+ }
+ } else if (edit_mode == EDITMODE_NAVIGATION) {
+ if (dragging_point >= 0) {
+ dragging_point = -1;
+
+ PoolVector<Vector2> polygon;
+ Vector<int> indices;
+ polygon.resize(current_shape.size());
+ PoolVector<Vector2>::Write w = polygon.write();
+
+ for (int i = 0; i < current_shape.size(); i++) {
+ w[i] = current_shape[i] - shape_anchor;
+ indices.push_back(i);
+ }
+
+ w = PoolVector<Vector2>::Write();
+ edited_navigation_shape->set_vertices(polygon);
+ edited_navigation_shape->add_polygon(indices);
+
+ workspace->update();
+ }
+ }
+ }
+ } else if (mm.is_valid()) {
+ if (dragging_point >= 0) {
+ current_shape.set(dragging_point, snap_point(mm->get_position()));
+ workspace->update();
+ }
+ }
+ } else if (tools[SHAPE_NEW_POLYGON]->is_pressed()) {
+ if (mb.is_valid()) {
+ if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) {
+ Vector2 pos = mb->get_position();
+ pos = snap_point(pos);
+ if (creating_shape) {
+ if (current_shape.size() > 0) {
+ if ((pos - current_shape[0]).length_squared() <= MIN_DISTANCE_SQUARED) {
+ if (current_shape.size() > 2) {
+ close_shape(shape_anchor);
+ workspace->update();
+ return;
+ }
+ }
+ }
+ current_shape.push_back(pos);
+ workspace->update();
+ } else {
+ creating_shape = true;
+ current_shape.resize(0);
+ current_shape.push_back(snap_point(pos));
+ }
+ } else if (mb->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) {
+ if (creating_shape) {
+ close_shape(shape_anchor);
+ }
+ }
+ } else if (mm.is_valid()) {
+ if (creating_shape) {
+ workspace->update();
+ }
+ }
+ }
+ } break;
+ }
+ }
+}
+
+void AutotileEditor::_on_tool_clicked(int p_tool) {
+ if (p_tool == BITMASK_COPY) {
+ bitmask_map_copy = tile_set->autotile_get_bitmask_map(get_current_tile());
+ } else if (p_tool == BITMASK_PASTE) {
+ tile_set->autotile_clear_bitmask_map(get_current_tile());
+ for (Map<Vector2, uint16_t>::Element *E = bitmask_map_copy.front(); E; E = E->next()) {
+ tile_set->autotile_set_bitmask(get_current_tile(), E->key(), E->value());
+ }
+ workspace->update();
+ } else if (p_tool == BITMASK_CLEAR) {
+ tile_set->autotile_clear_bitmask_map(get_current_tile());
+ workspace->update();
+ } else if (p_tool == SHAPE_DELETE) {
+ if (creating_shape) {
+ creating_shape = false;
+ current_shape.resize(0);
+ workspace->update();
+ } else {
+ switch (edit_mode) {
+ case EDITMODE_COLLISION: {
+ if (!edited_collision_shape.is_null()) {
+ Vector<TileSet::ShapeData> sd = tile_set->tile_get_shapes(get_current_tile());
+ int index;
+ for (int i = 0; i < sd.size(); i++) {
+ if (sd[i].shape == edited_collision_shape) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ sd.remove(index);
+ tile_set->tile_set_shapes(get_current_tile(), sd);
+ edited_collision_shape = Ref<ConcavePolygonShape2D>();
+ current_shape.resize(0);
+ workspace->update();
+ }
+ }
+ } break;
+ case EDITMODE_NAVIGATION: {
+ if (!edited_navigation_shape.is_null()) {
+ tile_set->autotile_set_navigation_polygon(get_current_tile(), Ref<NavigationPolygon>(), edited_shape_coord);
+ edited_navigation_shape = Ref<NavigationPolygon>();
+ current_shape.resize(0);
+ workspace->update();
+ }
+ } break;
+ case EDITMODE_OCCLUSION: {
+ if (!edited_occlusion_shape.is_null()) {
+ tile_set->autotile_set_light_occluder(get_current_tile(), Ref<OccluderPolygon2D>(), edited_shape_coord);
+ edited_occlusion_shape = Ref<OccluderPolygon2D>();
+ current_shape.resize(0);
+ workspace->update();
+ }
+ } break;
+ }
+ }
+ } else if (p_tool == ZOOM_OUT) {
+ float scale = workspace->get_scale().x;
+ if (scale > 0.1) {
+ scale /= 2;
+ workspace->set_scale(Vector2(scale, scale));
+ workspace_container->set_custom_minimum_size(preview->get_region_rect().size * scale);
+ }
+ } else if (p_tool == ZOOM_1) {
+ workspace->set_scale(Vector2(1, 1));
+ workspace_container->set_custom_minimum_size(preview->get_region_rect().size);
+ } else if (p_tool == ZOOM_IN) {
+ float scale = workspace->get_scale().x;
+ scale *= 2;
+ workspace->set_scale(Vector2(scale, scale));
+ workspace_container->set_custom_minimum_size(preview->get_region_rect().size * scale);
+ }
+}
+
+void AutotileEditor::_on_priority_changed(float val) {
+ tile_set->autotile_set_subtile_priority(get_current_tile(), edited_shape_coord, (int)val);
+ workspace->update();
+}
+
+void AutotileEditor::draw_highlight_tile(Vector2 coord, const Vector<Vector2> &other_highlighted) {
+
+ Vector2 size = tile_set->autotile_get_size(get_current_tile());
+ int spacing = tile_set->autotile_get_spacing(get_current_tile());
+ Rect2 region = tile_set->tile_get_region(get_current_tile());
+ coord.x *= (size.x + spacing);
+ coord.y *= (size.y + spacing);
+ workspace->draw_rect(Rect2(0, 0, region.size.x, coord.y), Color(0.5, 0.5, 0.5, 0.5));
+ workspace->draw_rect(Rect2(0, coord.y, coord.x, size.y), Color(0.5, 0.5, 0.5, 0.5));
+ workspace->draw_rect(Rect2(coord.x + size.x, coord.y, region.size.x - coord.x - size.x, size.y), Color(0.5, 0.5, 0.5, 0.5));
+ workspace->draw_rect(Rect2(0, coord.y + size.y, region.size.x, region.size.y - size.y - coord.y), Color(0.5, 0.5, 0.5, 0.5));
+ coord += Vector2(1, 1);
+ workspace->draw_rect(Rect2(coord, size - Vector2(2, 2)), Color(1, 0, 0), false);
+ for (int i = 0; i < other_highlighted.size(); i++) {
+ coord = other_highlighted[i];
+ coord.x *= (size.x + spacing);
+ coord.y *= (size.y + spacing);
+ coord += Vector2(1, 1);
+ workspace->draw_rect(Rect2(coord, size - Vector2(2, 2)), Color(1, 0, 0), false);
+ }
+}
+
+void AutotileEditor::draw_polygon_shapes() {
+
+ int t_id = get_current_tile();
+ if (t_id < 0)
+ return;
+
+ switch (edit_mode) {
+ case EDITMODE_COLLISION: {
+ Vector<TileSet::ShapeData> sd = tile_set->tile_get_shapes(t_id);
+ for (int i = 0; i < sd.size(); i++) {
+ Vector2 coord = sd[i].autotile_coord;
+ Vector2 anchor = tile_set->autotile_get_size(t_id);
+ anchor.x += tile_set->autotile_get_spacing(t_id);
+ anchor.y += tile_set->autotile_get_spacing(t_id);
+ anchor.x *= coord.x;
+ anchor.y *= coord.y;
+ Ref<ConcavePolygonShape2D> shape = sd[i].shape;
+ if (shape.is_valid()) {
+ Color c_bg;
+ Color c_border;
+ if (coord == edited_shape_coord && sd[i].shape == edited_collision_shape) {
+ c_bg = Color(0, 1, 1, 0.5);
+ c_border = Color(0, 1, 1);
+ } else {
+ c_bg = Color(0.9, 0.7, 0.07, 0.5);
+ c_border = Color(0.9, 0.7, 0.07, 1);
+ }
+ Vector<Vector2> polygon;
+ Vector<Color> colors;
+ if (shape == edited_collision_shape) {
+ for (int j = 0; j < current_shape.size(); j++) {
+ polygon.push_back(current_shape[j]);
+ colors.push_back(c_bg);
+ }
+ } else {
+ for (int j = 0; j < shape->get_segments().size(); j += 2) {
+ polygon.push_back(shape->get_segments()[j] + anchor);
+ colors.push_back(c_bg);
+ }
+ }
+ workspace->draw_polygon(polygon, colors);
+ if (coord == edited_shape_coord) {
+ for (int j = 0; j < shape->get_segments().size(); j += 2) {
+ workspace->draw_line(shape->get_segments()[j] + anchor, shape->get_segments()[j + 1] + anchor, c_border, 1, true);
+ }
+ if (shape == edited_collision_shape) {
+ for (int j = 0; j < current_shape.size(); j++) {
+ workspace->draw_circle(current_shape[j], 5, Color(1, 0, 0));
+ }
+ }
+ }
+ }
+ }
+ } break;
+ case EDITMODE_OCCLUSION: {
+ Map<Vector2, Ref<OccluderPolygon2D> > map = tile_set->autotile_get_light_oclusion_map(t_id);
+ for (Map<Vector2, Ref<OccluderPolygon2D> >::Element *E = map.front(); E; E = E->next()) {
+ Vector2 coord = E->key();
+ Vector2 anchor = tile_set->autotile_get_size(t_id);
+ anchor.x += tile_set->autotile_get_spacing(t_id);
+ anchor.y += tile_set->autotile_get_spacing(t_id);
+ anchor.x *= coord.x;
+ anchor.y *= coord.y;
+ Ref<OccluderPolygon2D> shape = E->value();
+ if (shape.is_valid()) {
+ Color c_bg;
+ Color c_border;
+ if (coord == edited_shape_coord && shape == edited_occlusion_shape) {
+ c_bg = Color(0, 1, 1, 0.5);
+ c_border = Color(0, 1, 1);
+ } else {
+ c_bg = Color(0.9, 0.7, 0.07, 0.5);
+ c_border = Color(0.9, 0.7, 0.07, 1);
+ }
+ Vector<Vector2> polygon;
+ Vector<Color> colors;
+ if (shape == edited_occlusion_shape) {
+ for (int j = 0; j < current_shape.size(); j++) {
+ polygon.push_back(current_shape[j]);
+ colors.push_back(c_bg);
+ }
+ } else {
+ for (int j = 0; j < shape->get_polygon().size(); j++) {
+ polygon.push_back(shape->get_polygon()[j] + anchor);
+ colors.push_back(c_bg);
+ }
+ }
+ workspace->draw_polygon(polygon, colors);
+ if (coord == edited_shape_coord) {
+ for (int j = 0; j < shape->get_polygon().size() - 1; j++) {
+ workspace->draw_line(shape->get_polygon()[j] + anchor, shape->get_polygon()[j + 1] + anchor, c_border, 1, true);
+ }
+ workspace->draw_line(shape->get_polygon()[shape->get_polygon().size() - 1] + anchor, shape->get_polygon()[0] + anchor, c_border, 1, true);
+ if (shape == edited_occlusion_shape) {
+ for (int j = 0; j < current_shape.size(); j++) {
+ workspace->draw_circle(current_shape[j], 5, Color(1, 0, 0));
+ }
+ }
+ }
+ }
+ }
+ } break;
+ case EDITMODE_NAVIGATION: {
+ Map<Vector2, Ref<NavigationPolygon> > map = tile_set->autotile_get_navigation_map(t_id);
+ for (Map<Vector2, Ref<NavigationPolygon> >::Element *E = map.front(); E; E = E->next()) {
+ Vector2 coord = E->key();
+ Vector2 anchor = tile_set->autotile_get_size(t_id);
+ anchor.x += tile_set->autotile_get_spacing(t_id);
+ anchor.y += tile_set->autotile_get_spacing(t_id);
+ anchor.x *= coord.x;
+ anchor.y *= coord.y;
+ Ref<NavigationPolygon> shape = E->value();
+ if (shape.is_valid()) {
+ Color c_bg;
+ Color c_border;
+ if (coord == edited_shape_coord && shape == edited_navigation_shape) {
+ c_bg = Color(0, 1, 1, 0.5);
+ c_border = Color(0, 1, 1);
+ } else {
+ c_bg = Color(0.9, 0.7, 0.07, 0.5);
+ c_border = Color(0.9, 0.7, 0.07, 1);
+ }
+ Vector<Vector2> polygon;
+ Vector<Color> colors;
+ if (shape == edited_navigation_shape) {
+ for (int j = 0; j < current_shape.size(); j++) {
+ polygon.push_back(current_shape[j]);
+ colors.push_back(c_bg);
+ }
+ } else if (shape->get_polygon_count() > 0) {
+ PoolVector<Vector2> vertices = shape->get_vertices();
+ for (int j = 0; j < shape->get_polygon(0).size(); j++) {
+ polygon.push_back(vertices[shape->get_polygon(0)[j]] + anchor);
+ colors.push_back(c_bg);
+ }
+ }
+ workspace->draw_polygon(polygon, colors);
+ if (coord == edited_shape_coord) {
+ if (shape->get_polygon_count() > 0) {
+ PoolVector<Vector2> vertices = shape->get_vertices();
+ for (int j = 0; j < shape->get_polygon(0).size() - 1; j++) {
+ workspace->draw_line(vertices[shape->get_polygon(0)[j]] + anchor, vertices[shape->get_polygon(0)[j + 1]] + anchor, c_border, 1, true);
+ }
+ if (shape == edited_navigation_shape) {
+ for (int j = 0; j < current_shape.size(); j++) {
+ workspace->draw_circle(current_shape[j], 5, Color(1, 0, 0));
+ }
+ }
+ }
+ }
+ }
+ }
+ } break;
+ }
+ if (creating_shape) {
+ for (int j = 0; j < current_shape.size() - 1; j++) {
+ workspace->draw_line(current_shape[j], current_shape[j + 1], Color(0, 1, 1), 1, true);
+ }
+ workspace->draw_line(current_shape[current_shape.size() - 1], snap_point(workspace->get_local_mouse_position()), Color(0, 1, 1), 1, true);
+ }
+}
+
+void AutotileEditor::close_shape(const Vector2 &shape_anchor) {
+
+ creating_shape = false;
+
+ if (edit_mode == EDITMODE_COLLISION) {
+ Ref<ConcavePolygonShape2D> shape = memnew(ConcavePolygonShape2D);
+
+ PoolVector<Vector2> segments;
+ segments.resize(current_shape.size() * 2);
+ PoolVector<Vector2>::Write w = segments.write();
+
+ for (int i = 0; i < current_shape.size(); i++) {
+ w[(i << 1) + 0] = current_shape[i] - shape_anchor;
+ w[(i << 1) + 1] = current_shape[(i + 1) % current_shape.size()] - shape_anchor;
+ }
+
+ w = PoolVector<Vector2>::Write();
+ shape->set_segments(segments);
+
+ tile_set->tile_add_shape(get_current_tile(), shape, Transform2D(), false, edited_shape_coord);
+ edited_collision_shape = shape;
+ tools[TOOL_SELECT]->set_pressed(true);
+ workspace->update();
+ } else if (edit_mode == EDITMODE_OCCLUSION) {
+ Ref<OccluderPolygon2D> shape = memnew(OccluderPolygon2D);
+
+ PoolVector<Vector2> polygon;
+ polygon.resize(current_shape.size());
+ PoolVector<Vector2>::Write w = polygon.write();
+
+ for (int i = 0; i < current_shape.size(); i++) {
+ w[i] = current_shape[i] - shape_anchor;
+ }
+
+ w = PoolVector<Vector2>::Write();
+ shape->set_polygon(polygon);
+
+ tile_set->autotile_set_light_occluder(get_current_tile(), shape, edited_shape_coord);
+ edited_occlusion_shape = shape;
+ tools[TOOL_SELECT]->set_pressed(true);
+ workspace->update();
+ } else if (edit_mode == EDITMODE_NAVIGATION) {
+ Ref<NavigationPolygon> shape = memnew(NavigationPolygon);
+
+ PoolVector<Vector2> polygon;
+ Vector<int> indices;
+ polygon.resize(current_shape.size());
+ PoolVector<Vector2>::Write w = polygon.write();
+
+ for (int i = 0; i < current_shape.size(); i++) {
+ w[i] = current_shape[i] - shape_anchor;
+ indices.push_back(i);
+ }
+
+ w = PoolVector<Vector2>::Write();
+ shape->set_vertices(polygon);
+ shape->add_polygon(indices);
+ tile_set->autotile_set_navigation_polygon(get_current_tile(), shape, edited_shape_coord);
+ edited_navigation_shape = shape;
+ tools[TOOL_SELECT]->set_pressed(true);
+ workspace->update();
+ }
+}
+
+Vector2 AutotileEditor::snap_point(const Vector2 &point) {
+ Vector2 p = point;
+ Vector2 coord = edited_shape_coord;
+ Vector2 tile_size = tile_set->autotile_get_size(get_current_tile());
+ int spacing = tile_set->autotile_get_spacing(get_current_tile());
+ Vector2 anchor = coord;
+ anchor.x *= (tile_size.x + spacing);
+ anchor.y *= (tile_size.y + spacing);
+ Rect2 region(anchor, tile_size);
+ if (tools[SHAPE_KEEP_INSIDE_TILE]->is_pressed()) {
+ if (p.x < region.position.x)
+ p.x = region.position.x;
+ if (p.y < region.position.y)
+ p.y = region.position.y;
+ if (p.x > region.position.x + region.size.x)
+ p.x = region.position.x + region.size.x;
+ if (p.y > region.position.y + region.size.y)
+ p.y = region.position.y + region.size.y;
+ }
+ if (tools[SHAPE_SNAP_TO_BITMASK_GRID]->is_pressed()) {
+ Vector2 p2 = p;
+ if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_2X2) {
+ p2.x = Math::stepify(p2.x, tile_size.x / 2);
+ p2.y = Math::stepify(p2.y, tile_size.y / 2);
+ if ((p2 - p).length_squared() <= MAX(tile_size.y / 4, MIN_DISTANCE_SQUARED)) {
+ p = p2;
+ }
+ } else if (tile_set->autotile_get_bitmask_mode(get_current_tile()) == TileSet::BITMASK_3X3) {
+ p2.x = Math::stepify(p2.x, tile_size.x / 3);
+ p2.y = Math::stepify(p2.y, tile_size.y / 3);
+ if ((p2 - p).length_squared() <= MAX(tile_size.y / 6, MIN_DISTANCE_SQUARED)) {
+ p = p2;
+ }
+ }
+ }
+ p.floor();
+ return p;
+}
+
+void AutotileEditor::edit(Object *p_node) {
+
+ tile_set = Ref<TileSet>(Object::cast_to<TileSet>(p_node));
+ helper->set_tileset(tile_set);
+
+ autotile_list->clear();
+ List<int> ids;
+ tile_set->get_tile_list(&ids);
+ for (List<int>::Element *E = ids.front(); E; E = E->next()) {
+ if (tile_set->tile_get_is_autotile(E->get())) {
+ autotile_list->add_item(tile_set->tile_get_name(E->get()));
+ autotile_list->set_item_metadata(autotile_list->get_item_count() - 1, E->get());
+ autotile_list->set_item_icon(autotile_list->get_item_count() - 1, tile_set->tile_get_texture(E->get()));
+ Rect2 region = tile_set->tile_get_region(E->get());
+ region.size = tile_set->autotile_get_size(E->get());
+ Vector2 pos = tile_set->autotile_get_icon_coordinate(E->get());
+ pos.x *= (tile_set->autotile_get_spacing(E->get()) + region.size.x);
+ pos.y *= (tile_set->autotile_get_spacing(E->get()) + region.size.y);
+ region.position += pos;
+ autotile_list->set_item_icon_region(autotile_list->get_item_count() - 1, region);
+ }
+ }
+ if (autotile_list->get_item_count() > 0) {
+ autotile_list->select(0);
+ _on_autotile_selected(0);
+ }
+ helper->_change_notify("");
+}
+
+int AutotileEditor::get_current_tile() {
+
+ if (autotile_list->get_selected_items().size() == 0)
+ return -1;
+ else
+ return autotile_list->get_item_metadata(autotile_list->get_selected_items()[0]);
+}
+
+void AutotileEditorHelper::set_tileset(const Ref<TileSet> &p_tileset) {
+
+ tile_set = p_tileset;
+}
+
+bool AutotileEditorHelper::_set(const StringName &p_name, const Variant &p_value) {
+
+ if (autotile_editor->get_current_tile() < 0 || tile_set.is_null())
+ return false;
+
+ String name = p_name.operator String();
+ bool v = false;
+ if (name == "bitmask_mode") {
+ tile_set->set(String::num(autotile_editor->get_current_tile(), 0) + "/autotile/bitmask_mode", p_value, &v);
+ } else if (name.left(7) == "layout/") {
+ tile_set->set(String::num(autotile_editor->get_current_tile(), 0) + "/autotile" + name.right(6), p_value, &v);
+ }
+ if (v) {
+ tile_set->_change_notify("");
+ autotile_editor->workspace->update();
+ }
+ return v;
+}
+
+bool AutotileEditorHelper::_get(const StringName &p_name, Variant &r_ret) const {
+
+ if (autotile_editor->get_current_tile() < 0 || tile_set.is_null())
+ return false;
+
+ String name = p_name.operator String();
+ if (name == "bitmask_mode") {
+ r_ret = tile_set->get(String::num(autotile_editor->get_current_tile(), 0) + "/autotile/bitmask_mode");
+ } else if (name.left(7) == "layout/") {
+ bool v;
+ r_ret = tile_set->get(String::num(autotile_editor->get_current_tile(), 0) + "/autotile" + name.right(6), &v);
+ return v;
+ }
+}
+
+void AutotileEditorHelper::_get_property_list(List<PropertyInfo> *p_list) const {
+
+ if (autotile_editor->get_current_tile() < 0 || tile_set.is_null())
+ return;
+
+ p_list->push_back(PropertyInfo(Variant::INT, "bitmask_mode", PROPERTY_HINT_ENUM, "2x2,3x3"));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2, "layout/tile_size"));
+ p_list->push_back(PropertyInfo(Variant::INT, "layout/spacing", PROPERTY_HINT_RANGE, "0,256,1"));
+}
+
+AutotileEditorHelper::AutotileEditorHelper(AutotileEditor *p_autotile_editor) {
+
+ autotile_editor = p_autotile_editor;
}
diff --git a/editor/plugins/tile_set_editor_plugin.h b/editor/plugins/tile_set_editor_plugin.h
index 677ee05b55..d60d0d5c3c 100644
--- a/editor/plugins/tile_set_editor_plugin.h
+++ b/editor/plugins/tile_set_editor_plugin.h
@@ -32,10 +32,126 @@
#include "editor/editor_name_dialog.h"
#include "editor/editor_node.h"
+#include "scene/2d/sprite.h"
+#include "scene/resources/concave_polygon_shape_2d.h"
#include "scene/resources/tile_set.h"
+class AutotileEditorHelper;
+class AutotileEditor : public Control {
+
+ friend class TileSetEditorPlugin;
+ friend class AutotileEditorHelper;
+ GDCLASS(AutotileEditor, Control);
+
+ enum EditMode {
+ EDITMODE_ICON,
+ EDITMODE_BITMASK,
+ EDITMODE_COLLISION,
+ EDITMODE_OCCLUSION,
+ EDITMODE_NAVIGATION,
+ EDITMODE_PRIORITY,
+ EDITMODE_MAX
+ };
+
+ enum AutotileToolbars {
+ TOOLBAR_DUMMY,
+ TOOLBAR_BITMASK,
+ TOOLBAR_SHAPE,
+ TOOLBAR_MAX
+ };
+
+ enum AutotileTools {
+ TOOL_SELECT,
+ BITMASK_COPY,
+ BITMASK_PASTE,
+ BITMASK_CLEAR,
+ SHAPE_NEW_POLYGON,
+ SHAPE_DELETE,
+ SHAPE_CREATE_FROM_BITMASK,
+ SHAPE_CREATE_FROM_NOT_BITMASK,
+ SHAPE_KEEP_INSIDE_TILE,
+ SHAPE_SNAP_TO_BITMASK_GRID,
+ ZOOM_OUT,
+ ZOOM_1,
+ ZOOM_IN,
+ TOOL_MAX
+ };
+
+ Ref<TileSet> tile_set;
+ Ref<ConcavePolygonShape2D> edited_collision_shape;
+ Ref<OccluderPolygon2D> edited_occlusion_shape;
+ Ref<NavigationPolygon> edited_navigation_shape;
+
+ EditorNode *editor;
+
+ int current_item_index;
+ Sprite *preview;
+ Control *workspace_container;
+ Control *workspace;
+ Button *tool_editmode[EDITMODE_MAX];
+ HBoxContainer *tool_containers[TOOLBAR_MAX];
+ HBoxContainer *toolbar;
+ ToolButton *tools[TOOL_MAX];
+ SpinBox *spin_priority;
+ EditMode edit_mode;
+
+ bool creating_shape;
+ int dragging_point;
+ Vector2 edited_shape_coord;
+ PoolVector2Array current_shape;
+ Map<Vector2, uint16_t> bitmask_map_copy;
+
+ Control *side_panel;
+ ItemList *autotile_list;
+ PropertyEditor *property_editor;
+ AutotileEditorHelper *helper;
+
+ AutotileEditor(EditorNode *p_editor);
+
+protected:
+ static void _bind_methods();
+ void _notification(int p_what);
+
+private:
+ void _on_autotile_selected(int p_index);
+ void _on_edit_mode_changed(int p_edit_mode);
+ void _on_workspace_draw();
+ void _on_workspace_input(const Ref<InputEvent> &p_ie);
+ void _on_tool_clicked(int p_tool);
+ void _on_priority_changed(float val);
+
+ void draw_highlight_tile(Vector2 coord, const Vector<Vector2> &other_highlighted = Vector<Vector2>());
+ void draw_grid(const Vector2 &size, int spacing);
+ void draw_polygon_shapes();
+ void close_shape(const Vector2 &shape_anchor);
+ Vector2 snap_point(const Vector2 &point);
+
+ void edit(Object *p_node);
+ int get_current_tile();
+};
+
+class AutotileEditorHelper : public Object {
+
+ friend class AutotileEditor;
+ GDCLASS(AutotileEditorHelper, Object);
+
+ Ref<TileSet> tile_set;
+ AutotileEditor *autotile_editor;
+
+public:
+ void set_tileset(const Ref<TileSet> &p_tileset);
+
+protected:
+ bool _set(const StringName &p_name, const Variant &p_value);
+ bool _get(const StringName &p_name, Variant &r_ret) const;
+ void _get_property_list(List<PropertyInfo> *p_list) const;
+
+ AutotileEditorHelper(AutotileEditor *p_autotile_editor);
+};
+
class TileSetEditor : public Control {
+ friend class TileSetEditorPlugin;
GDCLASS(TileSetEditor, Control);
Ref<TileSet> tileset;
@@ -77,8 +193,11 @@ class TileSetEditorPlugin : public EditorPlugin {
GDCLASS(TileSetEditorPlugin, EditorPlugin);
TileSetEditor *tileset_editor;
+ AutotileEditor *autotile_editor;
EditorNode *editor;
+ ToolButton *autotile_button;
+
public:
virtual String get_name() const { return "TileSet"; }
bool has_main_screen() const { return false; }
diff --git a/editor/project_export.cpp b/editor/project_export.cpp
index 6500b10a3a..767dbcc27b 100644
--- a/editor/project_export.cpp
+++ b/editor/project_export.cpp
@@ -723,6 +723,7 @@ void ProjectExportDialog::_export_project() {
export_project->add_filter("*." + extension + " ; " + platform->get_name() + " Export");
}
+ export_project->set_mode(FileDialog::MODE_SAVE_FILE);
export_project->popup_centered_ratio();
}
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index 16b85121ef..00488a2a88 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -213,7 +213,7 @@ private:
}
String sp = p.simplify_path();
project_path->set_text(sp);
- set_message(TTR(" ")); // just so it does not disappear
+ set_message(" "); // just so it does not disappear
get_ok()->call_deferred("grab_focus");
}
@@ -383,7 +383,7 @@ private:
//read
unzOpenCurrentFile(pkg);
- unzReadCurrentFile(pkg, data.ptr(), data.size());
+ unzReadCurrentFile(pkg, data.ptrw(), data.size());
unzCloseCurrentFile(pkg);
FileAccess *f = FileAccess::open(dir.plus_file(path), FileAccess::WRITE);
@@ -508,7 +508,8 @@ public:
} else if (current->has_setting("application/config/name")) {
project_name->set_text(current->get("application/config/name"));
}
- project_name->grab_focus();
+
+ project_name->call_deferred("grab_focus");
create_dir->hide();
status_btn->hide();
@@ -655,6 +656,12 @@ void ProjectManager::_notification(int p_what) {
Engine::get_singleton()->set_editor_hint(false);
+ } else if (p_what == NOTIFICATION_READY) {
+
+ if (scroll_childs->get_child_count() == 0) {
+ open_templates->popup_centered_minsize();
+ }
+
} else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
set_process_unhandled_input(is_visible_in_tree());
@@ -1432,9 +1439,15 @@ void ProjectManager::_bind_methods() {
ClassDB::bind_method("_favorite_pressed", &ProjectManager::_favorite_pressed);
ClassDB::bind_method("_install_project", &ProjectManager::_install_project);
ClassDB::bind_method("_files_dropped", &ProjectManager::_files_dropped);
+ ClassDB::bind_method("_open_asset_library", &ProjectManager::_open_asset_library);
ClassDB::bind_method(D_METHOD("_scan_multiple_folders", "files"), &ProjectManager::_scan_multiple_folders);
}
+void ProjectManager::_open_asset_library() {
+ asset_library->disable_community_support();
+ tabs->set_current_tab(1);
+}
+
ProjectManager::ProjectManager() {
// load settings
@@ -1705,6 +1718,12 @@ ProjectManager::ProjectManager() {
dialog_error = memnew(AcceptDialog);
gui_base->add_child(dialog_error);
+
+ open_templates = memnew(ConfirmationDialog);
+ open_templates->set_text(TTR("You don't currently have any projects.\nWould you like to explore the official example projects in the Asset Library?"));
+ open_templates->get_ok()->set_text(TTR("Open Asset Library"));
+ open_templates->connect("confirmed", this, "_open_asset_library");
+ add_child(open_templates);
}
ProjectManager::~ProjectManager() {
@@ -1756,6 +1775,7 @@ void ProjectListFilter::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
clear_search_button->set_icon(get_icon("Close", "EditorIcons"));
+
} break;
}
}
diff --git a/editor/project_manager.h b/editor/project_manager.h
index 656bd2d19c..4080f1df22 100644
--- a/editor/project_manager.h
+++ b/editor/project_manager.h
@@ -76,6 +76,9 @@ class ProjectManager : public Control {
Control *gui_base;
+ ConfirmationDialog *open_templates;
+
+ void _open_asset_library();
void _scan_projects();
void _run_project();
void _run_project_confirm();
diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp
index b07280a4cd..76fd20ca12 100644
--- a/editor/project_settings_editor.cpp
+++ b/editor/project_settings_editor.cpp
@@ -360,7 +360,7 @@ void ProjectSettingsEditor::_wait_for_key(const Ref<InputEvent> &p_event) {
last_wait_for_key = p_event;
String str = keycode_get_string(k->get_scancode()).capitalize();
if (k->get_metakey())
- str = TTR("Meta+") + str;
+ str = vformat("%s+", find_keycode_name(KEY_META)) + str;
if (k->get_shift())
str = TTR("Shift+") + str;
if (k->get_alt())
@@ -642,7 +642,7 @@ void ProjectSettingsEditor::_update_actions() {
String str = keycode_get_string(k->get_scancode()).capitalize();
if (k->get_metakey())
- str = TTR("Meta+") + str;
+ str = vformat("%s+", find_keycode_name(KEY_META)) + str;
if (k->get_shift())
str = TTR("Shift+") + str;
if (k->get_alt())
@@ -1776,7 +1776,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
//translations
TabContainer *translations = memnew(TabContainer);
- translations->add_style_override("panel", memnew(StyleBoxEmpty));
translations->set_tab_align(TabContainer::ALIGN_LEFT);
translations->set_name(TTR("Localization"));
tab_container->add_child(translations);
@@ -1888,19 +1887,14 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
translation_filter->connect("item_edited", this, "_translation_filter_option_changed");
}
- {
- autoload_settings = memnew(EditorAutoloadSettings);
- autoload_settings->set_name(TTR("AutoLoad"));
- tab_container->add_child(autoload_settings);
- autoload_settings->connect("autoload_changed", this, "_settings_changed");
- }
+ autoload_settings = memnew(EditorAutoloadSettings);
+ autoload_settings->set_name(TTR("AutoLoad"));
+ tab_container->add_child(autoload_settings);
+ autoload_settings->connect("autoload_changed", this, "_settings_changed");
- {
-
- plugin_settings = memnew(EditorPluginSettings);
- plugin_settings->set_name(TTR("Plugins"));
- tab_container->add_child(plugin_settings);
- }
+ plugin_settings = memnew(EditorPluginSettings);
+ plugin_settings->set_name(TTR("Plugins"));
+ tab_container->add_child(plugin_settings);
timer = memnew(Timer);
timer->set_wait_time(1.5);
diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp
index bc7d8f4b14..b3743dbdf8 100644
--- a/editor/property_editor.cpp
+++ b/editor/property_editor.cpp
@@ -430,24 +430,19 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
} else if (hint == PROPERTY_HINT_LAYERS_2D_PHYSICS || hint == PROPERTY_HINT_LAYERS_2D_RENDER || hint == PROPERTY_HINT_LAYERS_3D_PHYSICS || hint == PROPERTY_HINT_LAYERS_3D_RENDER) {
- String title;
String basename;
switch (hint) {
case PROPERTY_HINT_LAYERS_2D_RENDER:
basename = "layer_names/2d_render";
- title = "2D Render Layers";
break;
case PROPERTY_HINT_LAYERS_2D_PHYSICS:
basename = "layer_names/2d_physics";
- title = "2D Physics Layers";
break;
case PROPERTY_HINT_LAYERS_3D_RENDER:
basename = "layer_names/3d_render";
- title = "3D Render Layers";
break;
case PROPERTY_HINT_LAYERS_3D_PHYSICS:
basename = "layer_names/3d_physics";
- title = "3D Physics Layers";
break;
}
@@ -469,11 +464,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
show();
- value_label[0]->set_text(title);
- value_label[0]->show();
- value_label[0]->set_position(Vector2(4, 4) * EDSCALE);
-
- checks20gc->set_position(Vector2(4, 4) * EDSCALE + Vector2(0, value_label[0]->get_size().height + 4 * EDSCALE));
+ checks20gc->set_position(Vector2(4, 4) * EDSCALE);
checks20gc->set_size(checks20gc->get_minimum_size());
set_size(Vector2(4, 4) * EDSCALE + checks20gc->get_position() + checks20gc->get_size());
@@ -656,7 +647,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
}
}
- if (type)
+ if (type != Variant::NIL)
property_select->select_property_from_basic_type(type, v);
updating = false;
@@ -1948,6 +1939,7 @@ CustomPropertyEditor::CustomPropertyEditor() {
type_button->get_popup()->connect("id_pressed", this, "_type_create_selected");
menu = memnew(PopupMenu);
+ menu->set_pass_on_modal_close_click(false);
add_child(menu);
menu->connect("id_pressed", this, "_menu_option");
@@ -2101,6 +2093,23 @@ bool PropertyEditor::_is_property_different(const Variant &p_current, const Vari
return bool(Variant::evaluate(Variant::OP_NOT_EQUAL, p_current, p_orig));
}
+bool PropertyEditor::_is_instanced_node_with_original_property_different(const String &p_name, TreeItem *item) {
+ bool mbi = _might_be_in_instance();
+ if (mbi) {
+ Variant vorig;
+ Dictionary d = item->get_metadata(0);
+ int usage = d.has("usage") ? int(int(d["usage"]) & (PROPERTY_USAGE_STORE_IF_NONONE | PROPERTY_USAGE_STORE_IF_NONZERO)) : 0;
+ if (_get_instanced_node_original_property(p_name, vorig) || usage) {
+ Variant v = obj->get(p_name);
+
+ if (_is_property_different(v, vorig, usage)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
TreeItem *PropertyEditor::find_item(TreeItem *p_item, const String &p_name) {
if (!p_item)
@@ -2360,6 +2369,10 @@ void PropertyEditor::_check_reload_status(const String &p_name, TreeItem *item)
}
}
+ if (_is_instanced_node_with_original_property_different(p_name, item)) {
+ has_reload = true;
+ }
+
if (obj->call("property_can_revert", p_name).operator bool()) {
has_reload = true;
@@ -2665,13 +2678,14 @@ TreeItem *PropertyEditor::get_parent_node(String p_path, HashMap<String, TreeIte
item->set_editable(1, false);
item->set_selectable(1, subsection_selectable);
- if (use_folding) {
+ if (use_folding) { //
if (!obj->editor_is_section_unfolded(p_path)) {
updating_folding = true;
item->set_collapsed(true);
updating_folding = false;
}
item->set_metadata(0, p_path);
+ foldable_property_cache.push_back(p_path);
}
if (item->get_parent() == root) {
@@ -2720,6 +2734,7 @@ void PropertyEditor::refresh() {
void PropertyEditor::update_tree() {
tree->clear();
+ foldable_property_cache.clear();
if (!obj)
return;
@@ -2788,13 +2803,12 @@ void PropertyEditor::update_tree() {
TreeItem *sep = tree->create_item(root);
current_category = sep;
String type = p.name;
- //*
+
if (has_icon(type, "EditorIcons"))
sep->set_icon(0, get_icon(type, "EditorIcons"));
else
sep->set_icon(0, get_icon("Object", "EditorIcons"));
- //*/
sep->set_text(0, type);
sep->set_expand_right(0, true);
sep->set_selectable(0, false);
@@ -2920,38 +2934,36 @@ void PropertyEditor::update_tree() {
}
if (use_doc_hints) {
- StringName setter;
- StringName type;
- if (ClassDB::get_setter_and_type_for_property(obj->get_class_name(), p.name, type, setter)) {
- String descr;
- bool found = false;
- Map<StringName, Map<StringName, String> >::Element *E = descr_cache.find(type);
- if (E) {
+ StringName classname = obj->get_class_name();
+ StringName propname = p.name;
+ String descr;
+ bool found = false;
- Map<StringName, String>::Element *F = E->get().find(setter);
- if (F) {
- found = true;
- descr = F->get();
- }
+ Map<StringName, Map<StringName, String> >::Element *E = descr_cache.find(classname);
+ if (E) {
+ Map<StringName, String>::Element *F = E->get().find(propname);
+ if (F) {
+ found = true;
+ descr = F->get();
}
- if (!found) {
+ }
- DocData *dd = EditorHelp::get_doc_data();
- Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(type);
- if (E) {
- for (int i = 0; i < E->get().methods.size(); i++) {
- if (E->get().methods[i].name == setter.operator String()) {
- descr = E->get().methods[i].description.strip_edges().word_wrap(80);
- }
+ if (!found) {
+ DocData *dd = EditorHelp::get_doc_data();
+ Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(classname);
+ if (E) {
+ for (int i = 0; i < E->get().properties.size(); i++) {
+ if (E->get().properties[i].name == propname.operator String()) {
+ descr = E->get().properties[i].description.strip_edges().word_wrap(80);
}
}
-
- descr_cache[type][setter] = descr;
}
- item->set_tooltip(0, TTR("Property:") + " " + p.name + "\n\n" + descr);
+ descr_cache[classname][propname] = descr;
}
+
+ item->set_tooltip(0, TTR("Property:") + " " + p.name + "\n\n" + descr);
}
Dictionary d;
@@ -3076,7 +3088,7 @@ void PropertyEditor::update_tree() {
item->set_text(1, type + " ID: " + itos(id));
item->add_button(1, get_icon("EditResource", "EditorIcons"));
} else {
- item->set_text(1, "[Empty]");
+ item->set_text(1, TTR("[Empty]"));
}
if (has_icon(p.hint_string, "EditorIcons")) {
@@ -3507,20 +3519,9 @@ void PropertyEditor::update_tree() {
bool has_reload = false;
- bool mbi = _might_be_in_instance();
- if (mbi) {
-
- Variant vorig;
- Dictionary d = item->get_metadata(0);
- int usage = d.has("usage") ? int(int(d["usage"]) & (PROPERTY_USAGE_STORE_IF_NONONE | PROPERTY_USAGE_STORE_IF_NONZERO)) : 0;
- if (_get_instanced_node_original_property(p.name, vorig) || usage) {
- Variant v = obj->get(p.name);
-
- if (_is_property_different(v, vorig, usage)) {
- item->add_button(1, get_icon("ReloadSmall", "EditorIcons"), 3);
- has_reload = true;
- }
- }
+ if (_is_instanced_node_with_original_property_different(p.name, item)) {
+ item->add_button(1, get_icon("ReloadSmall", "EditorIcons"), 3);
+ has_reload = true;
}
if (obj->call("property_can_revert", p.name).operator bool()) {
@@ -3540,7 +3541,7 @@ void PropertyEditor::update_tree() {
}
}
- if (mbi && !has_reload && item->get_cell_mode(1) == TreeItem::CELL_MODE_RANGE && item->get_text(1) == String()) {
+ if (_might_be_in_instance() && !has_reload && item->get_cell_mode(1) == TreeItem::CELL_MODE_RANGE && item->get_text(1) == String()) {
item->add_button(1, get_icon("ReloadEmpty", "EditorIcons"), 3, true);
}
}
@@ -3728,8 +3729,8 @@ void PropertyEditor::_item_edited() {
_edit_set(name, item->get_text(1), refresh_all);
}
} break;
- // math types
+ // math types
case Variant::VECTOR3: {
} break;
@@ -4213,6 +4214,25 @@ void PropertyEditor::set_use_folding(bool p_enable) {
tree->set_hide_folding(false);
}
+void PropertyEditor::collapse_all_folding() {
+ if (!obj)
+ return;
+ for (List<String>::Element *E = foldable_property_cache.front(); E; E = E->next()) {
+ obj->editor_set_section_unfold(E->get(), false);
+ }
+ update_tree();
+}
+
+void PropertyEditor::expand_all_folding() {
+
+ if (!obj)
+ return;
+ for (List<String>::Element *E = foldable_property_cache.front(); E; E = E->next()) {
+ obj->editor_set_section_unfold(E->get(), true);
+ }
+ update_tree();
+}
+
PropertyEditor::PropertyEditor() {
_prop_edited = "property_edited";
@@ -4257,6 +4277,7 @@ PropertyEditor::PropertyEditor() {
set_physics_process(true);
custom_editor = memnew(CustomPropertyEditor);
+ custom_editor->set_pass_on_modal_close_click(false);
add_child(custom_editor);
tree->connect("custom_popup_edited", this, "_custom_editor_request");
@@ -4343,7 +4364,7 @@ class SectionedPropertyEditorFilter : public Object {
PropertyInfo pi = E->get();
int sp = pi.name.find("/");
- if (pi.name == "resource_path" || pi.name == "resource_name" || pi.name.begins_with("script/")) //skip resource stuff
+ if (pi.name == "resource_path" || pi.name == "resource_name" || pi.name == "resource_local_to_scene" || pi.name.begins_with("script/")) //skip resource stuff
continue;
if (sp == -1) {
@@ -4493,7 +4514,7 @@ void SectionedPropertyEditor::update_category_list() {
else if (!(pi.usage & PROPERTY_USAGE_EDITOR))
continue;
- if (pi.name.find(":") != -1 || pi.name == "script" || pi.name == "resource_name" || pi.name == "resource_path")
+ if (pi.name.find(":") != -1 || pi.name == "script" || pi.name == "resource_name" || pi.name == "resource_path" || pi.name == "resource_local_to_scene")
continue;
if (search_box && search_box->get_text() != String() && pi.name.findn(search_box->get_text()) == -1)
@@ -4596,21 +4617,24 @@ SectionedPropertyEditor::~SectionedPropertyEditor() {
double PropertyValueEvaluator::eval(const String &p_text) {
+ // If range value contains a comma replace it with dot (issue #6028)
+ const String &p_new_text = p_text.replace(",", ".");
+
if (!obj || !script_language)
- return _default_eval(p_text);
+ return _default_eval(p_new_text);
Ref<Script> script = Ref<Script>(script_language->create_script());
- script->set_source_code(_build_script(p_text));
+ script->set_source_code(_build_script(p_new_text));
Error err = script->reload();
if (err) {
- print_line("[PropertyValueEvaluator] Error loading script for expression: " + p_text);
- return _default_eval(p_text);
+ print_line("[PropertyValueEvaluator] Error loading script for expression: " + p_new_text);
+ return _default_eval(p_new_text);
}
Object dummy;
ScriptInstance *script_instance = script->instance_create(&dummy);
if (!script_instance)
- return _default_eval(p_text);
+ return _default_eval(p_new_text);
Variant::CallError call_err;
Variant arg = obj;
@@ -4621,7 +4645,7 @@ double PropertyValueEvaluator::eval(const String &p_text) {
}
print_line("[PropertyValueEvaluator]: Error eval! Error code: " + itos(call_err.error));
- return _default_eval(p_text);
+ return _default_eval(p_new_text);
}
void PropertyValueEvaluator::edit(Object *p_obj) {
diff --git a/editor/property_editor.h b/editor/property_editor.h
index e69ca8bcd5..f684f5768d 100644
--- a/editor/property_editor.h
+++ b/editor/property_editor.h
@@ -1,4 +1,4 @@
-/*************************************************************************/
+/*************************************************************************/
/* property_editor.h */
/*************************************************************************/
/* This file is part of: */
@@ -203,9 +203,9 @@ class PropertyEditor : public Control {
bool hide_script;
bool use_folding;
bool property_selectable;
-
bool updating_folding;
+ List<String> foldable_property_cache;
HashMap<String, String> pending;
String selected_property;
@@ -244,6 +244,7 @@ class PropertyEditor : public Control {
bool _might_be_in_instance();
bool _get_instanced_node_original_property(const StringName &p_prop, Variant &value);
bool _is_property_different(const Variant &p_current, const Variant &p_orig, int p_usage = 0);
+ bool _is_instanced_node_with_original_property_different(const String &p_name, TreeItem *item);
void _refresh_item(TreeItem *p_item);
void _set_range_def(Object *p_item, String prop, float p_frame);
@@ -304,6 +305,9 @@ public:
void set_property_selectable(bool p_selectable);
void set_use_folding(bool p_enable);
+
+ void collapse_all_folding();
+ void expand_all_folding();
PropertyEditor();
~PropertyEditor();
};
diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp
index 86de7c56e1..77b73e4635 100644
--- a/editor/property_selector.cpp
+++ b/editor/property_selector.cpp
@@ -363,23 +363,6 @@ void PropertySelector::_item_selected() {
at_class = ClassDB::get_parent_class(at_class);
}
-
- if (text == String()) {
-
- StringName setter;
- StringName type;
- if (ClassDB::get_setter_and_type_for_property(class_type, name, type, setter)) {
- Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(type);
- if (E) {
- for (int i = 0; i < E->get().methods.size(); i++) {
- if (E->get().methods[i].name == setter.operator String()) {
- text = E->get().methods[i].description;
- }
- }
- }
- }
- }
-
} else {
String at_class = class_type;
@@ -516,6 +499,7 @@ void PropertySelector::select_property_from_script(const Ref<Script> &p_script,
search_box->grab_focus();
_update_search();
}
+
void PropertySelector::select_property_from_basic_type(Variant::Type p_type, const String &p_current) {
ERR_FAIL_COND(p_type == Variant::NIL);
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 1d2647badc..4d86030e7d 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -290,6 +290,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
if (!scene) {
EditorNode::get_singleton()->new_inherited_scene();
+ break;
}
file->set_mode(EditorFileDialog::MODE_OPEN_FILE);
@@ -986,7 +987,7 @@ void SceneTreeDock::perform_node_renames(Node *p_base, List<Pair<NodePath, NodeP
//will be renamed
NodePath rel_path = new_root_path.rel_path_to(E->get().second);
- NodePath new_path = NodePath(rel_path.get_names(), track_np.get_subnames(), false, track_np.get_property());
+ NodePath new_path = NodePath(rel_path.get_names(), track_np.get_subnames(), false);
if (new_path == track_np)
continue; //bleh
editor_data->get_undo_redo().add_do_method(anim.ptr(), "track_set_path", i, new_path);
@@ -1358,7 +1359,7 @@ void SceneTreeDock::_create() {
editor_data->get_undo_redo().commit_action();
editor->push_item(c);
-
+ editor_selection->clear();
if (Object::cast_to<Control>(c)) {
//make editor more comfortable, so some controls don't appear super shrunk
Control *ct = Object::cast_to<Control>(c);
@@ -1827,16 +1828,24 @@ void SceneTreeDock::add_remote_tree_editor(Control *p_remote) {
void SceneTreeDock::show_remote_tree() {
- button_hb->show();
_remote_tree_selected();
}
void SceneTreeDock::hide_remote_tree() {
- button_hb->hide();
_local_tree_selected();
}
+void SceneTreeDock::show_tab_buttons() {
+
+ button_hb->show();
+}
+
+void SceneTreeDock::hide_tab_buttons() {
+
+ button_hb->hide();
+}
+
void SceneTreeDock::_remote_tree_selected() {
scene_tree->hide();
@@ -1844,6 +1853,8 @@ void SceneTreeDock::_remote_tree_selected() {
remote_tree->show();
edit_remote->set_pressed(true);
edit_local->set_pressed(false);
+
+ emit_signal("remote_tree_selected");
}
void SceneTreeDock::_local_tree_selected() {
@@ -1886,10 +1897,13 @@ void SceneTreeDock::_bind_methods() {
ClassDB::bind_method(D_METHOD("_local_tree_selected"), &SceneTreeDock::_local_tree_selected);
ClassDB::bind_method(D_METHOD("instance"), &SceneTreeDock::instance);
+
+ ADD_SIGNAL(MethodInfo("remote_tree_selected"));
}
SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSelection *p_editor_selection, EditorData &p_editor_data) {
+ set_name("Scene");
editor = p_editor;
edited_scene = NULL;
editor_data = &p_editor_data;
diff --git a/editor/scene_tree_dock.h b/editor/scene_tree_dock.h
index 7848052241..41d5bda180 100644
--- a/editor/scene_tree_dock.h
+++ b/editor/scene_tree_dock.h
@@ -202,6 +202,8 @@ public:
void add_remote_tree_editor(Control *p_remote);
void show_remote_tree();
void hide_remote_tree();
+ void show_tab_buttons();
+ void hide_tab_buttons();
void open_script_dialog(Node *p_for_node);
SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSelection *p_editor_selection, EditorData &p_editor_data);
diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp
index dfda8a780d..2c0981ca30 100644
--- a/editor/scene_tree_editor.cpp
+++ b/editor/scene_tree_editor.cpp
@@ -481,6 +481,12 @@ void SceneTreeEditor::_selected_changed() {
blocked--;
}
+void SceneTreeEditor::_deselect_items() {
+
+ // Clear currently elected items in scene tree dock.
+ editor_selection->clear();
+}
+
void SceneTreeEditor::_cell_multi_selected(Object *p_object, int p_cell, bool p_selected) {
TreeItem *item = Object::cast_to<TreeItem>(p_object);
@@ -929,6 +935,7 @@ void SceneTreeEditor::_bind_methods() {
ClassDB::bind_method("_update_tree", &SceneTreeEditor::_update_tree);
ClassDB::bind_method("_node_removed", &SceneTreeEditor::_node_removed);
ClassDB::bind_method("_selected_changed", &SceneTreeEditor::_selected_changed);
+ ClassDB::bind_method("_deselect_items", &SceneTreeEditor::_deselect_items);
ClassDB::bind_method("_renamed", &SceneTreeEditor::_renamed);
ClassDB::bind_method("_rename_node", &SceneTreeEditor::_rename_node);
ClassDB::bind_method("_test_update_tree", &SceneTreeEditor::_test_update_tree);
@@ -1005,6 +1012,7 @@ SceneTreeEditor::SceneTreeEditor(bool p_label, bool p_can_rename, bool p_can_ope
tree->connect("item_edited", this, "_renamed", varray(), CONNECT_DEFERRED);
tree->connect("multi_selected", this, "_cell_multi_selected");
tree->connect("button_pressed", this, "_cell_button_pressed");
+ tree->connect("nothing_selected", this, "_deselect_items");
//tree->connect("item_edited", this,"_renamed",Vector<Variant>(),true);
error = memnew(AcceptDialog);
diff --git a/editor/scene_tree_editor.h b/editor/scene_tree_editor.h
index 1114b92796..88d60f9b8a 100644
--- a/editor/scene_tree_editor.h
+++ b/editor/scene_tree_editor.h
@@ -78,6 +78,7 @@ class SceneTreeEditor : public Control {
TreeItem *_find(TreeItem *p_node, const NodePath &p_path);
void _notification(int p_what);
void _selected_changed();
+ void _deselect_items();
void _rename_node(ObjectID p_node, const String &p_name);
void _cell_collapsed(Object *p_obj);
diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp
index 2a3e47b2a6..a1c1ec3351 100644
--- a/editor/script_editor_debugger.cpp
+++ b/editor/script_editor_debugger.cpp
@@ -45,6 +45,7 @@
#include "scene/gui/tab_container.h"
#include "scene/gui/texture_button.h"
#include "scene/gui/tree.h"
+#include "ustring.h"
class ScriptEditorDebuggerVariables : public Object {
@@ -642,7 +643,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
v /= 1024.0;
}
tt += " bytes";
- vs = rtos(v) + " " + unit;
+ vs = String::num(v, 2) + " " + unit;
} break;
case Performance::MONITOR_TYPE_TIME: {
tt += " seconds";
@@ -955,31 +956,28 @@ void ScriptEditorDebugger::_notification(int p_what) {
case NOTIFICATION_PROCESS: {
if (connection.is_valid()) {
+
inspect_scene_tree_timeout -= get_process_delta_time();
if (inspect_scene_tree_timeout < 0) {
- inspect_scene_tree_timeout = EditorSettings::get_singleton()->get("debugger/scene_tree_refresh_interval");
+ inspect_scene_tree_timeout = EditorSettings::get_singleton()->get("debugger/remote_scene_tree_refresh_interval");
if (inspect_scene_tree->is_visible_in_tree()) {
_scene_tree_request();
-
- if (inspected_object_id != 0) {
- //take the chance and re-inspect selected object
- Array msg;
- msg.push_back("inspect_object");
- msg.push_back(inspected_object_id);
- ppeer->put_var(msg);
- }
}
}
inspect_edited_object_timeout -= get_process_delta_time();
if (inspect_edited_object_timeout < 0) {
inspect_edited_object_timeout = EditorSettings::get_singleton()->get("debugger/remote_inspect_refresh_interval");
- if (inspect_scene_tree->is_visible_in_tree() && inspected_object_id) {
- //take the chance and re-inspect selected object
- Array msg;
- msg.push_back("inspect_object");
- msg.push_back(inspected_object_id);
- ppeer->put_var(msg);
+ if (inspected_object_id) {
+ if (ScriptEditorDebuggerInspectedObject *obj = Object::cast_to<ScriptEditorDebuggerInspectedObject>(ObjectDB::get_instance(editor->get_editor_history()->get_current()))) {
+ if (obj->remote_object_id == inspected_object_id) {
+ //take the chance and re-inspect selected object
+ Array msg;
+ msg.push_back("inspect_object");
+ msg.push_back(inspected_object_id);
+ ppeer->put_var(msg);
+ }
+ }
}
}
}
@@ -1127,6 +1125,15 @@ void ScriptEditorDebugger::_notification(int p_what) {
tabs->add_style_override("tab_bg", editor->get_gui_base()->get_stylebox("DebuggerTabBG", "EditorStyles"));
tabs->set_margin(MARGIN_LEFT, -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT));
tabs->set_margin(MARGIN_RIGHT, EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT));
+
+ bool enable_rl = EditorSettings::get_singleton()->get("docks/scene_tree/draw_relationship_lines");
+ Color rl_color = EditorSettings::get_singleton()->get("docks/scene_tree/relationship_line_color");
+
+ if (enable_rl) {
+ inspect_scene_tree->add_constant_override("draw_relationship_lines", 1);
+ inspect_scene_tree->add_color_override("relationship_line_color", rl_color);
+ } else
+ inspect_scene_tree->add_constant_override("draw_relationship_lines", 0);
} break;
}
}
@@ -1151,7 +1158,12 @@ void ScriptEditorDebugger::start() {
return;
}
- EditorNode::get_singleton()->get_scene_tree_dock()->show_remote_tree();
+ EditorNode::get_singleton()->get_scene_tree_dock()->show_tab_buttons();
+ auto_switch_remote_scene_tree = (bool)EditorSettings::get_singleton()->get("debugger/auto_switch_to_remote_scene_tree");
+ if (auto_switch_remote_scene_tree) {
+ EditorNode::get_singleton()->get_scene_tree_dock()->show_remote_tree();
+ }
+
set_process(true);
}
@@ -1189,6 +1201,7 @@ void ScriptEditorDebugger::stop() {
EditorNode::get_singleton()->get_pause_button()->set_pressed(false);
EditorNode::get_singleton()->get_pause_button()->set_disabled(true);
EditorNode::get_singleton()->get_scene_tree_dock()->hide_remote_tree();
+ EditorNode::get_singleton()->get_scene_tree_dock()->hide_tab_buttons();
if (hide_on_stop) {
if (is_visible_in_tree())
@@ -1835,11 +1848,13 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
inspect_scene_tree = memnew(Tree);
EditorNode::get_singleton()->get_scene_tree_dock()->add_remote_tree_editor(inspect_scene_tree);
+ EditorNode::get_singleton()->get_scene_tree_dock()->connect("remote_tree_selected", this, "_scene_tree_selected");
inspect_scene_tree->set_v_size_flags(SIZE_EXPAND_FILL);
inspect_scene_tree->connect("cell_selected", this, "_scene_tree_selected");
inspect_scene_tree->connect("item_collapsed", this, "_scene_tree_folded");
- inspect_scene_tree_timeout = EDITOR_DEF("debugger/scene_tree_refresh_interval", 1.0);
+ auto_switch_remote_scene_tree = EDITOR_DEF("debugger/auto_switch_to_remote_scene_tree", false);
+ inspect_scene_tree_timeout = EDITOR_DEF("debugger/remote_scene_tree_refresh_interval", 1.0);
inspect_edited_object_timeout = EDITOR_DEF("debugger/remote_inspect_refresh_interval", 0.2);
inspected_object_id = 0;
updating_scene_tree = false;
diff --git a/editor/script_editor_debugger.h b/editor/script_editor_debugger.h
index dc851dd575..82dcba469c 100644
--- a/editor/script_editor_debugger.h
+++ b/editor/script_editor_debugger.h
@@ -75,6 +75,7 @@ class ScriptEditorDebugger : public Control {
bool updating_scene_tree;
float inspect_scene_tree_timeout;
float inspect_edited_object_timeout;
+ bool auto_switch_remote_scene_tree;
ObjectID inspected_object_id;
ScriptEditorDebuggerVariables *variables;
Map<ObjectID, ScriptEditorDebuggerInspectedObject *> remote_objects;
diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp
index c052845be9..fccd0c51aa 100644
--- a/editor/settings_config_dialog.cpp
+++ b/editor/settings_config_dialog.cpp
@@ -291,7 +291,7 @@ void EditorSettingsDialog::_wait_for_key(const Ref<InputEvent> &p_event) {
last_wait_for_key = k;
String str = keycode_get_string(k->get_scancode()).capitalize();
if (k->get_metakey())
- str = TTR("Meta+") + str;
+ str = vformat("%s+", find_keycode_name(KEY_META)) + str;
if (k->get_shift())
str = TTR("Shift+") + str;
if (k->get_alt())
@@ -406,13 +406,13 @@ EditorSettingsDialog::EditorSettingsDialog() {
shortcut_clear_button->connect("pressed", this, "_clear_shortcut_search_box");
shortcuts = memnew(Tree);
- vbc->add_margin_child("Shortcut List:", shortcuts, true);
+ vbc->add_margin_child(TTR("Shortcut List:"), shortcuts, true);
shortcuts->set_columns(2);
shortcuts->set_hide_root(true);
//shortcuts->set_hide_folding(true);
shortcuts->set_column_titles_visible(true);
- shortcuts->set_column_title(0, "Name");
- shortcuts->set_column_title(1, "Binding");
+ shortcuts->set_column_title(0, TTR("Name"));
+ shortcuts->set_column_title(1, TTR("Binding"));
shortcuts->connect("button_pressed", this, "_shortcut_button_pressed");
press_a_key = memnew(ConfirmationDialog);
diff --git a/editor/translations/README.md b/editor/translations/README.md
index 351bc9e2d1..f30f4e61fb 100644
--- a/editor/translations/README.md
+++ b/editor/translations/README.md
@@ -16,5 +16,8 @@ Link if you missed it: https://hosted.weblate.org/projects/godot-engine/godot
## Adding new languages
If you want to translate for a language which is not featured yet on Weblate,
-open an issue on this repo to ask that the language is added, or contact
-Akien/@akien-mga directly on IRC (#godotengine channel on Freenode).
+you can add it (when logged in) by clicking the "Start new translation"
+button at the bottom of the page.
+
+Alternatively, you can use this
+[direct link](https://hosted.weblate.org/new-lang/godot-engine/godot/).
diff --git a/editor/translations/af.po b/editor/translations/af.po
new file mode 100644
index 0000000000..accb9d6d5e
--- /dev/null
+++ b/editor/translations/af.po
@@ -0,0 +1,7646 @@
+# Afrikaans translation of the Godot Engine editor
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
+# This file is distributed under the same license as the Godot source code.
+#
+# Ray West <the.raxar@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2017-11-27 02:44+0000\n"
+"Last-Translator: Ray West <the.raxar@gmail.com>\n"
+"Language-Team: Afrikaans <https://hosted.weblate.org/projects/godot-engine/"
+"godot/af/>\n"
+"Language: af\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.18-dev\n"
+
+#: editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Afgeskaskel"
+
+#: editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Alle Seleksie"
+
+#: editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "Skuif Byvoeg Sleutel"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Anim Verander Oorgang"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Anim Verander Transform"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Anim Verander Waarde"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "Anim Verander Roep"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Anim Voeg Baan By"
+
+#: editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Anim Dupliseer Sleutels"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Skuif Anim Baan Op"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Skuif Anim Baan Af"
+
+#: editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Verwyder Anim Baan"
+
+#: editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "Stel Oorgange na:"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Anim Baan Hernoem"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Anim Baan Verander Interpolasie"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "Anim Baan Verander Waarde Modus"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Wrap Mode"
+msgstr "Anim Baan Verander Terug Draai Modus"
+
+#: editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Wysig Nodus Kurwe"
+
+#: editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Wysig Seleksie Kurwe"
+
+#: editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Anim Skrap Sleutels"
+
+#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Dupliseer Seleksie"
+
+#: editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "Dupliseer Transponeering"
+
+#: editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr "Verwyder Seleksie"
+
+#: editor/animation_editor.cpp
+msgid "Continuous"
+msgstr "Deurlopend"
+
+#: editor/animation_editor.cpp
+msgid "Discrete"
+msgstr "Diskrete"
+
+#: editor/animation_editor.cpp
+msgid "Trigger"
+msgstr "Sneller"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Anim Voeg Sleutel By"
+
+#: editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "Anim Skuif Sleutels"
+
+#: editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Skaal Seleksie"
+
+#: editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "Skaal van Wyser"
+
+#: editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Gaan na Volgende Stap"
+
+#: editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Gaan na Vorige Stap"
+
+#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr "Lineêr"
+
+#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Konstant"
+
+#: editor/animation_editor.cpp
+msgid "In"
+msgstr "In"
+
+#: editor/animation_editor.cpp
+msgid "Out"
+msgstr "Uit"
+
+#: editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "In-Uit"
+
+#: editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Uit-In"
+
+#: editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Oorgange"
+
+#: editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Optimaliseer Animasie"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "Opruim Animasie"
+
+#: editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Skep NUWE baan vir %s en voeg sleutel by?"
+
+#: editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Skep %d NUWE bane en voeg sleutels by?"
+
+#: editor/animation_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Skep"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Anim Skep & Voeg by"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Anim Voeg Baan & Sleutel By"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Anim Voeg Sleutel by"
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Verander Anim Lente"
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Verander Anim Herspeel"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "Anim Skep Soort-Waarde Sleutel"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Anim Voeg In"
+
+#: editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Anim Skaal Sleutels"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "Anim Skep Roep Baan"
+
+#: editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "Animasie Zoem."
+
+#: editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Lengte (s):"
+
+#: editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Animasie lengte (in sekondes)."
+
+#: editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Tree (s):"
+
+#: editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "Wyser tree kiek (in secondes)."
+
+#: editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "Aktiveer/Deaktiveer herspeel in animasie."
+
+#: editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Skep nuwe bane."
+
+#: editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "Skuif huidige baan op."
+
+#: editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "Skuif huidige baan af."
+
+#: editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Verwyder geselekteerde baan."
+
+#: editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "Baan gereedskap"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Laat verandering van individuele sleutels toe deur hulle te kliek."
+
+#: editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Anim. Optimaliseerder"
+
+#: editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr "Max. Lineêre Fout:"
+
+#: editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "Max. Hoekige Fout:"
+
+#: editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "Max Optimaliseerbare Hoek:"
+
+#: editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Optimaliseer"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr ""
+"Selekteer 'n AnimasieSpeler van die Toeneel Boom om animasies te redigeer."
+
+#: editor/animation_editor.cpp
+msgid "Key"
+msgstr "Sleutel"
+
+#: editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Oorgang"
+
+#: editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Skaal Verhouding:"
+
+#: editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Roep Funksies in Watter Nodus?"
+
+#: editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Verwyder ongeldige sleutels"
+
+#: editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Verwyder onopgeloste en leë bane"
+
+#: editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "Ruim alle animasies op"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Ruim Animasie(s) Op (Geen ONTDOEN!)"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "Ruim-Op"
+
+#: editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Herskaleer Skikking"
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "Verander Skikking Waarde-Soort"
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "Verander Skikking Waarde"
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Gaan na Reël"
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Reël Nommer:"
+
+#: editor/code_editor.cpp
+msgid "No Matches"
+msgstr "Geen Pasmaats"
+
+#: editor/code_editor.cpp
+msgid "Replaced %d occurrence(s)."
+msgstr "Het %d verskynsel(s) vervang."
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr "Vervang"
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Vervang Alles"
+
+#: editor/code_editor.cpp
+msgid "Match Case"
+msgstr "Pas Letterkas"
+
+#: editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Hele Woorde"
+
+#: editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Slegs Seleksie"
+
+#: editor/code_editor.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Search"
+msgstr "Soek"
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "Find"
+msgstr "Vind"
+
+#: editor/code_editor.cpp
+msgid "Next"
+msgstr "Volgende"
+
+#: editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Nie gevind nie!"
+
+#: editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Vervang Met"
+
+#: editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "Letterkas Sensitief"
+
+#: editor/code_editor.cpp
+msgid "Backwards"
+msgstr "Terugwaarts"
+
+#: editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Por Op Vervang"
+
+#: editor/code_editor.cpp
+msgid "Skip"
+msgstr "Spring Oor"
+
+#: editor/code_editor.cpp
+msgid "Zoom In"
+msgstr "Zoem In"
+
+#: editor/code_editor.cpp
+msgid "Zoom Out"
+msgstr "Zoem Uit"
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "Herset Zoem"
+
+#: editor/code_editor.cpp editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Reël:"
+
+#: editor/code_editor.cpp
+msgid "Col:"
+msgstr "Kol:"
+
+#: editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "Metode in teiken Nodus moet gespesifiseer word!"
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Target method not found! Specify a valid method or attach a script to target "
+"Node."
+msgstr ""
+"Teiken metode nie gevind nie! Spesifiseer 'n geldige metode of heg 'n skrip "
+"aan die teiken Node."
+
+#: editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Koppel aan Nodus:"
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr "Voeg By"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr "Verwyder"
+
+#: editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr "Voeg Ekstra Roep Argument By:"
+
+#: editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr "Ekstra Roep Argumente:"
+
+#: editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr "Pad na Nodus:"
+
+#: editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Maak Funksie"
+
+#: editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Uitgestel"
+
+#: editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "Een-skoot"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Maak Toe"
+
+#: editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Koppel"
+
+#: editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Koppel '%s' aan '%s'"
+
+#: editor/connections_dialog.cpp
+msgid "Connecting Signal:"
+msgstr "Koppel tans Sein:"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Create Subscription"
+msgstr "Skep Intekening"
+
+#: editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Koppel..."
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Ontkoppel"
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+msgid "Signals"
+msgstr "Seine"
+
+#: editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Skep Nuwe"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr "Gunstelinge:"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Onlangse:"
+
+#: editor/create_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Soek:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Passendes:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Beskrywing:"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Soek Vervanging Vir:"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Afhanlikhede Vir:"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"Toneel '%s' is tans besig om geredigeer te word.\n"
+"Verandering sal eers in werking tree nadat herlaai word."
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"Hulpbron '%s' is in gebruik.\n"
+"Verandering sal eers in werking tree nadat herlaai word."
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Afhanklikhede"
+
+#: editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "Hulpbron"
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Path"
+msgstr "Pad"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Afhanklikhede:"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Maak Gebreekte Reg"
+
+#: editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Afhanklikheid Bewerker"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Soek Vervanging Hulpbron:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Oop"
+
+#: editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Eienaars van:"
+
+#: editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Verwyder geselekteerde lêers uit die projek? (geen ontdoen)"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"Die lêers wat verwyder word, word vereis deur ander hulpbronne sodat hulle "
+"reg kan werk.\n"
+"Verwyder die lêers in elk geval? (geen ontdoen)"
+
+#: editor/dependency_editor.cpp
+msgid "Cannot remove:\n"
+msgstr "Kan nie verwyder nie:\n"
+
+#: editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Fout terwyl laai:"
+
+#: editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "Toneel kon nie laai nie as gevolg van vermiste afhanklikhede:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Open Anyway"
+msgstr "Maak Oop In Elk Geval"
+
+#: editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Watter aksie moet geneem word?"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Maak Afhanklikhede Reg"
+
+#: editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Foute terwyl laai!"
+
+#: editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "Skrap %d item(s) permanent? (Geen ontdoen!)"
+
+#: editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Besit"
+
+#: editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Hulpbronne Sonder Eksplisiete Eienaarskap:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "Verweerde Hulpbron Verkenner"
+
+#: editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Skrap gekose lêers?"
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr "Skrap"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Verander Woordeboek Sleutel"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Verander Woordeboek Waarde"
+
+#: editor/editor_about.cpp
+msgid "Thanks from the Godot community!"
+msgstr "Dankie van die Godot gemeenskap!"
+
+#: editor/editor_about.cpp
+msgid "Thanks!"
+msgstr "Dankie!"
+
+#: editor/editor_about.cpp
+msgid "Godot Engine contributors"
+msgstr "Godot Enjin bydraers"
+
+#: editor/editor_about.cpp
+msgid "Project Founders"
+msgstr "Projek Stigters"
+
+#: editor/editor_about.cpp
+msgid "Lead Developer"
+msgstr "Hoof Ontwikkelaar"
+
+#: editor/editor_about.cpp editor/project_manager.cpp
+msgid "Project Manager"
+msgstr "Projek Bestuurder"
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr "Ontwikkelaars"
+
+#: editor/editor_about.cpp
+msgid "Authors"
+msgstr "Outeurs"
+
+#: editor/editor_about.cpp
+msgid "Platinum Sponsors"
+msgstr "Platinum Borge"
+
+#: editor/editor_about.cpp
+msgid "Gold Sponsors"
+msgstr "Goue Borge"
+
+#: editor/editor_about.cpp
+msgid "Mini Sponsors"
+msgstr "Mini Borge"
+
+#: editor/editor_about.cpp
+msgid "Gold Donors"
+msgstr "Goue Skenkers"
+
+#: editor/editor_about.cpp
+msgid "Silver Donors"
+msgstr "Silver Skenkers"
+
+#: editor/editor_about.cpp
+msgid "Bronze Donors"
+msgstr "Brons Skenkers"
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr "Skenkers"
+
+#: editor/editor_about.cpp
+msgid "License"
+msgstr "Lisensie"
+
+#: editor/editor_about.cpp
+msgid "Thirdparty License"
+msgstr "Derdeparty-lisensie"
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of thirdparty free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such thirdparty components with their "
+"respective copyright statements and license terms."
+msgstr ""
+"Godot Enjin maak staat op 'n nommer derdeparty vry en oopbron biblioteke, "
+"almal versoenbaar met die terme van sy MIT lisensie. Die volgende is 'n "
+"volledige lys van alle sodanige derdeparty komponente met hul onderskeie "
+"Kopiereg state en lisensievoorwaardes."
+
+#: editor/editor_about.cpp
+msgid "All Components"
+msgstr "Alle komponente"
+
+#: editor/editor_about.cpp
+msgid "Components"
+msgstr "Komponente"
+
+#: editor/editor_about.cpp
+msgid "Licenses"
+msgstr "Lisensies"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Error opening package file, not in zip format."
+msgstr "Fout met oopmaak, die pakket-lêer is nie in zip format nie."
+
+#: editor/editor_asset_installer.cpp
+msgid "Uncompressing Assets"
+msgstr "Ontpak Bates"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr "Pakket Suksesvol Geïnstalleer!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr "Sukses!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Installeer"
+
+#: editor/editor_asset_installer.cpp
+msgid "Package Installer"
+msgstr "Pakket Installeerder"
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr "Luidsprekers"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr "Voeg Effek By"
+
+#: editor/editor_audio_buses.cpp
+msgid "Rename Audio Bus"
+msgstr "Hernoem Oudio-Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Solo"
+msgstr "Wissel Oudio-Bus Solo"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Mute"
+msgstr "Wissel Oudio-Bus Uitdoof"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr "Wissel Oudio-Bus Omseil Effekte"
+
+#: editor/editor_audio_buses.cpp
+msgid "Select Audio Bus Send"
+msgstr "Kies Oudio-Bus Stuur"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus Effect"
+msgstr "Voeg Oudio-Bus Effek By"
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Bus Effect"
+msgstr "Skuif Bus Effek"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Bus Effect"
+msgstr "Skrap Bus Effek"
+
+#: editor/editor_audio_buses.cpp
+msgid "Audio Bus, Drag and Drop to rearrange."
+msgstr "Oudio-Bus, Sleep-en-los om dit te herrangskik."
+
+#: editor/editor_audio_buses.cpp
+msgid "Solo"
+msgstr "Solo"
+
+#: editor/editor_audio_buses.cpp
+msgid "Mute"
+msgstr "Uitdoof"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bypass"
+msgstr "Omseil"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bus options"
+msgstr "Bus opsies"
+
+#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "Dupliseer"
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Volume"
+msgstr "Herstel Volume"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr "Skrap Effek"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus"
+msgstr "Voeg Oudio-Bus By"
+
+#: editor/editor_audio_buses.cpp
+msgid "Master bus can't be deleted!"
+msgstr "Meester Bus kan nie geskrap word nie!"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Audio Bus"
+msgstr "Skrap Oudio-Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Duplicate Audio Bus"
+msgstr "Dupliseer Oudio-Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Bus Volume"
+msgstr "Herstel Bus Volume"
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Audio Bus"
+msgstr "Skuif Oudio-Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Save Audio Bus Layout As.."
+msgstr "Stoor Oudio-Bus Uitleg As..."
+
+#: editor/editor_audio_buses.cpp
+msgid "Location for New Layout.."
+msgstr "Ligging van Nuwe Uitleg..."
+
+#: editor/editor_audio_buses.cpp
+msgid "Open Audio Bus Layout"
+msgstr "Oop Oudio-Bus Uitleg"
+
+#: editor/editor_audio_buses.cpp
+msgid "There is no 'res://default_bus_layout.tres' file."
+msgstr "Daar is nie 'n 'res://default_bus_layout.tres'-lêer nie."
+
+#: editor/editor_audio_buses.cpp
+msgid "Invalid file, not an audio bus layout."
+msgstr "Ongeldige lêer, dis nie 'n oudio-bus uitleg nie."
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Bus"
+msgstr "Voeg Bus By"
+
+#: editor/editor_audio_buses.cpp
+msgid "Create a new Bus Layout."
+msgstr "Skep 'n nuwe Bus Uitleg."
+
+#: editor/editor_audio_buses.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Load"
+msgstr "Laai"
+
+#: editor/editor_audio_buses.cpp
+msgid "Load an existing Bus Layout."
+msgstr "Laai 'n bestaande Bus Uitleg."
+
+#: editor/editor_audio_buses.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr "Stoor As"
+
+#: editor/editor_audio_buses.cpp
+msgid "Save this Bus Layout to a file."
+msgstr "Stoor hierdie Bus Uitleg na 'n lêer."
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+msgid "Load Default"
+msgstr "Laai Verstek"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Load the default Bus Layout."
+msgstr "Laai die verstek Bus Uitleg."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr "Ongeldige naam."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr "Geldige karakters:"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr "Ongeldige naam. Dit moet nie met bestaande enjin klasname bots nie."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+"Ongeldige naam. Dit moet nie met bestaande ingeboude tiepename bots nie."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+"Ongeldige naam. Moet nie met bestaande globale knostante name bots nie."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr "Ongeldige Pad."
+
+#: editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr "Lêer bestaan nie."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr "Nie in hulpbron pad nie."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr "Voeg AutoLaai By"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr "AutoLaai '%s' bestaan reeds!"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr "Hernoem AutoLaai"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "Wissel AutoLaai Globale"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr "Skuif AutoLaai"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr "Hernoem AutoLaai"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr "Aktiveer"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr "Herrangskik AutoLaaie"
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Path:"
+msgstr "Pad:"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr "Nodus Naam:"
+
+#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
+msgid "Name"
+msgstr "Naam"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr "EnkelHouer"
+
+#: editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr "Lys:"
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Toneel word Opgedateer"
+
+#: editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "Plaaslike veranderinge word gebêre..."
+
+#: editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Toneel word opgedateer..."
+
+#: editor/editor_dir_dialog.cpp
+msgid "Please select a base directory first"
+msgstr "Kies asseblief eerste die basis gids"
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Kies 'n Gids"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr "Skep Vouer"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr "Naam:"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Kon nie vouer skep nie."
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Kies"
+
+#: editor/editor_export.cpp
+msgid "Storing File:"
+msgstr "Leêr word gebêre:"
+
+#: editor/editor_export.cpp
+msgid "Packing"
+msgstr "Verpak"
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+msgid "Template file not found:\n"
+msgstr "Sjabloon lêer nie gevind nie:\n"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "Lêer Bestaan reeds. Oorskryf?"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Skep Vouer"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr "Alle Erkende"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Alle Lêers (*)"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr "Open 'n Lêer"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr "Open Lêer(s)"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr "Open 'n Gids"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr "Open 'n Lêer of Gids"
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr "Stoor"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr "Stoor 'n Lêer"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr "Gaan Terug"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr "Gaan Vorentoe"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr "Gaan Op"
+
+#: editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr "Verfris"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr "Wissel Versteekte Lêers"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr "Wissel Gunsteling"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr "Wissel Modus"
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr "Fokus Pad"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr "Skuif Gunsteling Op"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr "Skuif Gunsteling Af"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder"
+msgstr "Gaan na ouer vouer"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Gidse & Lêers:"
+
+#: editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Voorskou:"
+
+#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
+#: scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr "Lêer:"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Moet 'n geldige uitbreiding gebruik."
+
+#: editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "SkandeerBronne"
+
+#: editor/editor_file_system.cpp
+msgid "(Re)Importing Assets"
+msgstr "(Her)Invoer van Bates"
+
+#: editor/editor_help.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Deursoek Hulp"
+
+#: editor/editor_help.cpp
+msgid "Class List:"
+msgstr "Klas Lys:"
+
+#: editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Deursoek Klasse"
+
+#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Bo"
+
+#: editor/editor_help.cpp editor/property_editor.cpp
+msgid "Class:"
+msgstr "Klas:"
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+msgid "Inherits:"
+msgstr "Erf:"
+
+#: editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Geërf deur:"
+
+#: editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Kort Beskrywing:"
+
+#: editor/editor_help.cpp
+msgid "Members"
+msgstr "Lede"
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Members:"
+msgstr "Lede:"
+
+#: editor/editor_help.cpp
+msgid "Public Methods"
+msgstr "Openbare Metodes"
+
+#: editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Openbare Metodes:"
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items"
+msgstr "GUI Tema Items"
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "GUI Tema Items:"
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Signals:"
+msgstr "Seine:"
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr "Opnoemings"
+
+#: editor/editor_help.cpp
+msgid "Enumerations:"
+msgstr "Opnoemings:"
+
+#: editor/editor_help.cpp
+msgid "enum "
+msgstr "enum "
+
+#: editor/editor_help.cpp
+msgid "Constants"
+msgstr "Konstantes"
+
+#: editor/editor_help.cpp
+msgid "Constants:"
+msgstr "Konstantes:"
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr "Beskrywing"
+
+#: editor/editor_help.cpp
+msgid "Properties"
+msgstr "Eienskappe"
+
+#: editor/editor_help.cpp
+msgid "Property Description:"
+msgstr "Eienskap Beskrywing:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Daar is tans geen beskrywing vir hierdie eienskap nie. Help ons asseblief "
+"deur [color=$color][url=$url]een by te dra[/url][/color]!"
+
+#: editor/editor_help.cpp
+msgid "Methods"
+msgstr "Metodes"
+
+#: editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "Metode Beskrywing:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Daar is tans geen beskrywing vir hierdie metode nie. Help ons asseblief deur "
+"[color=$color][url=$url]een by te dra[/url][/color]!"
+
+#: editor/editor_help.cpp
+msgid "Search Text"
+msgstr "Deursoek Teks"
+
+#: editor/editor_log.cpp
+msgid "Output:"
+msgstr "Afvoer:"
+
+#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/property_editor.cpp editor/script_editor_debugger.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Clear"
+msgstr "Vee uit"
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr "Fout tydens storing van hulpbron!"
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr "Stoor Hulpbron As..."
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "Ek sien..."
+
+#: editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Kan nie lêer vir skryf oopmaak nie:"
+
+#: editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Versoekte lêerformaat onbekend:"
+
+#: editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Fout tydens stoor."
+
+#: editor/editor_node.cpp
+msgid "Can't open '%s'."
+msgstr "Kan nie '%s' oopmaak nie."
+
+#: editor/editor_node.cpp
+msgid "Error while parsing '%s'."
+msgstr "Fout tydens ontleding van '%s'."
+
+#: editor/editor_node.cpp
+msgid "Unexpected end of file '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Missing '%s' or its dependencies."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while loading '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a tree root."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it will not be kept when saving the current scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene was imported, so changes to it will not be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open in Help"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to '%s' before closing?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "No"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a selected node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes the following scene(s) before opening Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Clear Recent Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+msgid "Default"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle distraction-free mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Filter Files.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp
+msgid "Redo"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Help"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Online Docs"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Q&A"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Issue Tracker"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Disable Update Spinner"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Changes may be lost!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Node"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Password:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Script Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid "Select device from the list"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the export menu."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Re-Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Installed)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Missing)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Current)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove template version '%s'?"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Invalid version.txt format inside templates. Revision is not a valid "
+"identifier."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for templates:\n"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Importing:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Installed Versions:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install From File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove Template"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select template file"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
+#: editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a list"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"\n"
+"Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself.\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "A file or folder with this name already exists."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Expand all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Collapse all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Rename.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Folder.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Rename"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid " Files"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Import As:"
+msgstr ""
+
+#: editor/import_dock.cpp editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr ""
+
+#: editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Create a new polygon from scratch"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit existing polygon:\n"
+"LMB: Move Point.\n"
+"Ctrl+LMB: Split Segment.\n"
+"RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Beskrywing"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Category:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: editor/plugins/camera_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggles snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to parent"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node sides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to other nodes"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show helpers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show rulers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag pivot from mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set pivot at mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change default type"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat0"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat1"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease in"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Hold Shift to edit tangents individually"
+msgstr ""
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid ""
+"No OccluderPolygon2D resource on this node.\n"
+"Create and assign one?"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake the navigation mesh.\n"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Partitioning..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating contours..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr ""
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Particles"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Close and save changes?\n"
+"\""
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid " Class Reference"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with external editor"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Discard"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Pick Color"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Case"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Cut"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Select All"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Delete Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Replace.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Information"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Doppler Enable"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode (Q)\n"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Drag: Rotate\n"
+"Alt+Drag: Move\n"
+"Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Select"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Move"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Rotate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (After)"
+msgstr ""
+
+#: editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Edit theme.."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme editing menu."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete patch '%s' from list?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted: "
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add.."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Patches"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Make Patch"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The path does not exist."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Your project will be created in a non empty folder (you might want to create "
+"a new folder)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a folder that does not contain a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid " "
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "It would be a good idea to name your project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Rename Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in the project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create folder"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't open project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in \"Project Settings\" under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The UI will update next time the editor or project manager starts."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Restart Now"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't run project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 6"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 7"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 8"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 9"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Can't contain '/' or ':'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Already existing"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override For.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Localization"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show all locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show only selected locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Select Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "New Script"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Show in File System"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Convert To %s"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can not perform with the root node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Copy Node Path"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Filter nodes"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach a new or existing script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear a script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connection(s) and group(s)\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connections.\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Open script"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading template '%s'"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading script from %s"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Directory of the same name exists"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, will be reused"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid Path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script valid"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9 and _"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Create new script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Load existing script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Inherits"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Class Name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Template"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Library"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Status"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Libraries: "
+msgstr ""
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Duplicate Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit X Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Y Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Z Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Exterior Connector"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Erase Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clear Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/mono/editor/mono_bottom_panel.cpp
+msgid "Builds"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Move Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Condition"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Sequence"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Switch"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Iterator"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "While"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Return"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Call"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Get"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Script already has function '%s'"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run exported HTML in the system's default browser."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overriden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller id must not be 0 or this controller will not be bound to an "
+"actual controller"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor id must not be 0 or this anchor will not be bound to an actual "
+"anchor"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVROrigin requires an ARVRCamera child node"
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overriden by "
+"the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid "Path property must point to a valid Spatial node to work."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Raw Mode"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Add current color as a preset"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Cancel"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
+msgstr ""
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Setings (Rendering -> Viewport -"
+"> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error initializing FreeType."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Unknown font format."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error loading font."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Invalid font size."
+msgstr ""
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index 0309680da9..42b75c6802 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -5,7 +5,11 @@
#
# athomield <athomield@hotmail.com>, 2017.
# Basil Al-Khateeb <basil.y.alkhateeb@gmail.com>, 2017.
+# Jamal Alyafei <jamal.qassim@gmail.com>, 2017.
+# john lennon <khoanantonio@outlook.com>, 2017.
# Mohammmad Khashashneh <mohammad.rasmi@gmail.com>, 2016.
+# Mrwan Ashraf <mrwan.ashraf94@gmail.com>, 2017.
+# noureldin sharaf <sharaf.noureldin@yahoo.com>, 2017.
# omar anwar aglan <omar.aglan91@yahoo.com>, 2017.
# OWs Tetra <owstetra@gmail.com>, 2017.
# Wajdi Feki <wajdi.feki@gmail.com>, 2017.
@@ -13,8 +17,8 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-10-25 20:58+0000\n"
-"Last-Translator: Wajdi Feki <wajdi.feki@gmail.com>\n"
+"PO-Revision-Date: 2017-11-27 23:44+0000\n"
+"Last-Translator: omar anwar aglan <omar.aglan91@yahoo.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -22,7 +26,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -30,7 +34,7 @@ msgstr "معطّل"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr "ÙƒÙÙ„ الإختيار"
+msgstr "ÙƒÙÙ„ Ø§Ù„Ù…ÙØ­Ø¯Ø¯"
#: editor/animation_editor.cpp
msgid "Move Add Key"
@@ -74,7 +78,7 @@ msgstr "حذ٠مسار التحريك"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr "تحديد التحولات ل:"
+msgstr "تحديد التحويلات لـ:"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
@@ -94,19 +98,20 @@ msgstr "تغيير صيغة الغلا٠لمسار التحريك"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr "تحرير منحى العقدة"
+msgstr "تحرير منحنى العقدة"
#: editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr "تحرير منحى الإختيار"
+msgstr "تحرير منحنى الإختيار"
#: editor/animation_editor.cpp
msgid "Anim Delete Keys"
msgstr "Ù…ÙØ§ØªÙŠØ­ حذ٠التحريك"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr "إختيار النسخ"
+msgstr "تكرير المحدد"
#: editor/animation_editor.cpp
msgid "Duplicate Transposed"
@@ -114,7 +119,7 @@ msgstr "نسخ محمّل"
#: editor/animation_editor.cpp
msgid "Remove Selection"
-msgstr "حذ٠الإختيار"
+msgstr "Ø­Ø°Ù Ø§Ù„Ù…ÙØ­Ø¯Ø¯"
#: editor/animation_editor.cpp
msgid "Continuous"
@@ -179,7 +184,7 @@ msgstr "خارج-داخل"
#: editor/animation_editor.cpp
msgid "Transitions"
-msgstr "تحولات"
+msgstr "تحويلات"
#: editor/animation_editor.cpp
msgid "Optimize Animation"
@@ -252,7 +257,7 @@ msgstr "الطول (ثانية):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr "طول الأنميشين (بالثواني)."
+msgstr "طول الحركة (بالثواني)."
#: editor/animation_editor.cpp
msgid "Step (s):"
@@ -312,7 +317,7 @@ msgstr "تحسين"
#: editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
-msgstr "خدد مشغل حركة من شجرة المشهد لكي تعدل الحركة."
+msgstr "حدد مشغل حركة من شجرة المشهد لكي تعدل الحركة."
#: editor/animation_editor.cpp
msgid "Key"
@@ -467,7 +472,7 @@ msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
-"لم يتم العثور على الطريقة Ø§Ù„Ù…Ø³ØªÙ‡Ø¯ÙØ©! حدّد طريقة سليمة أو أرÙÙ‚ سيكربت لاستهدا٠"
+"لم يتم العثور على الطريقة Ø§Ù„Ù…Ø³ØªÙ‡Ø¯ÙØ©! حدّد طريقة سليمة أو أرÙÙ‚ كود لإستهدا٠"
"العقدة."
#: editor/connections_dialog.cpp
@@ -489,7 +494,7 @@ msgstr "إمسح"
#: editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr "Ø¥Ø¶Ø§ÙØ© وسيطة إستدعاء إضاÙية"
+msgstr "Ø¥Ø¶Ø§ÙØ© وسيطة إستدعاء إضاÙية:"
#: editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
@@ -556,7 +561,7 @@ msgstr "الإشارات"
#: editor/create_dialog.cpp
msgid "Create New"
-msgstr "إصنع جديد"
+msgstr "إنشاء جديد"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -640,6 +645,13 @@ msgstr "محرر التبعيات"
msgid "Search Replacement Resource:"
msgstr "البحث عن مورد بديل:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Ø¥ÙØªØ­"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "ملاك:"
@@ -654,13 +666,12 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
-"المل٠الذي يمسح مطلوب من موارد أخري لكل تعمل جيداً.\n"
+"المل٠الذي ÙŠÙمسح مطلوب من موارد أخري لكل تعمل جيداً.\n"
"إمسح علي أية حال؟ (لا رجعة)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Cannot remove:\n"
-msgstr "لا يمكن الحل."
+msgstr "لا يمكن المسح:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -668,7 +679,7 @@ msgstr "خطآ ÙÙŠ التحميل:"
#: editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr "ÙØ´Ù„ ÙÙŠ تحميل المشهد بسبب وجود Ù…Ù„ÙØ§Øª Ù…Ùقودة يعتمد المشهد عليها:"
+msgstr "ÙØ´Ù„ ÙÙŠ تحميل المشهد بسبب وجود تبعيات Ù…Ùقودة يعتمد المشهد عليها:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
@@ -713,6 +724,14 @@ msgstr "إمسح Ø§Ù„Ù…Ù„ÙØ§Øª المحددة؟"
msgid "Delete"
msgstr "مسح"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "تغيير Ù…ÙØªØ§Ø­ القاموس"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "تغيير قيمة ÙÙŠ القاموس"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "شكراً من مجتمع Godot!"
@@ -897,9 +916,8 @@ msgid "Duplicate"
msgstr "تكرير"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "إرجاع التكبير"
+msgstr "إرجاع الصوت"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
@@ -922,9 +940,8 @@ msgid "Duplicate Audio Bus"
msgstr "تكرير بيوس الصوت"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "إرجاع التكبير"
+msgstr "إرجاع صوت البيس"
#: editor/editor_audio_buses.cpp
msgid "Move Audio Bus"
@@ -956,7 +973,7 @@ msgstr "أض٠بيوس"
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr "إصنع نسق بيوس جديد."
+msgstr "أنشئ نسق بيوس جديد."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
@@ -1127,6 +1144,11 @@ msgid "File Exists, Overwrite?"
msgstr "المل٠موجود، إستبدال؟"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "أنشئ مجلد"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "جميع الأنواع المعتمدة"
@@ -1134,12 +1156,6 @@ msgstr "جميع الأنواع المعتمدة"
msgid "All Files (*)"
msgstr "كل Ø§Ù„Ù…Ù„ÙØ§Øª (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Ø¥ÙØªØ­"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Ø¥ÙØªØ­ ملÙ"
@@ -1206,10 +1222,9 @@ msgstr "حرك المÙÙØ¶Ù„Ø© للأعلي"
msgid "Move Favorite Down"
msgstr "حرك المÙÙØ¶Ù„Ø© للأسÙÙ„"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "لا يمكن إنشاء المجلد."
+msgstr "إذهب إلي المجلد السابق"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1270,27 +1285,24 @@ msgid "Brief Description:"
msgstr "وص٠مختصر:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "الأعضاء:"
+msgstr "الأعضاء"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "الأعضاء:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "الطرق العامة:"
+msgstr "الطرق العامة"
#: editor/editor_help.cpp
msgid "Public Methods:"
msgstr "الطرق العامة:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "GUI Theme Items"
-msgstr "عناصر ثيم واجهة المستخدم:"
+msgstr "عناصر ثيم واجهة المستخدم"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
@@ -1301,9 +1313,8 @@ msgid "Signals:"
msgstr "الإشارات:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "التعدادات:"
+msgstr "التعدادات"
#: editor/editor_help.cpp
msgid "Enumerations:"
@@ -1314,18 +1325,16 @@ msgid "enum "
msgstr "التعداد "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "الثوابت:"
+msgstr "الثوابت"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr "الثوابت:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "الوصÙ:"
+msgstr "الوصÙ"
#: editor/editor_help.cpp
msgid "Properties"
@@ -1344,9 +1353,8 @@ msgstr ""
"المساهمة واحد [color=$color][url=$url]!"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "قائمة الطرق:"
+msgstr "قائمة الطرق"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1400,14 +1408,12 @@ msgid "Error while saving."
msgstr "خطأ خلال Ø§Ù„Ø­ÙØ¸."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "لا يمكن الحل."
+msgstr "لا يمكن ÙØªØ­ '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "خطأ خلال Ø§Ù„Ø­ÙØ¸."
+msgstr "خطأ خلال تحميل '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
@@ -1415,12 +1421,11 @@ msgstr "نهاية مل٠غير مرتقبة 's%'."
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
-msgstr ""
+msgstr "'%s' Ù…Ùقود أو أحدي إعتمادته."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "خطأ خلال Ø§Ù„Ø­ÙØ¸."
+msgstr "خطأ خلال تحميل '%s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1485,18 +1490,25 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"هذا المصدر ينتمي إلي مشهد قد تم إستيراده، إذا لا يمكن تعديله.\n"
+"من ÙØ¶Ù„Ùƒ إقرأ التوثيق المرتبط بإستيراد المشاهد لكي تÙهم بشكل Ø£ÙØ¶Ù„ كيÙية عمل "
+"هذا النظام."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"هذا المصدر ينتمي إلي مشهد قد تم توضيحة أو إيراثه.\n"
+"تغييره لن ÙŠÙØ­Ùظ حينما يتم Ø­ÙØ¸ المشهد الحالي."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"هذا المورد قد تم إستيراده، إذا لا يمكن تعديله. غير إعدادته ÙÙŠ قائمة "
+"الإستيراد ومن ثم أعد إستيراده."
#: editor/editor_node.cpp
msgid ""
@@ -1505,6 +1517,30 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"المشهد تم إستيراده، إذا أي تغيير Ùيه لن ÙŠÙØ­Ùظ.\n"
+"الإيضاح أو الإيراث سو٠يسمح Ø¨Ø­ÙØ¸ أي تغيير Ùيه.\n"
+"من ÙØ¶Ù„Ùƒ إقرأ التوثيق المرتبط بإستيراد المشاهد لكي تÙهم بشكل Ø£ÙØ¶Ù„ طريقة عمل "
+"هذا النظام."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"هذا المصدر ينتمي إلي مشهد قد تم إستيراده، إذا لا يمكن تعديله.\n"
+"من ÙØ¶Ù„Ùƒ إقرأ التوثيق المرتبط بإستيراد المشاهد لكي تÙهم بشكل Ø£ÙØ¶Ù„ كيÙية عمل "
+"هذا النظام."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "توسيع الكل"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "طوي الكل"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1562,6 +1598,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"المشهد Ø§Ù„Ù…ÙØ­Ø¯Ø¯ '%s' ليس مل٠مشهد. حدد مشهد صالح؟\n"
+"يمكنك تغييره لاحقاً ÙÙŠ \"إعدادات المشروع\" تحت قسم 'التطبيق'."
#: editor/editor_node.cpp
msgid "Current scene was never saved, please save it prior to running."
@@ -1569,43 +1607,43 @@ msgstr "المشهد الحالي لم يتم Ø­ÙØ¸Ù‡. الرجاء Ø­ÙØ¸ ال
#: editor/editor_node.cpp
msgid "Could not start subprocess!"
-msgstr ""
+msgstr "لا يمكن بدء عملية جانبية!"
#: editor/editor_node.cpp
msgid "Open Scene"
-msgstr ""
+msgstr "ÙØªØ­ مشهد"
#: editor/editor_node.cpp
msgid "Open Base Scene"
-msgstr ""
+msgstr "ÙØªØ­ مشهد أساسي"
#: editor/editor_node.cpp
msgid "Quick Open Scene.."
-msgstr ""
+msgstr "ÙØªØ­ سريع للمشهد..."
#: editor/editor_node.cpp
msgid "Quick Open Script.."
-msgstr ""
+msgstr "ÙØªØ­ سريع للكود..."
#: editor/editor_node.cpp
msgid "Save & Close"
-msgstr "Ø­ÙØ¸ Ùˆ اغلاق"
+msgstr "Ø­ÙØ¸ Ùˆ إغلاق"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr "هل تريد Ø­ÙØ¸ التغييرات Ù„'%s' قبل الاغلاق؟"
+msgstr "هل تريد Ø­ÙØ¸ التغييرات إلي'%s' قبل الإغلاق؟"
#: editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr "Ø­ÙØ¸ المشهد Ùƒ.."
+msgstr "Ø­ÙØ¸ المشهد كـ.."
#: editor/editor_node.cpp
msgid "No"
-msgstr ""
+msgstr "لا"
#: editor/editor_node.cpp
msgid "Yes"
-msgstr ""
+msgstr "نعم"
#: editor/editor_node.cpp
msgid "This scene has never been saved. Save before running?"
@@ -1613,51 +1651,55 @@ msgstr "هذا المشهد لم يتم Ø­ÙØ¸Ù‡. هل تود Ø­ÙØ¸Ù‡ قبل ت
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr ""
+msgstr "هذه العملية لا يمكن الإكتمال من غير مشهد."
#: editor/editor_node.cpp
msgid "Export Mesh Library"
-msgstr ""
+msgstr "تصدير مكتبة الميش"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "هذه العملية لا يمكن أن تتم من غير عقدة الجذر."
#: editor/editor_node.cpp
msgid "Export Tile Set"
-msgstr ""
+msgstr "تصدير مجموعة الشبكة"
#: editor/editor_node.cpp
msgid "This operation can't be done without a selected node."
-msgstr ""
+msgstr "هذه العملية لا يمكن أن تتم من غير عقدة محددة."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
-msgstr "لم يتم Ø­ÙØ¸ المشهد الحالي. استمر Ø¨Ø§Ù„ÙØªØ­ على اية حال؟"
+msgstr "لم يتم Ø­ÙØ¸ المشهد الحالي. Ø¥ÙØªØ­Ù‡ علي أية حال؟"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
-msgstr "لا يمكن اعادة تحميل مشهد لم يتم Ø­ÙØ¸Ù‡ من قبل."
+msgstr "لا يمكن إعادة تحميل مشهد لم يتم Ø­ÙØ¸Ù‡ من قبل."
#: editor/editor_node.cpp
msgid "Revert"
-msgstr ""
+msgstr "إرجاع"
#: editor/editor_node.cpp
msgid "This action cannot be undone. Revert anyway?"
-msgstr ""
+msgstr "هذا Ø§Ù„ÙØ¹Ù„ لا يمكن إرجاعة. إرجاع علي أية حال؟"
#: editor/editor_node.cpp
msgid "Quick Run Scene.."
-msgstr ""
+msgstr "تشغيل مشهد بسرعة..."
#: editor/editor_node.cpp
msgid "Quit"
-msgstr ""
+msgstr "خروج"
#: editor/editor_node.cpp
msgid "Exit the editor?"
-msgstr ""
+msgstr "خروج من Ø§Ù„Ù…ÙØ¹Ø¯Ù„ØŸ"
#: editor/editor_node.cpp
msgid "Open Project Manager?"
-msgstr ""
+msgstr "ÙØªØ­ مدير المشروع؟"
#: editor/editor_node.cpp
msgid "Save & Quit"
@@ -1678,42 +1720,50 @@ msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"هذا الإعداد Ù…ÙØ¹Ø·Ù„. الحالة حيث التحديث يجب أن يطبق بالقوة هي الأن تعتبر خطأ. "
+"من ÙØ¶Ù„Ùƒ أبلغ عن الخطأ."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
-msgstr ""
+msgstr "إختر المشهد الأساسي"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr ""
+msgstr "غير قادر علي ØªÙØ¹ÙŠÙ„ Ø¥Ø¶Ø§ÙØ© البرنامج Ø§Ù„Ù…ÙØ³Ø§Ø¹Ø¯ ÙÙŠ: '%s' تحميل الظبط ÙØ´Ù„."
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
+"غير قادر علي إيجاد منطقة الكود من أجل Ø¥Ø¶Ø§ÙØ© البرنامج ÙÙŠ: 'res://addons/%s'."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s'."
-msgstr ""
+msgstr "غير قادر علي تحميل كود Ø§Ù„Ø¥Ø¶Ø§ÙØ© من المسار: '%s'."
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
msgstr ""
+"غير قادر علي تحميل كود Ø§Ù„Ø¥Ø¶Ø§ÙØ© من المسار: '%s' النوع الأساسي ليس Ø¥Ø¶Ø§ÙØ© "
+"Ù„Ù„Ù…ÙØ¹Ø¯Ù„."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
+"غير قادر علي تحميل كود Ø§Ù„Ø¥Ø¶Ø§ÙØ© من المسار: '%s' الكود ليس ÙÙŠ وضع الأداة."
#: editor/editor_node.cpp
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
+"المشهد '%s' تم إستيراده تلقائياً، إذن لا يمكن تعديله.\n"
+"لكي تجري أي تغيير إليه، مشهد جديد مورث يمكن إنشاءه."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Ugh"
-msgstr ""
+msgstr "آخخ"
#: editor/editor_node.cpp
msgid ""
@@ -1725,80 +1775,92 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr ""
+msgstr "المشهد '%s' لدية تبعيات معطوبة:"
#: editor/editor_node.cpp
msgid "Clear Recent Scenes"
-msgstr ""
+msgstr "إخلاء المشاهد الحالية"
#: editor/editor_node.cpp
msgid "Save Layout"
-msgstr "Ø­ÙØ¸ التخطيط"
+msgstr "Ø­ÙØ¸ المخطط"
#: editor/editor_node.cpp
msgid "Delete Layout"
-msgstr ""
+msgstr "مسح المخطط"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr ""
+msgstr "Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ"
#: editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr ""
+msgstr "تبديل بين Ù†ÙˆØ§ÙØ° المشهد"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr ""
+msgid "%d more files or folders"
+msgstr "%d مزيد من Ø§Ù„Ù…Ù„ÙØ§Øª والمجلدات"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr ""
+msgid "%d more folders"
+msgstr "%d مزيد من المجلدات"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d مزيد من Ø§Ù„Ù…Ù„ÙØ§Øª"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "مكان الرصيÙ"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
-msgstr ""
+msgstr "وضع خالي من الإلهاء"
#: editor/editor_node.cpp
msgid "Toggle distraction-free mode."
-msgstr ""
+msgstr "تمكين/إيقا٠الوضع الخالي من الإلهاء."
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "أض٠مشهد جديدة."
#: editor/editor_node.cpp
msgid "Scene"
-msgstr ""
+msgstr "مشهد"
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
-msgstr ""
+msgstr "اذهب الي المشهد Ø§Ù„Ù…ÙØªÙˆØ­ مسبقا."
#: editor/editor_node.cpp
msgid "Next tab"
-msgstr ""
+msgstr "التبويب التالي"
#: editor/editor_node.cpp
msgid "Previous tab"
-msgstr ""
+msgstr "التبويب السابق"
#: editor/editor_node.cpp
msgid "Filter Files.."
-msgstr ""
+msgstr "Ùلتر Ø§Ù„Ù…Ù„ÙØ§Øª.."
#: editor/editor_node.cpp
msgid "Operations with scene files."
-msgstr ""
+msgstr "عمليات مع Ù…Ù„ÙØ§Øª المشهد."
#: editor/editor_node.cpp
msgid "New Scene"
-msgstr ""
+msgstr "مشهد جديد"
#: editor/editor_node.cpp
msgid "New Inherited Scene.."
-msgstr ""
+msgstr "مشهد مورث جديد.."
#: editor/editor_node.cpp
msgid "Open Scene.."
-msgstr ""
+msgstr "Ø§ÙØªØ­ مشهد.."
#: editor/editor_node.cpp
msgid "Save Scene"
@@ -1810,84 +1872,85 @@ msgstr "Ø­ÙØ¸ جميع المشاهد"
#: editor/editor_node.cpp
msgid "Close Scene"
-msgstr ""
+msgstr "اغلاق المشهد"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Open Recent"
-msgstr ""
+msgstr "ÙÙØªØ­ مؤخراً"
#: editor/editor_node.cpp
msgid "Convert To.."
-msgstr ""
+msgstr "تحويل الي.."
#: editor/editor_node.cpp
msgid "MeshLibrary.."
-msgstr ""
+msgstr "مكتبة الميش.."
#: editor/editor_node.cpp
msgid "TileSet.."
-msgstr ""
+msgstr "مجموعة البلاط.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
-msgstr ""
+msgstr "تراجع"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
-msgstr ""
+msgstr "إعادة"
#: editor/editor_node.cpp
msgid "Revert Scene"
-msgstr ""
+msgstr "إعادة المشهد"
#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr ""
+msgstr "ادوات لكل-المشهد او لمشاريع متنوعه."
#: editor/editor_node.cpp
msgid "Project"
-msgstr ""
+msgstr "مشروع"
#: editor/editor_node.cpp
msgid "Project Settings"
-msgstr ""
+msgstr "إعدادات المشروع"
#: editor/editor_node.cpp
msgid "Run Script"
-msgstr ""
+msgstr "تشغيل الكود"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export"
-msgstr ""
+msgstr "تصدير"
#: editor/editor_node.cpp
msgid "Tools"
-msgstr ""
+msgstr "ادوات"
#: editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr ""
+msgstr "غادر الي قائمه المشاريع"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Debug"
-msgstr ""
+msgstr "تصحيح"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr ""
+msgstr "نشر مع التصحيح البعيد"
#: editor/editor_node.cpp
msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
msgstr ""
+"حينما يتم التصدير أو النشر، مل٠التشغيل الناتج سو٠يحاول الإتصال إلي عنوان "
+"الأي بي الخاص بهذا الكمبيوتر من أجل التصحيح."
#: editor/editor_node.cpp
msgid "Small Deploy with Network FS"
-msgstr ""
+msgstr "نشر مصغر مع نظام شبكات Ø§Ù„Ù…Ù„ÙØ§Øª"
#: editor/editor_node.cpp
msgid ""
@@ -1898,30 +1961,37 @@ msgid ""
"On Android, deploy will use the USB cable for faster performance. This "
"option speeds up testing for games with a large footprint."
msgstr ""
+"حينما يتم ØªÙØ¹ÙŠÙ„ هذا الإعداد، التصدير او النشر سو٠ينتج مل٠تشغيل بالحد "
+"الأدني.\n"
+"نظام Ø§Ù„Ù…Ù„ÙØ§Øª سو٠يتم توÙيره بواسطة Ø§Ù„Ù…ÙØ¹Ø¯Ù„ من خلال الشبكة.\n"
+"علي الأندرويد، النشر سو٠يستخدم وصلة اليو اس بي من أجل أداء أسرع. هذا "
+"الأعداد يسرع الإختبار للإلعاب مع Ø§Ù„Ù…Ù„ÙØ§Øª الكثيرة."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
-msgstr ""
+msgstr "أشكال الإصطدام الظاهرة"
#: editor/editor_node.cpp
msgid ""
"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
"running game if this option is turned on."
msgstr ""
+"أشكال الإصطدام Ùˆ وعقد الراي كاست (من أجل 2D Ùˆ 3D) سو٠تكون ظاهرة ÙÙŠ اللعبة "
+"العاملة إذا كان هذا الإعداد Ù…ÙÙØ¹Ù„."
#: editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr ""
+msgstr "الإنتقال المرئي"
#: editor/editor_node.cpp
msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
-msgstr ""
+msgstr "ميشات التنقل والبوليجين سو٠يكونون ظاهرين حينما يتم ØªÙØ¹ÙŠÙ„ هذا الإعداد."
#: editor/editor_node.cpp
msgid "Sync Scene Changes"
-msgstr ""
+msgstr "مزامنة تغيير المشهد"
#: editor/editor_node.cpp
msgid ""
@@ -1930,10 +2000,14 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"حينما يكون هذا الإعداد Ù…ÙÙØ¹Ù„ØŒ أي تغيير يحدث ÙÙŠ المشهد من خلال Ø§Ù„Ù…ÙØ¹Ø¯Ù„ سو٠يتم "
+"تطبيقة ÙÙŠ اللعبة العاملة.\n"
+"حينما يتم إستخدامه عن بعد علي جهاز، سيكون هذا أكثر ÙØ¹Ø§Ù„ية مع نظام شبكات "
+"Ø§Ù„Ù…Ù„ÙØ§Øª."
#: editor/editor_node.cpp
msgid "Sync Script Changes"
-msgstr ""
+msgstr "مزامنة تغييرات الكود"
#: editor/editor_node.cpp
msgid ""
@@ -1942,122 +2016,126 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"حينما يكون هذا الإعداد Ù…ÙÙØ¹Ù„ØŒ أي كود يتم Ø­ÙØ¸Ù‡ سيتم إعادة تشغيلة ÙÙŠ اللعبة "
+"العاملة.\n"
+"حينما يتم إستخدامة عن بعد علي جهاز، سيكون هذا أكثر ÙØ¹Ø§Ù„ية مع نظام شبكات "
+"Ø§Ù„Ù…Ù„ÙØ§Øª."
#: editor/editor_node.cpp
msgid "Editor"
-msgstr ""
+msgstr "Ø§Ù„Ù…ÙØ¹Ø¯Ù„"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr ""
+msgstr "إعدادات Ø§Ù„Ù…ÙØ¹Ø¯Ù„"
#: editor/editor_node.cpp
msgid "Editor Layout"
-msgstr ""
+msgstr "نسق Ø§Ù„Ù…ÙØ¹Ø¯Ù„"
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
-msgstr ""
+msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ وضع الشاشة الكاملة"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Manage Export Templates"
-msgstr ""
+msgstr "إدارة قوالب التصدير"
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "مساعدة"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
-msgstr "أصناÙ"
+msgstr "Ø§Ù„ÙØ¦Ø§Øª"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Online Docs"
-msgstr ""
+msgstr "مستندات الإنترنت"
#: editor/editor_node.cpp
msgid "Q&A"
-msgstr ""
+msgstr "الأسئلة و الأجوبة"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "متتبع الأخطاء"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr "مجتمع"
+msgstr "المجتمع"
#: editor/editor_node.cpp
msgid "About"
-msgstr ""
+msgstr "حول"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr ""
+msgstr "تشغيل المشروع."
#: editor/editor_node.cpp
msgid "Play"
-msgstr ""
+msgstr "تشغيل"
#: editor/editor_node.cpp
msgid "Pause the scene"
-msgstr ""
+msgstr "إيقا٠المشهد مؤقتاً"
#: editor/editor_node.cpp
msgid "Pause Scene"
-msgstr ""
+msgstr "إيقا٠مؤقت للمشهد"
#: editor/editor_node.cpp
msgid "Stop the scene."
-msgstr ""
+msgstr "إيقا٠المشهد."
#: editor/editor_node.cpp
msgid "Stop"
-msgstr ""
+msgstr "إيقاÙ"
#: editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr ""
+msgstr "تشغيل المشهد Ø§Ù„Ù…ÙØ¹Ø¯Ù„."
#: editor/editor_node.cpp
msgid "Play Scene"
-msgstr ""
+msgstr "تشغيل المشهد"
#: editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "تشغيل المشهد المخصص"
#: editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "تشغيل المشهد المخصص"
#: editor/editor_node.cpp
msgid "Spins when the editor window repaints!"
-msgstr ""
+msgstr "يدور حينما Ù†Ø§ÙØ°Ø© Ø§Ù„Ù…ÙØ¹Ø¯Ù„ يتم إعادة دهانة!"
#: editor/editor_node.cpp
msgid "Update Always"
-msgstr ""
+msgstr "تحديث دائماً"
#: editor/editor_node.cpp
msgid "Update Changes"
-msgstr ""
+msgstr "تحديث التغييرات"
#: editor/editor_node.cpp
msgid "Disable Update Spinner"
-msgstr ""
+msgstr "تعطيل دوار التحديث"
#: editor/editor_node.cpp
msgid "Inspector"
-msgstr ""
+msgstr "Ù…ÙØ±Ø§Ù‚ب"
#: editor/editor_node.cpp
msgid "Create a new resource in memory and edit it."
-msgstr ""
+msgstr "إنشاء مورد جديد ÙÙŠ الذاكرة وتعديله."
#: editor/editor_node.cpp
msgid "Load an existing resource from disk and edit it."
-msgstr ""
+msgstr "تحميل مورد موجود مسبقا من الذاكرة وتعديله."
#: editor/editor_node.cpp
msgid "Save the currently edited resource."
@@ -2069,23 +2147,23 @@ msgstr "Ø­ÙØ¸ باسم..."
#: editor/editor_node.cpp
msgid "Go to the previous edited object in history."
-msgstr ""
+msgstr "إذهب إلي العنصر المعدل سابقاً ÙÙŠ التاريخ."
#: editor/editor_node.cpp
msgid "Go to the next edited object in history."
-msgstr ""
+msgstr "إذهب إلي العنصر Ø§Ù„Ù…ÙØ¹Ø¯Ù„ تالياً ÙÙŠ التاريخ."
#: editor/editor_node.cpp
msgid "History of recently edited objects."
-msgstr ""
+msgstr "تاريخ العناصر المعدلة حالياً."
#: editor/editor_node.cpp
msgid "Object properties."
-msgstr ""
+msgstr "خصائص العنصر."
#: editor/editor_node.cpp
msgid "Changes may be lost!"
-msgstr ""
+msgstr "التغييرات ربما تÙÙقد!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2093,183 +2171,185 @@ msgid "Import"
msgstr "إستيراد"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr ""
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
-msgstr ""
+msgstr "عقدة"
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "نظام Ø§Ù„Ù…Ù„ÙØ§Øª"
#: editor/editor_node.cpp
msgid "Output"
-msgstr ""
+msgstr "الخرج"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr "لا تقم Ø¨Ø§Ù„Ø­ÙØ¸"
+msgstr "لا ØªØ­ÙØ¸"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr ""
+msgstr "إستيراد القوالب من مل٠مضغوط بصيغة Zip"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export Project"
-msgstr ""
+msgstr "تصدير المشروع"
#: editor/editor_node.cpp
msgid "Export Library"
-msgstr ""
+msgstr "تصدير المكتبة"
#: editor/editor_node.cpp
msgid "Merge With Existing"
-msgstr ""
+msgstr "دمج مع الموجود"
#: editor/editor_node.cpp
msgid "Password:"
-msgstr ""
+msgstr "كلمة السر:"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
-msgstr ""
+msgstr "ÙØªØ­ Ùˆ تشغيل كود"
#: editor/editor_node.cpp
msgid "New Inherited"
-msgstr ""
+msgstr "موروث جديد"
#: editor/editor_node.cpp
msgid "Load Errors"
-msgstr ""
+msgstr "خطأ تحميل"
#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Select"
-msgstr ""
+msgstr "حدد"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
-msgstr ""
+msgstr "ÙØªØ­ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ 2D"
#: editor/editor_node.cpp
msgid "Open 3D Editor"
-msgstr ""
+msgstr "ÙØªØ­ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ 3D"
#: editor/editor_node.cpp
msgid "Open Script Editor"
-msgstr ""
+msgstr "ÙØªØ­ Ù…ÙØ¹Ø¯Ù„ الكود"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr ""
+msgstr "ÙØªØ­ مكتبة الأصول"
#: editor/editor_node.cpp
msgid "Open the next Editor"
-msgstr ""
+msgstr "ÙØªØ­ ÙÙŠ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ التالي"
#: editor/editor_node.cpp
msgid "Open the previous Editor"
-msgstr ""
+msgstr "Ø¥ÙØªØ­ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ السابق"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
-msgstr ""
+msgstr "ÙŠÙنشئ مستعرضات الميش"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
-msgstr ""
+msgstr "الصورة المصغرة.."
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr ""
+msgstr "Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª Ø§Ù„Ù…ÙØ«Ø¨ØªØ©:"
#: editor/editor_plugin_settings.cpp
msgid "Update"
-msgstr ""
+msgstr "تحديث"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Version:"
-msgstr "الاصدار:"
+msgstr "النسخة:"
#: editor/editor_plugin_settings.cpp
msgid "Author:"
-msgstr ""
+msgstr "المالك:"
#: editor/editor_plugin_settings.cpp
msgid "Status:"
-msgstr ""
+msgstr "الحالة:"
#: editor/editor_profiler.cpp
msgid "Stop Profiling"
-msgstr ""
+msgstr "إيقا٠التنميط"
#: editor/editor_profiler.cpp
msgid "Start Profiling"
-msgstr ""
+msgstr "بدء التنميط"
#: editor/editor_profiler.cpp
msgid "Measure:"
-msgstr ""
+msgstr "قياس:"
#: editor/editor_profiler.cpp
msgid "Frame Time (sec)"
-msgstr ""
+msgstr "وقت الاطار (ثانية)"
#: editor/editor_profiler.cpp
msgid "Average Time (sec)"
-msgstr ""
+msgstr "متوسط الوقت (ثانية)"
#: editor/editor_profiler.cpp
msgid "Frame %"
-msgstr ""
+msgstr "نسبة الإطار %"
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
-msgstr ""
+msgstr "نسبة الإطار الÙيزيائي %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
-msgstr ""
+msgstr "الوقت:"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr ""
+msgstr "شامل"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr ""
+msgstr "ذاتي"
#: editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr ""
+msgstr "اطار #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "اختار جهاز من القائمة"
#: editor/editor_run_native.cpp
msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the export menu."
msgstr ""
+"لا يوجد إعداد تصدير مسبق عامل لهذه المنصة.\n"
+"من ÙØ¶Ù„Ùƒ أض٠إعداد تصدير عامل ÙÙŠ قائمة التصدير."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr "أكتب منطقك ÙÙŠ الطريقة ()run_"
+msgstr "أكتب منطقك ÙÙŠ الطريقة ()run_."
#: editor/editor_run_script.cpp
msgid "There is an edited scene already."
-msgstr ""
+msgstr "يوجد مشهد معدل عليه Ø¨Ø§Ù„ÙØ¹Ù„."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr ""
+msgstr "لم نستطع طلب النص:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
-msgstr ""
+msgstr "هل نسيت الكلمة الدلالية 'اداة' ؟"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
-msgstr ""
+msgstr "لم نستطع تشغيل الكود:"
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
@@ -2277,395 +2357,497 @@ msgstr "هل نسيت الطريقة '_run' ؟"
#: editor/editor_settings.cpp
msgid "Default (Same as Editor)"
-msgstr ""
+msgstr "Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ (تماماً مثل المحرر)"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr ""
+msgstr "إختيار عقدة(عقد) للإستيراد"
#: editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr ""
+msgstr "المسار للمشهد:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr ""
+msgstr "إستيراد من عقدة:"
#: editor/export_template_manager.cpp
msgid "Re-Download"
-msgstr ""
+msgstr "اعادة التحميل"
#: editor/export_template_manager.cpp
msgid "Uninstall"
-msgstr ""
+msgstr "إلغاء التثبيت"
#: editor/export_template_manager.cpp
msgid "(Installed)"
-msgstr ""
+msgstr "(مثبت)"
#: editor/export_template_manager.cpp
msgid "Download"
-msgstr ""
+msgstr "تنزيل"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(Ù…Ùقود)"
#: editor/export_template_manager.cpp
msgid "(Current)"
-msgstr ""
+msgstr "(الحالي)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "يستقبل المرايا، من ÙØ¶Ù„Ùƒ إنتظر.."
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "ازالة نسخة القالب '%s'؟"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
-msgstr ""
+msgstr "لم نستطع ÙØªØ­ المل٠المضغوط المÙورد."
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "صيغة غير صالحة لـ version.txt داخل القالب."
#: editor/export_template_manager.cpp
msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
-msgstr ""
+msgstr "صيغة غير صالحة لـ version.txt داخل القالب. المراجعة ليست Ù…Ø¹Ø±ÙØ§Ù‹ صالحاً."
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "لا مل٠version.txt تم إيجاده داخل القالب."
#: editor/export_template_manager.cpp
msgid "Error creating path for templates:\n"
-msgstr ""
+msgstr "خطأ ÙÙŠ إنشاء المسار للقوالب:\n"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
-msgstr ""
+msgstr "يستخرج قوالب التصدير"
#: editor/export_template_manager.cpp
msgid "Importing:"
+msgstr "يستورد:"
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
msgstr ""
+"لا روابط تحميل تم إيجادها لهذه النسخة. التحميل المباشر Ù…ØªÙˆÙØ± Ùقط للنسخ "
+"الرسمية."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "لا يمكن الحل."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "لا يمكن الإتصال."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "لا يوجد إستجابة."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "ÙØ´Ù„ الطلب."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "اعادة توجيه حلقة التكرار."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "ÙØ´Ù„:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "لا يمكن كتابة الملÙ."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "التحميل إكتمل."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "خطأ ÙÙŠ طلب الرابط: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "يتصل Ø¨Ø§Ù„Ø³Ø±ÙØ±.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "غير متصل"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "جاري الحل"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "لا يمكن الحل"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "جاري الإتصال..."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "لا يمكن الإتصال"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "متصل"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "جار الطلب..."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "جاري التنزيل"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "خطأ ÙÙŠ الإتصال"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "خطأ مطابقة ssl"
#: editor/export_template_manager.cpp
msgid "Current Version:"
-msgstr ""
+msgstr "النسخة الحالية:"
#: editor/export_template_manager.cpp
msgid "Installed Versions:"
-msgstr ""
+msgstr "النسخة Ø§Ù„Ù…ÙØ«Ø¨ØªØ©:"
#: editor/export_template_manager.cpp
msgid "Install From File"
-msgstr ""
+msgstr "تثبيت من ملÙ"
#: editor/export_template_manager.cpp
msgid "Remove Template"
-msgstr ""
+msgstr "مسح القالب"
#: editor/export_template_manager.cpp
msgid "Select template file"
-msgstr ""
+msgstr "حدد مل٠القالب"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
-msgstr ""
+msgstr "‌تصدير مدير القوالب"
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "تنزيل القوالب"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "حدد Ø§Ù„Ø³Ø±ÙØ± من القائمة: "
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
+"لا يمكن ÙØªØ­ file_type_cache.cch من إجل الكتابة، لا يمكن Ø­ÙØ¸ خبأ أنواع الملÙ!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr ""
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "لا يمكن التنقل إلي '%s' حيث لم يتم العثور عليها ÙÙŠ نظام Ø§Ù„Ù…Ù„ÙØ§Øª!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "أظهر العناصر كشبكة من الصور المصغرة"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "أظهر العناصر كقائمة"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-msgid ""
"\n"
-"Source: "
-msgstr ""
+"الحالة: إستيراد Ø§Ù„Ù…Ù„Ù ÙØ´Ù„. من ÙØ¶Ù„Ùƒ أصلح المل٠و أعد إستيراده يدوياً."
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
-msgstr ""
+msgstr "لا يمكن مسح/إعادة تسمية جذر الموارد."
#: editor/filesystem_dock.cpp
msgid "Cannot move a folder into itself.\n"
-msgstr ""
+msgstr "لا يمكن تحريك مجلد إلي Ù†ÙØ³Ù‡.\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "خطآ ÙÙŠ التحميل:"
+msgstr "خطأ ÙÙŠ تحريك:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "ÙØ´Ù„ ÙÙŠ تحميل المشهد بسبب وجود Ù…Ù„ÙØ§Øª Ù…Ùقودة يعتمد المشهد عليها:"
+msgstr "غير قادر علي تحديث التبعيات:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "لا أسم Ù…Ùقدم"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "الأسم المÙقدم يحتوي علي حرو٠خاطئة"
#: editor/filesystem_dock.cpp
msgid "No name provided."
-msgstr ""
+msgstr "لا أسم Ù…Ùقدم."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "الأحر٠الصالحة:"
+msgstr "الأسم يحتوي علي أحر٠غير صالحة."
#: editor/filesystem_dock.cpp
msgid "A file or folder with this name already exists."
-msgstr ""
+msgstr "مل٠أو مجلد مع هذا الأسم موجود Ø¨Ø§Ù„ÙØ¹Ù„."
#: editor/filesystem_dock.cpp
msgid "Renaming file:"
-msgstr ""
+msgstr "إعادة تسمية ملÙ:"
#: editor/filesystem_dock.cpp
msgid "Renaming folder:"
-msgstr ""
+msgstr "إعادة تسمية مجلد:"
#: editor/filesystem_dock.cpp
msgid "Expand all"
-msgstr ""
+msgstr "توسيع الكل"
#: editor/filesystem_dock.cpp
msgid "Collapse all"
-msgstr ""
+msgstr "طوي الكل"
#: editor/filesystem_dock.cpp
msgid "Copy Path"
-msgstr ""
+msgstr "نسخ المسار"
#: editor/filesystem_dock.cpp
msgid "Rename.."
-msgstr ""
+msgstr "إعادة تسمية.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
-msgstr ""
+msgstr "تحريك إلي.."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "أنشئ مجلد"
+msgstr "مجلد جديد.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
-msgstr ""
+msgstr "أظهر ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª"
#: editor/filesystem_dock.cpp
msgid "Instance"
-msgstr ""
+msgstr "نموذج"
#: editor/filesystem_dock.cpp
msgid "Edit Dependencies.."
-msgstr ""
+msgstr "تعديل التبعيات.."
#: editor/filesystem_dock.cpp
msgid "View Owners.."
-msgstr ""
+msgstr "أظهر المÙلاك.."
#: editor/filesystem_dock.cpp
msgid "Previous Directory"
-msgstr ""
+msgstr "المجلد السابق"
#: editor/filesystem_dock.cpp
msgid "Next Directory"
-msgstr ""
+msgstr "المجلد التالي"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr ""
+msgstr "إعادة ÙØ­Øµ نظام Ø§Ù„Ù…Ù„ÙØ§Øª"
#: editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
-msgstr ""
+msgstr "تبديل حالة المجلد كما Ø§Ù„Ù…ÙØ¶Ù„Ø©"
#: editor/filesystem_dock.cpp
msgid "Instance the selected scene(s) as child of the selected node."
-msgstr ""
+msgstr "نمذج المشهد(المشاهد) المحددة كطÙÙ„ للعقدة المحددة."
#: editor/filesystem_dock.cpp
msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
+"ÙŠÙØ­Øµ Ø§Ù„Ù…Ù„ÙØ§ØªØŒ\n"
+"من ÙØ¶Ù„Ùƒ إنتظر.."
#: editor/filesystem_dock.cpp
msgid "Move"
-msgstr ""
+msgstr "تحريك"
#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Rename"
-msgstr ""
+msgstr "إعادة التسمية"
#: editor/groups_editor.cpp
msgid "Add to Group"
-msgstr ""
+msgstr "Ø¥Ø¶Ø§ÙØ© إلي مجموعة"
#: editor/groups_editor.cpp
msgid "Remove from Group"
-msgstr ""
+msgstr "حذ٠من المجموعة"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
-msgstr ""
+msgstr "إستيراد كمشهد واحد"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr ""
+msgstr "إستيراد مع إنميشن Ù…Ù†ÙØµÙ„Ø©"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "إستيراد مع موارد Ù…Ù†ÙØµÙ„Ø©"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "إستيراد مع عناصر Ù…Ù†ÙØµÙ„Ø©"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "إستيراد مع عناصر+موارد Ù…Ù†ÙØµÙ„Ø©"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "إستيراد مع عناصر + إنميشن Ù…Ù†ÙØµÙ„Ø©"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "إستيراد مع مصادر+ إنميشن Ù…Ù†ÙØµÙ„Ø©"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "إستيراد مع عناصر + مصادر + إنميشين Ù…Ù†ÙØµÙ„ين"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
-msgstr ""
+msgstr "إستيراد علي هيئة مشاهد متعددة"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "إستيراد علي هيئة مشاهد + موارد متعددة"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import Scene"
-msgstr ""
+msgstr "إستيراد مشهد"
#: editor/import/resource_importer_scene.cpp
msgid "Importing Scene.."
-msgstr ""
+msgstr "حاري إستيراد المشهد.."
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script.."
-msgstr ""
+msgstr "تشغيل الكود Ø§Ù„Ù…ÙØ®ØµØµ.."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
-msgstr ""
+msgstr "لا يمكن تحميل الكود المستورد أو المطبوع:"
#: editor/import/resource_importer_scene.cpp
msgid "Invalid/broken script for post-import (check console):"
-msgstr ""
+msgstr "كود مستورد-ملصق متضرر/خاطئ (تحقق من وحدة التحكم):"
#: editor/import/resource_importer_scene.cpp
msgid "Error running post-import script:"
-msgstr ""
+msgstr "خطأ ÙÙŠ تشغيل الكود الملصق- المستورد:"
#: editor/import/resource_importer_scene.cpp
msgid "Saving.."
-msgstr ""
+msgstr "جاري Ø§Ù„Ø­ÙØ¸.."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "حدد ÙƒØ¥ÙØªØ±Ø§Ø¶ÙŠ Ù…Ù† أجل '%s'"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr ""
+msgstr "إخلاء Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ Ù„Ù€ '%s'"
#: editor/import_dock.cpp
msgid " Files"
-msgstr ""
+msgstr " Ù…Ù„ÙØ§Øª"
#: editor/import_dock.cpp
msgid "Import As:"
-msgstr ""
+msgstr "إستيراد كـ:"
#: editor/import_dock.cpp editor/property_editor.cpp
msgid "Preset.."
-msgstr ""
+msgstr "إعداد Ù…ÙØ³Ø¨Ù‚.."
#: editor/import_dock.cpp
msgid "Reimport"
-msgstr ""
+msgstr "إعادة إستيراد"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
-msgstr ""
+msgstr "تحديد عقد متعددة"
#: editor/node_dock.cpp
msgid "Groups"
-msgstr ""
+msgstr "المجموعات"
#: editor/node_dock.cpp
msgid "Select a Node to edit Signals and Groups."
-msgstr ""
+msgstr "حدد عقدة لكي ØªÙØ¹Ø¯Ù„ الإشارات والمجموعات."
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Poly"
-msgstr ""
+msgstr "إنشاء بولي"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly"
-msgstr ""
+msgstr "تعديل البولي"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Insert Point"
-msgstr ""
+msgstr "إدخال نقطة"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr ""
+msgstr "تعديل البولي (مسح النقطة)"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Remove Poly And Point"
-msgstr ""
+msgstr "مسح البولي والنقطة"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr ""
+msgid "Create a new polygon from scratch"
+msgstr "إنشاء Ù…ÙØ¶Ù„ع جديد من Ø§Ù„ØµÙØ±"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2674,85 +2856,93 @@ msgid ""
"Ctrl+LMB: Split Segment.\n"
"RMB: Erase Point."
msgstr ""
+"تعديل المضلعات الموجودة:\n"
+"زر Ø§Ù„ÙØ£Ø±Ø© الأيسر: لتحريك النقطة.\n"
+"Ctrl+زر Ø§Ù„ÙØ£Ø±Ø© الأيسر: لتقسيم الجزء.\n"
+"زر Ø§Ù„ÙØ£Ø±Ø© الأيمن: مسح النقطة."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "مسح النقاط"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr ""
+msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ التشغيل التلقائي"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr ""
+msgstr "إسم الحركة الجديد:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
-msgstr ""
+msgstr "حركة جديدة"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr ""
+msgstr "تغيير إسم الحركة:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Delete Animation?"
-msgstr ""
+msgstr "مسح الحركة؟"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr ""
+msgstr "مسح الحركة"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr ""
+msgstr "خطأ: إسم حركة خاطئ!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr ""
+msgstr "خطأ: إسم الحركة موجود Ø¨Ø§Ù„ÙØ¹Ù„!"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr ""
+msgstr "إعادة تسمية الحركة"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr ""
+msgstr "أض٠حركة"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
-msgstr ""
+msgstr "دمج التغيير التالي"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
-msgstr ""
+msgstr "تغيير وقت الدمج"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr ""
+msgstr "تحميل حركة"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr ""
+msgstr "تكرير الحركة"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr ""
+msgstr "خطأ: لا حركة لنسخها!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
-msgstr ""
+msgstr "خطأ: لا مصدر حركة علي Ø§Ù„Ø­Ø§ÙØ¸Ø©!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
-msgstr ""
+msgstr "حركة Ù…Ùلصقة"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr ""
+msgstr "لصق الحركة"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr ""
+msgstr "خطأ: لا حركة لتعديلها!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
@@ -2760,15 +2950,15 @@ msgstr "تشغيل الحركة المختارة بشكل عكسي من المو
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
-msgstr ""
+msgstr "تشيل الحركة المختارة بشكل عكسي من النهاية. (Shift+ش)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Stop animation playback. (S)"
-msgstr ""
+msgstr "إيقا٠تشغيل الحركة. (س)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
-msgstr ""
+msgstr "تشغيل الحركة المحددة من البداية. (Shift+ي)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
@@ -2776,221 +2966,270 @@ msgstr "تشغيل الحركة المختارة من الموقع الحالي.
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
-msgstr ""
+msgstr "موقع الحركة (بالثواني)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
-msgstr ""
+msgstr "تكبير تشغيل الحركة عالمياً من العقدة."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create new animation in player."
-msgstr ""
+msgstr "إنشاء حركة جديد ÙÙŠ Ø§Ù„Ù…ÙØ´ØºÙ„."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load animation from disk."
-msgstr ""
+msgstr "تحميل الحركة من الذاكرة."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load an animation from disk."
-msgstr ""
+msgstr "تحميل حركة من الذاكرة."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save the current animation"
-msgstr ""
+msgstr "Ø­ÙØ¸ الحركة الحالية"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
-msgstr ""
+msgstr "إظهار قائمة الحركات ÙÙŠ Ø§Ù„Ù…ÙØ´ØºÙ„."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr ""
+msgstr "تشغيل تلقائي حينما يتم التحميل"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Target Blend Times"
-msgstr ""
+msgstr "تعديل هد٠الدمج بالوقت"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr ""
+msgstr "أدوات الحركة"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Copy Animation"
+msgstr "نسخ الحركة"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
+msgid "Enable Onion Skinning"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Animation Name:"
+#, fuzzy
+msgid "Directions"
+msgstr "الوصÙ"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "إنشاء حركة جديدة"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "إسم الحركة:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Error!"
-msgstr ""
+msgstr "خطأ!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
-msgstr ""
+msgstr "أوقات الدمج:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
-msgstr ""
+msgstr "التالي (مزامنة تلقائية):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
-msgstr ""
+msgstr "وقت الدمج عبر الحركة"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Animation"
-msgstr ""
+msgstr "حركة"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "New name:"
-msgstr ""
+msgstr "إسم جديد:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Filters"
-msgstr ""
+msgstr "تعديل المصاÙÙŠ"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Scale:"
-msgstr ""
+msgstr "تكبير/تصغير:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade In (s):"
-msgstr ""
+msgstr "تلاشي ÙÙŠ البداية (ثواني):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade Out (s):"
-msgstr ""
+msgstr "تلاشي من النهاية (ثواني):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend"
-msgstr ""
+msgstr "دمج"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix"
-msgstr ""
+msgstr "خلط"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr ""
+msgstr "إعادة تشغيل تلقائية:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Restart (s):"
-msgstr ""
+msgstr "إعادة تشغيل (ثواني):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Random Restart (s):"
-msgstr ""
+msgstr "إعادة تشغيل عشوائية (ثواني):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Start!"
-msgstr ""
+msgstr "بدء!"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Amount:"
-msgstr ""
+msgstr "الكمية:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend:"
-msgstr ""
+msgstr "الدمج:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend 0:"
-msgstr ""
+msgstr "الدمج 0:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend 1:"
-msgstr ""
+msgstr "الدمج 1:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "X-Fade Time (s):"
-msgstr ""
+msgstr "وقت التلاشي X (ثواني):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Current:"
-msgstr ""
+msgstr "الحالي:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Add Input"
-msgstr ""
+msgstr "أض٠مدخله"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Clear Auto-Advance"
-msgstr ""
+msgstr "إخلاء التقدم التلقائي"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Set Auto-Advance"
-msgstr ""
+msgstr "حدد التقدم التلقائي"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Delete Input"
-msgstr ""
+msgstr "مسح المدخله"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is valid."
-msgstr ""
+msgstr "شجرة الحركة صحيحة."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is invalid."
-msgstr ""
+msgstr "شجرة الحركة خاطئة."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation Node"
-msgstr ""
+msgstr "عقدة الحركة"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
-msgstr ""
+msgstr "عقدة اللقطة الواحدة"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix Node"
-msgstr ""
+msgstr "عقدة الخلط"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend2 Node"
-msgstr ""
+msgstr "عقدة الدمج2"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend3 Node"
-msgstr ""
+msgstr "عقدة الدمج3"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend4 Node"
-msgstr ""
+msgstr "عقدة الدمج4"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr ""
+msgstr "عقدة التكبير الزمني"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeSeek Node"
-msgstr ""
+msgstr "عقدة التنقل الزمني"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "عقدة التنقل"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
-msgstr ""
+msgstr "إستيراد الحركة.."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr ""
+msgstr "تعديل مصاÙÙŠ العقد"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Filters.."
-msgstr ""
+msgstr "الÙلترة.."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Free"
@@ -3009,18 +3248,10 @@ msgid "Can't resolve hostname:"
msgstr "لا يمكن حل أسم Ø§Ù„Ù…ÙØ¶ÙŠÙ:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "لا يمكن الحل."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "خطأ ÙÙŠ الإتصال، من ÙØ¶Ù„Ùƒ حاول مجدداً."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "لا يمكن إتمام الاتصال."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "لا يمكن الإتصال Ø¨Ø§Ù„Ù…ÙØ¶ÙŠÙ:"
@@ -3029,30 +3260,14 @@ msgid "No response from host:"
msgstr "لا ردّ من Ø§Ù„Ù…ÙØ¶ÙŠÙ:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "لا يوجد إستجابة."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "ÙØ´Ù„ إتمام الطلب٫ الرمز الذي تم إرجاعه:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "ÙØ´Ù„ الطلب."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "ÙØ´Ù„ الطلب٫ السبب هو اعادة التحويل مرات اكثر من اللازم"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "اعادة توجيه حلقة التكرار."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "ÙØ´Ù„:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "تجزئة تحميل سيئة، من المتوقع أن يكون المل٠قد تم العبث به."
@@ -3081,14 +3296,6 @@ msgid "Resolving.."
msgstr "جاري الحل..."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "جاري الاتصال..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "جار الطلب..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "خطأ ÙÙŠ إنشاء الطلب"
@@ -3106,7 +3313,7 @@ msgstr "خطأ ÙÙŠ التحميل"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "تحميل هذه الأصول قيد التنÙيذ أصلاً!"
+msgstr "تحميل هذا الأصل قيد التنÙيذ أصلاً!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
@@ -3168,90 +3375,117 @@ msgstr "مل٠أصول مضغوط"
#: editor/plugins/camera_editor_plugin.cpp
msgid "Preview"
-msgstr ""
+msgstr "إستعراض"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
-msgstr ""
+msgstr "تعديل اللقطة"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Offset:"
-msgstr ""
+msgstr "معادل الشبكة:"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Step:"
-msgstr ""
+msgstr "خطوة الشبكة:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Offset:"
-msgstr ""
+msgstr "معادل الدوران:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Step:"
-msgstr ""
+msgstr "خطوة الدوران:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Pivot"
-msgstr ""
+msgstr "تحريك المحور"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Action"
-msgstr "عملية تحريك"
+msgstr "عملية التحريك"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "تحريك الموجه العمودي"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "إنشاء موجه عمودي جديد"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "مسح الموجه العمودي"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "تحريك الموجه الأÙقي"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "إنشاء موجه Ø£Ùقي جديد"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "مسح الموجه الأÙقي"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "إنشاء موجه عمودي وأÙقي جديد"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
-msgstr ""
+msgstr "تعديل سلسلة IK"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit CanvasItem"
-msgstr ""
+msgstr "تعديل العنصر القماشي"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Anchors only"
-msgstr ""
+msgstr "المرتكزات Ùقط"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors and Margins"
-msgstr ""
+msgstr "تغيير المرتكزات و الهوامش"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
-msgstr ""
+msgstr "تغيير المرتكزات"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
-msgstr ""
+msgstr "لصق الوضع"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Select Mode"
-msgstr ""
+msgstr "تحديد الوضع"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
-msgstr ""
+msgstr "سحب: للتدوير"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+Drag: Move"
-msgstr ""
+msgstr "Alt+سحب: تحريك"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
-msgstr ""
+msgstr "إضغط 'ر' لكي تغيير المحور، 'Shift+ر' لسحب المحور (ÙÙŠ حين التحرك)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+RMB: Depth list selection"
-msgstr ""
+msgstr "Alt+زر Ø§Ù„ÙØ£Ø±Ø© الأيمن: تحديد قائمة العمق"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "عملية تحريك"
+msgstr "وضع التحريك"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate Mode"
-msgstr ""
+msgstr "وضع التدوير"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3259,194 +3493,204 @@ msgid ""
"Show a list of all objects at the position clicked\n"
"(same as Alt+RMB in select mode)."
msgstr ""
+"أظهر قائمة من كل العناصر ÙÙŠ المنطقة المضغوطة\n"
+"(تماماً مثل Alt+زر Ø§Ù„ÙØ£Ø±Ø© الأيمن ÙÙŠ وضع التحديد)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
-msgstr ""
+msgstr "إضغط لكي تغيير محور تدوير العنصر."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan Mode"
-msgstr ""
+msgstr "وضع السحب"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Toggles snapping"
-msgstr ""
+msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ الكبس"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Use Snap"
-msgstr ""
+msgstr "إستخدم الكبس"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snapping options"
-msgstr ""
+msgstr "إعدادات الكبس"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to grid"
-msgstr ""
+msgstr "الكبس إلي الشبكة"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
-msgstr ""
+msgstr "إستعمال كبس التدوير"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap..."
-msgstr ""
+msgstr "تعديل الكبس..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
-msgstr ""
+msgstr "نسبية الكبس"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr ""
+msgstr "إستخدام كبس البكسل"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "الكبس الذكي"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to parent"
-msgstr ""
+msgstr "الكبس إلي الطÙÙ„"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "إكبس إلي مرتكز العقدة"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "إكبس إلي جوانب العقدة"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "إكبس إلي العقد الأخري"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "أكبس إلي الموجهات"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
-msgstr ""
+msgstr "Ù‚ÙÙ„ العنصر المحدد ÙÙŠ هذا المكان (لا يمكن تحريكه)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
-msgstr ""
+msgstr "إلغاء القÙÙ„ عن هذا العنصر (يمكن تحريكه الأن)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
-msgstr ""
+msgstr "تأكد من أن الطÙÙ„ للعنصر غير قابل للتحديد."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Restores the object's children's ability to be selected."
-msgstr ""
+msgstr "إرجاع مقدرة تحديد الطÙÙ„ للعنصر."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make Bones"
-msgstr ""
+msgstr "أنشئ عظام"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
-msgstr ""
+msgstr "إخلاء العظام"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Bones"
-msgstr ""
+msgstr "إظهار العظام"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr ""
+msgstr "أنشئ سلسة IK"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
-msgstr ""
+msgstr "إخلاء سلسلة IK"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View"
-msgstr ""
+msgstr "أظهر"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Show Grid"
-msgstr ""
+msgstr "إظهار الشبكة"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show helpers"
-msgstr ""
+msgstr "أظهر المساعدات"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show rulers"
-msgstr ""
+msgstr "أظهر المساطر"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "أظهر الموجهات"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
-msgstr ""
+msgstr "Ù†ØµÙ Ø§Ù„Ù…ÙØ­Ø¯Ø¯"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Frame Selection"
-msgstr ""
+msgstr "إملئ الشاشة بالمحدد"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Ø­ÙØ¸ التخطيط"
+msgstr "المخطط"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
-msgstr ""
+msgstr "أدخل Ù…ÙØ§ØªÙŠØ­"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key"
-msgstr ""
+msgstr "أدخل Ù…ÙØªØ§Ø­"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr ""
+msgstr "أدخل Ù…ÙØªØ§Ø­ (مسارات موجودة Ø¨Ø§Ù„ÙØ¹Ù„)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
-msgstr ""
+msgstr "نسخ الوضع"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr ""
+msgstr "إخلاء الوضع"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "سحب المحور من مكان Ø§Ù„ÙØ£Ø±Ø©"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "عملية تحريك"
+msgstr "ضع المحور ÙÙŠ مكان مؤشر الماوس"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "ضاع٠خطوة الشبكة بـ 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "قسم خطوة الشبكة بـ 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
-msgstr ""
+msgstr "أض٠%s"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Adding %s..."
-msgstr ""
+msgstr "Ø¥Ø¶Ø§ÙØ© %s..."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Create Node"
-msgstr ""
+msgstr "إنشاء عقدة"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Error instancing scene from %s"
-msgstr ""
+msgstr "خطأ ÙÙŠ توضيح المشهد من %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "OK :("
-msgstr ""
+msgstr "حسناً :("
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -3535,9 +3779,8 @@ msgid "Add point"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove point"
-msgstr "عملية تحريك"
+msgstr "مسح النقطة"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Left linear"
@@ -3552,9 +3795,8 @@ msgid "Load preset"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove Curve Point"
-msgstr "عملية تحريك"
+msgstr "مسح نقطة الإنحناء"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
@@ -3564,6 +3806,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3596,6 +3842,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3611,58 +3861,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -3864,9 +4062,8 @@ msgid "Creating heightfield..."
msgstr ""
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Marking walkable triangles..."
-msgstr "جاري تخزين التعديلات المحلية.."
+msgstr "تعليم مثلثات التحرك.."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
@@ -4061,16 +4258,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4079,19 +4306,16 @@ msgid "Curve Point #"
msgstr ""
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
-msgstr "عملية تحريك"
+msgstr "حدد موقع نقطة الإنحناء"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve In Position"
-msgstr "عملية تحريك"
+msgstr "ضع الإنحناء ÙÙŠ الموقع"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Out Position"
-msgstr "عملية تحريك"
+msgstr "حدد موقع خروج الإنحناء"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Path"
@@ -4102,9 +4326,8 @@ msgid "Remove Path Point"
msgstr ""
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Remove Out-Control Point"
-msgstr "عملية تحريك"
+msgstr "مسح نقطة خروج التحكم"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove In-Control Point"
@@ -4211,7 +4434,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4256,6 +4478,20 @@ msgid " Class Reference"
msgstr " مرجع الصنÙ"
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "ترتيب"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4307,6 +4543,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4317,13 +4557,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4427,33 +4665,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr ""
@@ -4475,6 +4702,22 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "خط مطوي"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4520,12 +4763,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4534,7 +4775,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4699,6 +4939,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "يترجم: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4779,6 +5027,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4811,6 +5063,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "إظهار Ø§Ù„ÙØ±ÙŠÙ…/ثانية"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "نص٠حجم الشاشة"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4938,6 +5198,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ وضع النظرة الحرة"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5107,14 +5371,12 @@ msgid "Insert Empty (After)"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (Before)"
-msgstr "عملية تحريك"
+msgstr "تحريك (للسابق)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (After)"
-msgstr "عملية تحريك"
+msgstr "تحريك (للتالي)"
#: editor/plugins/style_box_editor_plugin.cpp
msgid "StyleBox Preview:"
@@ -5186,9 +5448,8 @@ msgid "Remove All Items"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All"
-msgstr "عملية تحريك"
+msgstr "مسح الكل"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
@@ -5215,6 +5476,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5388,7 +5653,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5478,9 +5743,8 @@ msgid "Export With Debug"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "المل٠غير موجود."
+msgstr "هذا المسار غير موجود."
#: editor/project_manager.cpp
msgid "Please choose a 'project.godot' file."
@@ -5557,9 +5821,8 @@ msgid "Project Name:"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
-msgstr "أنشئ مجلد"
+msgstr "إنشاء مجلد"
#: editor/project_manager.cpp
msgid "Project Path:"
@@ -5578,9 +5841,8 @@ msgid "Unnamed Project"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "لا يمكن إتمام الاتصال."
+msgstr "لا يمكن ÙØªØ­ المشروع"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -5651,6 +5913,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5684,10 +5952,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5809,11 +6073,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -5821,9 +6085,8 @@ msgid "Delete Item"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "لا يمكن الإتصال Ø¨Ø§Ù„Ù…ÙØ¶ÙŠÙ:"
+msgstr "لا يمكن أن يحتوي علي '/' أو ':'"
#: editor/project_settings_editor.cpp
msgid "Already existing"
@@ -5950,9 +6213,8 @@ msgid "Show only selected locales"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Ø§Ù„Ù…ÙØµÙÙŠ:"
+msgstr "وضع Ø§Ù„Ù…ÙØµÙÙŠ:"
#: editor/project_settings_editor.cpp
msgid "Locales:"
@@ -6007,18 +6269,16 @@ msgid "New Script"
msgstr ""
#: editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "إجعل الموارد الجانبية مميزة"
+msgstr "إجعلة مميزاً"
#: editor/property_editor.cpp
msgid "Show in File System"
msgstr ""
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "صلها بالعقدة:"
+msgstr "تحويل إلي %s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
@@ -6242,9 +6502,8 @@ msgid "Attach Script"
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Clear Script"
-msgstr "عمل اشتراك"
+msgstr "إخلاء الكود"
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
@@ -6285,6 +6544,14 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "عن بعد"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6327,9 +6594,8 @@ msgid "Instance:"
msgstr ""
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Open script"
-msgstr "عمل اشتراك"
+msgstr "ÙØªØ­ الكود"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -6400,9 +6666,8 @@ msgid "Directory of the same name exists"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "المل٠موجود، إستبدال؟"
+msgstr "المل٠موجود، سيعاد إستخدامه"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6437,9 +6702,8 @@ msgid "Built-in script (into scene file)"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Create new script file"
-msgstr "عمل اشتراك"
+msgstr "إنشاء مل٠كود جديد"
#: editor/script_create_dialog.cpp
msgid "Load existing script file"
@@ -6470,6 +6734,10 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "من بعد "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6526,18 +6794,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6669,61 +6925,54 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
-#, fuzzy
msgid "Invalid type argument to convert(), use TYPE_* constants."
-msgstr ""
-"صن٠إحدى المتغيرات المدخلة (arguments) غير صحيح ÙÙŠ ()convert . إستعمل ثابتة "
-"_*TYPE"
+msgstr "نوع برهان خاطئ للتحويل()، إستخدم ثابت TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
-#, fuzzy
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr ""
-"لا يوجد ما يكÙÙŠ من البيتات (bytes) Ù„ÙÙƒ ØªØ´ÙŠÙØ±Ø© البيتات أو بنيتها (format) غير "
-"صحيحة."
+msgstr "لا يوجد ما يكÙÙŠ من البايتات من أجل ÙÙƒ البايتات، أو صيغة غير صحيحة."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "الخطوة (المتغيرة المدخلة/argument) تساوي ØµÙØ± !"
-#: modules/gdscript/gd_functions.cpp
-#, fuzzy
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
-msgstr "Ø§Ù„Ø´ÙØ±Ø© (script) لا تملك نسخة."
+msgstr "ليس كود مع نموذج"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "لا تستند الى Ø´ÙØ±Ø© مصدرية"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "لا تستند على مل٠مورد"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
"instance dictionary format نموذج الشكل القاموسي غير صالح - المسار Ù…Ùقود"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"instance dictionary format نموذج الشكل القاموسي غير صالح - لا يمكن تحميل "
"السكريبت من المسار"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
"instance dictionary format نموذج الشكل القاموسي غير صالح - السكريبت ÙÙŠ "
"المسار غير صالح"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "مجسّد القاموس غير صالح (Ø£ØµÙ†Ø§Ù ÙØ±Ø¹ÙŠØ© غير صالحة)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6736,15 +6985,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6812,12 +7069,8 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+msgid "Clear Selection"
+msgstr "إخلاء المحدد"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6938,7 +7191,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6946,7 +7199,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6954,7 +7207,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6982,9 +7235,8 @@ msgid "Change Base Type"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Move Node(s)"
-msgstr "عملية تحريك"
+msgstr "تحريك العقدة(عقدات)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove VisualScript Node"
@@ -7047,9 +7299,8 @@ msgid "Paste VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "عملية تحريك"
+msgstr "مسح المهمة"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable"
@@ -7182,13 +7433,21 @@ msgid "Could not write file:\n"
msgstr "لا يمكن كتابة الملÙ:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "لا يمكن قرأة الملÙ:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "لا يمكن ÙØªØ­ القالب من أجل التصدير.\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "لا يمكن قراءة مل٠HTML مخصص:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7282,18 +7541,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7337,7 +7584,7 @@ msgstr ""
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
-msgstr ""
+msgstr "Ù…ÙØµØ§Ø¯Ù… ÙØ§Ø±Øº ليس لديه تأثير علي التصادم."
#: scene/3d/collision_shape.cpp
msgid ""
@@ -7352,6 +7599,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7401,11 +7656,11 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid "Add current color as a preset"
-msgstr ""
+msgstr "أض٠اللون الحالي كإعداد مسبق"
#: scene/gui/dialogs.cpp
msgid "Cancel"
-msgstr ""
+msgstr "إلغاء"
#: scene/gui/dialogs.cpp
msgid "Alert!"
@@ -7415,6 +7670,11 @@ msgstr "تنبيه!"
msgid "Please Confirm..."
msgstr "يرجى التاكيد..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "إختر طريقة"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7429,6 +7689,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7474,9 +7738,6 @@ msgstr ""
#~ msgid "Removed:"
#~ msgstr "Ù…ÙØ³ÙØ­:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "خطأ ÙÙŠ Ø­ÙØ¸ الأطلس:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "لا يمكن Ø­ÙØ¸ النسيج Ø§Ù„ÙØ±Ø¹ÙŠ Ù„Ù„Ø£Ø·Ù„Ø³:"
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index 21e2b4f27d..f2bf979b75 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -100,6 +100,7 @@ msgid "Anim Delete Keys"
msgstr ""
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr ""
@@ -629,6 +630,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr ""
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -699,6 +707,14 @@ msgstr ""
msgid "Delete"
msgstr ""
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -1115,6 +1131,11 @@ msgid "File Exists, Overwrite?"
msgstr "Файлът ÑъщеÑтвува. ИÑкате ли да го презапишете?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Създаване на папка"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr ""
@@ -1122,12 +1143,6 @@ msgstr ""
msgid "All Files (*)"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr ""
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr ""
@@ -1194,7 +1209,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Go to parent folder"
msgstr "ÐеуÑпешно Ñъздаване на папка."
@@ -1489,6 +1504,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1600,6 +1630,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1729,11 +1763,20 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+#, fuzzy
+msgid "%d more folders"
+msgstr "ÐеуÑпешно Ñъздаване на папка."
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1745,6 +1788,11 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Add a new scene."
+msgstr "ДобавÑне на нови пътечки."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Сцена"
@@ -1809,13 +1857,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2073,14 +2120,14 @@ msgid "Import"
msgstr "ВнаÑÑне"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr ""
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Възел"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr ""
@@ -2137,7 +2184,7 @@ msgstr ""
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "ОтварÑне на библиотеката"
@@ -2298,6 +2345,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2333,6 +2384,106 @@ msgid "Importing:"
msgstr "ВнаÑÑне:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "ÐеуÑпешно Ñъздаване на папка."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "Имаше грешка при внаÑÑнето:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "Свързване.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Свързване.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "Създаване на нов проект"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "ИзрÑзване на възелите"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Запитване.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "Свързване.."
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2358,12 +2509,21 @@ msgstr "Избиране на вÑичко"
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Шаблони"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2381,12 +2541,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2652,8 +2806,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2664,6 +2817,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Изтриване на анимациÑта?"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2808,6 +2966,56 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "ОпиÑание:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "ПоÑтавÑне"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2999,18 +3207,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -3019,30 +3219,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3071,14 +3255,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Свързване.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Запитване.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Error making request"
msgstr "Имаше грешка при зареждане на Ñцената."
@@ -3192,6 +3368,36 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "Създаване на нов Ñкрипт"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "Създаване на нов Ñкрипт"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3313,10 +3519,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3367,6 +3579,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3552,6 +3768,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3584,6 +3804,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3599,58 +3823,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4048,16 +4220,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4194,7 +4396,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4239,6 +4440,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Подреждане:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4290,6 +4506,10 @@ msgstr ""
msgid "Close All"
msgstr "ЗатварÑне на вÑичко"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "ПуÑкане"
@@ -4300,13 +4520,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4410,33 +4628,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "ИзрÑзване"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Копиране"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Избиране на вÑичко"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4459,6 +4666,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Изтриване на анимациÑта?"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4504,12 +4728,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4518,7 +4740,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4683,6 +4904,15 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "ДобавÑне на превод"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4763,6 +4993,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4795,6 +5029,15 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "Преглед на файловете"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4924,6 +5167,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5200,6 +5447,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5374,7 +5625,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5640,6 +5891,12 @@ msgstr ""
msgid "Can't run project"
msgstr "Създаване на нов проект"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5673,10 +5930,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5798,13 +6051,12 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "ÐаÑтройки"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
msgid "Delete Item"
@@ -6278,6 +6530,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "ЗатварÑне на вÑичко"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6466,6 +6727,11 @@ msgid "Attach Node Script"
msgstr "Ðова Ñцена"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "ЗатварÑне на вÑичко"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6522,18 +6788,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6666,59 +6920,59 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"Ðевалиден агрумент тип на convert(), използвайте конÑтантите започващи Ñ "
"TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "ÐедоÑтатъчно байтове за разкодиране или недейÑтвителен формат."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "Стъпката на range() е нула!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Not a script with an instance"
msgstr "Скриптът нÑма инÑтанциÑ"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Not based on a script"
msgstr "Обектът не е базиран на Ñкрипт"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Not based on a resource file"
msgstr "Обектът не е базиран на реÑурÑен файл"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Ðевалиден формат на инÑтанциÑта в речника (липÑва @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Ðевалиден формат на инÑтанциÑта в речника (Ñкриптът в @path не може да бъде "
"зареден)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
"Ðевалиден формат на инÑтанциÑта в речника (Ñкриптът в @path е невалиден)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Ðевалиден формат на инÑтанциÑта в речника (невалиден подклаÑ)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6731,15 +6985,24 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Snap View"
+msgid "Floor:"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Grid Map"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Previous Floor"
+msgstr "Предишен подпрозорец"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6810,12 +7073,9 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+#, fuzzy
+msgid "Clear Selection"
+msgstr "Ðова Ñцена"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -6937,7 +7197,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6945,7 +7205,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6953,7 +7213,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7185,12 +7445,21 @@ msgstr "ÐеуÑпешно Ñъздаване на папка."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
+msgstr "ÐеуÑпешно Ñъздаване на папка."
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
msgstr "ÐеуÑпешно Ñъздаване на папка."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
+msgid "Could not read boot splash image file:\n"
msgstr "ÐеуÑпешно Ñъздаване на папка."
#: scene/2d/animated_sprite.cpp
@@ -7306,20 +7575,6 @@ msgstr ""
"Параметърът 'Path' трÑбва да Ñочи към дейÑтвителен възел Node2D, за да "
"работи."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Параметъра 'Path' трÑбва да Ñочи към валиден Viewport нод за да работи. Този "
-"Viewport трÑбва да бъде наÑтройен в режим 'рендъринг цел'(render target)."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7378,6 +7633,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7444,6 +7707,11 @@ msgstr "Тревога!"
msgid "Please Confirm..."
msgstr "МолÑ, потвърдете..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Изберете метод"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7458,6 +7726,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7488,6 +7760,18 @@ msgstr "Грешка при зареждането на шрифта."
msgid "Invalid font size."
msgstr ""
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "ÐаÑтройки"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Параметъра 'Path' трÑбва да Ñочи към валиден Viewport нод за да работи. "
+#~ "Този Viewport трÑбва да бъде наÑтройен в режим 'рендъринг цел'(render "
+#~ "target)."
+
#~ msgid "Exporting for %s"
#~ msgstr "ИзнаÑÑне за %s"
@@ -7529,9 +7813,6 @@ msgstr ""
#~ msgid "Import Image:"
#~ msgstr "ВнаÑÑне на изображение:"
-#~ msgid "Error importing:"
-#~ msgstr "Имаше грешка при внаÑÑнето:"
-
#~ msgid "Import Textures for Atlas (2D)"
#~ msgstr "ВнаÑÑне на текÑтури за ÐÑ‚Ð»Ð°Ñ (двуизмерно)"
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index 3e93381dcd..d329b1a3fc 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -4,68 +4,69 @@
# This file is distributed under the same license as the Godot source code.
#
# Abu Md. Maruf Sarker <maruf.webdev@gmail.com>, 2016-2017.
+# Abdullah Zubair <abdullahzubair109@gmail.com>, 2017.
# Tahmid Karim <tahmidk15@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-01-08 13:05+0000\n"
-"Last-Translator: ABU MD. MARUF SARKER <maruf.webdev@gmail.com>\n"
+"PO-Revision-Date: 2017-11-29 08:11+0000\n"
+"Last-Translator: Abdullah Zubair <abdullahzubair109@gmail.com>\n"
"Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/"
"godot/bn/>\n"
"Language: bn\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.11-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
-msgstr "অসমরà§à¦¥/অকà§à¦·à¦®"
+msgstr "অসমরà§à¦¥"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr "সকল বাছাইকৃত"
+msgstr "সব সিলেকà§à¦Ÿ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr "সংযোগ (অà§à¦¯à¦¾à¦¡) বোতাম সরান"
+msgstr "অà§à¦¯à¦¾à¦¡ কি মà§à¦­ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) টà§à¦°à§à¦¯à¦¾à¦¨à¦œà¦¿à¦¶à¦¨/সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦°à¦£ পরিবরà§à¦¤à¦¨ করà§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) টà§à¦°à§à¦¯à¦¾à¦¨à¦œà¦¿à¦¶à¦¨ পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) টà§à¦°à¦¾à¦¨à§à¦¸à¦«à¦°à§à¦®/রà§à¦ªà¦¾à¦¨à§à¦¤à¦° পরিবরà§à¦¤à¦¨ করà§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) টà§à¦°à¦¾à¦¨à§à¦¸à¦«à¦°à§à¦® পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) মান পরিবরà§à¦¤à¦¨ করà§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) ভà§à¦¯à¦¾à¦²à§ পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) ডাক পরিবরà§à¦¤à¦¨ করà§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) কল পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡ (Anim) টà§à¦°à§à¦¯à¦¾à¦•/পথ যোগ করà§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) টà§à¦°à§à¦¯à¦¾à¦• যোগ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) চাবিগà§à¦²à§‹ অনà§à¦²à¦¿à¦ªà¦¿/নকল করà§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) কি ডà§à¦ªà§à¦²à¦¿à¦•েট করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) টà§à¦°à§à¦¯à¦¾à¦•/পথ উপরের দিকে তà§à¦²à§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ ( Anim) টà§à¦°à§à¦¯à¦¾à¦• আপ"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) টà§à¦°à§à¦¯à¦¾à¦•/পথ নিচের দিকে নিয়ে যান"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) টà§à¦°à§à¦¯à¦¾à¦• ডাউন"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) টà§à¦°à§à¦¯à¦¾à¦•/পথ অপসারণ করà§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) টà§à¦°à§à¦¯à¦¾à¦• রিমà§à¦­ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
@@ -84,9 +85,8 @@ msgid "Anim Track Change Value Mode"
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) টà§à¦°à§à¦¯à¦¾à¦•/পথ-à¦à¦° মানের ধরন/পà§à¦°à¦•ার পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Track Change Wrap Mode"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) টà§à¦°à§à¦¯à¦¾à¦•/পথ-à¦à¦° মানের ধরন/পà§à¦°à¦•ার পরিবরà§à¦¤à¦¨ করà§à¦¨"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ টà§à¦°à§à¦¯à¦¾à¦•-à¦à¦° Wrapping মোড পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
@@ -101,6 +101,7 @@ msgid "Anim Delete Keys"
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° (Anim) চাবিগà§à¦²à§‹ অপসারণ করà§à¦¨"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অনà§à¦²à¦¿à¦ªà¦¿ করà§à¦¨"
@@ -372,9 +373,8 @@ msgid "No Matches"
msgstr "কোনো মিল নেই"
#: editor/code_editor.cpp
-#, fuzzy
msgid "Replaced %d occurrence(s)."
-msgstr "%d টি সংঘটন পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হয়েছে।"
+msgstr "%d সংখà§à¦¯à¦• সংঘটন পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হয়েছে ।"
#: editor/code_editor.cpp
msgid "Replace"
@@ -638,6 +638,13 @@ msgstr "নিরà§à¦­à¦°à¦¤à¦¾-সমূহের à¦à¦¡à¦¿à¦Ÿà¦°"
msgid "Search Replacement Resource:"
msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦• রিসোরà§à¦¸-à¦à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "খà§à¦²à§à¦¨"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীসমূহ:"
@@ -658,7 +665,7 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "অপসারণ সমà§à¦­à¦¬ নয় :\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -711,6 +718,14 @@ msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ অপসারণ
msgid "Delete"
msgstr "অপসারণ করà§à¦¨"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "ডিকশনারি কি পরিবরà§à¦¤à¦¨ করà§à¦¨"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "ডিকশনারি ভà§à¦¯à¦¾à¦²à§ পরিবরà§à¦¤à¦¨ করà§à¦¨"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Godot কমিউনিটি হতে আপনাকে ধনà§à¦¯à¦¬à¦¾à¦¦!"
@@ -721,66 +736,63 @@ msgstr "ধনà§à¦¯à¦¬à¦¾à¦¦!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Godot Engine কনà§à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿà¦°à¦¸"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Project Founders"
-msgstr "পà§à¦°à¦•লà§à¦ª মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°"
+msgstr "পà§à¦°à¦œà§‡à¦•à§à¦Ÿ ফাউনà§à¦¡à¦¾à¦°"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "মূল ডেভেলপার"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr "পà§à¦°à¦•লà§à¦ª মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°"
+msgstr "পà§à¦°à¦œà§‡à¦•à§à¦Ÿ মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "ডেভেলপার"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Authors"
-msgstr "লেখক:"
+msgstr "লেখক"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "পà§à¦²à§à¦¯à¦¾à¦Ÿà¦¿à¦¨à¦¾à¦® সà§à¦ªà¦¨à¦¸à¦°"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "গোলà§à¦¡ সà§à¦ªà¦¨à¦¸à¦°"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "মিনি সà§à¦ªà¦¨à¦¸à¦°"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "গোলà§à¦¡ ডোনার"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "সিলভার ডোনার"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "কà§à¦²à§‹à¦¨ করে নীচে নিন"
+msgstr "বà§à¦°à§‹à¦žà§à¦œ ডোনার"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "ডোনার"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "লাইসেনà§à¦¸"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "থারà§à¦¡ পারà§à¦Ÿà¦¿ লাইসেনà§à¦¸"
#: editor/editor_about.cpp
msgid ""
@@ -789,38 +801,38 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"Godot ইঞà§à¦œà¦¿à¦¨ বিভিনà§à¦¨ থারà§à¦¡ পারà§à¦Ÿà¦¿ ফà§à¦°à¦¿ à¦à¦¬à¦‚ ওপেন সোরà§à¦¸ লাইবà§à¦°à§‡à¦°à¦¿ বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করে থাকে। "
+"à¦à¦‡ লাইবà§à¦°à§‡à¦°à¦¿à¦—à§à¦²à¦¿ à¦à¦®à¦†à¦‡à¦Ÿà¦¿ লাইসেনà§à¦¸à§‡à¦° শরà§à¦¤à¦¸à¦®à§‚হ মেনে চলে। à¦à¦–ানে à¦à¦‡ সকল থারà§à¦¡ পারà§à¦Ÿà¦¿ "
+"কমà§à¦ªà¦¨à§‡à¦¨à§à¦Ÿà§‡à¦° কপিরাইট বিবৃতি à¦à¦¬à¦‚ লাইসেনà§à¦¸ সংকà§à¦°à¦¾à¦¨à§à¦¤ à¦à¦•টি তালিকা পà§à¦°à¦¦à¦¾à¦¨ করা হল।"
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:"
+msgstr "কমà§à¦ªà¦¨à§‡à¦¨à§à¦Ÿà¦¸"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:"
+msgstr "কমà§à¦ªà¦¨à§‡à¦¨à§à¦Ÿà¦¸"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "লাইসেনà§à¦¸"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "জিপ ফরমà§à¦¯à¦¾à¦Ÿ খà§à¦à¦œà§‡ পেতে বà§à¦¯à¦¾à¦°à§à¦¥, পà§à¦¯à¦¾à¦•েজ ফাইল ওপেন করা যায়নি।"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Uncompressing Assets"
-msgstr "অসংকà§à¦šà¦¿à¦¤"
+msgstr "আনকমà§à¦ªà§à¦°à§‡à¦¸à§à¦¡ অà§à¦¯à¦¾à¦¸à§‡à¦Ÿà¦¸"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr "পà§à¦¯à¦¾à¦•েজ ইনà§à¦¸à¦Ÿà¦² সফল হয়েছে!"
+msgstr "পà§à¦¯à¦¾à¦•েজ ইনà§à¦¸à¦Ÿà¦² সমà§à¦ªà¦¨à§à¦¨ হয়েছে!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "সমà§à¦ªà¦¨à§à¦¨ হয়েছে!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
@@ -828,151 +840,133 @@ msgid "Install"
msgstr "ইনà§à¦¸à¦Ÿà¦²"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Installer"
-msgstr "পà§à¦¯à¦¾à¦•েজ ইনà§à¦¸à¦Ÿà¦² সফল হয়েছে!"
+msgstr "পà§à¦¯à¦¾à¦•েজ ইনà§à¦¸à¦Ÿà¦²à¦¾à¦°"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr ""
+msgstr "সà§à¦ªà¦¿à¦•ারস"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Effect"
-msgstr "খালি বসà§à¦¤à§ যোগ করà§à¦¨"
+msgstr "ইফেকà§à¦Ÿ যোগ করà§à¦¨"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "Autoload পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨"
+msgstr "অডিও বাস পà§à¦¨à¦°à¦¾à¦¯à¦¼ নামকরণ করà§à¦¨"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Solo"
-msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿà¦­à¦¾à¦¬à§‡ চালানো টগল করà§à¦¨"
+msgstr "অডিও বাস সলো টগল করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr ""
+msgstr "অডিও বাস মিউট টগল করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "অডিও বাস বাইপাস ইফেকà§à¦Ÿ টগল করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
-msgstr ""
+msgstr "অডিও বাস সেনà§à¦¡ সিলেকà§à¦Ÿ করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "অডিও বাস ইফেকà§à¦Ÿ পà§à¦°à§Ÿà§‹à¦— করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "বাস ইফেকà§à¦Ÿ মà§à¦­ করà§à¦¨"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨"
+msgstr "বাস ইফেকà§à¦Ÿ ডিলিট করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr ""
+msgstr "অডিও বাস, পà§à¦¨à¦°à¦¾à¦¯à¦¼ সাজানোর জনà§à¦¯ ডà§à¦°à§à¦¯à¦¾à¦— à¦à¦¨à§à¦¡ ডà§à¦°à¦ª অà§à¦¯à¦¾à¦ªà§à¦²à¦¾à¦‡ করà§à¦¨à¥¤"
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr ""
+msgstr "সলো"
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "মিউট"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr ""
+msgstr "বাইপাস"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus options"
-msgstr "ডিবাগের সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ"
+msgstr "বাস অপশন"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr "পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿"
+msgstr "ডà§à¦ªà§à¦²à¦¿à¦•েট"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦¨/সংকোচন অপসারণ করà§à¦¨ (রিসেট জà§à¦®à§)"
+msgstr "রিসেট ভলিউম"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨"
+msgstr "ইফেকà§à¦Ÿ ডিলিট করà§à¦¨"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Audio Bus"
-msgstr "%s সংযà§à¦•à§à¦¤ করà§à¦¨"
+msgstr "অডিও বাস যোগ করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "মাসà§à¦Ÿà¦¾à¦° বাস ডিলিট করা সমà§à¦­à¦¬ নয়!"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Audio Bus"
-msgstr "লেআউট/নকশা অপসারণ করà§à¦¨"
+msgstr "অডিও বাস ডিলিট করà§à¦¨"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Duplicate Audio Bus"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨"
+msgstr "অডিও বাস ডà§à¦ªà§à¦²à¦¿à¦•েট করà§à¦¨"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦¨/সংকোচন অপসারণ করà§à¦¨ (রিসেট জà§à¦®à§)"
+msgstr "বাস ভলিউম রিসেট করà§à¦¨"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Move Audio Bus"
-msgstr "পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾ সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করà§à¦¨"
+msgstr "অডিও বাস মà§à¦­ করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
-msgstr ""
+msgstr "অডিও বাস লেআউট সেভ করà§à¦¨.."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout.."
-msgstr ""
+msgstr "নতà§à¦¨ লেআউট লোকেশন.."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "অডিও বাস লেআউট ওপেন করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "'res://default_bus_layout.tres' ফাইল খà§à¦à¦œà§‡ পাওয়া যায়নি।"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Invalid file, not an audio bus layout."
-msgstr ""
-"ফাইলের অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨à¥¤\n"
-"অনà§à¦—à§à¦°à¦¹ করে .fnt বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"
+msgstr "ফাইল অডিও বাস লেআউট হিসেবে বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦°à¦¯à§‹à¦—à§à¦¯ নয়।"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Bus"
-msgstr "%s সংযà§à¦•à§à¦¤ করà§à¦¨"
+msgstr "বাস যোগ করà§à¦¨"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Create a new Bus Layout."
-msgstr "নতà§à¦¨ রিসোরà§à¦¸ তৈরি করà§à¦¨"
+msgstr "নতà§à¦¨ বাস লেআউট তৈরি করà§à¦¨à¥¤"
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
@@ -980,9 +974,8 @@ msgid "Load"
msgstr "লোড"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Load an existing Bus Layout."
-msgstr "ডিসà§à¦• হতে à¦à¦•টি বিদà§à¦¯à¦®à¦¾à¦¨ রিসোরà§à¦¸ লোড করà§à¦¨ à¦à¦¬à¦‚ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨à¥¤"
+msgstr "বাস লেআউট লোড করà§à¦¨à¥¤"
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -991,16 +984,15 @@ msgstr "à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "বাস লেআউট ফাইল হিসেবে সেভ করà§à¦¨à¥¤"
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
-#, fuzzy
msgid "Load Default"
-msgstr "সাধারণ/ডিফলà§à¦Ÿ"
+msgstr "লোড ডিফলà§à¦Ÿ"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "ডিফলà§à¦Ÿ বাস লেআউট লোড করà§à¦¨à¥¤"
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1145,13 +1137,18 @@ msgstr "পà§à¦¯à¦¾à¦•/গà§à¦šà§à¦›à¦¿à¦¤ করা"
#: editor/editor_export.cpp platform/javascript/export/export.cpp
msgid "Template file not found:\n"
-msgstr ""
+msgstr "টেমপà§à¦²à§‡à¦Ÿ ফাইল পাওয়া যায়নি:\n"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File Exists, Overwrite?"
msgstr "à¦à¦•ই নামের ফাইল উপসà§à¦¥à¦¿à¦¤, তা মà§à¦›à§‡ লিখবেন?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "সব ফাইল পরিচিতি সমà§à¦ªà¦¨à§à¦¨"
@@ -1159,12 +1156,6 @@ msgstr "সব ফাইল পরিচিতি সমà§à¦ªà¦¨à§à¦¨"
msgid "All Files (*)"
msgstr "সব ফাইল (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "খà§à¦²à§à¦¨"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "à¦à¦•টি ফাইল খà§à¦²à§à¦¨"
@@ -1231,7 +1222,7 @@ msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼à¦•ে উপরের দিকে
msgid "Move Favorite Down"
msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼à¦•ে নিচের দিকে নামান"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Go to parent folder"
msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
@@ -1338,7 +1329,7 @@ msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ"
#: editor/editor_help.cpp
msgid "enum "
-msgstr ""
+msgstr "enum "
#: editor/editor_help.cpp
#, fuzzy
@@ -1368,6 +1359,9 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"à¦à¦‡ পà§à¦°à¦ªà¦¾à¦°à§à¦Ÿà¦¿ সমà§à¦ªà¦°à§à¦•ে বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ তথà§à¦¯ লিপিবদà§à¦§ করা হয়নি। অনà§à¦—à§à¦°à¦¹ করে তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° "
+"মাধà§à¦¯à¦®à§‡ সহায়তা করà§à¦¨à¥¤ তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° জনà§à¦¯ [color=$color][url=$url], [/url][/color] "
+"ফরমà§à¦¯à¦¾à¦Ÿ বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করà§à¦¨ !"
#: editor/editor_help.cpp
#, fuzzy
@@ -1383,6 +1377,9 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"à¦à¦‡ মেথড সমà§à¦ªà¦°à§à¦•ে বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ তথà§à¦¯ লিপিবদà§à¦§ করা হয়নি। অনà§à¦—à§à¦°à¦¹ করে তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° মাধà§à¦¯à¦®à§‡ "
+"সহায়তা করà§à¦¨à¥¤ তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° জনà§à¦¯ [color=$color][url=$url], [/url][/color] ফরমà§à¦¯à¦¾à¦Ÿ "
+"বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করà§à¦¨ !"
#: editor/editor_help.cpp
msgid "Search Text"
@@ -1436,7 +1433,7 @@ msgstr "সংরকà§à¦·à¦£à§‡à¦° সময় সমসà§à¦¯à¦¾ হয়েছে
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "ফাইল à¦à¦¨à§à¦¡ '%s' গà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ নয়।"
#: editor/editor_node.cpp
#, fuzzy
@@ -1514,18 +1511,24 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"à¦à¦‡ রিসোরà§à¦¸à¦Ÿà¦¿ ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡à¦¡ সিন à¦à¦° অংশ, পরিবরà§à¦¤à¦¨à¦¯à§‹à¦—à§à¦¯ নয়।\n"
+"বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ জানতে ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡à¦° সাহাযà§à¦¯ নিন।"
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"à¦à¦‡ রিসোরà§à¦¸à¦Ÿà¦¿ ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸à¦¡ অথবা ইনহেরিটেড সিন à¦à¦° অংশ।\n"
+"কারেনà§à¦Ÿ সিন সেভ করার সময় নতà§à¦¨ কোন পরিবরà§à¦¤à¦¨ বাতিল হযে যাবে।"
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"à¦à¦‡ রিসোরà§à¦¸à¦Ÿà¦¿ ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡à¦¡ à¦à¦¬à¦‚ অপরিবরà§à¦¤à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤à¦ªà§à¦°à§Ÿà§‹à¦œà¦¨à§‡ ইমà§à¦ªà§‹à¦°à§à¦Ÿ পà§à¦¯à¦¾à¦¨à§‡à¦²à§‡ সেটিংস পরিবরà§à¦¤à¦¨ "
+"করà§à¦¨ à¦à¦¬à¦‚ পà§à¦¨à¦°à¦¾à§Ÿ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨à¥¤"
#: editor/editor_node.cpp
msgid ""
@@ -1534,6 +1537,28 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"à¦à¦‡ সিনটি ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡à¦¡ à¦à¦¬à¦‚ সà§à¦¥à¦¾à§Ÿà§€ পরিবরà§à¦¤à¦¨à§‡à¦° অযোগà§à¦¯à¥¤\n"
+"সà§à¦¥à¦¾à§Ÿà§€ পরিবরà§à¦¤à¦¨à§‡à¦° জনà§à¦¯ ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸à¦¿à¦‚ অথবা ইনহেরিটà§à¦¯à¦¾à¦¨à§à¦¸ বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করতে পারেন।\n"
+"বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ তথà§à¦¯à§‡à¦° জনà§à¦¯ অনà§à¦—à§à¦°à¦¹ করে ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡à¦° সাহাযà§à¦¯ নিন।"
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"à¦à¦Ÿà¦¿ à¦à¦•টি রিমোট অবজেকà§à¦Ÿ à¦à¦¬à¦‚ সà§à¦¥à¦¾à§Ÿà§€ পরিবরà§à¦¤à¦¨à§‡à¦° অযোগà§à¦¯à¥¤\n"
+"ডিবাগিং সংকà§à¦°à¦¾à¦¨à§à¦¤ বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ তথà§à¦¯à§‡à¦° জনà§à¦¯ অনà§à¦—à§à¦°à¦¹ করে ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡à¦° সাহাযà§à¦¯ নিন।"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ করà§à¦¨"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "কলাপà§à¦¸ করà§à¦¨"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1631,7 +1656,7 @@ msgstr "ফাইল সংরকà§à¦·à¦¨ করà§à¦¨"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "'%s' বনà§à¦§ করার পূরà§à¦¬à§‡ পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ সংরকà§à¦·à¦£ করবেন?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
@@ -1659,6 +1684,11 @@ msgid "Export Mesh Library"
msgstr "Mesh Library à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a root node."
+msgstr "দৃশà§à¦¯ ছাড়া à¦à¦Ÿà¦¿ করা সমà§à¦­à¦¬ হবে না।"
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Tile Set à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
@@ -1707,17 +1737,19 @@ msgstr "ফাইল সংরকà§à¦·à¦¨ করà§à¦¨"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "বনà§à¦§ করার পূরà§à¦¬à§‡ পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ (সিন) সংরকà§à¦·à¦£ করবেন?"
#: editor/editor_node.cpp
msgid "Save changes the following scene(s) before opening Project Manager?"
-msgstr ""
+msgstr "পà§à¦°à¦œà§‡à¦•à§à¦Ÿ মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦° ওপেন করার পূরà§à¦¬à§‡ পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ (সিন) সংরকà§à¦·à¦£ করবেন?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"à¦à¦‡ অপশনটি অপছনà§à¦¦à¦¨à§€à§Ÿà¥¤ অনাকাঙà§à¦–িত বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক রিফà§à¦°à§‡à¦¶ à¦à¦•টি বাগ বলে বিবেচিত। দয়া করে "
+"রিপোরà§à¦Ÿ করà§à¦¨à¥¤"
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -1725,11 +1757,12 @@ msgstr "à¦à¦•টি মà§à¦–à§à¦¯ দৃশà§à¦¯ মনোনীত করà§
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr ""
+msgstr "অà§à¦¯à¦¾à¦¡-অন পà§à¦²à¦¾à¦—ইন à¦à¦¨à¦¾à¦¬à¦² করা সমà§à¦­à¦¬ হয় নি। কনফিগার পারà§à¦¸à¦¿à¦‚ ('%s') বà§à¦¯à¦°à§à¦¥ হয়েছে।"
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
+"'res://addons/%s' লোকেশনে অà§à¦¯à¦¾à¦¡-অন পà§à¦²à¦¾à¦—ইনের সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ ফাইল খà§à¦à¦œà§‡ পাওয়া যায়নি।"
#: editor/editor_node.cpp
#, fuzzy
@@ -1739,17 +1772,20 @@ msgstr "%s হতে সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ তà§à¦²à¦¤à§‡/লোডে à¦
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr ""
+msgstr "অà§à¦¯à¦¾à¦¡-অন সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ পাথ '%s' অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯à¥¤à¦à¦° বেস টাইপ à¦à¦¡à¦¿à¦Ÿà¦° পà§à¦²à¦¾à¦—ইন নয়।"
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
+"'%s' পাথ বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করে অà§à¦¯à¦¾à¦¡-অন সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ লোড করা সমà§à¦­à¦¬ হয়নি। সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿà¦Ÿà¦¿ টà§à¦² মোডে নেই।"
#: editor/editor_node.cpp
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
+"'%s' সিনটি সয়ংকà§à¦°à¦¿à¦¯à¦¼à¦­à¦¾à¦¬à§‡ ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡à¦¡ হয়েছে à¦à¦¬à¦‚ অপরিবরà§à¦¤à¦¨à§€à§Ÿà¥¤\n"
+"পরিবরà§à¦¤à¦¨à§‡à¦° জনà§à¦¯ দয়া করে à¦à¦•টি নতà§à¦¨ ইনহেরিটেড সিন তৈরি করà§à¦¨à¥¤"
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1791,12 +1827,23 @@ msgid "Switch Scene Tab"
msgstr "দৃশà§à¦¯à§‡à¦° টà§à¦¯à¦¾à¦¬ পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+#, fuzzy
+msgid "%d more files or folders"
+msgstr "%d টি অধিক ফাইল(সমূহ) বা ফোলà§à¦¡à¦¾à¦°(সমূহ)"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "%d more folders"
msgstr "%d টি অধিক ফাইল(সমূহ)"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d টি অধিক ফাইল(সমূহ) বা ফোলà§à¦¡à¦¾à¦°(সমূহ)"
+#, fuzzy
+msgid "%d more files"
+msgstr "%d টি অধিক ফাইল(সমূহ)"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "ডà§à¦• পজিশন"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1808,6 +1855,11 @@ msgid "Toggle distraction-free mode."
msgstr "বিকà§à¦·à§‡à¦ª-হীন মোড"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Add a new scene."
+msgstr "নতà§à¦¨ টà§à¦°à§à¦¯à¦¾à¦•/পথ-সমূহ যোগ করà§à¦¨à¥¤"
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "দৃশà§à¦¯"
@@ -1873,13 +1925,12 @@ msgid "TileSet.."
msgstr "TileSet (টাইল-সেট).."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "সাবেক অবসà§à¦¥à¦¾à§Ÿ যান/আনডà§"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "পà§à¦¨à¦°à¦¾à¦¯à¦¼ করà§à¦¨"
@@ -2032,7 +2083,7 @@ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোà
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "হেলà§à¦ª"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
@@ -2045,11 +2096,11 @@ msgstr "ডকà§à¦®à§‡à¦¨à§à¦Ÿà¦¸à¦®à§‚হ বনà§à¦§ করà§à¦¨"
#: editor/editor_node.cpp
msgid "Q&A"
-msgstr ""
+msgstr "Q&A"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "ইসà§à¦¯à§ টà§à¦°à§à¦¯à¦¾à¦•ার"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -2162,20 +2213,20 @@ msgid "Import"
msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "নোড"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "আউটপà§à¦Ÿ/ফলাফল"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "সংরকà§à¦·à¦£ করবেন না"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
@@ -2229,7 +2280,7 @@ msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨"
msgid "Open Script Editor"
msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
#, fuzzy
msgid "Open Asset Library"
msgstr "লাইবà§à¦°à§‡à¦°à¦¿ à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
@@ -2321,13 +2372,15 @@ msgstr "ফà§à¦°à§‡à¦® #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "লিসà§à¦Ÿ থেকে ডিভাইস সিলেকà§à¦Ÿ করà§à¦¨"
#: editor/editor_run_native.cpp
msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the export menu."
msgstr ""
+"কাংখিত পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ গà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ কোন à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ পà§à¦°à¦¿à¦¸à§‡à¦Ÿ খà§à¦à¦œà§‡ পাওয়া যায়নি।\n"
+"অনà§à¦—à§à¦°à¦¹ করে à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ মেনà§à¦¤à§‡ à¦à¦•টি সঠিক পà§à¦°à¦¿à¦¸à§‡à¦Ÿ যোগ করà§à¦¨à¥¤"
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -2391,7 +2444,7 @@ msgstr "নীচে"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(খà§à¦à¦œà§‡ পাওয়া যায়নি)"
#: editor/export_template_manager.cpp
#, fuzzy
@@ -2399,8 +2452,12 @@ msgid "(Current)"
msgstr "বরà§à¦¤à¦®à¦¾à¦¨:"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "মিরর রিটà§à¦°à¦¾à¦‡à¦­ করা হচà§à¦›à§‡, দযা করে অপেকà§à¦·à¦¾ করà§à¦¨.."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "টেমপà§à¦²à§‡à¦Ÿ ভারà§à¦¸à¦¨ '%s' রিমà§à¦­ করবেন?"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
@@ -2408,17 +2465,18 @@ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà§‡à¦° zip খোল
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "টেমপà§à¦²à§‡à¦Ÿ à¦à¦° version.txt ফরমà§à¦¯à¦¾à¦Ÿ গà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ নয়।"
#: editor/export_template_manager.cpp
msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
msgstr ""
+"টেমপà§à¦²à§‡à¦Ÿ à¦à¦° version.txt ফরমà§à¦¯à¦¾à¦Ÿ অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯à¥¤ Revision কোন কাংখিত আইডেনà§à¦Ÿà¦¿à¦«à¦¾à§Ÿà¦¾à¦° নয়।"
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "টেমপà§à¦²à§‡à¦Ÿà§‡ version.txt খà§à¦à¦œà§‡ পাওয়া যায়নি।"
#: editor/export_template_manager.cpp
#, fuzzy
@@ -2435,6 +2493,116 @@ msgid "Importing:"
msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ হচà§à¦›à§‡:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"à¦à¦‡ ভারà§à¦¸à¦¨à§‡à¦° জনà§à¦¯ কোন ডাউনলোড লিঙà§à¦• পাওয়া যায় নি। সরাসরি ডাউনলোড অফিসিয়াল "
+"রিলিজের জনà§à¦¯ পà§à¦°à¦¯à§‹à¦œà§à¦¯à¥¤"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "সমসà§à¦¯à¦¾ সমাধানে বà§à¦¯à¦°à§à¦¥à¥¤"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "সংযোগ.."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "কোন পà§à¦°à¦¤à¦¿à¦•à§à¦°à¦¿à§Ÿà¦¾ নেই।"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "রিকà§à§Ÿà§‡à¦¸à§à¦Ÿ বà§à¦¯à¦°à§à¦¥ হয়েছে।"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "লà§à¦ª পà§à¦¨à¦ƒà¦¨à¦¿à¦°à§à¦¦à§‡à¦¶ করà§à¦¨à¥¤"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "বà§à¦¯à¦°à§à¦¥:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Complete."
+msgstr "নীচে"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "সংযোগ.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Disconnected"
+msgstr "সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করà§à¦¨"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Resolving"
+msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "কাংখিত সমাধানে বà§à¦¯à¦°à§à¦¥"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "সংযোগ.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "সংযোগ.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "সংযোগ"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "নীচে"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "সংযোগ.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "SSL Handshake Error"
+msgstr "ভà§à¦²/সমসà§à¦¯à¦¾-সমূহ লোড করà§à¦¨"
+
+#: editor/export_template_manager.cpp
#, fuzzy
msgid "Current Version:"
msgstr "বরà§à¦¤à¦®à¦¾à¦¨ দৃশà§à¦¯"
@@ -2464,6 +2632,15 @@ msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ অপসারণ
msgid "Export Template Manager"
msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡"
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "বসà§à¦¤à§ অপসারণ করà§à¦¨"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "লিসà§à¦Ÿ থেকে মিরর নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨: "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
@@ -2471,29 +2648,25 @@ msgstr ""
"সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡ না!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr ""
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "'% s' তে নেভিগেট করা যাবে না কারণ à¦à¦Ÿà¦¿ ফাইল সিসà§à¦Ÿà§‡à¦®à§‡ পাওয়া যায়নি!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦² গà§à¦°à¦¿à¦¡ হিসাবে আইটেম দেখà§à¦¨"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "লিসà§à¦Ÿ হিসেবে আইটেম দেখà§à¦¨"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
"\n"
-"Source: "
-msgstr "উৎস:"
+"সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¾à¦¸: ফাইল ইমà§à¦ªà§‹à¦°à§à¦Ÿ বà§à¦¯à¦°à§à¦¥ হয়েছে। অনà§à¦—à§à¦°à¦¹ করে ফাইলটি ঠিক করà§à¦¨ à¦à¦¬à¦‚ মà§à¦¯à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦²à¦¿ পà§à¦¨à¦°à¦¾à§Ÿ "
+"ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨à¥¤"
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -2517,11 +2690,11 @@ msgstr "'%s' দৃশà§à¦¯à¦Ÿà¦¿à¦° অসংলগà§à¦¨ নিরà§à¦­à¦°à¦
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "কোন নাম বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করা হয়নি"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "বà§à¦¯à¦¬à¦¹à§ƒà¦¤ নামে অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ অকà§à¦·à¦° বিদà§à¦¯à¦®à¦¾à¦¨"
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -2555,7 +2728,7 @@ msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ à¦
#: editor/filesystem_dock.cpp
msgid "Collapse all"
-msgstr ""
+msgstr "কলাপà§à¦¸ করà§à¦¨"
#: editor/filesystem_dock.cpp
msgid "Copy Path"
@@ -2616,6 +2789,8 @@ msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
+"ফাইল সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡,\n"
+"অনà§à¦—à§à¦°à¦¹à¦ªà§‚রà§à¦¬à¦• অপেকà§à¦·à¦¾ করà§à¦¨.."
#: editor/filesystem_dock.cpp
msgid "Move"
@@ -2646,27 +2821,27 @@ msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ কà
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "ভিনà§à¦¨ মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦² à¦à¦° সাথে ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "ভিনà§à¦¨ অবজেকà§à¦Ÿ à¦à¦° সাথে ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "ভিনà§à¦¨ ভিনà§à¦¨ অবজেকà§à¦Ÿ + মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦² à¦à¦° সাথে ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "ভিনà§à¦¨ ভিনà§à¦¨ অবজেকà§à¦Ÿ + অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ à¦à¦° সাথে ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "ভিনà§à¦¨ ভিনà§à¦¨ মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦² + অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ à¦à¦° সাথে ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "ভিনà§à¦¨ ভিনà§à¦¨ অবজেকà§à¦Ÿ + মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦² + অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ à¦à¦° সাথে ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -2675,7 +2850,7 @@ msgstr "3D দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "মালà§à¦Ÿà¦¿à¦ªà¦² সিন + মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦² হিসেবে ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
@@ -2708,11 +2883,11 @@ msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "'% s' à¦à¦° জনà§à¦¯ ডিফলà§à¦Ÿ হিসাবে সেট করà§à¦¨"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr ""
+msgstr "'% s' à¦à¦° জনà§à¦¯ ডিফলà§à¦Ÿ কà§à¦²à¦¿à§Ÿà¦¾à¦° করà§à¦¨"
#: editor/import_dock.cpp
#, fuzzy
@@ -2772,8 +2947,8 @@ msgid "Remove Poly And Point"
msgstr "পলি à¦à¦¬à¦‚ বিনà§à¦¦à§ অপসারণ করà§à¦¨"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+#, fuzzy
+msgid "Create a new polygon from scratch"
msgstr "আরমà§à¦­ হতে নতà§à¦¨ polygon তৈরি করà§à¦¨à¥¤"
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2783,6 +2958,15 @@ msgid ""
"Ctrl+LMB: Split Segment.\n"
"RMB: Erase Point."
msgstr ""
+"তৈরিকৃত পলিগন à¦à¦¡à¦¿à¦Ÿ করà§à¦¨:\n"
+"à¦à¦²à¦à¦®à¦¬à¦¿: পয়েনà§à¦Ÿ মà§à¦­ করà§à¦¨à¥¤\n"
+"সিটিআরà¦à¦²+à¦à¦²à¦à¦®à¦¬à¦¿: সেগমেনà§à¦Ÿ ভাগ করà§à¦¨à¥¤\n"
+"আরà¦à¦®à¦¬à¦¿: পয়েনà§à¦Ÿ মà§à¦›à§‡ ফেলà§à¦¨à¥¤"
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "বিনà§à¦¦à§ অপসারণ করà§à¦¨"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
@@ -2929,6 +3113,57 @@ msgid "Copy Animation"
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "অংশাদি:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "পà§à¦°à¦¤à¦¿à¦²à§‡à¦ªà¦¨/পেসà§à¦Ÿ করà§à¦¨"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "গঠনবিনà§à¦¯à¦¾à¦¸"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "নতà§à¦¨ অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ তৈরি করà§à¦¨"
@@ -3105,7 +3340,7 @@ msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ.."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Free"
-msgstr ""
+msgstr "মà§à¦•à§à¦¤ করে দিন"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
@@ -3119,20 +3354,11 @@ msgstr "ফাইল"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
+msgstr "হোসà§à¦Ÿà¦¨à¦¾à¦® রিসলভ করা যায়নি:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Can't connect."
-msgstr "সংযোগ.."
+msgstr "সংযোগ তà§à¦°à§à¦Ÿà¦¿, আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à¥¤"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
@@ -3141,11 +3367,7 @@ msgstr "নোডের সাথে সংযà§à¦•à§à¦¤ করà§à¦¨:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
+msgstr "হোসà§à¦Ÿ থেকে কোন পà§à¦°à¦¤à¦¿à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾ নেই:"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
@@ -3153,44 +3375,32 @@ msgid "Request failed, return code:"
msgstr "আবেদনকৃত ফাইল ফরমà§à¦¯à¦¾à¦Ÿ/ধরণ অজানা:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
+msgstr "অনà§à¦°à§‹à¦§ বà§à¦¯à¦°à§à¦¥ হয়েছে, অধিক সংখà§à¦¯à¦• রিডাইরেকà§à¦Ÿ à¦à¦° কারণে"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr ""
+msgstr "ডাউনলোড হà§à¦¯à¦¾à¦¶ তà§à¦°à§à¦Ÿà¦¿à¦¯à§à¦•à§à¦¤, কাংখিত ফাইলটি কà§à¦·à¦¤à¦¿à¦—à§à¦°à¦¸à§à¦¤ হয়েছে।"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr ""
+msgstr "পà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr ""
+msgstr "পà§à¦°à¦¾à¦ªà§à¦¤:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed sha256 hash check"
-msgstr ""
+msgstr "sha256 হà§à¦¯à¦¾à¦¶ চেক বà§à¦¯à¦°à§à¦¥ হয়েছে"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr ""
+msgstr "অà§à¦¯à¦¾à¦¸à§‡à¦Ÿ ডাউনলোড তà§à¦°à§à¦Ÿà¦¿:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Fetching:"
-msgstr ""
+msgstr "খà§à¦à¦œà§‡ আনার চেসà§à¦Ÿà¦¾ চলছে:"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
@@ -3199,26 +3409,16 @@ msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.."
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Connecting.."
-msgstr "সংযোগ.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
-msgstr ""
+msgstr "অনিয়োজিত"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Retry"
-msgstr ""
+msgstr "পà§à¦¨à¦°à¦¾à¦¯à¦¼ চেষà§à¦Ÿà¦¾ করà§à¦¨"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
@@ -3227,23 +3427,23 @@ msgstr "নীচে"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr ""
+msgstr "à¦à¦‡ অà§à¦¯à¦¾à¦¸à§‡à¦Ÿà¦Ÿà¦¿ ইতমধà§à¦¯à§‡ ডাউনলোড হচà§à¦›à§‡!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
-msgstr ""
+msgstr "পà§à¦°à¦¥à¦®"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "prev"
-msgstr ""
+msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "next"
-msgstr ""
+msgstr "পরবরà§à¦¤à§€"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "last"
-msgstr ""
+msgstr "শেষ"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
@@ -3322,6 +3522,39 @@ msgid "Move Action"
msgstr "পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾ সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "ভারà§à¦Ÿà¦¿à¦•à§à¦¯à¦¾à¦² গাইড সরান"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "নতà§à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ তৈরি করà§à¦¨"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "চলক/ভেরিয়েবল অপসারণ করà§à¦¨"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Move horizontal guide"
+msgstr "বকà§à¦°à¦°à§‡à¦–ায় বিনà§à¦¦à§ সরান"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "নতà§à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ তৈরি করà§à¦¨"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ চাবিসমূহ অপসারণ করà§à¦¨"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "নতà§à¦¨ হরাইজনà§à¦Ÿà¦¾à¦² à¦à¦¬à¦‚ ভারà§à¦Ÿà¦¿à¦•à§à¦¯à¦¾à¦² গাইড তৈরী করà§à¦¨"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "IK চেইন সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨"
@@ -3431,7 +3664,7 @@ msgstr "পিকà§à¦¸à§‡à¦² সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° কর
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "সà§à¦®à¦¾à¦°à§à¦Ÿ সà§à¦¨à§à¦¯à¦¾à¦ªà¦¿à¦‚ বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3440,21 +3673,28 @@ msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ à¦
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "নোড অà§à¦¯à¦¾à¦¨à§à¦•রের সাথে সà§à¦¨à§à¦¯à¦¾à¦ª করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "নোড সাইডের সাথে সà§à¦¨à§à¦¯à¦¾à¦ª করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "অনà§à¦¯ নোড à¦à¦° সাথে সà§à¦¨à§à¦¯à¦¾à¦ª করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Snap to guides"
+msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª মোড:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ বসà§à¦¤à§à¦Ÿà¦¿à¦•ে à¦à¦‡ সà§à¦¥à¦¾à¦¨à§‡ আটকিয়ে রাখà§à¦¨ (সরানো সমà§à¦­à¦¬ হবেনা)।"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ বসà§à¦¤à§à¦Ÿà¦¿à¦•ে মà§à¦•à§à¦¤ করà§à¦¨ (সরানো সমà§à¦­à¦¬ হবে)।"
@@ -3507,6 +3747,11 @@ msgid "Show rulers"
msgstr "বোনà§â€Œ/হাড় দেখান"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Show guides"
+msgstr "বোনà§â€Œ/হাড় দেখান"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr "নিরà§à¦¬à¦¾à¦šà¦¨à¦•ে কেনà§à¦¦à§à¦°à§€à¦­à§‚ত করà§à¦¨"
@@ -3541,7 +3786,7 @@ msgstr "ভঙà§à¦—ি পরিষà§à¦•ার করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "মাউস পজিশন থেকে পিভট ডà§à¦°à§à¦¯à¦¾à¦— করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3550,11 +3795,11 @@ msgstr "বহিঃ-বকà§à¦°à¦°à§‡à¦–ার সà§à¦¥à¦¾à¦¨ নিরà§à¦§
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "গà§à¦°à¦¿à¦¡ সà§à¦Ÿà§‡à¦ª দà§à¦¬à¦¿à¦—à§à¦£ সংখà§à¦¯à¦• বৃদà§à¦§à¦¿ করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "গà§à¦°à¦¿à¦¡ সà§à¦Ÿà§‡à¦ª দà§à¦¬à¦¿à¦—à§à¦£ সংখà§à¦¯à¦¾à§Ÿ হà§à¦°à¦¾à¦¸ করà§à¦¨"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3633,11 +3878,11 @@ msgstr "দৃশà§à¦¯ হতে হালনাগাদ করà§à¦¨"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat0"
-msgstr ""
+msgstr "ফà§à¦²à§à¦¯à¦¾à¦Ÿ0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat1"
-msgstr ""
+msgstr "ফà§à¦²à§à¦¯à¦¾à¦Ÿ1"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3651,7 +3896,7 @@ msgstr "বহিঃ-সহজাগমন"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
-msgstr ""
+msgstr "সà§à¦®à§à¦¥ সà§à¦Ÿà§‡à¦ª"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3700,11 +3945,15 @@ msgstr "পথের বিনà§à¦¦à§ অপসারণ করà§à¦¨"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
-msgstr ""
+msgstr "বকà§à¦°à¦°à§‡à¦–ার লিনিয়ার টà§à¦¯à¦¾à¦¨à¦œà§‡à¦¨à§à¦Ÿ টগল করà§à¦¨"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Hold Shift to edit tangents individually"
-msgstr ""
+msgstr "টà§à¦¯à¦¾à¦¨à¦œà§‡à¦¨à§à¦Ÿà¦—à§à¦²à¦¿ আলাদা আলাদা ভাবে সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করার জনà§à¦¯ Shift ধরে রাখà§à¦¨à§"
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "জি আই পà§à¦°à§‹à¦¬ বেক করà§à¦¨"
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
@@ -3732,12 +3981,18 @@ msgid ""
"No OccluderPolygon2D resource on this node.\n"
"Create and assign one?"
msgstr ""
+"à¦à¦‡ নোডের মধà§à¦¯à§‡ কোন অকà§à¦²à§à¦¡à¦¾à¦° পলিগন টà§à¦¡à¦¿ রিসোরà§à¦¸ বিদà§à¦¯à¦®à¦¾à¦¨ নেই।\n"
+" নতà§à¦¨ পলিগন তৈরি করবেন?"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
msgstr "অকলà§à¦¡à¦¾à¦° (occluder) পলিগন তৈরি করà§à¦¨"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "আরমà§à¦­ হতে নতà§à¦¨ polygon তৈরি করà§à¦¨à¥¤"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "বিদà§à¦¯à¦®à¦¾à¦¨ পলিগন সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨:"
@@ -3753,62 +4008,6 @@ msgstr "কনà§à¦Ÿà§à¦°à§‹à¦² + মাউসের বাম বোতাম:
msgid "RMB: Erase Point."
msgstr "মাউসের ডান বোতাম: বিনà§à¦¦à§ মà§à¦›à§‡ ফেলà§à¦¨à¥¤"
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Remove Point from Line2D"
-msgstr "বকà§à¦°à¦°à§‡à¦–া হতে বিনà§à¦¦à§ অপসারণ করà§à¦¨"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "বকà§à¦°à¦°à§‡à¦–ায় বিনà§à¦¦à§ যোগ করà§à¦¨"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Move Point in Line2D"
-msgstr "বকà§à¦°à¦°à§‡à¦–ায় বিনà§à¦¦à§ সরান"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "বিনà§à¦¦à§à¦¸à¦®à§‚হ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "শিফট + টান: নিয়নà§à¦¤à§à¦°à¦£ বিনà§à¦¦à§à¦¸à¦®à§‚হ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "কà§à¦²à¦¿à¦•: বিনà§à¦¦à§ যোগ করà§à¦¨"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "ডান কà§à¦²à¦¿à¦•: বিনà§à¦¦à§ অপসারণ করà§à¦¨"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "বিনà§à¦¦à§ যোগ করà§à¦¨ (শূনà§à¦¯à¦¸à§à¦¥à¦¾à¦¨à§‡)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Split Segment (in line)"
-msgstr "অংশ বিভকà§à¦¤ করà§à¦¨ (বকà§à¦°à¦°à§‡à¦–ায়)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "বিনà§à¦¦à§ অপসারণ করà§à¦¨"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "মেসটি খালি!"
@@ -4001,11 +4200,11 @@ msgstr "Navigation Mesh তৈরি করà§à¦¨"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "কনফিগারেশন তৈরি করা হচà§à¦›à§‡..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "গà§à¦°à¦¿à¦¡ সাইজ হিসাব করা হচà§à¦›à§‡.."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -4019,11 +4218,11 @@ msgstr "অনà§à¦¬à¦¾à¦¦-সমà§à¦­à¦¬ শবà§à¦¦à¦®à¦¾à¦²à¦¾/বাকà§
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "কমà§à¦ªà§à¦¯à¦¾à¦•à§à¦Ÿ হাইফিলà§à¦¡ তৈরি করা হছে..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦°à¦¯à§‹à¦—à§à¦¯ পথ মà§à¦›à§‡ ফেলা হচà§à¦›à§‡..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -4047,7 +4246,7 @@ msgstr "Navigation Mesh তৈরি করà§à¦¨"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "নà§à¦¯à¦¾à¦­à¦¿à¦—েশন মà§à¦¯à¦¾à¦¶ জেনারেটর সেটআপ:"
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -4056,7 +4255,7 @@ msgstr "জà§à¦¯à¦¾à¦®à¦¿à¦¤à¦¿à¦•-আকার বিশà§à¦²à§‡à¦·à¦£ কর
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "সমà§à¦ªà¦¨à§à¦¨ হয়েছে!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4074,7 +4273,7 @@ msgstr "AABB উৎপনà§à¦¨ করà§à¦¨"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
-msgstr ""
+msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° ParticlesMaterial পà§à¦°à¦¸à§‡à¦¸ মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦²à§‡ বিনà§à¦¦à§ সà§à¦¥à¦¾à¦ªà¦¨ সমà§à¦­à¦¬"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Error loading image:"
@@ -4090,7 +4289,7 @@ msgstr "Emission Mask সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generate Visibility Rect"
-msgstr ""
+msgstr "ভিজিবিলিটি রেকà§à¦Ÿ তৈরি করà§à¦¨"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Load Emission Mask"
@@ -4137,7 +4336,7 @@ msgstr "নোডে কোনো জà§à¦¯à¦¾à¦®à¦¿à¦¤à¦¿à¦• আকার নà§
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr ""
+msgstr "'পারà§à¦Ÿà¦¿à¦•লস মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦²' টাইপের à¦à¦•টি পà§à¦°à¦¸à§‡à¦¸à¦° মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦² পà§à¦°à§Ÿà§‹à¦œà¦¨ ।"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
@@ -4181,7 +4380,7 @@ msgstr "পৃষà§à¦ à¦¤à¦² %d"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points+Normal (Directed)"
-msgstr ""
+msgstr "সারফেস পয়েনà§à¦Ÿ + নরমাল (নিরà§à¦¦à§‡à¦¶à¦¿à¦¤)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
@@ -4229,16 +4428,46 @@ msgid "Move Out-Control in Curve"
msgstr "বকà§à¦°à¦°à§‡à¦–া বহিঃ-নিয়নà§à¦¤à§à¦°à¦£à§‡ সরান"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "বিনà§à¦¦à§à¦¸à¦®à§‚হ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "শিফট + টান: নিয়নà§à¦¤à§à¦°à¦£ বিনà§à¦¦à§à¦¸à¦®à§‚হ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "কà§à¦²à¦¿à¦•: বিনà§à¦¦à§ যোগ করà§à¦¨"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "ডান কà§à¦²à¦¿à¦•: বিনà§à¦¦à§ অপসারণ করà§à¦¨"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "নিয়নà§à¦¤à§à¦°à¦£ বিনà§à¦¦à§à¦¸à¦®à§‚হ নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨ (শিফট + টান)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "বিনà§à¦¦à§ যোগ করà§à¦¨ (শূনà§à¦¯à¦¸à§à¦¥à¦¾à¦¨à§‡)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "অংশ বিভকà§à¦¤ করà§à¦¨ (বকà§à¦°à¦°à§‡à¦–ায়)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "বিনà§à¦¦à§ অপসারণ করà§à¦¨"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "বকà§à¦°à¦°à§‡à¦–া বনà§à¦§ করà§à¦¨"
@@ -4380,7 +4609,6 @@ msgstr "রিসোরà§à¦¸ লোড করà§à¦¨"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4396,6 +4624,8 @@ msgid ""
"Close and save changes?\n"
"\""
msgstr ""
+"বনà§à¦§ à¦à¦¬à¦‚ পরিবরà§à¦¤à¦¨ সংরকà§à¦·à¦£ করবেন?\n"
+"\""
#: editor/plugins/script_editor_plugin.cpp
msgid "Error while saving theme"
@@ -4423,7 +4653,22 @@ msgstr "থিম à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨.."
#: editor/plugins/script_editor_plugin.cpp
msgid " Class Reference"
-msgstr ""
+msgstr " কà§à¦²à¦¾à¦¸ রেফারেনà§à¦¸"
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "সাজান:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "উপরে যান"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "নীচে যান"
#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
@@ -4477,6 +4722,10 @@ msgstr "ডকà§à¦®à§‡à¦¨à§à¦Ÿà¦¸à¦®à§‚হ বনà§à¦§ করà§à¦¨"
msgid "Close All"
msgstr "সবগà§à¦²à¦¿ বনà§à¦§ করà§à¦¨"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "অনà§à¦¯ টà§à¦¯à¦¾à¦¬à¦—à§à¦²à¦¿ বনà§à¦§ করà§à¦¨"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "চালান"
@@ -4488,13 +4737,11 @@ msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼-সমূহ অদলবদল/à¦
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "খà§à¦à¦œà§à¦¨.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "পরবরà§à¦¤à§€ খà§à¦à¦œà§à¦¨"
@@ -4581,7 +4828,7 @@ msgstr "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ শà§à
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
-msgstr ""
+msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° ফাইল সিসà§à¦Ÿà§‡à¦® থেকে রিসোরà§à¦¸ ডà§à¦°à¦ª করা সমà§à¦­à¦¬à¥¤"
#: editor/plugins/script_text_editor.cpp
msgid "Pick Color"
@@ -4594,43 +4841,32 @@ msgstr "ছবিসমূহ রূপানà§à¦¤à¦° করা হচà§à¦›à§‡
#: editor/plugins/script_text_editor.cpp
msgid "Uppercase"
-msgstr ""
+msgstr "বড় হাতের অকà§à¦·à¦°"
#: editor/plugins/script_text_editor.cpp
msgid "Lowercase"
-msgstr ""
+msgstr "ছোট হাতের অকà§à¦·à¦°"
#: editor/plugins/script_text_editor.cpp
msgid "Capitalize"
-msgstr ""
+msgstr "বড় হাতের অকà§à¦·à¦°à§‡ পরিবরà§à¦¤à¦¨à§‡ করà§à¦¨"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "করà§à¦¤à¦¨/কাট করà§à¦¨"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "সবগà§à¦²à¦¿ বাছাই করà§à¦¨"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "উপরে যান"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "নীচে যান"
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4653,6 +4889,23 @@ msgid "Clone Down"
msgstr "কà§à¦²à§‹à¦¨ করে নীচে নিন"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "লাইন-ঠযান"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "লাইন আনফোলà§à¦¡ করà§à¦¨"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "সবগà§à¦²à¦¿ লাইন ফোলà§à¦¡ করà§à¦¨"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "সবগà§à¦²à¦¿ লাইন আনফোলà§à¦¡ করà§à¦¨"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "সিমà§à¦¬à¦² সমà§à¦ªà§‚রà§à¦£ করà§à¦¨"
@@ -4662,11 +4915,11 @@ msgstr "শেষের হোয়াইটসà§à¦ªà§‡à¦¸ ছেà¦à¦Ÿà§‡ ফ
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent To Spaces"
-msgstr ""
+msgstr "সà§à¦ªà§‡à¦¸à¦—à§à¦²à¦¿ ইনà§à¦¡à§‡à¦¨à§à¦Ÿà§‡ রূপানà§à¦¤à¦° করà§à¦¨"
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent To Tabs"
-msgstr ""
+msgstr "ইনà§à¦¡à§‡à¦¨à§à¦Ÿà¦—à§à¦²à¦¿ টà§à¦¯à¦¾à¦¬à§‡ রূপানà§à¦¤à¦° করà§à¦¨"
#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
@@ -4700,12 +4953,10 @@ msgid "Convert To Lowercase"
msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "পূরà§à¦¬à§‡ খà§à¦à¦œà§à¦¨"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨.."
@@ -4714,7 +4965,6 @@ msgid "Goto Function.."
msgstr "ফাংশনে যান.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "লাইনে যান.."
@@ -4724,7 +4974,7 @@ msgstr "পà§à¦°à¦¾à¦¸à¦™à§à¦—িক সাহাযà§à¦¯"
#: editor/plugins/shader_editor_plugin.cpp
msgid "Shader"
-msgstr ""
+msgstr "শেডার"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Constant"
@@ -4879,6 +5129,16 @@ msgid "View Plane Transform."
msgstr "পà§à¦²à§‡à¦¨-à¦à¦° রà§à¦ªà¦¾à¦¨à§à¦¤à¦° দেখà§à¦¨à¥¤"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Scaling: "
+msgstr "সà§à¦•েল/মাপ:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "অনà§à¦¬à¦¾à¦¦à¦¸à¦®à§‚হ:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "%s ডিগà§à¦°à¦¿ ঘূরà§à¦£à¦¿à¦¤ হচà§à¦›à§‡à¥¤"
@@ -4936,7 +5196,7 @@ msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° চাবি সনà§à¦¨à¦¿à¦¬à§‡à
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn"
-msgstr ""
+msgstr "অবজেকà§à¦Ÿ আà¦à¦•া হয়েছে"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -4955,7 +5215,7 @@ msgstr "পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ হাল-নাগাদ করà§
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Draw Calls"
-msgstr ""
+msgstr "ডà§à¦° কলস"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -4963,6 +5223,10 @@ msgid "Vertices"
msgstr "ভারটেকà§à¦¸"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "à¦à¦« পি à¦à¦¸"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "দরà§à¦¶à¦¨à§‡à¦° সাথে সারিবদà§à¦§ করà§à¦¨"
@@ -4995,7 +5259,17 @@ msgstr "গিজমোস"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Information"
-msgstr ""
+msgstr "তথà§à¦¯ দেখà§à¦¨"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "ফাইল"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহের আকার পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
@@ -5008,11 +5282,11 @@ msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
-msgstr ""
+msgstr "বাম দিকে ফà§à¦°à¦¿à¦²à§à¦• করà§à¦¨"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Right"
-msgstr ""
+msgstr "ডান দিকে ফà§à¦°à¦¿à¦²à§à¦• করà§à¦¨"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -5026,7 +5300,7 @@ msgstr "পিছনের/অতীতের দিকে"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Up"
-msgstr ""
+msgstr "উপরে ফà§à¦°à¦¿à¦²à§à¦• করà§à¦¨"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -5035,7 +5309,7 @@ msgstr "মাউসের চাকা নিচের দিকে চকà§à¦
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Speed Modifier"
-msgstr ""
+msgstr "ফà§à¦°à¦¿ লà§à¦• সà§à¦ªà¦¿à¦¡ মডিফায়ার"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -5136,6 +5410,11 @@ msgid "Tool Scale"
msgstr "সà§à¦•েল/মাপ:"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "পূরà§à¦£-পরà§à¦¦à¦¾ অদলবদল/টগল করà§à¦¨"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "রà§à¦ªà¦¾à¦¨à§à¦¤à¦°"
@@ -5392,11 +5671,11 @@ msgstr "অপসারণ করà§à¦¨"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "থিম à¦à¦¡à¦¿à¦Ÿ করà§à¦¨.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "থিম à¦à¦¡à¦¿à¦Ÿ করার মেনà§à¥¤"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5415,6 +5694,11 @@ msgid "Create Empty Editor Template"
msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡à¦° খালি টেমপà§à¦²à§‡à¦Ÿ তৈরি করà§à¦¨"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Create From Current Editor Theme"
+msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡à¦° খালি টেমপà§à¦²à§‡à¦Ÿ তৈরি করà§à¦¨"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "CheckBox Radioà§§"
@@ -5503,7 +5787,7 @@ msgstr "রৈখিক/লিনিয়ার"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rectangle Paint"
-msgstr ""
+msgstr "রেকà§à¦Ÿà§à¦¯à¦¾à¦™à§à¦—ল পেইনà§à¦Ÿ"
#: editor/plugins/tile_map_editor_plugin.cpp
#, fuzzy
@@ -5594,7 +5878,7 @@ msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨"
#: editor/project_export.cpp
#, fuzzy
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr "ইনপà§à¦Ÿ অপসারণ করà§à¦¨"
#: editor/project_export.cpp
@@ -5605,6 +5889,8 @@ msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ অপসারণ
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted: "
msgstr ""
+"à¦à¦‡ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ দরকারি à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦—à§à¦²à¦¿ কà§à¦·à¦¤à¦¿à¦—à§à¦°à¦¸à§à¦¥ হয়েছে অথবা খà§à¦à¦œà§‡ পাওয়া "
+"যাচà§à¦›à§‡ না: "
#: editor/project_export.cpp
#, fuzzy
@@ -5675,7 +5961,7 @@ msgstr "গঠনবিনà§à¦¯à¦¾à¦¸"
#: editor/project_export.cpp
msgid "Custom (comma-separated):"
-msgstr ""
+msgstr "কাসà§à¦Ÿà¦® (কমা দà§à¦¬à¦¾à¦°à¦¾ পৃথক করা):"
#: editor/project_export.cpp
#, fuzzy
@@ -5688,11 +5974,13 @@ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ PCK/Zip"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
-msgstr ""
+msgstr "à¦à¦‡ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ দরকারি à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦—à§à¦²à¦¿ খà§à¦à¦œà§‡ পাওয়া যাচà§à¦›à§‡ না:"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted:"
msgstr ""
+"à¦à¦‡ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ দরকারি à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦—à§à¦²à¦¿ কà§à¦·à¦¤à¦¿à¦—à§à¦°à¦¸à§à¦¥ হয়েছে অথবা খà§à¦à¦œà§‡ পাওয়া "
+"যাচà§à¦›à§‡ না:"
#: editor/project_export.cpp
#, fuzzy
@@ -5714,10 +6002,12 @@ msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
msgstr ""
+"আপনার পà§à¦°à¦œà§‡à¦•à§à¦Ÿ à¦à¦•টি খালি ফোলà§à¦¡à¦¾à¦°à§‡ তৈরি করা হবে (আপনি চাইলে à¦à¦•টি নতà§à¦¨ ফোলà§à¦¡à¦¾à¦° তৈরি "
+"করতে পারেন)।"
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
-msgstr ""
+msgstr "à¦à¦®à¦¨ à¦à¦•টি ফোলà§à¦¡à¦¾à¦° বাছাই করà§à¦¨ যেখানে 'project.godot' নামে কোন ফাইল নেই।"
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -5725,11 +6015,11 @@ msgstr "পà§à¦°à¦•লà§à¦ª ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হয়েছে
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "আপনার পà§à¦°à¦œà§‡à¦•à§à¦Ÿà¦Ÿà¦¿à¦° জনà§à¦¯ à¦à¦•টি নাম নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করà§à¦¨à¥¤"
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
@@ -5830,6 +6120,8 @@ msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
+"পà§à¦°à¦œà§‡à¦•à§à¦Ÿ রান করা সমà§à¦­à¦¬ হচà§à¦›à§‡ না: অà§à¦¯à¦¾à¦¸à§‡à¦Ÿ সমূহ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤\n"
+"ইমà§à¦ªà§‹à¦°à§à¦Ÿ শà§à¦°à§ করার জনà§à¦¯ পà§à¦°à¦œà§‡à¦•à§à¦Ÿ à¦à¦¡à¦¿à¦Ÿ করà§à¦¨à¥¤"
#: editor/project_manager.cpp
msgid "Are you sure to run more than one project?"
@@ -5844,6 +6136,8 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"ভাষা পরিবরà§à¦¤à¦¨ করা হয়েছে।\n"
+"পরবরà§à¦¤à§€à¦¤à§‡ পà§à¦°à¦œà§‡à¦•à§à¦Ÿ মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦° অথবা à¦à¦¡à¦¿à¦Ÿà¦° শà§à¦°à§ হওয়ার সময় ইউ আই পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ বà§à¦¯à¦¬à¦¹à§ƒà¦¤ হবে।"
#: editor/project_manager.cpp
msgid ""
@@ -5888,6 +6182,12 @@ msgstr "পà§à¦¨à¦°à¦¾à¦°à¦®à§à¦­ (সেঃ):"
msgid "Can't run project"
msgstr "সংযোগ.."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "কী/চাবি "
@@ -5921,10 +6221,6 @@ msgid "Add Input Action Event"
msgstr "ইনপà§à¦Ÿ অà§à¦¯à¦¾à¦•শন ইভেনà§à¦Ÿ যোগ করà§à¦¨"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -6047,17 +6343,16 @@ msgstr "গেটার (Getter) à¦à¦° বৈশিষà§à¦Ÿà§à¦¯à§‡ যà§à¦•
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
-msgstr ""
+msgstr "à¦à¦•টি সেটিং আইটেম পà§à¦°à¦¥à¦® নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨!"
#: editor/project_settings_editor.cpp
#, fuzzy
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr "পà§à¦°à¦ªà¦¾à¦°à§à¦Ÿà¦¿:"
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "সেটিংস"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "'% s' সেটিংটি অভà§à¦¯à¦¨à§à¦¤à¦°à§€à¦£, à¦à¦¬à¦‚ à¦à¦Ÿà¦¿ মোছা যাবে না।"
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6084,7 +6379,7 @@ msgstr "সেটিংস সংরকà§à¦·à¦£ সফল হয়েছে।"
#: editor/project_settings_editor.cpp
msgid "Override for Feature"
-msgstr ""
+msgstr "ফিচার ওভাররাইড"
#: editor/project_settings_editor.cpp
msgid "Add Translation"
@@ -6121,7 +6416,7 @@ msgstr "বà§à¦²à§‡à¦¨à§à¦¡-à¦à¦° সময় পরিবরà§à¦¤à¦¨ করà§
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "লোকাল ফিলà§à¦Ÿà¦¾à¦° মোড পরিবরà§à¦¤à¦¿à¦¤ হয়েছে"
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6138,7 +6433,7 @@ msgstr "পà§à¦°à¦ªà¦¾à¦°à§à¦Ÿà¦¿:"
#: editor/project_settings_editor.cpp
msgid "Override For.."
-msgstr ""
+msgstr "ওভাররাইড.."
#: editor/project_settings_editor.cpp
msgid "Input Map"
@@ -6196,7 +6491,7 @@ msgstr "বোনà§â€Œ/হাড় দেখান"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ লোকালগà§à¦²à¦¿ দেখান"
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6415,7 +6710,7 @@ msgstr "নোড(সমূহ) অপসারণ করবেন?"
#: editor/scene_tree_dock.cpp
msgid "Can not perform with the root node."
-msgstr ""
+msgstr "রà§à¦Ÿ নোডের জনà§à¦¯ পà§à¦°à¦¯à§‹à¦œà§à¦¯ নয়।"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
@@ -6549,6 +6844,16 @@ msgid "Clear a script for the selected node."
msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ নোড হতে à¦à¦•টি সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ পরিসà§à¦•ার করà§à¦¨à¥¤"
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "অপসারণ করà§à¦¨"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Local"
+msgstr "ঘটনাসà§à¦¥à¦²"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "উতà§à¦¤à¦°à¦¾à¦§à¦¿à¦•ারতà§à¦¬ পরিসà§à¦•ার করবেন? (ফেরৎ পাবেন না!)"
@@ -6566,25 +6871,31 @@ msgstr "CanvasItem দৃশà§à¦¯à¦®à¦¾à¦¨à¦¤à¦¾ টগল করà§à¦¨"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
-msgstr ""
+msgstr "নোড কনফিগারেশন সতরà§à¦•বারà§à¦¤à¦¾:"
#: editor/scene_tree_editor.cpp
msgid ""
"Node has connection(s) and group(s)\n"
"Click to show signals dock."
msgstr ""
+"à¦à¦‡ নোডের কানেকশন à¦à¦¬à¦‚ গà§à¦°à§à¦ª বিদà§à¦¯à¦®à¦¾à¦¨\n"
+"সিগনà§à¦¯à¦¾à¦² ডক দেখানোর জনà§à¦¯ কà§à¦²à¦¿à¦• করà§à¦¨à¥¤"
#: editor/scene_tree_editor.cpp
msgid ""
"Node has connections.\n"
"Click to show signals dock."
msgstr ""
+"à¦à¦‡ নোডের কানেকশন বিদà§à¦¯à¦®à¦¾à¦¨\n"
+"সিগনà§à¦¯à¦¾à¦² ডক দেখানোর জনà§à¦¯ কà§à¦²à¦¿à¦• করà§à¦¨à¥¤"
#: editor/scene_tree_editor.cpp
msgid ""
"Node is in group(s).\n"
"Click to show groups dock."
msgstr ""
+"à¦à¦‡ নোডটি à¦à¦•টি গà§à¦°à§à¦ªà§‡à¦° অনà§à¦¤à¦°à§à¦­à§à¦•à§à¦¤à¥¤\n"
+"গà§à¦°à§à¦ª ডক পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করতে কà§à¦²à¦¿à¦• করà§à¦¨à¥¤"
#: editor/scene_tree_editor.cpp
msgid "Instance:"
@@ -6600,12 +6911,16 @@ msgid ""
"Node is locked.\n"
"Click to unlock"
msgstr ""
+"নোডটি লকড।\n"
+"আনলক করতে কà§à¦²à¦¿à¦• করà§à¦¨"
#: editor/scene_tree_editor.cpp
msgid ""
"Children are not selectable.\n"
"Click to make selectable"
msgstr ""
+"চিলডà§à¦°à§‡à¦¨ নিরà§à¦¬à¦¾à¦šà¦¨à¦¯à§‹à¦—à§à¦¯ নয়।\n"
+"নিরà§à¦¬à¦¾à¦šà¦¨à¦¯à§‹à¦—à§à¦¯ করতে কà§à¦²à¦¿à¦• করà§à¦¨"
#: editor/scene_tree_editor.cpp
#, fuzzy
@@ -6626,7 +6941,7 @@ msgstr "দৃশà§à¦¯à§‡à¦° শাখা (নোডসমূহ):"
#: editor/scene_tree_editor.cpp
msgid "Node Configuration Warning!"
-msgstr ""
+msgstr "নোড কনফিগারেশন ওয়ারà§à¦¨à¦¿à¦‚!"
#: editor/scene_tree_editor.cpp
msgid "Select a Node"
@@ -6664,7 +6979,7 @@ msgstr "বেস পথ অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "à¦à¦•ই নামের ডিরেকà§à¦Ÿà¦°à¦¿ বিদà§à¦¯à¦®à¦¾à¦¨"
#: editor/script_create_dialog.cpp
#, fuzzy
@@ -6677,7 +6992,7 @@ msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨"
#: editor/script_create_dialog.cpp
msgid "Wrong extension chosen"
-msgstr ""
+msgstr "ভà§à¦² à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨ নিরà§à¦¬à¦¾à¦šà¦¿à¦¤"
#: editor/script_create_dialog.cpp
#, fuzzy
@@ -6700,11 +7015,11 @@ msgstr "সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ"
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9 and _"
-msgstr ""
+msgstr "অনà§à¦®à§‹à¦¦à¦¿à¦¤: a-z, A-Z, 0-9 à¦à¦¬à¦‚ _"
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)"
-msgstr ""
+msgstr "বিলà§à¦Ÿ ইন সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ (সিন ফাইলে)"
#: editor/script_create_dialog.cpp
#, fuzzy
@@ -6745,6 +7060,11 @@ msgid "Attach Node Script"
msgstr "নোড সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ সংযà§à¦•à§à¦¤ করà§à¦¨"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "অপসারণ করà§à¦¨"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "বাইটস:"
@@ -6766,7 +7086,7 @@ msgstr "ফাংশন:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "গà§à¦°à¦¾à¦« পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করতে তালিকা থেকে à¦à¦• বা à¦à¦•াধিক আইটেম বাছাই করà§à¦¨à¥¤"
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6801,18 +7121,6 @@ msgid "Stack Trace (if applicable):"
msgstr "পদাঙà§à¦• সà§à¦¤à§‚প করà§à¦¨ (পà§à¦°à¦¯à§‹à¦œà§à¦¯ হলে):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "রিমোট পরীকà§à¦·à¦•"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "দৃশà§à¦¯à§‡à¦° সকà§à¦°à¦¿à¦¯à¦¼ শাখা:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "রিমোট বসà§à¦¤à§à¦° পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦¸: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à¦¾à¦°"
@@ -6886,7 +7194,7 @@ msgstr "Light à¦à¦° বà§à¦¯à¦¾à¦¸à¦¾à¦°à§à¦§ পরিবরà§à¦¤à¦¨ কর
#: editor/spatial_editor_gizmos.cpp
msgid "Change AudioStreamPlayer3D Emission Angle"
-msgstr ""
+msgstr "অডিওসà§à¦Ÿà§à¦°à¦¿à¦® পà§à¦²à§‡à¦¯à¦¼à¦¾à¦° 3 ডি ইমিশন à¦à¦™à§à¦—েল পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
@@ -6922,7 +7230,7 @@ msgstr "Notifier à¦à¦° সীমা পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Particles AABB"
-msgstr ""
+msgstr "পারà§à¦Ÿà¦¿à¦•ল পরিবরà§à¦¤à¦¨ করà§à¦¨ AABB"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
@@ -6940,55 +7248,55 @@ msgstr "অবসà§à¦¥à¦¾:"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "লাইবà§à¦°à§‡à¦°à¦¿: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "জিডিনà§à¦¯à¦¾à¦Ÿà¦¿à¦­"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ convert()-ঠগিয়েছে, TYPE_* ধà§à¦°à§à¦¬à¦• বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "বিনà§à¦¯à¦¾à¦¸ জানার জনà§à¦¯ যথেষà§à¦Ÿ বাইট নেই, অথবা ভà§à¦² ফরমà§à¦¯à¦¾à¦Ÿà¥¤"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "ধাপ মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ শূনà§à¦¯!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ বিহীন সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ নিরà§à¦­à¦° নয়"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "রিসোরà§à¦¸ ফাইল ভিতà§à¦¤à¦¿à¦• নয়"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "ভà§à¦² dictionary ফরমà§à¦¯à¦¾à¦Ÿ (@path নেই)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "ভà§à¦² dictionary ফরমà§à¦¯à¦¾à¦Ÿ (@path-ঠসà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ লোড অসমà§à¦­à¦¬)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "ভà§à¦² dictionary ফরমà§à¦¯à¦¾à¦Ÿ (@path-ঠভà§à¦² সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "ভà§à¦² dictionary ফরমà§à¦¯à¦¾à¦Ÿ (ভà§à¦² subclasses)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -7003,16 +7311,26 @@ msgid "GridMap Duplicate Selection"
msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অনà§à¦²à¦¿à¦ªà¦¿ করà§à¦¨"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Grid Map"
+msgstr "গà§à¦°à¦¿à¦¡ সà§à¦¨à§à¦¯à¦¾à¦ª"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Snap View"
msgstr "শীরà§à¦· দরà§à¦¶à¦¨"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+#, fuzzy
+msgid "Previous Floor"
+msgstr "পূরà§à¦¬à§‡à¦° টà§à¦¯à¦¾à¦¬"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -7088,13 +7406,8 @@ msgstr "TileMap মà§à¦›à§‡ ফেলà§à¦¨"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤à¦¸à¦®à§‚হ"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤à¦¸à¦®à§‚হ"
+msgid "Clear Selection"
+msgstr "নিরà§à¦¬à¦¾à¦šà¦¨à¦•ে কেনà§à¦¦à§à¦°à§€à¦­à§‚ত করà§à¦¨"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7230,7 +7543,8 @@ msgid "Duplicate VisualScript Nodes"
msgstr "গà§à¦°à¦¾à¦« নোড(সমূহ) পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+#, fuzzy
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"গেটার (Getter) তৈরি করতে/নামাতে মেটা কী (Meta) চেপে রাখà§à¦¨à¥¤ জেনেরিক সিগনেচার "
"(generic signature) তৈরি করতে/নামাতে শিফট কী (Shift) চেপে রাখà§à¦¨à¥¤"
@@ -7242,7 +7556,8 @@ msgstr ""
"(generic signature) তৈরি করতে/নামাতে শিফট কী (Shift) চেপে রাখà§à¦¨à¥¤"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+#, fuzzy
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
"নোডে সাধারণ সমà§à¦ªà¦°à§à¦• (reference) তৈরি করতে/নামাতে মেটা কী (Meta) চেপে রাখà§à¦¨à¥¤"
@@ -7252,7 +7567,8 @@ msgstr ""
"নোডে সাধারণ সমà§à¦ªà¦°à§à¦• (reference) তৈরি করতে/নামাতে কনà§à¦Ÿà§à¦°à§‹à¦² কী (Ctrl) চেপে রাখà§à¦¨à¥¤"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+#, fuzzy
+msgid "Hold %s to drop a Variable Setter."
msgstr "চলক সেটার (Variable Setter) তৈরি করতে/নামাতে মেটা কী (Meta) চেপে রাখà§à¦¨à¥¤"
#: modules/visual_script/visual_script_editor.cpp
@@ -7494,13 +7810,23 @@ msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Invalid export template:\n"
+msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
-msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+msgid "Could not read boot splash image file:\n"
+msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7610,22 +7936,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "Path à¦à¦° দিক অবশà§à¦¯à¦‡ à¦à¦•টি কারà§à¦¯à¦•র Node2D à¦à¦° দিকে নিরà§à¦¦à§‡à¦¶ করাতে হবে।"
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Path à¦à¦° দিক অবশà§à¦¯à¦‡ à¦à¦•টি কারà§à¦¯à¦•র Viewport à¦à¦° দিকে নিরà§à¦¦à§‡à¦¶ করাতে হবে। সেই "
-"Viewport অবশà§à¦¯à¦‡ 'render target' মোডে নিরà§à¦§à¦¾à¦°à¦¨ করতে হবে।"
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"à¦à¦‡ sprite টি কারà§à¦¯à¦•র করতে path পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦¤à§‡ নিরà§à¦§à¦¾à¦°à¦¿à¦¤ Viewport টি অবশà§à¦¯à¦‡ 'render "
-"target' ঠনিরà§à¦§à¦¾à¦°à¦¿à¦¤ করতে হবে।"
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7694,6 +8004,15 @@ msgstr ""
"সফলà§à¦­à¦¾à¦¬à§‡ কাজ করতে CollisionShape à¦à¦° à¦à¦•টি আকৃতি পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤ অনà§à¦—à§à¦°à¦¹ করে তার জনà§à¦¯ à¦à¦•টি "
"আকৃতি তৈরি করà§à¦¨!"
+#: scene/3d/gi_probe.cpp
+#, fuzzy
+msgid "Plotting Meshes"
+msgstr "ছবিসমূহ বà§à¦²à¦¿à¦Ÿà¦¿à¦‚ (Blitting) করা হচà§à¦›à§‡"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7766,6 +8085,11 @@ msgstr "সতরà§à¦•তা!"
msgid "Please Confirm..."
msgstr "অনà§à¦—à§à¦°à¦¹ করে নিশà§à¦šà¦¿à¦¤ করà§à¦¨..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "মেথড/পদà§à¦§à¦¤à¦¿ বাছাই করà§à¦¨"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7783,6 +8107,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7817,6 +8145,66 @@ msgstr "ফনà§à¦Ÿ তà§à¦²à¦¤à§‡/লোডে সমসà§à¦¯à¦¾ হয়েà¦
msgid "Invalid font size."
msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "উৎস:"
+
+#, fuzzy
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "বকà§à¦°à¦°à§‡à¦–া হতে বিনà§à¦¦à§ অপসারণ করà§à¦¨"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "বকà§à¦°à¦°à§‡à¦–ায় বিনà§à¦¦à§ যোগ করà§à¦¨"
+
+#, fuzzy
+#~ msgid "Move Point in Line2D"
+#~ msgstr "বকà§à¦°à¦°à§‡à¦–ায় বিনà§à¦¦à§ সরান"
+
+#, fuzzy
+#~ msgid "Split Segment (in line)"
+#~ msgstr "অংশ বিভকà§à¦¤ করà§à¦¨ (বকà§à¦°à¦°à§‡à¦–ায়)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "সেটিংস"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "রিমোট পরীকà§à¦·à¦•"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "দৃশà§à¦¯à§‡à¦° সকà§à¦°à¦¿à¦¯à¦¼ শাখা:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "রিমোট বসà§à¦¤à§à¦° পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦¸: "
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤à¦¸à¦®à§‚হ"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤à¦¸à¦®à§‚হ"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Path à¦à¦° দিক অবশà§à¦¯à¦‡ à¦à¦•টি কারà§à¦¯à¦•র Viewport à¦à¦° দিকে নিরà§à¦¦à§‡à¦¶ করাতে হবে। সেই "
+#~ "Viewport অবশà§à¦¯à¦‡ 'render target' মোডে নিরà§à¦§à¦¾à¦°à¦¨ করতে হবে।"
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "à¦à¦‡ sprite টি কারà§à¦¯à¦•র করতে path পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦¤à§‡ নিরà§à¦§à¦¾à¦°à¦¿à¦¤ Viewport টি অবশà§à¦¯à¦‡ "
+#~ "'render target' ঠনিরà§à¦§à¦¾à¦°à¦¿à¦¤ করতে হবে।"
+
#~ msgid "Filter:"
#~ msgstr "ফিলà§à¦Ÿà¦¾à¦°:"
@@ -7838,9 +8226,6 @@ msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤"
#~ msgid "Removed:"
#~ msgstr "অপসারিত:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° উপ-গঠনবিনà§à¦¯à¦¾à¦¸ (subtexture) সংরকà§à¦·à¦£ অসমরà§à¦¥ হয়েছে:"
@@ -8223,9 +8608,6 @@ msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤"
#~ msgid "Cropping Images"
#~ msgstr "ছবিসমূহ ছাà¦à¦Ÿà¦¾ হচà§à¦›à§‡"
-#~ msgid "Blitting Images"
-#~ msgstr "ছবিসমূহ বà§à¦²à¦¿à¦Ÿà¦¿à¦‚ (Blitting) করা হচà§à¦›à§‡"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° ছবি সংরকà§à¦·à¦£ করা সমà§à¦­à¦¬ হচà§à¦›à§‡ না:"
@@ -8596,9 +8978,6 @@ msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤"
#~ msgid "Save Translatable Strings"
#~ msgstr "অনà§à¦¬à¦¾à¦¦-সমà§à¦­à¦¬ শবà§à¦¦à¦®à¦¾à¦²à¦¾/বাকà§à¦¯-সমূহ সংরকà§à¦·à¦£ করà§à¦¨"
-#~ msgid "Install Export Templates"
-#~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨"
-
#~ msgid "Edit Script Options"
#~ msgstr "সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ-à¦à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨"
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index 1a5a285b94..82fa7fac49 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -3,20 +3,20 @@
# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
-# Roger BR <drai_kin@hotmail.com>, 2016.
+# Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-10-11 08:26+0000\n"
-"Last-Translator: Roger BR <drai_kin@hotmail.com>\n"
+"PO-Revision-Date: 2017-11-28 03:45+0000\n"
+"Last-Translator: Roger Blanco Ribera <roger.blancoribera@gmail.com>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/"
"godot/ca/>\n"
"Language: ca\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.9-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -28,85 +28,84 @@ msgstr "Tota la Selecció"
#: editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr "Mou Afegir Clau"
+msgstr "Mou o Afegeix una Clau"
#: editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr "Canvia Transició"
+msgstr "Modifica la Transició d'Animació"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr "Canvia Transformació"
+msgstr "Modifica la Transformació de l'Animació"
#: editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr "Canvia Valor"
+msgstr "Modifica el Valor"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Change Call"
-msgstr "Canvia Crida (Call)"
+msgstr "Modifica la Crida"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr "Afegeix Pista"
+msgstr "Afegeix una Pista"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr "Duplica Claus"
+msgstr "Duplica les Claus"
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr "Mou Pista Amunt"
+msgstr "Mou la Pista Amunt"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr "Mou Pista Avall"
+msgstr "Mou la Pista Avall"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr "Treu Pista"
+msgstr "Treu la Pista"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr "Posa les Transicions a:"
+msgstr "Estableix les Transicions com :"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr "Reanomena Pista"
+msgstr "Reanomena la Pista"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr "Canvia Interpolació de Pista"
+msgstr "Modifica l'Interpolació de la Pista"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr "Canvia Valor del Mode de Pista"
+msgstr "Modifica el Valor del Mode de Pista"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Track Change Wrap Mode"
-msgstr "Canvia Valor del Mode de Pista"
+msgstr "Modifica el Valor del Mode d'Ajustament de Pista"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr "Edita Corba del Node"
+msgstr "Edita la Corba del Node"
#: editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr "Edita Corba de Selecció"
+msgstr "Edita la Corba de Selecció"
#: editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr "Esborra Claus"
+msgstr "Esborra les Claus"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Duplica la Selecció"
#: editor/animation_editor.cpp
msgid "Duplicate Transposed"
-msgstr "Duplica Transposats"
+msgstr "Duplica'l Transposat"
#: editor/animation_editor.cpp
msgid "Remove Selection"
@@ -126,11 +125,11 @@ msgstr "Activador"
#: editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr "Afegeix Clau"
+msgstr "Afegeix una Clau"
#: editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr "Mou Claus"
+msgstr "Mou les Claus"
#: editor/animation_editor.cpp
msgid "Scale Selection"
@@ -138,7 +137,7 @@ msgstr "Escala la Selecció"
#: editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr "Escala des del Cursor"
+msgstr "Escala amb el Cursor"
#: editor/animation_editor.cpp
msgid "Goto Next Step"
@@ -208,39 +207,39 @@ msgstr "Crea i Insereix"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr "Insereix Pista i Clau"
+msgstr "Insereix una Pista i una Clau"
#: editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr "Insereix Clau"
+msgstr "Insereix una Clau"
#: editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr "Canvia durada"
+msgstr "Modifica la durada"
#: editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr "Canvia bucle"
+msgstr "Modifica la repetició de l'Animació"
#: editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
-msgstr "Crea Clau de Valor Tipat"
+msgstr "Crea una Clau de Valor Tipat"
#: editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr "Insereix Animació"
+msgstr "Insereix una Animació"
#: editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr "Escala Claus"
+msgstr "Escala les Claus"
#: editor/animation_editor.cpp
msgid "Anim Add Call Track"
-msgstr "Afegeix Pista de Crida"
+msgstr "Afegeix una Pista de Crida"
#: editor/animation_editor.cpp
msgid "Animation zoom."
-msgstr "Zoom d'animació."
+msgstr "Zoom de l'animació."
#: editor/animation_editor.cpp
msgid "Length (s):"
@@ -256,7 +255,7 @@ msgstr "Pas (s):"
#: editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
-msgstr "Pas de desplaçament del cursor (s)."
+msgstr "Pas del cursor (s)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
@@ -264,19 +263,19 @@ msgstr "Activa/Desactiva el bucle de l'animació."
#: editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr "Afegeix noves pistes."
+msgstr "Afegir noves pistes."
#: editor/animation_editor.cpp
msgid "Move current track up."
-msgstr "Mou amunt la pista actual."
+msgstr "Moure amunt la pista actual."
#: editor/animation_editor.cpp
msgid "Move current track down."
-msgstr "Mou avall la pista actual."
+msgstr "Moure avall la pista actual."
#: editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr "Treu la pista seleccionada."
+msgstr "Treure la pista seleccionada."
#: editor/animation_editor.cpp
msgid "Track tools"
@@ -329,11 +328,11 @@ msgstr "Cridar Funcions en el Node \"Which\"?"
#: editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr "Treu claus invàlides"
+msgstr "Treure claus invàlides"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr "Treu pistes buides o sense resoldre"
+msgstr "Treu les pistes buides i/o sense resoldre"
#: editor/animation_editor.cpp
msgid "Clean-up all animations"
@@ -353,11 +352,11 @@ msgstr "Redimensiona Matriu"
#: editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr "Canvia Tipus de la Matriu"
+msgstr "Modifica el Tipus de la Taula"
#: editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr "Canvia Valor de la Matriu"
+msgstr "Modifica el Valor de la Taula"
#: editor/code_editor.cpp
msgid "Go to Line"
@@ -372,9 +371,8 @@ msgid "No Matches"
msgstr "Cap Coincidència"
#: editor/code_editor.cpp
-#, fuzzy
msgid "Replaced %d occurrence(s)."
-msgstr "Reemplaçades %d ocurrència/es."
+msgstr "%d ocurrència/es reemplaçades."
#: editor/code_editor.cpp
msgid "Replace"
@@ -465,6 +463,8 @@ msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
+"El mètode objectiu no s'ha trobat! Especifiqueu un mètode vàlid o adjunteu-"
+"li un Script."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
@@ -474,18 +474,18 @@ msgstr "Connecta al Node:"
#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Add"
-msgstr "Afegeix"
+msgstr "Afegir"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
#: editor/project_settings_editor.cpp
msgid "Remove"
-msgstr "Treu"
+msgstr "Treure"
#: editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr "Afegeix Argument de Crida Extra:"
+msgstr "Afegir Argument de Crida Extra:"
#: editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
@@ -504,9 +504,8 @@ msgid "Deferred"
msgstr "Diferit"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Oneshot"
-msgstr "D'un cop"
+msgstr "Un sol cop"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/export_template_manager.cpp
@@ -637,6 +636,13 @@ msgstr "Editor de Dependències"
msgid "Search Replacement Resource:"
msgstr "Cerca Recurs Reemplaçant:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Obre"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Propietaris de:"
@@ -656,7 +662,7 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "No es pot eliminar:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -664,7 +670,7 @@ msgstr "Error en carregar:"
#: editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr "No s'ha pogut carregar l'escena. Manquen dependències:"
+msgstr "No es pot carregar l'escena. Manquen dependències:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
@@ -709,6 +715,14 @@ msgstr "Esborra fitxers seleccionats?"
msgid "Delete"
msgstr "Esborra"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Modifica Clau del Diccionari"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Modifica Valor del Diccionari"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Gràcies de la part de la Comunitat del Godot!"
@@ -719,65 +733,63 @@ msgstr "Gràcies!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Col·laboradors de Godot Engine"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Project Founders"
-msgstr "Configuració del Projecte"
+msgstr "Fundadors del Projecte"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "Desenvolupador Principal"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr ""
+msgstr "Gestor De Projectes"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "Desenvolupadors"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Authors"
-msgstr "Autor:"
+msgstr "Autors"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Patrocinadors Platinum"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Patrocinadors Gold"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Mini Patrocinadors"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Donants Gold"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Donants Silver"
#: editor/editor_about.cpp
msgid "Bronze Donors"
-msgstr ""
+msgstr "Donants Bronze"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Donants"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "Llicència"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "Llicència externa"
#: editor/editor_about.cpp
msgid ""
@@ -786,212 +798,199 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"El motor Godot es recolza en una sèrie de biblioteques lliures i de codi "
+"obert, totes elles compatibles amb els termes de la llicència MIT. Tot "
+"seguit podeu trobar la llista exhaustiva de tots aquests components externs "
+"amb llurs respectius drets d'autor i termes de llicenciament."
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "Constants:"
+msgstr "Tots els Components"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "Constants:"
+msgstr "Components"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "Llicències"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "Error en obrir el paquet d'arxius. El fitxer no té el format zip."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Uncompressing Assets"
-msgstr "Sense Compressió"
+msgstr "Descomprimint Recursos"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr ""
+msgstr "Paquet instal·lat correctament!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "Èxit!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Install"
-msgstr ""
+msgstr "Instal·lar"
#: editor/editor_asset_installer.cpp
msgid "Package Installer"
-msgstr ""
+msgstr "Instal·lador de paquets"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr ""
+msgstr "Altaveus"
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
-msgstr ""
+msgstr "Afegir un efecte"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "Reanomena AutoCàrrega"
+msgstr "Reanomena Bus d'Àudio"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
-msgstr ""
+msgstr "Commuta el bus d'àudio solo"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr ""
+msgstr "Silenciar/Desilenciar Bus d'Àudio"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "Commuta els Efectes de Bypass del Bus d'Àudio"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
-msgstr ""
+msgstr "Seleccionar l'enviament del Bus d'Àudio"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "Afegir Efecte de bus d'Àudio"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "Moure Efecte de Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "Elimina Seleccionats"
+msgstr "Eliminar Efecte de Bus"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr ""
+msgstr "Bus d'Àudio, reorganitza Arrossegant i Deixant anar."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr ""
+msgstr "Solitari"
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Silencia"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr ""
+msgstr "Derivació"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus options"
-msgstr "Opcions de Depuració (Debug)"
+msgstr "Opcions del Bus"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr ""
+msgstr "Duplicar"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "Reinicia el Zoom"
+msgstr "Restablir el Volum"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "Elimina Seleccionats"
+msgstr "Elimina l'Efecte"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus"
-msgstr ""
+msgstr "Afegir Bus d'Àudio"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "El Bus Mestre no es pot pas eliminar!"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Audio Bus"
-msgstr "Elimina Disposició (Layout)"
+msgstr "Elimina Bus d'Àudio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Duplicate Audio Bus"
-msgstr "Duplica la Selecció"
+msgstr "Duplicar el Bus d'Àudio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "Reinicia el Zoom"
+msgstr "Restablir el Volum del Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Move Audio Bus"
-msgstr "Mou Afegir Clau"
+msgstr "Moure Bus d'Àudio"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
-msgstr ""
+msgstr "Desar el Disseny del Bus d'Àudio com..."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout.."
-msgstr ""
+msgstr "Ubicació del Nou Disseny..."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "Obre un Disseny de Bus d'Àudio"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "No s'ha trobat cap 'res://default_bus_layout.tres'."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Invalid file, not an audio bus layout."
-msgstr ""
-"Extensió de fitxer no vàlida.\n"
-"Utilitzeu .fnt."
+msgstr "Fitxer incorrecte. No és un disseny de bus d'àudio."
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
-msgstr ""
+msgstr "Afegir Bus"
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr ""
+msgstr "Crea un nou Disseny de Bus."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Load"
-msgstr ""
+msgstr "Carregar"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Load an existing Bus Layout."
-msgstr "Carrega un recurs des del disc i edita'l."
+msgstr "Carregar un Disseny de Bus existent."
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr ""
+msgstr "Desar com a"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "Desar el Disseny del Bus en un fitxer."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
-#, fuzzy
msgid "Load Default"
-msgstr "Predeterminat"
+msgstr "Carregar Valors predeterminats"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "Carregar el disseny del Bus predeterminat."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1030,7 +1029,7 @@ msgstr "Fora del camí dels recursos."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr "Afegeix AutoCàrrega"
+msgstr "Afegir AutoCàrrega"
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
@@ -1046,7 +1045,7 @@ msgstr "Commuta les Globals d'AutoCàrrega"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr "Mou AutoCàrrega"
+msgstr "Moure AutoCàrrega"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
@@ -1094,9 +1093,8 @@ msgid "Updating scene.."
msgstr "Actualitzant escena.."
#: editor/editor_dir_dialog.cpp
-#, fuzzy
msgid "Please select a base directory first"
-msgstr "Desa l'escena abans."
+msgstr "Elegiu primer un directori base"
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
@@ -1133,13 +1131,18 @@ msgstr "Compressió"
#: editor/editor_export.cpp platform/javascript/export/export.cpp
msgid "Template file not found:\n"
-msgstr ""
+msgstr "no s'ha trobat la Plantilla:\n"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File Exists, Overwrite?"
msgstr "Fitxer Existent, Sobreescriure?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Crea una Carpeta"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Tots Reconeguts"
@@ -1147,12 +1150,6 @@ msgstr "Tots Reconeguts"
msgid "All Files (*)"
msgstr "Tots els Fitxers (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Obre"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Obre un Fitxer"
@@ -1197,7 +1194,7 @@ msgstr "Refresca"
#: editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr "Commuta Fitxers Ocults"
+msgstr "Fitxers Ocults"
#: editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
@@ -1213,16 +1210,15 @@ msgstr "Enfoca Camí"
#: editor/editor_file_dialog.cpp
msgid "Move Favorite Up"
-msgstr "Mou Favorit Amunt"
+msgstr "Moure Favorit Amunt"
#: editor/editor_file_dialog.cpp
msgid "Move Favorite Down"
-msgstr "Mou Favorit Avall"
+msgstr "Moure Favorit Avall"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "No s'ha pogut crear la carpeta."
+msgstr "Aneu a la carpeta principal"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1230,7 +1226,7 @@ msgstr "Directoris i Fitxers:"
#: editor/editor_file_dialog.cpp
msgid "Preview:"
-msgstr "Previsualització:"
+msgstr "Vista prèvia:"
#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
#: scene/gui/file_dialog.cpp
@@ -1246,9 +1242,8 @@ msgid "ScanSources"
msgstr "Escaneja Fonts"
#: editor/editor_file_system.cpp
-#, fuzzy
msgid "(Re)Importing Assets"
-msgstr "Re-Importació"
+msgstr "(Re)Important Recursos"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -1265,7 +1260,7 @@ msgstr "Cerca Classes"
#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Top"
-msgstr ""
+msgstr "Dalt"
#: editor/editor_help.cpp editor/property_editor.cpp
msgid "Class:"
@@ -1284,84 +1279,76 @@ msgid "Brief Description:"
msgstr "Descripció breu:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Membres:"
+msgstr "Membres"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "Membres:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "Mètodes públics:"
+msgstr "Mètodes Públics"
#: editor/editor_help.cpp
msgid "Public Methods:"
msgstr "Mètodes públics:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "GUI Theme Items"
-msgstr "Elements del Tema de la GUI:"
+msgstr "Elements del Tema de la GUI"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
-msgstr "Elements del Tema de la GUI:"
+msgstr "Elements del Tema de la Interfície :"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Signals:"
msgstr "Senyals:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Funcions:"
+msgstr "Enumeracions"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations:"
-msgstr "Funcions:"
+msgstr "Enumeracions:"
#: editor/editor_help.cpp
msgid "enum "
-msgstr ""
+msgstr "enum "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "Constants:"
+msgstr "Constants"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr "Constants:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "Descripció:"
+msgstr "Descripció"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Properties"
-msgstr "Propietats de l'objecte."
+msgstr "Propietats"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Property Description:"
-msgstr "Descripció breu:"
+msgstr "Descripció de la Propietat:"
#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Aquesta proprietat no disposa de cap descripció. Podeu contribuir tot color="
+"$color][url=$url] aportant-ne una[/url][/color]!"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "Llista de mètodes:"
+msgstr "Mètodes"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1372,15 +1359,16 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Aquest mètode no disposa de cap descripció. Podeu contribuir tot color="
+"$color][url=$url] aportant-ne una[/url][/color]!"
#: editor/editor_help.cpp
msgid "Search Text"
msgstr "Cerca Text"
#: editor/editor_log.cpp
-#, fuzzy
msgid "Output:"
-msgstr " Sortida:"
+msgstr "Sortida:"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
@@ -1414,28 +1402,24 @@ msgid "Error while saving."
msgstr "Error en desar."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "No es pot operar en '..'"
+msgstr "No es pot obrir '%s' ."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "Error en desar."
+msgstr "Error en l'anàlisi de '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Inesperat final del fitxer a '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Missing '%s' or its dependencies."
-msgstr "Escena '%s' té dependències no vàlides:"
+msgstr "Falta '%s' o les seves dependències."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "Error en desar."
+msgstr "S'ha produït un error en carregar '% s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1443,16 +1427,15 @@ msgstr "Desant Escena"
#: editor/editor_node.cpp
msgid "Analyzing"
-msgstr "Analitzant"
+msgstr "S'està Analitzant"
#: editor/editor_node.cpp
msgid "Creating Thumbnail"
msgstr "Creant Miniatura"
#: editor/editor_node.cpp
-#, fuzzy
msgid "This operation can't be done without a tree root."
-msgstr "No es pot desfer aquesta acció. Vol revertir igualament?"
+msgstr "Aquesta operació no es pot fer sense cap arrel d'arbre."
#: editor/editor_node.cpp
msgid ""
@@ -1491,7 +1474,7 @@ msgstr "S'han sobreescrit els Ajustos Predeterminats de l'Editor."
#: editor/editor_node.cpp
msgid "Layout name not found!"
-msgstr "No s'ha trobat el nom de l'ajust!"
+msgstr "No s'ha trobat el nom del Disseny!"
#: editor/editor_node.cpp
msgid "Restored default layout to base settings."
@@ -1503,18 +1486,24 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Aquest recurs pertany a una escena importada, així que no és editable.\n"
+"Referiu-vos a la documentació rellevant per a la importació d'escenes."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Aquest recurs pertany a una escena instanciada o heretada.\n"
+"Els canvis efectuats no es conservaran en desar l'escena."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"En ser importat, un recurs no és editable. Canvieu-ne la configuració en el "
+"panell d'importació i abansd'importar."
#: editor/editor_node.cpp
msgid ""
@@ -1523,6 +1512,29 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"En ser una escena importada, no se'n conservaran els canvis. \n"
+"Instanciar o heretar l'escena permetria la seva modificació.\n"
+"Referiu-vos a la documentació rellevant a la importació d'escenes per a més "
+"informació."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"En ser un object remot, els canvis no es desaran.\n"
+"Referiu-vos a la documentació rellevant sobre la Depuració de codi."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Expandir tot"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Col·lapsar tot"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1530,7 +1542,7 @@ msgstr "Copia Paràmetres"
#: editor/editor_node.cpp
msgid "Paste Params"
-msgstr "Enganxa Paràmetres"
+msgstr "Enganxa els Paràmetres"
#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Paste Resource"
@@ -1557,15 +1569,14 @@ msgid "There is no defined scene to run."
msgstr "No s'ha definit cap escena per executar."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"No main scene has ever been defined, select one?\n"
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
"No s'ha definit cap escena principal. Seleccioneu-ne una.\n"
-"És possible triar-ne una altra més endavant a \"Configuració del Projecte\" "
-"en la categoria \"aplicació\"."
+"És possible triar-ne una altra des de \"Configuració del Projecte\" en la "
+"categoria \"aplicació\"."
#: editor/editor_node.cpp
msgid ""
@@ -1614,13 +1625,12 @@ msgid "Quick Open Script.."
msgstr "Obertura Ràpida d'Scripts..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Close"
-msgstr "Desa un Fitxer"
+msgstr "Desar i Tancar"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "Desar els canvis a '%s' abans de tancar?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
@@ -1628,7 +1638,7 @@ msgstr "Desa Escena com..."
#: editor/editor_node.cpp
msgid "No"
-msgstr ""
+msgstr "No"
#: editor/editor_node.cpp
msgid "Yes"
@@ -1641,19 +1651,23 @@ msgstr ""
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr ""
+msgstr "Aquesta operació no es pot dur a terme sense una escena."
#: editor/editor_node.cpp
msgid "Export Mesh Library"
msgstr "Exporta Biblioteca de Models"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Aquesta operació no es pot dur a terme sense un node arrel."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Exporta el joc de Mosaics (Tiles)"
#: editor/editor_node.cpp
msgid "This operation can't be done without a selected node."
-msgstr ""
+msgstr "Aquesta operació no es pot dur a terme sense un node seleccionat."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
@@ -1685,26 +1699,29 @@ msgstr "Voleu Sortir de l'editor?"
#: editor/editor_node.cpp
msgid "Open Project Manager?"
-msgstr ""
+msgstr "Obre el Gestor de Projectes?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Quit"
-msgstr "Desa un Fitxer"
+msgstr "Desar i Sortir"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "Desar els canvis a la(les) escena(es) següent(s) abans de Sortir?"
#: editor/editor_node.cpp
msgid "Save changes the following scene(s) before opening Project Manager?"
msgstr ""
+"Desar els canvis a la(les) següent(s) escenes abans d'obrir el Gestor de "
+"Projectes?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Aquesta opció és obsoleta. Es consideren ara errors les situacions on s'ha "
+"de forçar el refrescament. Si us plau reporteu-ho."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -1713,30 +1730,39 @@ msgstr "Tria una Escena Principal"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
msgstr ""
+"No es pot habilitar el complement a: '%s' ha fallat l'anàlisi de la "
+"configuració."
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
+"No s'ha pogut trobar el camp d'Script per al complement a: 'res: // addons /"
+"% s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Error carregant lletra."
+msgstr "Error carregant l'Script complement des del camí: '%s'."
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
msgstr ""
+"No es pot carregar l'Script complementari: El tipus base de '% s' no és pas "
+"EditorPlugin."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
+"No s'ha carregat l'Script d'addon des del camí: L'Script '% s' no és en el "
+"mode d'Eina."
#: editor/editor_node.cpp
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
+"En ser importada automàticament, l'escena '%s' no es pot modificar. Per fer-"
+"hi canvis, creeu una nova escena heretada."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1756,17 +1782,16 @@ msgid "Scene '%s' has broken dependencies:"
msgstr "Escena '%s' té dependències no vàlides:"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Clear Recent Scenes"
-msgstr "Reverteix Escena"
+msgstr "Netejar Escenes Recents"
#: editor/editor_node.cpp
msgid "Save Layout"
-msgstr "Desar Disposició (Layout)"
+msgstr "Desar Disseny"
#: editor/editor_node.cpp
msgid "Delete Layout"
-msgstr "Elimina Disposició (Layout)"
+msgstr "Elimina Disseny"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
@@ -1775,24 +1800,35 @@ msgstr "Predeterminat"
#: editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr "Canvia la pestanya d'escena"
+msgstr "Mou-te entre les pestanyes d'Escena"
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr "%d fitxer(s) o directori(s) més"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more folders"
msgstr "%d fitxer(s) més"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d fitxer(s) o directori(s) més"
+msgid "%d more files"
+msgstr "%d fitxer(s) més"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Posició del Acoblament"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
msgstr "Mode Lliure de Distraccions"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Toggle distraction-free mode."
-msgstr "Mode Lliure de Distraccions"
+msgstr "Mode Lliure de Distraccions."
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Afegeix una escena nova."
#: editor/editor_node.cpp
msgid "Scene"
@@ -1811,9 +1847,8 @@ msgid "Previous tab"
msgstr "Pestanya Anterior"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Filter Files.."
-msgstr "Filtrat Ràpid de Fitxers..."
+msgstr "Filtrat de Fitxers..."
#: editor/editor_node.cpp
msgid "Operations with scene files."
@@ -1860,13 +1895,12 @@ msgid "TileSet.."
msgstr "Joc de Mosaics (TileSet)..."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Desfés"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Refés"
@@ -1879,9 +1913,8 @@ msgid "Miscellaneous project or scene-wide tools."
msgstr "Eines vàries o d'escena."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Project"
-msgstr "Exporta Projecte"
+msgstr "Projecte"
#: editor/editor_node.cpp
msgid "Project Settings"
@@ -1905,7 +1938,7 @@ msgstr "Surt a la Llista de Projectes"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Debug"
-msgstr ""
+msgstr "Depurar"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
@@ -1960,8 +1993,8 @@ msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
msgstr ""
-"Les malles i polígons de Navegació són visibles durant l'execució del joc "
-"quan s'activa aquesta opció."
+"Aquesta opció fa visibles les malles i polígons de Navegació durant "
+"l'execució del joc."
#: editor/editor_node.cpp
msgid "Sync Scene Changes"
@@ -1990,15 +2023,14 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
-"En activar aquesta opció, els scripts, en ser desats, es recarreguen en el "
+"En activar aquesta opció, els Scripts, en ser desats, es recarreguen en el "
"joc en execució.\n"
"En usar-se remotament en un dispositiu, un sistema de fitxers en xarxa en "
"millora el rendiment."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Editor"
-msgstr "Edita"
+msgstr "Editor"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
@@ -2006,37 +2038,35 @@ msgstr "Configuració de l'Editor"
#: editor/editor_node.cpp
msgid "Editor Layout"
-msgstr "Disposició de l'Editor"
+msgstr "Disseny de l'Editor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Toggle Fullscreen"
-msgstr "Mode Pantalla completa"
+msgstr "Mode Pantalla Completa"
#: editor/editor_node.cpp editor/project_export.cpp
-#, fuzzy
msgid "Manage Export Templates"
-msgstr "Carregant Plantilles d'Exportació"
+msgstr "Gestionar Plantilles d'Exportació"
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "Ajuda"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
-msgstr ""
+msgstr "Classes"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Online Docs"
-msgstr ""
+msgstr "Documentació en línia"
#: editor/editor_node.cpp
msgid "Q&A"
-msgstr ""
+msgstr "Preguntes i Respostes"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "Seguiment d'Incidències"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -2088,7 +2118,7 @@ msgstr "Reprodueix Escena Personalitzada"
#: editor/editor_node.cpp
msgid "Spins when the editor window repaints!"
-msgstr "Gira en repintar-se la finestra de l'editor!"
+msgstr "Gira i Gira mentre l'editor es repinta!"
#: editor/editor_node.cpp
msgid "Update Always"
@@ -2100,7 +2130,7 @@ msgstr "Actualitza Canvis"
#: editor/editor_node.cpp
msgid "Disable Update Spinner"
-msgstr ""
+msgstr "Desactiva l'Indicador d'Actualització"
#: editor/editor_node.cpp
msgid "Inspector"
@@ -2140,7 +2170,7 @@ msgstr "Propietats de l'objecte."
#: editor/editor_node.cpp
msgid "Changes may be lost!"
-msgstr ""
+msgstr "Es podrien perdre els canvis!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2148,12 +2178,12 @@ msgid "Import"
msgstr "Importa"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "SistemaDeFitxers"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
-msgstr ""
+msgstr "Node"
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Sistema de Fitxers"
#: editor/editor_node.cpp
msgid "Output"
@@ -2161,7 +2191,7 @@ msgstr "Sortida"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "No Desis"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
@@ -2188,9 +2218,8 @@ msgid "Open & Run a Script"
msgstr "Obre i Executa un Script"
#: editor/editor_node.cpp
-#, fuzzy
msgid "New Inherited"
-msgstr "Nova Escena heretada..."
+msgstr "Nou Heretat"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -2198,44 +2227,39 @@ msgstr "Errors de Càrrega"
#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Select"
-msgstr ""
+msgstr "Seleccionar"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 2D Editor"
-msgstr "Obre un Directori"
+msgstr "Obre l'Editor 2D"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 3D Editor"
-msgstr "Obre un Directori"
+msgstr "Obre l'Editor 3D"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Script Editor"
-msgstr "Editor de Dependències"
+msgstr "Editor d'Scripts"
-#: editor/editor_node.cpp
-#, fuzzy
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr "Exporta Biblioteca"
+msgstr "Exportar Biblioteca de Recursos"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the next Editor"
-msgstr "Editor de Dependències"
+msgstr "Obre l'Editor Següent"
#: editor/editor_node.cpp
msgid "Open the previous Editor"
-msgstr ""
+msgstr "Obre l'Editor precedent"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
-msgstr ""
+msgstr "Creant Previsualitzacions de Malles"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
-msgstr ""
+msgstr "Miniatura.."
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
@@ -2283,9 +2307,8 @@ msgid "Frame %"
msgstr "% del Fotograma"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "% del Fotograma Fix"
+msgstr "Fotograma de Física %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2305,13 +2328,15 @@ msgstr "Fotograma núm.:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Seleccionar un dispositiu de la llista"
#: editor/editor_run_native.cpp
msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the export menu."
msgstr ""
+"No s'ha trobat cap patró d'exportació executable per aquesta plataforma. \n"
+"Afegiu un patró predeterminat en el menú d'exportació."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -2323,7 +2348,7 @@ msgstr "Ja hi ha un escena editada."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr "No s'ha pogut instanciar l'script:"
+msgstr "No s'ha pogut instanciar l'Script:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
@@ -2331,7 +2356,7 @@ msgstr "Podria mancar la paraula clau 'tool'?"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
-msgstr "No s'ha pogut executar l'script:"
+msgstr "No s'ha pogut executar l'Script:"
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
@@ -2355,32 +2380,35 @@ msgstr "Importa des del Node:"
#: editor/export_template_manager.cpp
msgid "Re-Download"
-msgstr ""
+msgstr "Tornar a Descarregar"
#: editor/export_template_manager.cpp
msgid "Uninstall"
-msgstr ""
+msgstr "Desinstal·lar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "(Installed)"
-msgstr "Instància"
+msgstr "(Instal·lat)"
#: editor/export_template_manager.cpp
msgid "Download"
-msgstr ""
+msgstr "Descarregar"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(Mancant)"
#: editor/export_template_manager.cpp
msgid "(Current)"
-msgstr ""
+msgstr "(Actual)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "S'estan buscant rèpliques..."
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "Eliminar la versió \"%s\" de la plantilla ?"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
@@ -2388,60 +2416,159 @@ msgstr "No s'ha pogut obrir el zip amb les plantilles d'exportació."
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "El format de version.txt dins de les plantilles no és vàlid."
#: editor/export_template_manager.cpp
msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
msgstr ""
+"El format de version.txt dins les plantilles no és vàlid. \"Revision\" no és "
+"un indentificador vàlid."
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "No s'ha trobat cap version.txt dins les plantilles."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for templates:\n"
-msgstr "Error en desar atles:"
+msgstr "Error en crear el camí per a les plantilles:\n"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Extracting Export Templates"
-msgstr "Carregant Plantilles d'Exportació"
+msgstr "Extraient Plantilles d'Exportació"
#: editor/export_template_manager.cpp
msgid "Importing:"
msgstr "Importació:"
#: editor/export_template_manager.cpp
-#, fuzzy
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"No s'ha trobat cap enllaç de descàrrega per a aquesta versió. Les "
+"descàrregues directes només són disponibles per a versions oficials."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "No es pot resoldre."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "No es pot connectar.."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Cap resposta."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Ha fallat la sol·licitud."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Bucle de redirecció."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Ha fallat:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "No es pot escriure el fitxer."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Descàrrega Completa."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Error en la sol·licitud de l'url: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Connexió amb la Rèplica..."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Desconnectat"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "s'està resolent"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "No es pot resoldre"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Connexió en marxa..."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "No es pot connectar"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Connectat"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Sol·licitud en marxa..."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "S'esta descarrengant"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Error en la connexió"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Error en la conformitat de la connexió SSL"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
-msgstr "Versió:"
+msgstr "Versió Actual:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Installed Versions:"
-msgstr "Connectors Instal·lats:"
+msgstr "Versions instal·lades:"
#: editor/export_template_manager.cpp
msgid "Install From File"
-msgstr ""
+msgstr "Instal·lar des d'un Fitxer"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove Template"
-msgstr "Treu la Selecció"
+msgstr "Eliminar Plantilla"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Select template file"
-msgstr "Esborra fitxers seleccionats?"
+msgstr "Selecciona fitxer de plantilla"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Export Template Manager"
-msgstr "Carregant Plantilles d'Exportació"
+msgstr "Gestor de Plantilles d'Exportació"
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Descarrega plantilles"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Selecciona una rèplica: "
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
@@ -2450,106 +2577,92 @@ msgstr ""
"tipus de fitxers!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr ""
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "No es pot accedir a '%s'. No es troba en el sistema de fitxers!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Veure com a graella de miniatures"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Veure com a llista"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
"\n"
-"Source: "
-msgstr "Lletra:"
+"Estat: No s'ha pogut importar. Corregeixi el fitxer i torni a importar."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move/rename resources root."
-msgstr "No es pot carregar/processar la lletra."
+msgstr "No es pot moure/reanomenar l'arrel dels recursos."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move a folder into itself.\n"
-msgstr "No es pot importar un fitxer dins de si mateix:"
+msgstr "No es pot moure un directori dins si mateix:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "Error en carregar:"
+msgstr "Error en moure:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "Escena '%s' té dependències no vàlides:"
+msgstr "No s'han pogut actualitzar les dependències:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "Manca Nom"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "El nom conté caràcters que no són vàlids"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "No name provided."
-msgstr "Renomena o Mou..."
+msgstr "Manca Nom."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "Caràcters vàlids:"
+msgstr "El Nom conté caràcters que no són vàlids."
#: editor/filesystem_dock.cpp
msgid "A file or folder with this name already exists."
-msgstr ""
+msgstr "Ja existeix un Fitxer o Directori amb aquest nom."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Reanomena Variable"
+msgstr "Reanomenant fitxer:"
#: editor/filesystem_dock.cpp
msgid "Renaming folder:"
-msgstr ""
+msgstr "Reanomenant directori:"
#: editor/filesystem_dock.cpp
msgid "Expand all"
-msgstr ""
+msgstr "Expandir tot"
#: editor/filesystem_dock.cpp
msgid "Collapse all"
-msgstr ""
+msgstr "Col·lapsar tot"
#: editor/filesystem_dock.cpp
msgid "Copy Path"
msgstr "Copia Camí"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Rename.."
-msgstr "Renomena o Mou..."
+msgstr "Reanomenar.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
-msgstr "Mou cap a..."
+msgstr "Moure cap a..."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "Crea una Carpeta"
+msgstr "Nou Directori.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2581,7 +2694,7 @@ msgstr "ReAnalitza Sistema de Fitxers"
#: editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
-msgstr "Canvia l'estat del directori a Preferit"
+msgstr "Modifica l'estat del directori com a Favorit"
#: editor/filesystem_dock.cpp
msgid "Instance the selected scene(s) as child of the selected node."
@@ -2591,66 +2704,64 @@ msgstr "Instancia les escenes seleccionades com a filles del node seleccionat."
msgid ""
"Scanning Files,\n"
"Please Wait.."
-msgstr ""
+msgstr "Analitzant Fitxers..."
#: editor/filesystem_dock.cpp
msgid "Move"
-msgstr "Mou"
+msgstr "Moure"
#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Rename"
-msgstr ""
+msgstr "Reanomenar"
#: editor/groups_editor.cpp
msgid "Add to Group"
-msgstr "Afegeix al Grup"
+msgstr "Afegir al Grup"
#: editor/groups_editor.cpp
msgid "Remove from Group"
-msgstr "Treu del Grup"
+msgstr "Treure del Grup"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import as Single Scene"
-msgstr "Important Escena..."
+msgstr "Importar com a Única Escena"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr ""
+msgstr "Importació amb Animacions Separades"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "Importar Materials Separadament"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "Importar Objectes Separadament"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "Importar Objectes+Materials Separadament"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "Importar Objectes+Animacions Separadament"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "Importar Materials+Animacions Separadament"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "Importar Objectes+Materials+Animacions Separadament"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import as Multiple Scenes"
-msgstr "Importa Escena 3D"
+msgstr "Importa en Múltiples Escenes"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "Importar com a Múltiples Escenes+Materials"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
@@ -2667,15 +2778,15 @@ msgstr "Executant Script Personalitzat..."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
-msgstr "No s'ha pogut carregar l'script de post-importació:"
+msgstr "No s'ha pogut carregar l'Script de post-importació:"
#: editor/import/resource_importer_scene.cpp
msgid "Invalid/broken script for post-import (check console):"
-msgstr "L'script de post-importació no és vàlid (comprova el terminal):"
+msgstr "L'Script de post-importació no és vàlid (comprova el terminal):"
#: editor/import/resource_importer_scene.cpp
msgid "Error running post-import script:"
-msgstr "Error en l'execució de l'script de post-importació:"
+msgstr "Error en l'execució de l'Script de post-importació:"
#: editor/import/resource_importer_scene.cpp
msgid "Saving.."
@@ -2683,72 +2794,68 @@ msgstr "Desant..."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "Establir com a valor Predeterminat per a '%s'"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr ""
+msgstr "Neteja el valor Predeterminat de '%s'"
#: editor/import_dock.cpp
-#, fuzzy
msgid " Files"
-msgstr "Fitxer:"
+msgstr " Fitxers"
#: editor/import_dock.cpp
-#, fuzzy
msgid "Import As:"
-msgstr "Importa"
+msgstr "Importar com a:"
#: editor/import_dock.cpp editor/property_editor.cpp
msgid "Preset.."
-msgstr ""
+msgstr "Configuració.."
#: editor/import_dock.cpp
-#, fuzzy
msgid "Reimport"
-msgstr "ReImporta"
+msgstr "ReImportar"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
-msgstr ""
+msgstr "Establir MultiNode"
#: editor/node_dock.cpp
msgid "Groups"
-msgstr ""
+msgstr "Grups"
#: editor/node_dock.cpp
msgid "Select a Node to edit Signals and Groups."
-msgstr ""
+msgstr "Seleccioneu un Node per editar Senyals i Grups."
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Poly"
-msgstr ""
+msgstr "Crea Polígon"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly"
-msgstr ""
+msgstr "Edita Polígon"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Insert Point"
-msgstr ""
+msgstr "Insereix un Punt"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr ""
+msgstr "Edita el Polígon (Elimina un Punt)"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Remove Poly And Point"
-msgstr ""
+msgstr "Elimina el Polígon i el Punt"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr ""
+msgid "Create a new polygon from scratch"
+msgstr "Crea un Polígon nou del no-res"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2757,467 +2864,483 @@ msgid ""
"Ctrl+LMB: Split Segment.\n"
"RMB: Erase Point."
msgstr ""
+"Edita un Polígon existent:\n"
+"Clic Esquerra: Mou un Punt.\n"
+"Ctrl+Clic Esquerra: Divideix un Segment.\n"
+"Clic Dreta: Elimina un Punt."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Elimina els Punts"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr ""
+msgstr "Reproducció Automàtica"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr ""
+msgstr "Nom de la Nova Animació:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
-msgstr ""
+msgstr "Nova Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr ""
+msgstr "Modifica el Nom de l'Animació:"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Delete Animation?"
-msgstr "Animació d'Escenes 3D"
+msgstr "Eliminar l'Animació?"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr ""
+msgstr "Eliminar l'Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr ""
+msgstr "ERROR: El Nom de l'Animació no és vàlid!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr ""
+msgstr "ERROR: Ja existeix aquest nom d'Animació!"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr ""
+msgstr "Reanomenar Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr ""
+msgstr "Afegir Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
-msgstr ""
+msgstr "Mesclar Següent Canviat"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
-msgstr ""
+msgstr "Modifica el Temps de Mescla"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr ""
+msgstr "Carrega l'Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr ""
+msgstr "Duplica l'Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr ""
+msgstr "ERROR: Cap animació per copiar!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
-msgstr ""
+msgstr "ERROR: Cap recurs d'animació al porta-retalls!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
-msgstr ""
+msgstr "Animació Enganxada"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr ""
+msgstr "Enganxa l'Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr ""
+msgstr "ERROR: Cap animació per editar!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
msgstr ""
+"Reprodueix enrera l'animació seleccionada des de la posició actual. (A)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
-msgstr ""
+msgstr "Reprodueix enrera l'animació seleccionada des del final. (Maj+A)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Stop animation playback. (S)"
-msgstr ""
+msgstr "Aturar la reproducció de l'animació. (S)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
-msgstr ""
+msgstr "Reproduir l'animació seleccionada des de l'inici. (Maj+D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
-msgstr ""
+msgstr "Reproduir l'animació seleccionada des de la posició actual. (D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
-msgstr ""
+msgstr "Posició de l'Animació (en segons)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
-msgstr ""
+msgstr "Escalar globalment la reproducció de l'animació pel node."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create new animation in player."
-msgstr ""
+msgstr "Crea una nova animació en el reproductor."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load animation from disk."
-msgstr ""
+msgstr "Carregar un animació del del disc."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load an animation from disk."
-msgstr ""
+msgstr "Carregar una animació des del disc."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save the current animation"
-msgstr ""
+msgstr "Desar l'animació actual"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
-msgstr ""
+msgstr "Mostrar la llista d'animacions en el reproductor."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr ""
+msgstr "Reproducció Automàtica en Carregar"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Target Blend Times"
-msgstr ""
+msgstr "Edita els Temps de Mescla dels Objectius"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr ""
+msgstr "Eines d'Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Copy Animation"
+msgstr "Copiar l'Animació"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
+msgid "Enable Onion Skinning"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Animation Name:"
+#, fuzzy
+msgid "Directions"
+msgstr "Seccions:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Enganxa"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Característiques"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Crea una Nova Animació"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Nom de l'Animació:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Error!"
-msgstr ""
+msgstr "Error !"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
-msgstr ""
+msgstr "Temps de mescla:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
-msgstr ""
+msgstr "Següent (Enviar a la Cua):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
-msgstr ""
+msgstr "Temps de mescla entre Animacions"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Animation"
-msgstr ""
+msgstr "Animació"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "New name:"
-msgstr ""
+msgstr "Nou nom:"
#: editor/plugins/animation_tree_editor_plugin.cpp
-#, fuzzy
msgid "Edit Filters"
-msgstr "Filtres"
+msgstr "Edita Filtres"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Scale:"
-msgstr ""
+msgstr "Escala:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade In (s):"
-msgstr ""
+msgstr "Fosa d'entrada (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade Out (s):"
-msgstr ""
+msgstr "Fosa de sortida (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend"
-msgstr ""
+msgstr "Mescla"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix"
-msgstr ""
+msgstr "Mesclar"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr ""
+msgstr "Reinici automàtic :"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Restart (s):"
-msgstr ""
+msgstr "Reinici (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Random Restart (s):"
-msgstr ""
+msgstr "Reinici aleatori (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Start!"
-msgstr ""
+msgstr "Inicia!"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Amount:"
-msgstr ""
+msgstr "Quantitat:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend:"
-msgstr ""
+msgstr "Mescla:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend 0:"
-msgstr ""
+msgstr "Mescla 0:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend 1:"
-msgstr ""
+msgstr "Mescla 1:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "X-Fade Time (s):"
-msgstr ""
+msgstr "Durada de la fosa (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Current:"
-msgstr ""
+msgstr "Actual:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Add Input"
-msgstr ""
+msgstr "Afegeix una Entrada"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Clear Auto-Advance"
-msgstr ""
+msgstr "Neteja l'Autoavenç"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Set Auto-Advance"
-msgstr ""
+msgstr "Estableix l'Autoavenç"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Delete Input"
-msgstr ""
+msgstr "Elimina l'Entrada"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is valid."
-msgstr ""
+msgstr "L'arbre d'animació és vàlid."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is invalid."
-msgstr ""
+msgstr "L'arbre d'animació no és vàlid."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation Node"
-msgstr ""
+msgstr "Node d'Animació"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
-msgstr ""
+msgstr "Node unSolCop"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix Node"
-msgstr ""
+msgstr "Node de Mescla"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend2 Node"
-msgstr ""
+msgstr "Node Mescla2"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend3 Node"
-msgstr ""
+msgstr "Node Mescla3"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend4 Node"
-msgstr ""
+msgstr "Node Mescla4"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr ""
+msgstr "Node escalaTemps"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeSeek Node"
-msgstr ""
+msgstr "Node cercaTemps"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "Node de Transició"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
-msgstr ""
+msgstr "Importa animacions..."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr ""
+msgstr "Edita els filtres de Node"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Filters.."
-msgstr ""
+msgstr "Filtres..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Free"
-msgstr ""
+msgstr "Allibera"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Contents:"
-msgstr "Constants:"
+msgstr "Continguts:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "View Files"
-msgstr "Fitxer:"
+msgstr "Veure Fitxers"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
+msgstr "No es pot resoldre l'amfitrió:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
-msgstr ""
+msgstr "S'ha produït un error en la connexió. Torneu-ho a provar."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Can't connect."
-msgstr "Connecta.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Can't connect to host:"
-msgstr "Connecta al Node:"
+msgstr "No es pot connectar a l'amfitrió:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
-msgstr ""
+msgstr "Cap resposta de l'amfitrió:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Request failed, return code:"
-msgstr "Format de fitxer desconegut:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
+msgstr "Ha fallat la sol·licitud, codi de devolució:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
+msgstr "Ha fallat la sol·licitud. Massa redireccionaments"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr ""
+msgstr "Error en la descàrrega (hash incorrecte). El fitxer fou manipulat."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr ""
+msgstr "Esperat:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr ""
+msgstr "Rebut:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed sha256 hash check"
-msgstr ""
+msgstr "Ha fallat la comprovació del hash sha256"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr ""
+msgstr "Error en la descàrrega de l'Actiu:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Fetching:"
-msgstr ""
+msgstr "Recollida:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Resolving.."
-msgstr "Desant..."
+msgstr "s'està resolent.."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Connecting.."
-msgstr "Connecta.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "Provant"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
-msgstr "Error en desar recurs!"
+msgstr "Error en la sol·licitud"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
-msgstr ""
+msgstr "Inactiu"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Retry"
-msgstr ""
+msgstr "Torneu a provar"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Download Error"
-msgstr "Errors de Càrrega"
+msgstr "Error en la Descàrrega"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr ""
+msgstr "Ja s'està baixant aquest actiu!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
-msgstr ""
+msgstr "Inici"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "prev"
-msgstr ""
+msgstr "anterior"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "next"
-msgstr ""
+msgstr "següent"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "last"
-msgstr ""
+msgstr "darrer"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
@@ -3226,7 +3349,7 @@ msgstr "Tot"
#: editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_settings_editor.cpp
msgid "Plugins"
-msgstr ""
+msgstr "Connectors"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Sort:"
@@ -3263,89 +3386,119 @@ msgstr "Arxiu ZIP d'Actius"
#: editor/plugins/camera_editor_plugin.cpp
msgid "Preview"
-msgstr ""
+msgstr "Previsualització"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
-msgstr ""
+msgstr "Configura l'Alineament"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Offset:"
-msgstr ""
+msgstr "òfset de la graella:"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Step:"
-msgstr ""
+msgstr "Pas de la Graella:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Offset:"
-msgstr ""
+msgstr "òfset de la Rotació:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Step:"
-msgstr ""
+msgstr "Pas de la Rotació:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Pivot"
-msgstr ""
+msgstr "Mou el Pivot"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Action"
-msgstr ""
+msgstr "Mou l'Acció"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Mou la guia vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Crea una nova guia vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Elimina la guia vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Mou la guia horitzontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Crea una nova guia horitzontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Elimina la guia horitzontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Crea una guia horitzontal i vertical noves"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
-msgstr ""
+msgstr "Edita la Cadena CI"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit CanvasItem"
-msgstr ""
+msgstr "Modifica el elementCanvas"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Anchors only"
-msgstr ""
+msgstr "Només Ancoratges"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors and Margins"
-msgstr ""
+msgstr "Modifica Ancoratges i Marges"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
-msgstr ""
+msgstr "Modifica Ancoratges"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
-msgstr ""
+msgstr "Enganxa Positura"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Select Mode"
-msgstr ""
+msgstr "Mode de selecció"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
-msgstr ""
+msgstr "Arrossega: gira"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+Drag: Move"
-msgstr ""
+msgstr "Alt+Arrosegar: Mou"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
msgstr ""
+"Premeu 'v' per canviar el Pivot, 'Maj+v' per arrosegar el Pivot (mentre es "
+"mou)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+RMB: Depth list selection"
-msgstr ""
+msgstr "Alt+Clic Dret: Selecció detallada per llista"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Mode"
-msgstr ""
+msgstr "Mode de moviment"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate Mode"
-msgstr ""
+msgstr "Mode de Rotació"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3353,462 +3506,421 @@ msgid ""
"Show a list of all objects at the position clicked\n"
"(same as Alt+RMB in select mode)."
msgstr ""
+"Mostra la llista de tots els objectes en la posició clicada\n"
+"(Tal com Alt+Clic Dreta en el mode de Selecció)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
-msgstr ""
+msgstr "Clica per modificar el pivot rotacional de l'objecte."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan Mode"
-msgstr ""
+msgstr "Mode d'Escombratge lateral"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggles snapping"
-msgstr "Commuta el punt d'Interrupció"
+msgstr "Act/Desactiva Acoblament"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Use Snap"
-msgstr ""
+msgstr "Alinea"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snapping options"
-msgstr "Opcions d'Animació"
+msgstr "Opcions d'Acoblament"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to grid"
-msgstr ""
+msgstr "Alinea-ho amb la graella"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
-msgstr ""
+msgstr "Rotació alineada"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap..."
-msgstr ""
+msgstr "Configura l'Alineament..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
-msgstr ""
+msgstr "Alineament Relatiu"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr ""
+msgstr "Alinea-ho amb els Pixels"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "Alineament intel·ligent"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to parent"
-msgstr ""
+msgstr "Alinea-ho amb el Pare"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "Alinea-ho amb el node d'ancoratge"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "Alinea-ho amb els costats del node"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "Alinea-ho amb altres nodes"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "Alinea-ho amb les guies"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
-msgstr ""
+msgstr "Immobilitza l'Objecte."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
-msgstr ""
+msgstr "Allibera l'Objecte."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
-msgstr ""
+msgstr "Impossibilita la selecció dels nodes fills."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Restores the object's children's ability to be selected."
-msgstr ""
+msgstr "Permet la selecció de nodes fills."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make Bones"
-msgstr ""
+msgstr "Crea els ossos"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
-msgstr ""
+msgstr "Esborra els Ossos"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Bones"
-msgstr ""
+msgstr "Mostra els Ossos"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr ""
+msgstr "Crea una cadena CI"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
-msgstr ""
+msgstr "Esborra la cadena CI"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View"
-msgstr ""
+msgstr "Vista"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Show Grid"
-msgstr ""
+msgstr "Mostra la graella"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show helpers"
-msgstr ""
+msgstr "Mostrar els Ajudants"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show rulers"
-msgstr ""
+msgstr "Mostra els regles"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Mostra les guies"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
-msgstr ""
+msgstr "Centra la Selecció"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Frame Selection"
-msgstr ""
+msgstr "Enquadra la Selecció"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Desar Disposició (Layout)"
+msgstr "Desar Disseny"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
-msgstr ""
+msgstr "Insereix Claus"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key"
-msgstr ""
+msgstr "Insereix una clau"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr ""
+msgstr "Insereix una Clau (Pistes existents)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
-msgstr ""
+msgstr "Còpia la Postura"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr ""
+msgstr "Reestableix la Postura"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "Arrossega el pivot des de l la posició del ratolí"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "Treu Senyal"
+msgstr "Estableix el pivot a la posició del ratolí"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Multiplica l'increment de la graella per 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "Divideix l'increment de la graella per 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
-msgstr ""
+msgstr "Afegeix %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Adding %s..."
-msgstr ""
+msgstr "Afegint %s..."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Create Node"
-msgstr ""
+msgstr "Crea un Node"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Error instancing scene from %s"
-msgstr ""
+msgstr "Error en instanciar l'escena des de %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "OK :("
-msgstr ""
+msgstr "Buenu, pos molt bé, pos adiós... :("
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
-msgstr ""
+msgstr "No hi ha cap node Pare per instanciar-li un fill."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
-msgstr ""
+msgstr "Aquesta operació requereix un únic node seleccionat."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change default type"
-msgstr "Canvia Tipus de la Matriu"
+msgstr "Modifica el tipus per defecte"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Drag & drop + Shift : Add node as sibling\n"
"Drag & drop + Alt : Change node type"
msgstr ""
+"Arrossegar i deixar anar + Maj: Afegeix un node com a germà\n"
+"Arrossegar i deixar anar + Maj: Canvia el tipus del node"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Poly3D"
-msgstr ""
+msgstr "Crea un Poly3D"
#: editor/plugins/collision_shape_2d_editor_plugin.cpp
msgid "Set Handle"
-msgstr ""
+msgstr "Estableix la Nansa"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove item %d?"
-msgstr ""
+msgstr "Elimina l'element %d?"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Add Item"
-msgstr ""
+msgstr "Afegeix un Element"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove Selected Item"
-msgstr ""
+msgstr "Elimina l'Element Seleccionat"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import from Scene"
-msgstr ""
+msgstr "Importa des de l'Escena"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Update from Scene"
-msgstr ""
+msgstr "Actualitza des de l'Escena"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat0"
-msgstr ""
+msgstr "Flat0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat1"
-msgstr ""
+msgstr "Flat1"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
-msgstr "Escala la Selecció"
+msgstr "Entrada Lenta"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Ease out"
-msgstr ""
+msgstr "Sortida Lenta"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
-msgstr ""
+msgstr "pas de Suavització"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Point"
-msgstr ""
+msgstr "Modifica el Punt de la Corba"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Tangent"
-msgstr ""
+msgstr "Modifica la Tangent de la Corba"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Load Curve Preset"
-msgstr "Errors de Càrrega"
+msgstr "Carrega un ajustament per la Corba"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Add point"
-msgstr "Afegeix Senyal"
+msgstr "Afegeix un punt"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove point"
-msgstr "Treu Senyal"
+msgstr "Elimina el punt"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Left linear"
-msgstr "Lineal"
+msgstr "Lineal esquerra"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Right linear"
-msgstr ""
+msgstr "Lineal dreta"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Load preset"
-msgstr "Errors de Càrrega"
+msgstr "Carrega un ajustament"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove Curve Point"
-msgstr "Treu Senyal"
+msgstr "Elimina un punt de la Corba"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
-msgstr ""
+msgstr "Tangent Lineal"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Hold Shift to edit tangents individually"
-msgstr ""
+msgstr "Prem Maj. per editar les tangents individualment"
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "Calcula la Sonda d' IG"
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
-msgstr ""
+msgstr "Afegeix/Elimina un Punt en la Rampa de Color"
#: editor/plugins/gradient_editor_plugin.cpp
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Modify Color Ramp"
-msgstr ""
+msgstr "Modifica la Rampa de Color"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
-msgstr ""
+msgstr "Element %d"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Items"
-msgstr ""
+msgstr "Elements"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item List Editor"
-msgstr ""
+msgstr "Editor de Llistes d'Elements"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid ""
"No OccluderPolygon2D resource on this node.\n"
"Create and assign one?"
msgstr ""
+"No s'ha trobat cap recurs de tipus OccluderPolygon2D en aquest node.\n"
+"Vol Crear i assignar-ne un ara?"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
-msgstr ""
+msgstr "Crea un Polígon Oclusor"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Crea un nou Polígon del no-res."
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
-msgstr ""
+msgstr "Edita un polígon existent:"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "LMB: Move Point."
-msgstr ""
+msgstr "Clic Esquerra: Mou un Punt."
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Ctrl+LMB: Split Segment."
-msgstr ""
+msgstr "Ctrl + Clic Esquerra: Divideix el Segment."
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "RMB: Erase Point."
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "Vés a la Línia"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
+msgstr "Clic Dret: Eliminar un Punt."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
-msgstr ""
+msgstr "La malla és buida!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
-msgstr ""
+msgstr "Crea un Cos Estàtic a partir d'una malla de triangles"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Convex Body"
-msgstr ""
+msgstr "Crea un Cos Estàtic Convex"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "This doesn't work on scene root!"
-msgstr ""
+msgstr "No es pot executar en una escena arrel!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Shape"
-msgstr ""
+msgstr "Crea un forma amb una malla de triangles"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Shape"
-msgstr ""
+msgstr "Crea una Forma Convexa"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Navigation Mesh"
-msgstr ""
+msgstr "Crea un malla de Navegació"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
-msgstr ""
+msgstr "MeshInstance manca d'una Malla!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh has not surface to create outlines from!"
-msgstr ""
+msgstr "La Malla manca d'una superfície on delinear-hi els contorns!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Could not create outline!"
-msgstr ""
+msgstr "No es pot crear el contorn!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline"
-msgstr ""
+msgstr "Crea el Contorn"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh"
@@ -3816,444 +3928,467 @@ msgstr "Malla"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Body"
-msgstr ""
+msgstr "Crea un Cos Estàtic a partir d'una malla de triangles"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Static Body"
-msgstr ""
+msgstr "Crea un Cos Estàtic Convex"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Collision Sibling"
-msgstr ""
+msgstr "Crea una Col·lisió entre malles de triangles germanes"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Collision Sibling"
-msgstr ""
+msgstr "Crea col·lisions convexes entre nodes germans"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh.."
-msgstr ""
+msgstr "Crea una malla de contorn..."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh"
-msgstr ""
+msgstr "Crea la Malla de Contorn"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Outline Size:"
-msgstr ""
+msgstr "Mida del Contorn:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and no MultiMesh set in node)."
-msgstr ""
+msgstr "Manca una malla d'origen (ni s'ha establert cap MultiMesh en el node)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and MultiMesh contains no Mesh)."
-msgstr ""
+msgstr "Manca una malla d'origen ( i MultiMesh no conté cap malla)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (invalid path)."
-msgstr ""
+msgstr "La Malla d'origen no és vàlida (camí incorrecte)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (not a MeshInstance)."
-msgstr ""
+msgstr "La Malla d'origen no és vàlida ( No és una MeshInstance)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (contains no Mesh resource)."
-msgstr ""
+msgstr "La Malla d'origen no és vàlida ( Li manca un recurs de tipus Malla)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No surface source specified."
-msgstr ""
+msgstr "Manca una superfície d'origen."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (invalid path)."
-msgstr ""
+msgstr "La Superfície no és vàlida (camí incorrecte)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no geometry)."
-msgstr ""
+msgstr "La Superfície d'origen no és vàlida (li manca geometria)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no faces)."
-msgstr ""
+msgstr "La Superfície d'origen no és vàlida (li manquen cares)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Parent has no solid faces to populate."
-msgstr ""
+msgstr "el node Pare no disposa de cares sòlides per omplir."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Couldn't map area."
-msgstr ""
+msgstr "No es pot mapar la zona."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Source Mesh:"
-msgstr ""
+msgstr "Selecciona una Malla d'Origen:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Target Surface:"
-msgstr ""
+msgstr "Selecciona una Superfície Objectiu:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate Surface"
-msgstr ""
+msgstr "Omple la Superfície"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate MultiMesh"
-msgstr ""
+msgstr "Omple el MultiMesh"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Target Surface:"
-msgstr ""
+msgstr "Superfície Objectiu:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Source Mesh:"
-msgstr ""
+msgstr "Malla d'Origen:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "X-Axis"
-msgstr ""
+msgstr "Eix X"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Y-Axis"
-msgstr ""
+msgstr "Eix Y"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Z-Axis"
-msgstr ""
+msgstr "Eix Z"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh Up Axis:"
-msgstr ""
+msgstr "Eix Vertical de la Malla:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Rotation:"
-msgstr ""
+msgstr "Rotació aleatòria:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Tilt:"
-msgstr ""
+msgstr "Inclinació aleatòria:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Scale:"
-msgstr ""
+msgstr "Escala aleatòria:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate"
-msgstr ""
+msgstr "Omple"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
msgid "Bake!"
-msgstr ""
+msgstr "Calcula!"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
msgid "Bake the navigation mesh.\n"
-msgstr ""
+msgstr "Cou la malla de navegació.\n"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
-msgstr ""
+msgstr "Reestableix la malla de navegació."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "Establint la Configuració..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "Calculant la mida de la graella..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating heightfield..."
-msgstr ""
+msgstr "Creant un camp de desplaçaments verticals..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Marking walkable triangles..."
-msgstr "Cadenes Traduïbles..."
+msgstr "Marcant els triangles transitables..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "Construcció d'un camp compacte de desplaçaments verticals..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "Erosionant l'àrea transitable..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Partitioning..."
-msgstr ""
+msgstr "Establint Particions..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating contours..."
-msgstr ""
+msgstr "Creant els contorns..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating polymesh..."
-msgstr ""
+msgstr "creant la polyMesh..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Converting to native navigation mesh..."
-msgstr ""
+msgstr "Convertint-ho en una malla de navegació nativa..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "Configuració del Generador de Malles de Navegació:"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Parsing Geometry..."
-msgstr ""
+msgstr "Analitzant la Geometria..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "Fet!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
-msgstr ""
+msgstr "Crea un Polígon de Navegació"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Clear Emission Mask"
-msgstr ""
+msgstr "Esborra la Màscara d'Emissió"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generating AABB"
-msgstr ""
+msgstr "Generant AABB"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
-msgstr ""
+msgstr "Només es poden establir punts en materials de procés ParticlesMaterial"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Error loading image:"
-msgstr ""
+msgstr "Error en carregar la imatge:"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "No pixels with transparency > 128 in image.."
-msgstr ""
+msgstr "Cap píxel amb transparència > 128 en la imatge..."
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Set Emission Mask"
-msgstr ""
+msgstr "Estableix la Màscara d'Emissió"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generate Visibility Rect"
-msgstr ""
+msgstr "Genera un Rectangle de Visibilitat"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Load Emission Mask"
-msgstr ""
+msgstr "Carrega una Màscara d'Emissió"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Particles"
-msgstr ""
+msgstr "Partícules"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generated Point Count:"
-msgstr ""
+msgstr "Recompte de punts generats:"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generation Time (sec):"
-msgstr "Temps Mitjà (s)"
+msgstr "Temps de generació (s):"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Emission Mask"
-msgstr ""
+msgstr "Màscara d'Emissió"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Capture from Pixel"
-msgstr ""
+msgstr "Captura des d'un Píxel"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Emission Colors"
-msgstr ""
+msgstr "Colors d'Emissió"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Node does not contain geometry."
-msgstr ""
+msgstr "El Node no conté cap geometria."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Node does not contain geometry (faces)."
-msgstr ""
+msgstr "El Node no conté cap geometria (cares)."
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr ""
+msgstr "Un material processador de tipus 'ParticlesMaterial' és obligatori."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
-msgstr ""
+msgstr "Les Cares no tenen àrea!"
#: editor/plugins/particles_editor_plugin.cpp
msgid "No faces!"
-msgstr ""
+msgstr "Cap Cara!"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generate AABB"
-msgstr ""
+msgstr "Genera AABB"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Mesh"
-msgstr ""
+msgstr "Crea Punts d'Emissió des d'una Malla"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Node"
-msgstr ""
+msgstr "Crea Punts d'Emissió des d'un Node"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Clear Emitter"
-msgstr ""
+msgstr "Esborra l'Emissor"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emitter"
-msgstr ""
+msgstr "Crea un Emissor"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Emission Points:"
-msgstr ""
+msgstr "Punts d'Emissió:"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Surface Points"
-msgstr "Superfície %d"
+msgstr "Punts de la Superfície"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points+Normal (Directed)"
-msgstr ""
+msgstr "Punts + Normal (Dirigida)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
-msgstr ""
+msgstr "Volum"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Emission Source: "
-msgstr ""
+msgstr "Font d'Emissió: "
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generate Visibility AABB"
-msgstr ""
+msgstr "Genera un AABB de Visibilitat"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
-msgstr ""
+msgstr "Elimina un Punt de la Corba"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Out-Control from Curve"
-msgstr ""
+msgstr "Elimina Out-Control de la Corba"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove In-Control from Curve"
-msgstr ""
+msgstr "Elimina In-Control de la Corba"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Add Point to Curve"
-msgstr ""
+msgstr "Afegeix un Punt a la Corba"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Move Point in Curve"
-msgstr ""
+msgstr "Mou un Punt de la Corba"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Move In-Control in Curve"
-msgstr ""
+msgstr "Mou In-Control de la Corba"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Move Out-Control in Curve"
-msgstr ""
+msgstr "Mou Out-Control de la Corba"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Selecciona Punts"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Maj.+ Arrossegar: Selecciona Punts de Control"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Clic: Afegeix un Punt"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Clic Dret: Elimina el Punt"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
-msgstr ""
+msgstr "Selecciona Punts de Control (Maj.+Arrossegar)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Afegeix un Punt (en l'espai buit)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
-msgstr ""
+msgstr "Parteix el Segment (de la Corba)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Elimina el Punt"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
-msgstr ""
+msgstr "Tanca la Corba"
#: editor/plugins/path_editor_plugin.cpp
msgid "Curve Point #"
-msgstr ""
+msgstr "Punt num. # de la Corba"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
-msgstr "Treu Senyal"
+msgstr "Estableix la Posició del Punt de la Corba"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve In Position"
-msgstr "Treu Senyal"
+msgstr "Estableix la Posició d'Entrada de la Corba"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Out Position"
-msgstr "Treu Senyal"
+msgstr "Estableix la Posició de Sortida de la Corba"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Path"
-msgstr ""
+msgstr "Parteix el Camí"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove Path Point"
-msgstr ""
+msgstr "Elimina un Punt del Camí"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Remove Out-Control Point"
-msgstr "Treure Autocàrrega"
+msgstr "Elimina el Punt Out-Control"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove In-Control Point"
-msgstr ""
+msgstr "Elimina el Punt In-Control"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
-msgstr ""
+msgstr "Crea un Mapa UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform UV Map"
-msgstr ""
+msgstr "Transforma el Mapa UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon 2D UV Editor"
-msgstr ""
+msgstr "Editor d'UVs de Polígons 2D"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Move Point"
-msgstr ""
+msgstr "Mou el Punt"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
-msgstr ""
+msgstr "Ctrl: Gira"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
-msgstr ""
+msgstr "Maj.: Mou'ho tot"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift+Ctrl: Scale"
-msgstr ""
+msgstr "Maj.+Ctrl: Escala"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Move Polygon"
-msgstr ""
+msgstr "Mou el Polígon"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Rotate Polygon"
-msgstr ""
+msgstr "Gira el Polígon"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Scale Polygon"
-msgstr ""
+msgstr "Escala el Polígon"
#: editor/plugins/polygon_2d_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
@@ -4265,58 +4400,57 @@ msgstr "Edita"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon->UV"
-msgstr ""
+msgstr "Polígon -> UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "UV->Polygon"
-msgstr ""
+msgstr "UV->Polígon"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
-msgstr ""
+msgstr "Esborra UVs"
#: editor/plugins/polygon_2d_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap"
-msgstr ""
+msgstr "Alinea"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Enable Snap"
-msgstr ""
+msgstr "Activa l'Alineament"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid"
-msgstr ""
+msgstr "Graella"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
-msgstr ""
+msgstr "Error: no es pot carregar el recurs!"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Add Resource"
-msgstr ""
+msgstr "Afegeix un Recurs"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Rename Resource"
-msgstr ""
+msgstr "Reanomena el Recurs"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Resource"
-msgstr ""
+msgstr "Elimina el Recurs"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Resource clipboard is empty!"
-msgstr ""
+msgstr "El porta-retalls de Recursos és buit!"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Load Resource"
-msgstr ""
+msgstr "Carrega un Recurs"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4324,286 +4458,307 @@ msgstr "Enganxa"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Files"
-msgstr ""
+msgstr "Esborra la llista de Fitxers recents"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
"Close and save changes?\n"
"\""
msgstr ""
+"Tancar i desar els canvis?\n"
+"\""
#: editor/plugins/script_editor_plugin.cpp
msgid "Error while saving theme"
-msgstr ""
+msgstr "Error en desar el tema"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error saving"
-msgstr ""
+msgstr "Error en desar"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error importing theme"
-msgstr ""
+msgstr "Error en importar el tema"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error importing"
-msgstr ""
+msgstr "Error en importar"
#: editor/plugins/script_editor_plugin.cpp
msgid "Import Theme"
-msgstr ""
+msgstr "Importa un Tema"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As.."
-msgstr ""
+msgstr "Desa el Tema com a..."
#: editor/plugins/script_editor_plugin.cpp
msgid " Class Reference"
-msgstr ""
+msgstr " Referència de Classe"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Ordena"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Mou Amunt"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Mou avall"
#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
-msgstr ""
+msgstr "Script Següent"
#: editor/plugins/script_editor_plugin.cpp
msgid "Previous script"
-msgstr ""
+msgstr "Script Anterior"
#: editor/plugins/script_editor_plugin.cpp
msgid "File"
-msgstr ""
+msgstr "Fitxer"
#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
msgid "New"
-msgstr ""
+msgstr "Nou"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save All"
-msgstr ""
+msgstr "Desa-ho Tot"
#: editor/plugins/script_editor_plugin.cpp
msgid "Soft Reload Script"
-msgstr ""
+msgstr "Recarrega parcialment l'Script"
#: editor/plugins/script_editor_plugin.cpp
msgid "History Prev"
-msgstr ""
+msgstr "Anterior en l'Historial"
#: editor/plugins/script_editor_plugin.cpp
msgid "History Next"
-msgstr ""
+msgstr "Següent en l'Historial"
#: editor/plugins/script_editor_plugin.cpp
msgid "Reload Theme"
-msgstr ""
+msgstr "Recarrega el Tema"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save Theme"
-msgstr ""
+msgstr "Desa el Tema"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As"
-msgstr ""
+msgstr "Anomena i Desa el Tema"
#: editor/plugins/script_editor_plugin.cpp
msgid "Close Docs"
-msgstr ""
+msgstr "Tanca la Documentació"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close All"
-msgstr "Tanca"
+msgstr "Tanca-ho Tot"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Tanca les altres pestanyes"
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
-msgstr ""
+msgstr "Executa"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Scripts Panel"
-msgstr "Commuta Favorit"
+msgstr "Panell d'Scripts"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
-msgstr ""
+msgstr "Cerca..."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
-msgstr ""
+msgstr "Cerca el Següent"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Step Over"
-msgstr ""
+msgstr "Pas a Pas (per Procediments)"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Step Into"
-msgstr ""
+msgstr "Pas a Pas (per instruccions)"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Break"
-msgstr ""
+msgstr "Atura"
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
#: editor/script_editor_debugger.cpp
msgid "Continue"
-msgstr ""
+msgstr "Continua"
#: editor/plugins/script_editor_plugin.cpp
msgid "Keep Debugger Open"
-msgstr ""
+msgstr "Manté el Depurador Obert"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Debug with external editor"
-msgstr "Editor de Dependències"
+msgstr "Depura amb un editor extern"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Godot online documentation"
-msgstr ""
+msgstr "Obre la Documentació en línia"
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the class hierarchy."
-msgstr ""
+msgstr "Cerca dins la jerarquia de classes."
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the reference documentation."
-msgstr ""
+msgstr "Cerca dins la documentació de referència."
#: editor/plugins/script_editor_plugin.cpp
msgid "Go to previous edited document."
-msgstr ""
+msgstr "Vés a l'anterior document editat."
#: editor/plugins/script_editor_plugin.cpp
msgid "Go to next edited document."
-msgstr ""
+msgstr "Vés al següent document editat."
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Discard"
-msgstr "Discret"
+msgstr "Descarta'l"
#: editor/plugins/script_editor_plugin.cpp
msgid "Create Script"
-msgstr ""
+msgstr "Crea un Script"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
"The following files are newer on disk.\n"
"What action should be taken?:"
msgstr ""
+"El disc conté versions més recents dels fitxer següents. \n"
+"Quina acció s'ha de seguir?:"
#: editor/plugins/script_editor_plugin.cpp
msgid "Reload"
-msgstr ""
+msgstr "Tornar a Carregar"
#: editor/plugins/script_editor_plugin.cpp
msgid "Resave"
-msgstr ""
+msgstr "Torna a Desar"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Debugger"
-msgstr ""
+msgstr "Depurador"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
"Built-in scripts can only be edited when the scene they belong to is loaded"
msgstr ""
+"Només es poden editar els Scripts Integrats amb la seva escena associada "
+"carregada"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
-msgstr ""
+msgstr "Només es poden afegir Recursos del sistema de fitxers."
#: editor/plugins/script_text_editor.cpp
msgid "Pick Color"
-msgstr ""
+msgstr "Tria un Color"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Convert Case"
-msgstr "Converteix a..."
+msgstr "Converteix Majúscules"
#: editor/plugins/script_text_editor.cpp
msgid "Uppercase"
-msgstr ""
+msgstr "Majúscules"
#: editor/plugins/script_text_editor.cpp
msgid "Lowercase"
-msgstr ""
+msgstr "Minúscula"
#: editor/plugins/script_text_editor.cpp
msgid "Capitalize"
-msgstr ""
+msgstr "Converteix a Majúscules"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Talla"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Copia"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Selecciona-ho Tot"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Delete Line"
-msgstr "Esborra"
+msgstr "Esborra la Línia"
#: editor/plugins/script_text_editor.cpp
msgid "Indent Left"
-msgstr ""
+msgstr "Sagnia Esquerra"
#: editor/plugins/script_text_editor.cpp
msgid "Indent Right"
-msgstr ""
+msgstr "Sagnia Dreta"
#: editor/plugins/script_text_editor.cpp
msgid "Toggle Comment"
-msgstr ""
+msgstr "Comentaris"
#: editor/plugins/script_text_editor.cpp
msgid "Clone Down"
-msgstr ""
+msgstr "Clonar avall"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "Plega la Línia"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "Desplega la línia"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "Plega totes les Línies"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "Desplega totes les Línies"
#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
-msgstr ""
+msgstr "Completa el Símbol"
#: editor/plugins/script_text_editor.cpp
msgid "Trim Trailing Whitespace"
-msgstr ""
+msgstr "Retalla els espais en blanc al final"
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent To Spaces"
-msgstr ""
+msgstr "Converteix la Sagnia en espais"
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent To Tabs"
-msgstr ""
+msgstr "Converteix la Sagnia en Tabulacions"
#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
-msgstr ""
+msgstr "Sagnat Automàtic"
#: editor/plugins/script_text_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -4612,373 +4767,381 @@ msgstr "Commuta el punt d'Interrupció"
#: editor/plugins/script_text_editor.cpp
msgid "Remove All Breakpoints"
-msgstr ""
+msgstr "Elimina tots els punts d'interrupció"
#: editor/plugins/script_text_editor.cpp
msgid "Goto Next Breakpoint"
-msgstr ""
+msgstr "Vés al següent punt d'interrupció"
#: editor/plugins/script_text_editor.cpp
msgid "Goto Previous Breakpoint"
-msgstr ""
+msgstr "Vés a l'anterior punt d'interrupció"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Convert To Uppercase"
-msgstr "Converteix a..."
+msgstr "Converteix en majúscules"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Convert To Lowercase"
-msgstr "Converteix a..."
+msgstr "Converteix en minúscules"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
-msgstr ""
+msgstr "Cerca l'Anterior"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
-msgstr ""
+msgstr "Substitueix..."
#: editor/plugins/script_text_editor.cpp
msgid "Goto Function.."
-msgstr ""
+msgstr "Vés a la Funció.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
-msgstr ""
+msgstr "Vés a la Línia..."
#: editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
-msgstr ""
+msgstr "Ajuda Contextual"
#: editor/plugins/shader_editor_plugin.cpp
msgid "Shader"
-msgstr ""
+msgstr "Ombreig"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Constant"
-msgstr ""
+msgstr "Modificar una constant escalar"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Constant"
-msgstr ""
+msgstr "Modificar una constant vectorial"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change RGB Constant"
-msgstr ""
+msgstr "Modificar una constant RGB"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Operator"
-msgstr ""
+msgstr "Modifica un operador escalar"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Operator"
-msgstr ""
+msgstr "Modifica un operador vectorial"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Scalar Operator"
-msgstr ""
+msgstr "Modifica un operador vectorial- escalar"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change RGB Operator"
-msgstr ""
+msgstr "Modifica un operador RGB"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Toggle Rot Only"
-msgstr ""
+msgstr "només Rotacio"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Function"
-msgstr ""
+msgstr "Modifica una Funció Escalar"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Function"
-msgstr ""
+msgstr "Modifica una Funció Vectorial"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Uniform"
-msgstr ""
+msgstr "Modificar un Uniforme Escalar"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Uniform"
-msgstr ""
+msgstr "Modifica un Uniforme Vectorial"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change RGB Uniform"
-msgstr ""
+msgstr "Modifica un Uniforme RGB"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Default Value"
-msgstr ""
+msgstr "Modifica el Valor per Defecte"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change XForm Uniform"
-msgstr ""
+msgstr "Modifica el Uniforme XForm"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Texture Uniform"
-msgstr ""
+msgstr "Modifica un Uniforme Textura"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Cubemap Uniform"
-msgstr ""
+msgstr "Modifica un Uniforme 'CubeMap'"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Comment"
-msgstr ""
+msgstr "Modifica el Comentari"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add/Remove to Color Ramp"
-msgstr ""
+msgstr "Afegeix/Elimina-ho de la Rampa de Colors"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add/Remove to Curve Map"
-msgstr ""
+msgstr "Afegeix/Ellimina-ho del Mapa de Corbes"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Modify Curve Map"
-msgstr ""
+msgstr "Modifica el Mapa de Corbes"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Input Name"
-msgstr ""
+msgstr "Modifica el Nom de l'Entrada"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Connect Graph Nodes"
-msgstr ""
+msgstr "Connecta els Nodes de Graf"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Disconnect Graph Nodes"
-msgstr ""
+msgstr "Desconnecta el Nodes de Graf"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Remove Shader Graph Node"
-msgstr ""
+msgstr "Elimina el Node de Graf d'Ombreig"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Move Shader Graph Node"
-msgstr ""
+msgstr "Mou el Node de Graf d'Ombreig"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Duplicate Graph Node(s)"
-msgstr ""
+msgstr "Duplica el(s) Node(s) de Graf"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Delete Shader Graph Node(s)"
-msgstr ""
+msgstr "Elimina el(s) Node(s) de Graf d'Ombreig"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Error: Cyclic Connection Link"
-msgstr ""
+msgstr "Error: Enllaç de Connexió Cíclic"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Error: Missing Input Connections"
-msgstr ""
+msgstr "Error: Manquen les Connexions d'Entrada"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add Shader Graph Node"
-msgstr ""
+msgstr "Afegeix un Node de Graf d'Ombreig"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal"
-msgstr ""
+msgstr "Ortogonal"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective"
-msgstr ""
+msgstr "Perspectiva"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
-msgstr ""
+msgstr "S'ha interromput la Transformació ."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "X-Axis Transform."
-msgstr ""
+msgstr "Transformació de l'Eix X."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Y-Axis Transform."
-msgstr ""
+msgstr "Transformació de l'Eix Y."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Z-Axis Transform."
-msgstr ""
+msgstr "Transformació de l'Eix Z."
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "View Plane Transform."
-msgstr ""
+msgstr "Transformació de la Vista."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "Escala: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Traslladant: "
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
-msgstr ""
+msgstr "Rotació de %s graus."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View."
-msgstr ""
+msgstr "Vista inferior."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom"
-msgstr ""
+msgstr "Part inferior"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
-msgstr ""
+msgstr "Vista superior."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
-msgstr ""
+msgstr "Vista Posterior."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear"
-msgstr ""
+msgstr "Darrere"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
-msgstr ""
+msgstr "Vista Frontal."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front"
-msgstr ""
+msgstr "Davant"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
-msgstr ""
+msgstr "Vista esquerra."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left"
-msgstr ""
+msgstr "Esquerra"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
-msgstr ""
+msgstr "Vista Dreta."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right"
-msgstr ""
+msgstr "Dreta"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Keying is disabled (no key inserted)."
-msgstr ""
+msgstr "l'Edició de Claus està inhabilitada (no s'ha inserit cap Clau)."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Animation Key Inserted."
-msgstr ""
+msgstr "S'ha insertit una Clau d'Animació."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn"
-msgstr ""
+msgstr "Objectes Dibuixats"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes"
-msgstr "Actualitza Canvis"
+msgstr "Canvis de Material"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes"
-msgstr "Actualitza Canvis"
+msgstr "Canvis de Ombreig"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes"
-msgstr "Actualitza Canvis"
+msgstr "Canvis de superfície"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Draw Calls"
-msgstr ""
+msgstr "Crides de Dibuix"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Vertices"
-msgstr ""
+msgstr "Vèrtexs"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
-msgstr ""
+msgstr "Alinea amb la Vista"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Normal"
-msgstr ""
+msgstr "Mostra les Normals"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Wireframe"
-msgstr ""
+msgstr "Traça les arestes"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Overdraw"
-msgstr ""
+msgstr "Mostra les superposicions"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Unshaded"
-msgstr ""
+msgstr "Mostra sense Ombreig"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Environment"
-msgstr ""
+msgstr "Mostra l'Entorn"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Gizmos"
-msgstr ""
+msgstr "Mostra el Trasto"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Information"
-msgstr ""
+msgstr "Mostra la Informació"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Veure FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Mitja Resolució"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
-msgstr ""
+msgstr "Receptor d'Àudio"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Doppler Enable"
-msgstr "Activa"
+msgstr "Activa Doppler"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
-msgstr ""
+msgstr "Vista Lliure Esquerra"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Right"
-msgstr ""
+msgstr "Vista Lliure Dreta"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Forward"
-msgstr "Endavant"
+msgstr "Vista Lliure Endavant"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Backwards"
-msgstr "Enrere"
+msgstr "Vista Lliure Enrere"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Up"
-msgstr ""
+msgstr "Vista Lliura Amunt"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Down"
-msgstr "Roda Avall."
+msgstr "Vista Lliure Avall"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Speed Modifier"
-msgstr ""
+msgstr "Modificador de la Velocitat de la Vista Lliure"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "preview"
-msgstr "Previsualització:"
+msgstr "Previsualització"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "XForm Dialog"
-msgstr ""
+msgstr "Diàleg XForm"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode (Q)\n"
-msgstr "Mètodes públics:"
+msgstr "Mode Selecció (Q)\n"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -4986,96 +5149,101 @@ msgid ""
"Alt+Drag: Move\n"
"Alt+RMB: Depth list selection"
msgstr ""
+"Arrossegar: Gira\n"
+"Alt+Arrossegar: Mou\n"
+"Alt+Clic Dret: Selecció de llista de profunditat"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Move Mode (W)"
-msgstr ""
+msgstr "Mode Moviment (W)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Mode (E)"
-msgstr ""
+msgstr "Mode Rotació (E)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Mode (R)"
-msgstr ""
+msgstr "Mode Escala (R)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
-msgstr ""
+msgstr "Vista Inferior"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View"
-msgstr ""
+msgstr "Vista Superior"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View"
-msgstr ""
+msgstr "Vista Posterior"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View"
-msgstr ""
+msgstr "Vista Frontal"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View"
-msgstr ""
+msgstr "Vista Esquerra"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View"
-msgstr ""
+msgstr "Vista Dreta"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal view"
-msgstr ""
+msgstr "Vista Perspectiva/Ortogonal"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Insert Animation Key"
-msgstr ""
+msgstr "Insereix una Clau d'Animació"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Focus Origin"
-msgstr ""
+msgstr "Focalitza't en l'Origen"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Focus Selection"
-msgstr ""
+msgstr "Focalitza't en la Selecció"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Selection With View"
-msgstr ""
+msgstr "Aliena la Selecció amb la Vista"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Tool Select"
-msgstr "Tota la Selecció"
+msgstr "Selecciona una Eina"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Tool Move"
-msgstr "Mou"
+msgstr "Eina de Moure"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Tool Rotate"
-msgstr ""
+msgstr "Eina de Rotació"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Tool Scale"
-msgstr ""
+msgstr "Eina d'Escala"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Vista Lliure"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
-msgstr ""
+msgstr "Transforma"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Configure Snap.."
-msgstr ""
+msgstr "Configura l'Alineament..."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Local Coords"
-msgstr ""
+msgstr "Coordenades Locals"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Dialog.."
-msgstr ""
+msgstr "Diàleg de Transformació..."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "1 Viewport"
@@ -5103,11 +5271,11 @@ msgstr "4 Vistes"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
-msgstr ""
+msgstr "Mostra l'Origen"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Grid"
-msgstr ""
+msgstr "Mostra la Graella"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -5116,19 +5284,19 @@ msgstr "Configuració"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Settings"
-msgstr "Configuració de Desplaçament"
+msgstr "Configuració de l'Alineament"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translate Snap:"
-msgstr ""
+msgstr "Translació Alineada:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Snap (deg.):"
-msgstr ""
+msgstr "Rotació Alineada (graus):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Snap (%):"
-msgstr ""
+msgstr "Escala Alineada (%):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Viewport Settings"
@@ -5136,83 +5304,83 @@ msgstr "Configuració de la Vista"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective FOV (deg.):"
-msgstr ""
+msgstr "Camp de Visió (graus):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Near:"
-msgstr ""
+msgstr "Z-Proper de la vista:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Far:"
-msgstr ""
+msgstr "Z-Llunyà de la Vista:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Change"
-msgstr ""
+msgstr "Modifica la Transformació"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translate:"
-msgstr ""
+msgstr "Traslladar:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate (deg.):"
-msgstr ""
+msgstr "Rotació (graus):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale (ratio):"
-msgstr ""
+msgstr "Escala (ràtio):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Type"
-msgstr ""
+msgstr "Tipus de Transformació"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Pre"
-msgstr ""
+msgstr "Pre"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Post"
-msgstr ""
+msgstr "Post"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "ERROR: Couldn't load frame resource!"
-msgstr ""
+msgstr "Error: No s'ha trobat el recurs de fotogrames!"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frame"
-msgstr ""
+msgstr "Afegeix Fotograma"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Resource clipboard is empty or not a texture!"
-msgstr ""
+msgstr "El porta-retalls de Recursos és Buit o no és pas una Textura!"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Paste Frame"
-msgstr ""
+msgstr "Enganxa el Fotograma"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Empty"
-msgstr ""
+msgstr "Afegeix un element Buit"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation Loop"
-msgstr ""
+msgstr "Modifica el bucle d'Animació"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation FPS"
-msgstr ""
+msgstr "Modifica els FPS de l'Animació"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "(empty)"
-msgstr ""
+msgstr "(buit)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animations"
-msgstr ""
+msgstr "Animacions"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed (FPS):"
-msgstr ""
+msgstr "Velocitat (FPS):"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Loop"
@@ -5220,188 +5388,189 @@ msgstr "Bucle"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animation Frames"
-msgstr ""
+msgstr "Fotogrames d'Animació"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
-msgstr ""
+msgstr "Insereix un element Buit (abans)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (After)"
-msgstr ""
+msgstr "Insereix un element Buit (Després)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (Before)"
-msgstr "Copia Nodes"
+msgstr "Mou (Abans)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Move (After)"
-msgstr ""
+msgstr "Mou (Després)"
#: editor/plugins/style_box_editor_plugin.cpp
msgid "StyleBox Preview:"
-msgstr ""
+msgstr "Previsualització del StyleBox:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Set Region Rect"
-msgstr ""
+msgstr "Defineix la Regió Rectangular"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Snap Mode:"
-msgstr ""
+msgstr "Mode Imant:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "<None>"
-msgstr ""
+msgstr "<Cap>"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Pixel Snap"
-msgstr ""
+msgstr "Alinea-ho amb els Pixels"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Grid Snap"
-msgstr ""
+msgstr "Alinea-ho a la graella"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Auto Slice"
-msgstr ""
+msgstr "Auto Tall"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Offset:"
-msgstr ""
+msgstr "òfset:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Step:"
-msgstr ""
+msgstr "Pas:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Separation:"
-msgstr ""
+msgstr "Separació:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Texture Region"
-msgstr ""
+msgstr "Regió de Textura"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Texture Region Editor"
-msgstr ""
+msgstr "Editor de Regions de Textura"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Can't save theme to file:"
-msgstr ""
+msgstr "No es pot desar el Tema:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add All Items"
-msgstr ""
+msgstr "Afegeix tots els Elements"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add All"
-msgstr ""
+msgstr "Afegeix-ho Tot"
#: editor/plugins/theme_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Item"
-msgstr ""
+msgstr "Elimina Element"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Items"
-msgstr "Treu la Selecció"
+msgstr "Treu tots els Elements"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All"
-msgstr "Treu"
+msgstr "Treu-los tots"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "Edita el Tema..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "Menú d'edició de Temes."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
-msgstr ""
+msgstr "Afegeix Elements de Classe"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
-msgstr ""
+msgstr "Elimina Elements de Classe"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Template"
-msgstr ""
+msgstr "Crea una Plantilla Buida"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
-msgstr ""
+msgstr "Crea un Plantilla d'Editor Buida"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "Crea a partir del Tema d'Editor actual"
#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
-msgstr ""
+msgstr "casella Radio1"
#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio2"
-msgstr ""
+msgstr "Casella Radio2"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Item"
-msgstr ""
+msgstr "Element"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Check Item"
-msgstr ""
+msgstr "Valida l'Element"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Checked Item"
-msgstr ""
+msgstr "Element validat"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Has"
-msgstr ""
+msgstr "Té"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Many"
-msgstr ""
+msgstr "Molts"
#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
msgid "Options"
-msgstr ""
+msgstr "Opcions"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Have,Many,Several,Options!"
-msgstr ""
+msgstr "Tens,Moltes,Diverses,Opcions!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Tab 1"
-msgstr ""
+msgstr "Pestanya 1"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Tab 2"
-msgstr ""
+msgstr "Pestanya 2"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Tab 3"
-msgstr ""
+msgstr "Pestanya 3"
#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
msgid "Type:"
-msgstr ""
+msgstr "Tipus:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Data Type:"
-msgstr ""
+msgstr "Tipus de Dades:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Icon"
-msgstr ""
+msgstr "Icona"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Style"
-msgstr ""
+msgstr "Estil"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Font"
@@ -5409,426 +5578,423 @@ msgstr "Lletra"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Color"
-msgstr ""
+msgstr "Color"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Erase Selection"
-msgstr "Escala la Selecció"
+msgstr "Elimina la Selecció"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint TileMap"
-msgstr ""
+msgstr "Pinta el Mosaic"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Line Draw"
-msgstr "Lineal"
+msgstr "Dibuixa línies"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rectangle Paint"
-msgstr ""
+msgstr "Pinta Rectangle"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Bucket Fill"
-msgstr ""
+msgstr "Cubell de pintura"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase TileMap"
-msgstr ""
+msgstr "Elimina el Mosaic"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase selection"
-msgstr ""
+msgstr "Elimina la Selecció"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Find tile"
-msgstr ""
+msgstr "Cerca Tessel·la"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Transpose"
-msgstr ""
+msgstr "Transposa"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Mirror X"
-msgstr ""
+msgstr "Replica en l'eix X"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Mirror Y"
-msgstr ""
+msgstr "Replica en l'Eix Y"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint Tile"
-msgstr ""
+msgstr "Pinta Tessel·la"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
-msgstr ""
+msgstr "Tria un Tessel·la"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate 0 degrees"
-msgstr ""
+msgstr "Gira-ho 0 graus"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate 90 degrees"
-msgstr ""
+msgstr "Gira-ho 90 graus"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate 180 degrees"
-msgstr ""
+msgstr "Gira-ho 180 graus"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate 270 degrees"
-msgstr ""
+msgstr "Gira-ho 270 graus"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Could not find tile:"
-msgstr ""
+msgstr "No s'ha trobat la tessel·la:"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Item name or ID:"
-msgstr ""
+msgstr "Nom o ID de l'Element:"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from scene?"
-msgstr ""
+msgstr "Crear-ho a partir de l'escena?"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from scene?"
-msgstr ""
+msgstr "Combinar-ho a partir de l'escena?"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from Scene"
-msgstr ""
+msgstr "Crea-ho a partir de l'Escena"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from Scene"
-msgstr ""
+msgstr "Combina-ho a partir de l'Escena"
#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Error"
-msgstr ""
+msgstr "Error"
#: editor/project_export.cpp
-#, fuzzy
msgid "Runnable"
-msgstr "Activa"
+msgstr "Executable"
#: editor/project_export.cpp
-#, fuzzy
-msgid "Delete patch '"
-msgstr "Elimina Disposició (Layout)"
+msgid "Delete patch '%s' from list?"
+msgstr "Eliminar el Pedaç '%s' de la llista?"
#: editor/project_export.cpp
-#, fuzzy
msgid "Delete preset '%s'?"
-msgstr "Esborra fitxers seleccionats?"
+msgstr "Esborrar la configuració '%s' ?"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted: "
msgstr ""
+"Manquen les Plantilles d'Exportació per aquesta plataforma o s'han malmès: "
#: editor/project_export.cpp
msgid "Presets"
-msgstr ""
+msgstr "Configuracions prestablertes"
#: editor/project_export.cpp editor/project_settings_editor.cpp
msgid "Add.."
-msgstr ""
+msgstr "Afegeix..."
#: editor/project_export.cpp
msgid "Resources"
-msgstr ""
+msgstr "Recursos"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export all resources in the project"
-msgstr "Importa actius al projecte."
+msgstr "Exporta tots els recursos del projecte"
#: editor/project_export.cpp
msgid "Export selected scenes (and dependencies)"
-msgstr ""
+msgstr "Exporta les escenes seleccionades (dependències incloses)"
#: editor/project_export.cpp
msgid "Export selected resources (and dependencies)"
-msgstr ""
+msgstr "Exporta els Recursos seleccionats (dependències incloses)"
#: editor/project_export.cpp
msgid "Export Mode:"
-msgstr ""
+msgstr "Mode d'Exportació:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Resources to export:"
-msgstr "Cap malla per importar!"
+msgstr "Recursos per exportar:"
#: editor/project_export.cpp
msgid ""
"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
msgstr ""
+"Filtres per a l'exportació fitxers no-recurs (separats per comes, ex: *."
+"json, *. txt)"
#: editor/project_export.cpp
msgid ""
"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
msgstr ""
+"Filtres per excloure fitxers del projecte (separats per comes, ex:*.json, *."
+"txt)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Patches"
-msgstr "Coincidències:"
+msgstr "Pedaços"
#: editor/project_export.cpp
-#, fuzzy
msgid "Make Patch"
-msgstr "Camí de Destinació:"
+msgstr "Crea un Pedaç"
#: editor/project_export.cpp
msgid "Features"
-msgstr ""
+msgstr "Característiques"
#: editor/project_export.cpp
msgid "Custom (comma-separated):"
-msgstr ""
+msgstr "Personalitzat (separats per comes):"
#: editor/project_export.cpp
-#, fuzzy
msgid "Feature List:"
-msgstr "Llista de mètodes:"
+msgstr "Llista de Característiques :"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export PCK/Zip"
-msgstr "Exporta"
+msgstr "Exporta PCK/Zip"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
-msgstr ""
+msgstr "Manquen les plantilles d'exportació per aquesta plataforma:"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
+msgstr "Manquen d'exportació per aquesta plataforma o s'han malmès:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export With Debug"
-msgstr "Exporta el joc de Mosaics (Tiles)"
+msgstr "Exporta en mode Depuració"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "El Fitxer no existeix."
+msgstr "El camí no existeix."
#: editor/project_manager.cpp
msgid "Please choose a 'project.godot' file."
-msgstr ""
+msgstr "Selecciona un fitxer 'projecte.godot'."
#: editor/project_manager.cpp
msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
msgstr ""
+"El projecte es crearà en un directori ja existent (Si s'escau, creeu un "
+"directori nou)."
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
msgstr ""
+"Seleccioneu un directori que no contingui ja un fitxer 'project.godot'."
#: editor/project_manager.cpp
msgid "Imported Project"
-msgstr ""
+msgstr "Project importat"
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "Fóra bo anomenar el projecte."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
-msgstr ""
+msgstr "El Camí del Projecte no és vàlid (S'ha produit algun canvi?)."
#: editor/project_manager.cpp
msgid "Couldn't get project.godot in project path."
-msgstr ""
+msgstr "No s'ha trobat el fitxer 'project.godot' en el camí del Projecte."
#: editor/project_manager.cpp
msgid "Couldn't edit project.godot in project path."
-msgstr ""
+msgstr "No es pot editar el fitxer 'project.godot' en el camí del projecte."
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
-msgstr ""
+msgstr "No es pot crear el fitxer 'project.godot' en el camí del projecte."
#: editor/project_manager.cpp
msgid "The following files failed extraction from package:"
-msgstr ""
+msgstr "Ha fracassat l'extracció del paquet dels següents fitxers:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "Exporta Projecte"
+msgstr "Reanomena el Projecte"
#: editor/project_manager.cpp
msgid "Couldn't get project.godot in the project path."
-msgstr ""
+msgstr "No es pot trobat el el fitxer 'project.godot' en el camí del projecte."
#: editor/project_manager.cpp
msgid "New Game Project"
-msgstr ""
+msgstr "Nou Projecte de Joc"
#: editor/project_manager.cpp
msgid "Import Existing Project"
-msgstr ""
+msgstr "Importa un Projecte existent"
#: editor/project_manager.cpp
msgid "Create New Project"
-msgstr ""
+msgstr "Crea un Project nou"
#: editor/project_manager.cpp
msgid "Install Project:"
-msgstr ""
+msgstr "Instal·la el Projecte:"
#: editor/project_manager.cpp
msgid "Project Name:"
-msgstr ""
+msgstr "Nom del Projecte:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
-msgstr "Crea una Carpeta"
+msgstr "Crea un Directori"
#: editor/project_manager.cpp
msgid "Project Path:"
-msgstr ""
+msgstr "Camí del Projecte:"
#: editor/project_manager.cpp
msgid "Browse"
-msgstr ""
+msgstr "Navega"
#: editor/project_manager.cpp
msgid "That's a BINGO!"
-msgstr ""
+msgstr "BINGO!"
#: editor/project_manager.cpp
msgid "Unnamed Project"
-msgstr ""
+msgstr "Projecte sense nom"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "Connecta.."
+msgstr "No es pot obrir el projecte"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
-msgstr ""
+msgstr "Esteu segur que voleu obrir més d'un projecte de cop?"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"Can't run project: no main scene defined.\n"
"Please edit the project and set the main scene in \"Project Settings\" under "
"the \"Application\" category."
msgstr ""
-"No s'ha definit cap escena principal. Seleccioneu-ne una.\n"
-"És possible triar-ne una altra més endavant a \"Configuració del Projecte\" "
-"en la categoria \"aplicació\"."
+"No es pot executar el projecte: Manca una escena principal.\n"
+"Establiu una escena principal des de \"Configuració del Projecte\" dins la "
+"categoria \"aplicació\"."
#: editor/project_manager.cpp
msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
+"No es pot executar el projecte: S'han d'importar els Actius.\n"
+"Edita el Projecte per inicialitzar-lo."
#: editor/project_manager.cpp
msgid "Are you sure to run more than one project?"
-msgstr ""
+msgstr "Esteu segur que voleu executar més d'un projecte de cop?"
#: editor/project_manager.cpp
msgid "Remove project from the list? (Folder contents will not be modified)"
msgstr ""
+"Retirar el Projecte de la llista? (El contingut del directori no es "
+"modificarà)"
#: editor/project_manager.cpp
msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Canvi de Llengua.\n"
+"La interficie s'actualitzarà en iniciar l'editor o administrador."
#: editor/project_manager.cpp
msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
-msgstr ""
+msgstr "S'examinaran %s directoris a la recerca de projectes. Ho Confirmeu?"
#: editor/project_manager.cpp
msgid "Project List"
-msgstr ""
+msgstr "Llista de Projectes"
#: editor/project_manager.cpp
msgid "Scan"
-msgstr ""
+msgstr "Explora"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
-msgstr ""
+msgstr "Selecciona un Directori per Explorar"
#: editor/project_manager.cpp
msgid "New Project"
-msgstr ""
+msgstr "Projecte Nou"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Templates"
-msgstr "Treu la Selecció"
+msgstr "Plantilles"
#: editor/project_manager.cpp
msgid "Exit"
-msgstr ""
+msgstr "Surt"
#: editor/project_manager.cpp
msgid "Restart Now"
-msgstr ""
+msgstr "Reinicia"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't run project"
-msgstr "Connecta.."
+msgstr "No es pot executar el projecte"
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
-msgstr ""
+msgstr "Tecla "
#: editor/project_settings_editor.cpp
msgid "Joy Button"
-msgstr ""
+msgstr "Botó de la Maneta"
#: editor/project_settings_editor.cpp
msgid "Joy Axis"
-msgstr ""
+msgstr "Eix de la Maneta"
#: editor/project_settings_editor.cpp
msgid "Mouse Button"
-msgstr ""
+msgstr "Botó del ratolí"
#: editor/project_settings_editor.cpp
msgid "Invalid action (anything goes but '/' or ':')."
-msgstr ""
+msgstr "L'Acció no és vàlida (no es pot utilitzar ' / ' o ':')."
#: editor/project_settings_editor.cpp
msgid "Action '%s' already exists!"
-msgstr ""
+msgstr "L'Acció '%s' ja existeix!"
#: editor/project_settings_editor.cpp
msgid "Rename Input Action Event"
-msgstr ""
+msgstr "Reanomena la Incidència de l'Acció d'Entrada"
#: editor/project_settings_editor.cpp
msgid "Add Input Action Event"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta +"
+msgstr "Afegeix un Incidència d'Acció de Entrada"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
@@ -5840,60 +6006,60 @@ msgstr "Alt +"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Control+"
-msgstr ""
+msgstr "Control+"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key.."
-msgstr ""
+msgstr "Premeu una Tecla.."
#: editor/project_settings_editor.cpp
msgid "Mouse Button Index:"
-msgstr ""
+msgstr "Ãndex del Botó del ratolí:"
#: editor/project_settings_editor.cpp
msgid "Left Button"
-msgstr ""
+msgstr "Botó Esquerre"
#: editor/project_settings_editor.cpp
msgid "Right Button"
-msgstr ""
+msgstr "Botó Dret"
#: editor/project_settings_editor.cpp
msgid "Middle Button"
-msgstr ""
+msgstr "Botó Central"
#: editor/project_settings_editor.cpp
msgid "Wheel Up Button"
-msgstr ""
+msgstr "Botó Roda Amunt"
#: editor/project_settings_editor.cpp
msgid "Wheel Down Button"
-msgstr ""
+msgstr "Botó Roda Avall"
#: editor/project_settings_editor.cpp
msgid "Button 6"
-msgstr ""
+msgstr "Botó 6"
#: editor/project_settings_editor.cpp
msgid "Button 7"
-msgstr ""
+msgstr "Botó 7"
#: editor/project_settings_editor.cpp
msgid "Button 8"
-msgstr ""
+msgstr "Botó 8"
#: editor/project_settings_editor.cpp
msgid "Button 9"
-msgstr ""
+msgstr "Botó 9"
#: editor/project_settings_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Change"
-msgstr "Canvia"
+msgstr "Modifica"
#: editor/project_settings_editor.cpp
msgid "Joypad Axis Index:"
-msgstr ""
+msgstr "Ãndex de l'eix de la maneta:"
#: editor/project_settings_editor.cpp
msgid "Axis"
@@ -5901,19 +6067,19 @@ msgstr "Eix"
#: editor/project_settings_editor.cpp
msgid "Joypad Button Index:"
-msgstr ""
+msgstr "Ãndex del Botó de la Maneta:"
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
-msgstr ""
+msgstr "Afegeix una Acció d'Entrada"
#: editor/project_settings_editor.cpp
msgid "Erase Input Action Event"
-msgstr ""
+msgstr "Elimina la Incidència d'Acció d'Entrada"
#: editor/project_settings_editor.cpp
msgid "Add Event"
-msgstr ""
+msgstr "Afegeix una Incidència"
#: editor/project_settings_editor.cpp
msgid "Device"
@@ -5944,36 +6110,32 @@ msgid "Wheel Down."
msgstr "Roda Avall."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add Global Property"
-msgstr "Afegeix Propietat d'Accés (Getter)"
+msgstr "Afegeix una Propietat Global"
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
-msgstr ""
+msgstr "Cal seleccionar un Element!"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr ""
+msgid "No property '%s' exists."
+msgstr "No existeix cap propietat '%s'."
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Configuració"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "En ser un configuració interna, '%s' no es pot eliminar."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Delete Item"
-msgstr "Esborra"
+msgstr "Esborra l'Element"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "Connecta al Node:"
+msgstr "No pot contenir '/' o ':'"
#: editor/project_settings_editor.cpp
msgid "Already existing"
-msgstr ""
+msgstr "Ja existeix"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -5985,285 +6147,271 @@ msgstr "Configuració desada correctament."
#: editor/project_settings_editor.cpp
msgid "Override for Feature"
-msgstr ""
+msgstr "Substitutiu per a Característica"
#: editor/project_settings_editor.cpp
msgid "Add Translation"
-msgstr ""
+msgstr "Afegeix una Traducció"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
-msgstr ""
+msgstr "Elimina la Traducció"
#: editor/project_settings_editor.cpp
msgid "Add Remapped Path"
-msgstr ""
+msgstr "Afegeix un camí remapat"
#: editor/project_settings_editor.cpp
msgid "Resource Remap Add Remap"
-msgstr ""
+msgstr "Afegeix un Remapatge de Recursos"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
-msgstr ""
+msgstr "Canvia la Llengua del Remapatge de Recursos"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap"
-msgstr ""
+msgstr "Elimina el Remapatge de Recursos"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap Option"
-msgstr ""
+msgstr "Elimina l'Opció de Remapatge de Recursos"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Canvia Tipus de la Matriu"
+msgstr "S'ha Modificat el Filtre de Locale"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Modifica el Mode del Filtre de Localització"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Project Settings (project.godot)"
-msgstr "Configuració del Projecte (engine.cfg)"
+msgstr "Configuració del Projecte (project.godot)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
-msgstr ""
+msgstr "General"
#: editor/project_settings_editor.cpp editor/property_editor.cpp
msgid "Property:"
-msgstr ""
+msgstr "Propietat:"
#: editor/project_settings_editor.cpp
msgid "Override For.."
-msgstr ""
+msgstr "Substitutiu per a..."
#: editor/project_settings_editor.cpp
msgid "Input Map"
-msgstr ""
+msgstr "Mapa d'Entrades"
#: editor/project_settings_editor.cpp
msgid "Action:"
-msgstr ""
+msgstr "Acció:"
#: editor/project_settings_editor.cpp
msgid "Device:"
-msgstr ""
+msgstr "Dispositiu:"
#: editor/project_settings_editor.cpp
msgid "Index:"
-msgstr ""
+msgstr "Ãndex:"
#: editor/project_settings_editor.cpp
msgid "Localization"
-msgstr ""
+msgstr "Localització"
#: editor/project_settings_editor.cpp
msgid "Translations"
-msgstr ""
+msgstr "Traduccions"
#: editor/project_settings_editor.cpp
msgid "Translations:"
-msgstr ""
+msgstr "Traduccions:"
#: editor/project_settings_editor.cpp
msgid "Remaps"
-msgstr ""
+msgstr "Remapatges"
#: editor/project_settings_editor.cpp
msgid "Resources:"
-msgstr ""
+msgstr "Recursos:"
#: editor/project_settings_editor.cpp
msgid "Remaps by Locale:"
-msgstr ""
+msgstr "Remapatges per Llengua:"
#: editor/project_settings_editor.cpp
msgid "Locale"
-msgstr ""
+msgstr "Localització"
#: editor/project_settings_editor.cpp
msgid "Locales Filter"
-msgstr ""
+msgstr "Filtre de Localitzacions"
#: editor/project_settings_editor.cpp
msgid "Show all locales"
-msgstr ""
+msgstr "Mostra totes les Localitzacions"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "Mostrar només les Localitzacions seleccionades"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Filtres"
+msgstr "Filtra Mode:"
#: editor/project_settings_editor.cpp
msgid "Locales:"
-msgstr ""
+msgstr "Localitzacions:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
-msgstr ""
+msgstr "Càrrega Automàtica"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Viewport"
-msgstr "1 Vista"
+msgstr "Selecciona una Vista"
#: editor/property_editor.cpp
msgid "Ease In"
-msgstr ""
+msgstr "Entrada lenta"
#: editor/property_editor.cpp
msgid "Ease Out"
-msgstr ""
+msgstr "Sortida Lenta"
#: editor/property_editor.cpp
msgid "Zero"
-msgstr ""
+msgstr "Zero"
#: editor/property_editor.cpp
msgid "Easing In-Out"
-msgstr ""
+msgstr "Esmorteeix Entrada-Sortida"
#: editor/property_editor.cpp
msgid "Easing Out-In"
-msgstr ""
+msgstr "Esmorteeix Sortida-Entrada"
#: editor/property_editor.cpp
msgid "File.."
-msgstr ""
+msgstr "Fitxer..."
#: editor/property_editor.cpp
msgid "Dir.."
-msgstr ""
+msgstr "Directori..."
#: editor/property_editor.cpp
msgid "Assign"
-msgstr ""
+msgstr "Assigna"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Select Node"
-msgstr "Mètodes públics:"
+msgstr "Selecciona un Node"
#: editor/property_editor.cpp
-#, fuzzy
msgid "New Script"
-msgstr "Executa Script"
+msgstr "Script Nou"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "Crea SubRecurs Únic"
+msgstr "Fes-lo Únic"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Show in File System"
-msgstr "SistemaDeFitxers"
+msgstr "Mostra'l en el Sistema de Fitxers"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "Converteix a..."
+msgstr "Converteix a %s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
-msgstr ""
+msgstr "S'ha produït un error en llegir el fitxer: No és un recurs!"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Selected node is not a Viewport!"
-msgstr "Selecciona Node(s) per Importar"
+msgstr "El Node seleccionat no és una Vista!"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Node"
-msgstr "Camí al Node:"
+msgstr "Escull un Node"
#: editor/property_editor.cpp
msgid "Bit %d, val %d."
-msgstr ""
+msgstr "Bit %d, valor %d."
#: editor/property_editor.cpp
msgid "On"
-msgstr ""
+msgstr "Activat"
#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
msgid "Set"
-msgstr "Especifica"
+msgstr "Estableix"
#: editor/property_editor.cpp
msgid "Properties:"
-msgstr ""
+msgstr "Propietats:"
#: editor/property_editor.cpp
msgid "Sections:"
-msgstr ""
+msgstr "Seccions:"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Property"
-msgstr "Afegeix Col.locador de Proprietat (Setter)"
+msgstr "Selecciona una Propietat"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Virtual Method"
-msgstr "Mètodes públics:"
+msgstr "Selecciona un Mètode Virtual"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Method"
-msgstr "Mètodes públics:"
+msgstr "Selecciona un Mètode"
#: editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
-msgstr ""
+msgstr "No s'ha pogut executar l'eina PVRTC:"
#: editor/pvrtc_compress.cpp
msgid "Can't load back converted image using PVRTC tool:"
-msgstr ""
+msgstr "No es pot recarregar la imatge convertida amb PVRTC:"
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent Node"
-msgstr ""
+msgstr "Torna a Parentar el Node"
#: editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr ""
+msgstr "Reemparentar l'Ubicació (Selecciona un nou Pare):"
#: editor/reparent_dialog.cpp
msgid "Keep Global Transform"
-msgstr ""
+msgstr "Manté la Transformació Global"
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent"
-msgstr ""
+msgstr "Canvia el Parentatge"
#: editor/run_settings_dialog.cpp
msgid "Run Mode:"
-msgstr ""
+msgstr "Mode d'Execució:"
#: editor/run_settings_dialog.cpp
msgid "Current Scene"
-msgstr ""
+msgstr "Escena Actual"
#: editor/run_settings_dialog.cpp
msgid "Main Scene"
-msgstr ""
+msgstr "Escena Principal"
#: editor/run_settings_dialog.cpp
msgid "Main Scene Arguments:"
-msgstr ""
+msgstr "Arguments de l'Escena Principal:"
#: editor/run_settings_dialog.cpp
msgid "Scene Run Settings"
-msgstr "Configuració d'Execució d'Escenes"
+msgstr "Configuració de l'Execució de l'Escena"
#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp
#: scene/gui/dialogs.cpp
@@ -6272,737 +6420,730 @@ msgstr "D'acord"
#: editor/scene_tree_dock.cpp
msgid "No parent to instance the scenes at."
-msgstr ""
+msgstr "Manca un Node Pare per instanciar-li l'escena."
#: editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
-msgstr ""
+msgstr "Error en carregar l'escena des de %s"
#: editor/scene_tree_dock.cpp
msgid "Ok"
-msgstr ""
+msgstr "D'acord"
#: editor/scene_tree_dock.cpp
msgid ""
"Cannot instance the scene '%s' because the current scene exists within one "
"of its nodes."
msgstr ""
+"No es pot instanciar l'escena %s ja que l'escena actual ja existeix dins un "
+"dels seus nodes."
#: editor/scene_tree_dock.cpp
msgid "Instance Scene(s)"
-msgstr ""
+msgstr "Instància les Escenes"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on the tree root."
-msgstr ""
+msgstr "Aquesta operació no es pot executar en l'arrel de l'arbre."
#: editor/scene_tree_dock.cpp
msgid "Move Node In Parent"
-msgstr ""
+msgstr "Mou el Node dins del Pare"
#: editor/scene_tree_dock.cpp
msgid "Move Nodes In Parent"
-msgstr ""
+msgstr "Mou els Nodes dins del Pare"
#: editor/scene_tree_dock.cpp
msgid "Duplicate Node(s)"
-msgstr ""
+msgstr "Duplica els Nodes"
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)?"
-msgstr ""
+msgstr "Elimina els Nodes?"
#: editor/scene_tree_dock.cpp
msgid "Can not perform with the root node."
-msgstr ""
+msgstr "No es pot executar en el node arrel."
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
-msgstr ""
+msgstr "Aquesta operació no es pot dur a terme en escenes instanciadas."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As.."
-msgstr ""
+msgstr "Anomena i Desa la Nova Escena..."
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
-msgstr ""
+msgstr "Fills Editables"
#: editor/scene_tree_dock.cpp
msgid "Load As Placeholder"
-msgstr ""
+msgstr "Carrega com a Contenidor Temporal"
#: editor/scene_tree_dock.cpp
msgid "Discard Instancing"
-msgstr ""
+msgstr "Descarta l'instància"
#: editor/scene_tree_dock.cpp
msgid "Makes Sense!"
-msgstr ""
+msgstr "Entesos!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr ""
+msgstr "No es pot operar en Nodes d'una escena externa!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
-msgstr ""
+msgstr "No es pot operar en nodes heretats per l'escena actual!"
#: editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
-msgstr ""
+msgstr "Elimina els Nodes"
#: editor/scene_tree_dock.cpp
msgid ""
"Couldn't save new scene. Likely dependencies (instances) couldn't be "
"satisfied."
msgstr ""
+"No es pot desar l'Escena. És força probable que manqui alguna Dependència / "
+"Instància."
#: editor/scene_tree_dock.cpp
msgid "Error saving scene."
-msgstr ""
+msgstr "Error en desar l'escena."
#: editor/scene_tree_dock.cpp
msgid "Error duplicating scene to save it."
-msgstr ""
+msgstr "Error en duplicar l'escena per desar-la."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Sub-Resources:"
-msgstr "Recurs"
+msgstr "Sub-Recursos:"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
-msgstr ""
+msgstr "Elimina l'Herència"
#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
msgid "Open in Editor"
-msgstr ""
+msgstr "Obre en l'Editor"
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)"
-msgstr ""
+msgstr "Elimina els Nodes"
#: editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr ""
+msgstr "Afegeix un Node Fill"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr ""
+msgstr "Instancia una Escena Filla"
#: editor/scene_tree_dock.cpp
msgid "Change Type"
-msgstr ""
+msgstr "Modifica el Tipus"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Attach Script"
-msgstr "Executa Script"
+msgstr "Adjunta-li un Script"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Clear Script"
-msgstr "Executa Script"
+msgstr "Esborra l'Script"
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr ""
+msgstr "Combina-ho a partir de l'Escena"
#: editor/scene_tree_dock.cpp
msgid "Save Branch as Scene"
-msgstr ""
+msgstr "Desa la Branca com un Escena"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Copy Node Path"
-msgstr "Copia Camí"
+msgstr "Copia el Camí del Node"
#: editor/scene_tree_dock.cpp
msgid "Delete (No Confirm)"
-msgstr ""
+msgstr "Elimina (Sense Confirmació)"
#: editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
-msgstr ""
+msgstr "Afegeix/Crea un Node Nou"
#: editor/scene_tree_dock.cpp
msgid ""
"Instance a scene file as a Node. Creates an inherited scene if no root node "
"exists."
msgstr ""
+"Instancia l'escena com a Node. Crea una escena heretada si no existís un "
+"node arrel."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Filter nodes"
-msgstr "Filtres"
+msgstr "Filtre els Nodes"
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script for the selected node."
-msgstr ""
+msgstr "Adjunta un Script nou o existent per al Node Seleccionat."
#: editor/scene_tree_dock.cpp
msgid "Clear a script for the selected node."
-msgstr ""
+msgstr "Reestableix un Script per al node Seleccionat."
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "Remot"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "Local"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
-msgstr ""
+msgstr "Elimina l'Herència (No es pot desfer!)"
#: editor/scene_tree_dock.cpp
msgid "Clear!"
-msgstr ""
+msgstr "Elimina!"
#: editor/scene_tree_editor.cpp
msgid "Toggle Spatial Visible"
-msgstr ""
+msgstr "Visibilitat dels Espacials"
#: editor/scene_tree_editor.cpp
msgid "Toggle CanvasItem Visible"
-msgstr ""
+msgstr "Visibilitat del CanvasItem"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
-msgstr ""
+msgstr "Avís de Configuració del Node:"
#: editor/scene_tree_editor.cpp
msgid ""
"Node has connection(s) and group(s)\n"
"Click to show signals dock."
msgstr ""
+"El Node té connexions i grups\n"
+"Feu Clic per mostrar el Tauler de Senyals."
#: editor/scene_tree_editor.cpp
msgid ""
"Node has connections.\n"
"Click to show signals dock."
msgstr ""
+"El Node té connexions.\n"
+"Feu Clic per mostrar el Tauler de Senyals."
#: editor/scene_tree_editor.cpp
msgid ""
"Node is in group(s).\n"
"Click to show groups dock."
msgstr ""
+"El Node està agrupat.\n"
+"Clic per mostrar el Tauler de Grups."
#: editor/scene_tree_editor.cpp
msgid "Instance:"
-msgstr ""
+msgstr "Instància:"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Open script"
-msgstr "Obertura Ràpida d'Scripts..."
+msgstr "Obre un Script"
#: editor/scene_tree_editor.cpp
msgid ""
"Node is locked.\n"
"Click to unlock"
msgstr ""
+"El Node està blocat. \n"
+"Feu clic per desblocar-lo"
#: editor/scene_tree_editor.cpp
msgid ""
"Children are not selectable.\n"
"Click to make selectable"
msgstr ""
+"Els Nodes fills no es pot seleccionar.\n"
+"Feu Clic per a poder seleccionar-los"
#: editor/scene_tree_editor.cpp
msgid "Toggle Visibility"
-msgstr ""
+msgstr "Visibilitat"
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
-msgstr ""
+msgstr "El Nom del node no és vàlid. No es permeten els caràcters següents:"
#: editor/scene_tree_editor.cpp
msgid "Rename Node"
-msgstr ""
+msgstr "Reanomena el Node"
#: editor/scene_tree_editor.cpp
msgid "Scene Tree (Nodes):"
-msgstr ""
+msgstr "Arbre d'Escenes (Nodes):"
#: editor/scene_tree_editor.cpp
msgid "Node Configuration Warning!"
-msgstr ""
+msgstr "Avís de Configuració del Node!"
#: editor/scene_tree_editor.cpp
msgid "Select a Node"
-msgstr ""
+msgstr "Selecciona un Node"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading template '%s'"
-msgstr "Error carregant lletra."
+msgstr "Error en carregar la plantilla '%s'"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error - Could not create script in filesystem."
-msgstr "No s'ha pogut crear la carpeta."
+msgstr "Error - No s'ha pogut crea l'Script en el sistema de fitxers."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading script from %s"
-msgstr "Error carregant lletra."
+msgstr "Error en carregar l'Script des de '%s'"
#: editor/script_create_dialog.cpp
msgid "N/A"
-msgstr ""
+msgstr "No Disponible"
#: editor/script_create_dialog.cpp
msgid "Path is empty"
-msgstr ""
+msgstr "El camí és Buit"
#: editor/script_create_dialog.cpp
msgid "Path is not local"
-msgstr ""
+msgstr "El Camí no és local"
#: editor/script_create_dialog.cpp
msgid "Invalid base path"
-msgstr ""
+msgstr "El Camí de base no és vàlid"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "Ja existeix un directori amb el mateix nom"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "Fitxer Existent, Sobreescriure?"
+msgstr "El fitxer ja existeix i serà reutilitzat"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
-msgstr ""
+msgstr "L'extensió no és vàlida"
#: editor/script_create_dialog.cpp
msgid "Wrong extension chosen"
-msgstr ""
+msgstr "L'extensió triada no és correcta"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid Path"
-msgstr "Camí no vàlid."
+msgstr "Camí no vàlid"
#: editor/script_create_dialog.cpp
msgid "Invalid class name"
-msgstr ""
+msgstr "El Nom de Classe no és vàlid"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid inherited parent name or path"
-msgstr "El Nom de la propietat index és invàlid."
+msgstr "El Nom o camí del Pare heretat no és vàlid"
#: editor/script_create_dialog.cpp
msgid "Script valid"
-msgstr ""
+msgstr "L'Script és vàlid"
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9 and _"
-msgstr ""
+msgstr "Permesos: a-z, a-Z, 0-9 i _"
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)"
-msgstr ""
+msgstr "Script Integrat (en un fitxer d'escena)"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Create new script file"
-msgstr "Crea Subscripció"
+msgstr "Crea un nou Script"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Load existing script file"
-msgstr "No s'ha pogut instanciar l'script:"
+msgstr "Carrega un Script existent"
#: editor/script_create_dialog.cpp
msgid "Language"
-msgstr ""
+msgstr "Llengua"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Inherits"
-msgstr "Hereta:"
+msgstr "Hereta"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Class Name"
-msgstr "Classe:"
+msgstr "Nom de Classe"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Template"
-msgstr "Treu la Selecció"
+msgstr "Plantilla"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Built-in Script"
-msgstr "Executa Script"
+msgstr "Script Integrat"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Attach Node Script"
-msgstr "Executa Script"
+msgstr "Adjunta un Script de Node"
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Remot "
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
-msgstr ""
+msgstr "Bytes:"
#: editor/script_editor_debugger.cpp
msgid "Warning"
-msgstr ""
+msgstr "Avís"
#: editor/script_editor_debugger.cpp
msgid "Error:"
-msgstr ""
+msgstr "Error:"
#: editor/script_editor_debugger.cpp
msgid "Source:"
-msgstr ""
+msgstr "Origen:"
#: editor/script_editor_debugger.cpp
msgid "Function:"
-msgstr ""
+msgstr "Funció:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "Trieu un o més elements de la llista per mostrar el Graf."
#: editor/script_editor_debugger.cpp
msgid "Errors"
-msgstr ""
+msgstr "Errors"
#: editor/script_editor_debugger.cpp
msgid "Child Process Connected"
-msgstr ""
+msgstr "Procés Fill Connectat"
#: editor/script_editor_debugger.cpp
msgid "Inspect Previous Instance"
-msgstr ""
+msgstr "Inspecciona la Instància anterior"
#: editor/script_editor_debugger.cpp
msgid "Inspect Next Instance"
-msgstr ""
+msgstr "Inspecciona la Instància següent"
#: editor/script_editor_debugger.cpp
+#, fuzzy
msgid "Stack Frames"
-msgstr ""
+msgstr "Fotogrames de la Pila"
#: editor/script_editor_debugger.cpp
msgid "Variable"
-msgstr ""
+msgstr "Variable"
#: editor/script_editor_debugger.cpp
msgid "Errors:"
-msgstr ""
+msgstr "Errors:"
#: editor/script_editor_debugger.cpp
msgid "Stack Trace (if applicable):"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
+msgstr "Traça de la Pila (si s'escau):"
#: editor/script_editor_debugger.cpp
msgid "Profiler"
-msgstr ""
+msgstr "Perfilador"
#: editor/script_editor_debugger.cpp
msgid "Monitor"
-msgstr ""
+msgstr "Monitor"
#: editor/script_editor_debugger.cpp
msgid "Value"
-msgstr ""
+msgstr "Valor"
#: editor/script_editor_debugger.cpp
msgid "Monitors"
-msgstr ""
+msgstr "Monitors"
#: editor/script_editor_debugger.cpp
msgid "List of Video Memory Usage by Resource:"
-msgstr ""
+msgstr "Llista d'Ús de la Memòria de Vídeo per Recurs:"
#: editor/script_editor_debugger.cpp
msgid "Total:"
-msgstr ""
+msgstr "Total:"
#: editor/script_editor_debugger.cpp
msgid "Video Mem"
-msgstr ""
+msgstr "Memòria de Vídeo"
#: editor/script_editor_debugger.cpp
msgid "Resource Path"
-msgstr ""
+msgstr "Camí de Recursos"
#: editor/script_editor_debugger.cpp
msgid "Type"
-msgstr ""
+msgstr "Tipus"
#: editor/script_editor_debugger.cpp
msgid "Format"
-msgstr ""
+msgstr "Format"
#: editor/script_editor_debugger.cpp
msgid "Usage"
-msgstr ""
+msgstr "Ús"
#: editor/script_editor_debugger.cpp
msgid "Misc"
-msgstr ""
+msgstr "Miscel·lània"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control:"
-msgstr ""
+msgstr "Controls Clicats:"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control Type:"
-msgstr ""
+msgstr "Tipus de Controls Clicats:"
#: editor/script_editor_debugger.cpp
msgid "Live Edit Root:"
-msgstr ""
+msgstr "Arrel per l'Edició en directe:"
#: editor/script_editor_debugger.cpp
msgid "Set From Tree"
-msgstr ""
+msgstr "Estableix des de l'Arbre"
#: editor/settings_config_dialog.cpp
msgid "Shortcuts"
-msgstr ""
+msgstr "Dreceres"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Light Radius"
-msgstr ""
+msgstr "Modifica el Radi de Llum"
#: editor/spatial_editor_gizmos.cpp
msgid "Change AudioStreamPlayer3D Emission Angle"
-msgstr ""
+msgstr "Modifica l'angle d'emissió de l'AudioStreamPlayer3D"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
-msgstr ""
+msgstr "Modifica el Camp de Visió de la Càmera"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera Size"
-msgstr ""
+msgstr "Modifica la Mida de la Càmera"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Sphere Shape Radius"
-msgstr ""
+msgstr "Modifica el Radi d'un Forma Esfèrica"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Box Shape Extents"
-msgstr ""
+msgstr "Modifica l'abast de la Forma Caixa"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Radius"
-msgstr ""
+msgstr "Modifica el radi d'una Forma Càpsula"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Height"
-msgstr ""
+msgstr "Modifica l'alçada de la Forma Caixa"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Ray Shape Length"
-msgstr ""
+msgstr "Modifica la longitud de la Forma Raig"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Notifier Extents"
-msgstr ""
+msgstr "Modifica l'abast dels Notificadors"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Particles AABB"
-msgstr ""
+msgstr "Modifica les Partícules AABB"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
-msgstr ""
+msgstr "Modifica l'abast de la Sonda"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Library"
-msgstr "Biblioteca de Models (MeshLibrary)..."
+msgstr "Biblioteca"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Status"
-msgstr "Estat:"
+msgstr "Estat"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Biblioteques: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDNatiu"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Argument de tipus invàlid per a convert(), utilitzi constants TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr ""
-"Nombre insuficient de bytes per a descodificar els bytes, o el format és "
-"invàlid."
+msgstr "Manquen bytes per a descodificar els bytes, o el format no és vàlid."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
+#, fuzzy
msgid "step argument is zero!"
-msgstr "L'argument pas (step) és zero!"
+msgstr "L'argument 'Pas' és zero!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Script sense instància"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
-msgstr "No basat en un script"
+msgstr "No basat en un Script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "No basat en un arxiu de recursos"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Format del diccionari d'instàncies invàlid (manca @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-"Format del diccionari d'instàncies invàlid (no es pot carregar l'script a "
+"Format del diccionari d'instàncies invàlid (no es pot carregar l'Script a "
"@path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr "Format del diccionari d'instàncies invàlid (script invàlid a @path)"
+msgstr "Format del diccionari d'instàncies invàlid (Script invàlid a @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Diccionari d'instàncies invàlid (subclasses invàlides)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
-msgstr ""
+msgstr "L'objecte no pot proporcionar una longitud."
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "GridMap Delete Selection"
-msgstr "Elimina Seleccionats"
+msgstr "Elimina la Selecció en el Mapa de Graella"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Duplicate Selection"
-msgstr "Duplica la Selecció"
+msgstr "Duplica la Selecció del Mapa de Graella"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "Planta:"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Mapa de Graella"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
-msgstr ""
+msgstr "Alinea la Vista"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+msgid "Previous Floor"
+msgstr "Planta Anterior"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
-msgstr ""
+msgid "Next Floor"
+msgstr "Planta Següent"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Clip Disabled"
-msgstr "Desactivat"
+msgstr "Clip Desactivat"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
-msgstr ""
+msgstr "Clip Damunt"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Below"
-msgstr ""
+msgstr "Clip Avall"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit X Axis"
-msgstr ""
+msgstr "Edita l'Eix X"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit Y Axis"
-msgstr ""
+msgstr "Edita l'Eix Y"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit Z Axis"
-msgstr ""
+msgstr "Edita l'Eix Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate X"
-msgstr ""
+msgstr "Gira X en el Cursor"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate Y"
-msgstr ""
+msgstr "Gira Y en el Cursor"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate Z"
-msgstr ""
+msgstr "Gira Z en el Cursor"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate X"
-msgstr ""
+msgstr "Gira Enrere X en el Cursor"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Y"
-msgstr ""
+msgstr "Gira Enrere Y en el Cursor"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Z"
-msgstr ""
+msgstr "Gira Enrere Z en el Cursor"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Clear Rotation"
-msgstr ""
+msgstr "Reestableix la Rotació del Cursor"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Create Area"
-msgstr "Crea Nou"
+msgstr "Crea una Àrea"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Create Exterior Connector"
-msgstr ""
+msgstr "Crea un Connector Exterior"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Erase Area"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Selecció Només"
+msgstr "Esborra l'Àrea"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Selecció Només"
+msgid "Clear Selection"
+msgstr "Esborra la Selecció"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Settings"
-msgstr "Configuració de Desplaçament"
+msgstr "Configuració del Mapa de Graella"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Pick Distance:"
-msgstr ""
+msgstr "Trieu la distància:"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
-msgstr ""
+msgstr "Muntatges"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -7043,28 +7184,24 @@ msgid "Stack overflow with stack depth: "
msgstr "Pila desbordada (stack overflow) amb profunditat de Pila: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Signal Arguments"
-msgstr "Edita els Arguments del Senyal:"
+msgstr "Modifica els Arguments del Senyal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument Type"
-msgstr "Canvia Tipus de la Matriu"
+msgstr "Modifica el Tipus d'Argument"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument name"
-msgstr "Canvia Valor de la Matriu"
+msgstr "Modifica el nom de l'Argument"
#: modules/visual_script/visual_script_editor.cpp
msgid "Set Variable Default Value"
-msgstr ""
+msgstr "Estableix el Valor Predeterminat de la Variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Set Variable Type"
-msgstr "Edita Variable:"
+msgstr "Estableix el Tipus de Variable"
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
@@ -7096,39 +7233,37 @@ msgstr "Reanomena Senyal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Function"
-msgstr "Afegeix Funció"
+msgstr "Afegir Funció"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
-msgstr "Afegeix Variable"
+msgstr "Afegir Variable"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Signal"
-msgstr "Afegeix Senyal"
+msgstr "Afegeix un Senyal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Expression"
-msgstr "Canvia Transició"
+msgstr "Modifica l'Expressió"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
-msgstr "Afegeix Node"
+msgstr "Afegeix un Node"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Nodes"
-msgstr "Treu claus invàlides"
+msgstr "Elimina els Nodes de VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Duplicate VisualScript Nodes"
-msgstr ""
+msgstr "Duplica els Nodes de VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Retén Meta per dipositar un mètode Accessor (Getter). Retén Maj per "
-"dipositar una firma genèrica."
+"Prem %s per afegir un mètode d'accés. Prem Maj. per afegir-hi una firma "
+"genèrica."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
@@ -7137,16 +7272,16 @@ msgstr ""
"dipositar una firma genèrica."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "Retén Meta per dipositar una referència simple al node."
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "Prem %s per afegir una referència simple al node."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Retén Ctrl per dipositar una referència simple al node."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "Retén Meta per dipositar una variable d'Actualització (Setter)."
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Prem %s per afegir un mètode d'Actualització Variable."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7154,44 +7289,39 @@ msgstr "Retén Ctrl per dipositar una Variable d'Actualització (Setter)."
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Preload Node"
-msgstr "Afegeix Node de Precàrrega"
+msgstr "Afegir Node de Precàrrega"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
-msgstr "Afegeix Node(s) des d'Arbre"
+msgstr "Afegir Node(s) des d'Arbre"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Getter Property"
-msgstr "Afegeix Propietat d'Accés (Getter)"
+msgstr "Afegir Propietat d'Accés (Getter)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Setter Property"
-msgstr "Afegeix Propietat d'Actualització (Setter)"
+msgstr "Afegeix una Propietat d'Actualització"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Base Type"
-msgstr "Canvia Tipus de la Matriu"
+msgstr "Modifica el Tipus de Base"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Move Node(s)"
-msgstr "Copia Nodes"
+msgstr "Mou els Nodes"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Node"
-msgstr "Treu Variable"
+msgstr "Elimina el Node de VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Nodes"
-msgstr "Connecta al Node:"
+msgstr "Connecta els Nodes"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Condition"
-msgstr "Transició"
+msgstr "Condició"
#: modules/visual_script/visual_script_editor.cpp
msgid "Sequence"
@@ -7210,9 +7340,8 @@ msgid "While"
msgstr "Mentre"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Return"
-msgstr "Retorn:"
+msgstr "Retorna"
#: modules/visual_script/visual_script_editor.cpp
msgid "Call"
@@ -7224,57 +7353,51 @@ msgstr "Obtenir"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr ""
+msgstr "La funció '%s' ja existeix en l'Script"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Input Value"
-msgstr "Canvia Valor de la Matriu"
+msgstr "Modifica el Valor de l'Entrada"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Can't copy the function node."
-msgstr "No es pot operar en '..'"
+msgstr "No es pot copiar el node de funció."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Clipboard is empty!"
-msgstr "El camí per desar és buit!"
+msgstr "El porta-retalls és buit!"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Paste VisualScript Nodes"
-msgstr "Camí al Node:"
+msgstr "Enganxa els Nodes de VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
-msgstr "Treu Funció"
+msgstr "Elimina la Funció"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable"
-msgstr "Edita Variable:"
+msgstr "Edita la Variable"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
-msgstr "Treu Variable"
+msgstr "Elimina la Variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal"
-msgstr "Editant Senyal:"
+msgstr "Edita el Senyal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
-msgstr "Treu Senyal"
+msgstr "Elimina el Senyal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
-msgstr "Editant Variable:"
+msgstr "Edició de la Variable:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
-msgstr "Editant Senyal:"
+msgstr "Edició del Senyal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Base Type:"
@@ -7290,7 +7413,7 @@ msgstr "Selecciona o crea una funció per editar la corba"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr "Edita els Arguments del Senyal:"
+msgstr "Edita Arguments del Senyal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
@@ -7301,9 +7424,8 @@ msgid "Delete Selected"
msgstr "Elimina Seleccionats"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Find Node Type"
-msgstr "Troba el Tipus del Node"
+msgstr "Troba el Tipus de Node"
#: modules/visual_script/visual_script_editor.cpp
msgid "Copy Nodes"
@@ -7314,9 +7436,8 @@ msgid "Cut Nodes"
msgstr "Talla els Nodes"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Paste Nodes"
-msgstr "Camí al Node:"
+msgstr "Enganxa els Nodes"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -7356,47 +7477,52 @@ msgstr ": Arguments invàlids: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr "Variable Get no trobada en el script: "
+msgstr "Variable Get no trobada en l'Script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr "Variable Set no trobada en el script: "
+msgstr "Variable Set no trobada en l'Script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
-"El node personalitzat no té cap mètode _step(), no es pot processar la corba."
+"El node personalitzat no té cap mètode _step(), no es pot processar el graf."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
-"Valor de retorn de _step() invàlid. Ha de ser un nombre enter (seq out), o "
-"una cadena de text (error)."
+"El Valor retornat per _step() no és vàlid. Ha de ser un nombre enter (seq "
+"out), o una cadena de text (error)."
#: platform/javascript/export/export.cpp
msgid "Run in Browser"
-msgstr ""
+msgstr "Executa-ho en el Navegador"
#: platform/javascript/export/export.cpp
msgid "Run exported HTML in the system's default browser."
-msgstr ""
+msgstr "Executa l'HTML exportat en el navegador per defecte."
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not write file:\n"
-msgstr "No s'ha pogut crear la carpeta."
+msgstr "No s'ha pogut escriure el fitxer:\n"
#: platform/javascript/export/export.cpp
-#, fuzzy
-msgid "Could not read file:\n"
-msgstr "No s'ha pogut crear la carpeta."
+msgid "Could not open template for export:\n"
+msgstr "No es pot obrir la plantilla d'exportació:\n"
#: platform/javascript/export/export.cpp
-#, fuzzy
-msgid "Could not open template for export:\n"
-msgstr "No s'ha pogut crear la carpeta."
+msgid "Invalid export template:\n"
+msgstr "Plantilla d'exportació no vàlida:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "No es pot llegir l'intèrpret personalitzat d’ordres HTML:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "No es pot llegir l'imatge per a la pantalla de presentació:\n"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7495,6 +7621,8 @@ msgid ""
"A material to process the particles is not assigned, so no behavior is "
"imprinted."
msgstr ""
+"En Mancar un material per processar les partícules, no s'ha imprès cap "
+"Comportament."
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
@@ -7507,64 +7635,51 @@ msgid ""
"by the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
+"El motor de físiques sobreescriurà els canvis en la mida dels nodes "
+"RigidBody2D (Caràcter o Rígid). \n"
+"Modifica la mida de les Formes de Col·lisió Filles."
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
msgstr "Cal que la propietat Camí (Path) assenyali un Node2D vàlid."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Cal que la propietat Camí (Path) assenyali un node de Vista (Viewport) "
-"vàlid. Aquest ha de ser especificat en el mode \"destinació de renderització"
-"\" (render target)."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"La Vista (Viewport) especificada en la propietat \"Camí\" (Path) ha "
-"d'utilitzar el mode 'Destinació de renderització' (render target) perquè "
-"l'sprite funcioni."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
"as parent."
msgstr ""
-"VisibilityEnable2D funciona millor quan l'arrel de l'escena editada "
-"s'utilitza com a pare."
+"Un node VisibilityEnable2D funcionarà millor en ser emparentat directament "
+"amb l'arrel de l'escena."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRCamera must have an ARVROrigin node as its parent"
-msgstr ""
+msgstr "El node ARVRCamera requereix un Pare del tipus ARVROrigin"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRController must have an ARVROrigin node as its parent"
-msgstr ""
+msgstr "El node ARVRController requereix un Pare del tipus ARVROrigin"
#: scene/3d/arvr_nodes.cpp
msgid ""
"The controller id must not be 0 or this controller will not be bound to an "
"actual controller"
msgstr ""
+"L'Id del Controlador no pot ser 0 si es vol vincular-lo amb Controlador real"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRAnchor must have an ARVROrigin node as its parent"
-msgstr ""
+msgstr "El node ARVRAnchor requereix un Pare del tipus ARVROrigin"
#: scene/3d/arvr_nodes.cpp
msgid ""
"The anchor id must not be 0 or this anchor will not be bound to an actual "
"anchor"
msgstr ""
+"L'Id de l'ancoratge no pot ser 0 si es vol vincular-lo amb un ancoratge real"
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node"
-msgstr ""
+msgstr "El node ARVROrigin requreix un node Fill del tipus ARVRCamera"
#: scene/3d/collision_polygon.cpp
msgid ""
@@ -7598,6 +7713,14 @@ msgstr ""
"Cal proveir una forma perquè CollisionShape funcioni. Creeu-li un recurs de "
"forma!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "S'estàn traçant les Malles"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "S'està finalitzant el Traçat"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7613,9 +7736,11 @@ msgstr ""
"proporciona dades de navegació."
#: scene/3d/particles.cpp
+#, fuzzy
msgid ""
"Nothing is visible because meshes have not been assigned to draw passes."
msgstr ""
+"Res és visible perquè no s'ha assignat cap Malla a cap passi de Dibuix."
#: scene/3d/physics_body.cpp
msgid ""
@@ -7623,12 +7748,13 @@ msgid ""
"the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
+"El motor de físiques sobreescriurà els canvis en la mida dels nodes "
+"RigidBody(Caràcter o Rígid). \n"
+"Modifica la mida de les Formes de Col. lisió Filles."
#: scene/3d/remote_transform.cpp
-#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
-msgstr ""
-"Cal que la propietat Camí (Path) assenyali cap a un node Particles2D vàlid."
+msgstr "Cal que la propietat Camí assenyali cap a un node Spatial vàlid."
#: scene/3d/scenario_fx.cpp
msgid ""
@@ -7650,14 +7776,17 @@ msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
msgstr ""
+"El motor de físiques sobreescriurà els canvis en la mida dels nodes "
+"RigidBody(Caràcter o Rígid). \n"
+"Modifica la mida de les Formes de Col·lisió Filles."
#: scene/gui/color_picker.cpp
msgid "Raw Mode"
-msgstr ""
+msgstr "Mode Cru"
#: scene/gui/color_picker.cpp
msgid "Add current color as a preset"
-msgstr ""
+msgstr "Afegeix el Color actual com a predeterminat"
#: scene/gui/dialogs.cpp
msgid "Cancel"
@@ -7671,6 +7800,11 @@ msgstr "Ep!"
msgid "Please Confirm..."
msgstr "Confirmeu..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Selecciona un Mètode"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7682,17 +7816,27 @@ msgstr ""
"s'edita, però s'ocultaran durant l'execució."
#: scene/gui/scroll_container.cpp
+#, fuzzy
msgid ""
"ScrollContainer is intended to work with a single child control.\n"
"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
"minimum size manually."
msgstr ""
+"ScrollContainer està pensat per treballar amb un sol control fill.\n"
+"Utilitza un contenidor (VBox, HBox,...) com a fill, o utilitza un Control i "
+"estableix manualment una mida mínima personalitzada."
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Altres)"
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
"> Default Environment) could not be loaded."
msgstr ""
+"No es pot carregar l'Entorn per Defecte especificat en la Configuració del "
+"Projecte (Renderització->Visualització->Entorn Per Defecte)."
#: scene/main/viewport.cpp
msgid ""
@@ -7722,6 +7866,59 @@ msgstr "Error carregant lletra."
msgid "Invalid font size."
msgstr "La mida de la lletra no és vàlida."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "No es pot navegar fins '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "Font: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Elimina un Punt de la Línia2D"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Afegeix punt a la Línia2D"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Mou el Punt de la Línia2D"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Parteix el Segment (en la línia)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta +"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Configuració"
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Selecció Només"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Selecció Només"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Cal que la propietat Camí (Path) assenyali un node de Vista (Viewport) "
+#~ "vàlid. Aquest ha de ser especificat en el mode \"destinació de "
+#~ "renderització\" (render target)."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "La Vista (Viewport) especificada en la propietat \"Camí\" (Path) ha "
+#~ "d'utilitzar el mode 'Destinació de renderització' (render target) perquè "
+#~ "l'sprite funcioni."
+
#~ msgid "Filter:"
#~ msgstr "Filtre:"
@@ -7740,9 +7937,6 @@ msgstr "La mida de la lletra no és vàlida."
#~ msgid "Removed:"
#~ msgstr "Eliminat:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Error en desar atles:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "No s'ha pogut desar la subtextura de l'atles:"
@@ -8179,9 +8373,6 @@ msgstr "La mida de la lletra no és vàlida."
#~ msgid "Save Translatable Strings"
#~ msgstr "Desa els texts Traduïbles"
-#~ msgid "Install Export Templates"
-#~ msgstr "Instal·la Plantilles d'Exportació"
-
#, fuzzy
#~ msgid "Create Android keystore"
#~ msgstr "Crea una Carpeta"
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index 8083094a39..ecbc9c950e 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -3,22 +3,24 @@
# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
+# Fadex <vitekpaulik@gmail.com>, 2017.
# Jan 'spl!te' Kondelík <j.kondelik@centrum.cz>, 2016.
+# Jiri Hysek <contact@jirihysek.com>, 2017.
# Luděk Novotný <gladosicek@gmail.com>, 2016.
# Martin Novák <maidx@seznam.cz>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-01-12 15:39+0000\n"
-"Last-Translator: Martin Novák <maidx@seznam.cz>\n"
+"PO-Revision-Date: 2017-11-25 07:45+0000\n"
+"Last-Translator: Jiri Hysek <contact@jirihysek.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/"
"cs/>\n"
"Language: cs\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 2.11-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -102,6 +104,7 @@ msgid "Anim Delete Keys"
msgstr "Animace: smazat klíÄe"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Duplikovat výběr"
@@ -321,7 +324,7 @@ msgstr "Přechod"
#: editor/animation_editor.cpp
msgid "Scale Ratio:"
-msgstr ""
+msgstr "Poměr velikosti:"
#: editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
@@ -426,7 +429,7 @@ msgstr ""
#: editor/code_editor.cpp
msgid "Backwards"
-msgstr ""
+msgstr "Pozpátku"
#: editor/code_editor.cpp
msgid "Prompt On Replace"
@@ -465,6 +468,8 @@ msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
+"Cílová metoda nenalezena! Specifikujte existující metodu, nebo k cílovému "
+"uzlu připojte skript."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
@@ -557,11 +562,11 @@ msgstr "Vytvořit nový"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
msgid "Favorites:"
-msgstr ""
+msgstr "Oblíbené:"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
msgid "Recent:"
-msgstr ""
+msgstr "Nedávné:"
#: editor/create_dialog.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -580,7 +585,7 @@ msgstr "Shody:"
#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_editor_debugger.cpp
msgid "Description:"
-msgstr ""
+msgstr "Popis:"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
@@ -636,6 +641,13 @@ msgstr "Editor závislostí"
msgid "Search Replacement Resource:"
msgstr "Hledat náhradní zdroj:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Otevřít"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Vlastníci:"
@@ -655,7 +667,7 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "Nelze odstranit:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -691,7 +703,7 @@ msgstr "Vlastní"
#: editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr ""
+msgstr "Zdroje bez explicitního vlastnictví:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Orphan Resource Explorer"
@@ -708,13 +720,22 @@ msgstr "Odstranit vybrané soubory?"
msgid "Delete"
msgstr "Odstranit"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "ZmÄ›nit slovníkový klíÄ"
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "Změnit hodnotu pole"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
-msgstr ""
+msgstr "Děkujeme za komunitu Godotu!"
#: editor/editor_about.cpp
msgid "Thanks!"
-msgstr ""
+msgstr "Díky!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -727,55 +748,55 @@ msgstr "Nastavení projektu"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "Vedoucí vývojář"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr ""
+msgstr "Projektový manažer"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "Vývojáři"
#: editor/editor_about.cpp
msgid "Authors"
-msgstr ""
+msgstr "Autoři"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Platinoví sponzoři"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Zlatí sponzoři"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Malí sponzoři"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Zlatí dárci"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Stříbrní dárci"
#: editor/editor_about.cpp
msgid "Bronze Donors"
-msgstr ""
+msgstr "Bronzoví dárci"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Dárci"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "Licence"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "Licence třetích stran"
#: editor/editor_about.cpp
msgid ""
@@ -797,11 +818,11 @@ msgstr "Spojité"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "Licence"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "NepodaÅ™ilo se otevřít balíÄek, není ve formátu zip."
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -809,7 +830,7 @@ msgstr ""
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr ""
+msgstr "BalíÄek byl úspěšnÄ› nainstalován!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -819,11 +840,11 @@ msgstr ""
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Install"
-msgstr ""
+msgstr "Instalovat"
#: editor/editor_asset_installer.cpp
msgid "Package Installer"
-msgstr ""
+msgstr "Instalátor balíÄků"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -831,7 +852,7 @@ msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
-msgstr ""
+msgstr "Přidat efekt"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -969,7 +990,7 @@ msgstr ""
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr ""
+msgstr "Uložit jako"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
@@ -1056,7 +1077,7 @@ msgstr "Cesta:"
#: editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr ""
+msgstr "Název uzlu:"
#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
msgid "Name"
@@ -1068,7 +1089,7 @@ msgstr "Singleton"
#: editor/editor_autoload_settings.cpp
msgid "List:"
-msgstr ""
+msgstr "Seznam:"
#: editor/editor_data.cpp
msgid "Updating Scene"
@@ -1128,6 +1149,11 @@ msgid "File Exists, Overwrite?"
msgstr "Soubor už existuje. Přepsat?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Vytvořit složku"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Všechny rozpoznatelné"
@@ -1135,12 +1161,6 @@ msgstr "Všechny rozpoznatelné"
msgid "All Files (*)"
msgstr "Všechny soubory (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Otevřít"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Otevřít soubor"
@@ -1207,7 +1227,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Go to parent folder"
msgstr "Nelze vytvořit složku."
@@ -1505,6 +1525,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1615,6 +1650,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1742,11 +1781,20 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+#, fuzzy
+msgid "%d more folders"
+msgstr "Nelze vytvořit složku."
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1758,6 +1806,11 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Add a new scene."
+msgstr "Přidat nové stopy."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1822,13 +1875,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Zpět"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Znovu"
@@ -2089,11 +2141,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2155,7 +2207,7 @@ msgstr "Otevřít složku"
msgid "Open Script Editor"
msgstr "Editor závislostí"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2316,6 +2368,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2351,6 +2407,111 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Připojit.."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "Nelze vytvořit složku."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "Chyba nahrávání fontu."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "Připojit.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Disconnected"
+msgstr "Odpojit"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Připojit.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "Připojit.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "Připojit"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Testované"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "Chyba pÅ™i naÄítání:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "Připojit.."
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2376,12 +2537,21 @@ msgstr "Odstranit vybrané soubory?"
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Odstranit výběr"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2399,13 +2569,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
-"\n"
-"Source: "
-msgstr "Zdroj"
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2669,8 +2832,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2681,6 +2843,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Odstranit"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2826,6 +2993,56 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Vytvořit odběr"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Vložit"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -3019,20 +3236,11 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Can't connect."
-msgstr "Připojit.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Can't connect to host:"
msgstr "Připojit k uzlu:"
@@ -3041,30 +3249,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3094,16 +3286,6 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Connecting.."
-msgstr "Připojit.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "Testované"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
msgstr "Chyba nahrávání fontu."
@@ -3216,6 +3398,38 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "Vytvořit odběr"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Odstranit proměnnou"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "Vytvořit odběr"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Odstranit neplatné klíÄe"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3338,10 +3552,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3392,6 +3612,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3583,6 +3807,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3615,6 +3843,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3630,59 +3862,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "Běž na řádek"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4080,16 +4259,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4230,7 +4439,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4275,6 +4483,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Řadit:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4327,6 +4550,10 @@ msgstr ""
msgid "Close All"
msgstr "Zavřít"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4337,13 +4564,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4449,33 +4674,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Vyjmout"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Kopírovat"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Vybrat vše"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4498,6 +4712,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Běž na řádek"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4544,12 +4775,10 @@ msgid "Convert To Lowercase"
msgstr "Připojit k uzlu:"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4558,7 +4787,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4723,6 +4951,15 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Přechod"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4804,6 +5041,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4836,6 +5077,16 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "Soubor:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "Změnit měřítko výběru"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4967,6 +5218,11 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Přepnout breakpoint"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5244,6 +5500,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5421,7 +5681,7 @@ msgstr "Povolit"
#: editor/project_export.cpp
#, fuzzy
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr "Odstranit"
#: editor/project_export.cpp
@@ -5690,6 +5950,12 @@ msgstr ""
msgid "Can't run project"
msgstr "Připojit.."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5723,10 +5989,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5849,13 +6111,12 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Testované"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6337,6 +6598,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Odebrat"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6529,6 +6799,11 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Odebrat"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6585,18 +6860,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6728,50 +6991,50 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"Neplatný typ argumentu funkce convert(), použijte některou z konstant TYPE_*"
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Nedostatek bajtů pro dekódování bajtů, nebo špatný formát."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "Argument kroku je nula!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Skript nemá instanci"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Není založeno na skriptu"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Není založeno na zdrojovém souboru"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Neplatná instance slovníkového formátu (chybí @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "Neplatná instance slovníkového formátu (nemohu nahrát skript na @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Neplatná instance slovníkového formátu (nemohu nahrát skript na @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Neplatná instance slovníku (neplatné podtřídy)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6786,15 +7049,23 @@ msgid "GridMap Duplicate Selection"
msgstr "Duplikovat výběr"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6865,13 +7136,8 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Pouze výběr"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Pouze výběr"
+msgid "Clear Selection"
+msgstr "Změnit měřítko výběru"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7007,7 +7273,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"Podržte Meta k uvolnění getteru. Podržte Shift k uvolnění generického "
"podpisu."
@@ -7020,7 +7286,8 @@ msgstr ""
"podpisu."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+#, fuzzy
+msgid "Hold %s to drop a simple reference to the node."
msgstr "Podržte Meta k uvolnění jednoduché reference na uzel."
#: modules/visual_script/visual_script_editor.cpp
@@ -7029,8 +7296,9 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Podržte Ctrl k uvolnění jednoduché reference na uzel."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr ""
+#, fuzzy
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Podržte Meta k uvolnění jednoduché reference na uzel."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7269,12 +7537,22 @@ msgstr "Nelze vytvořit složku."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr "Nelze vytvořit složku."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr "Neplatné jméno vlastnosti."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
+msgstr "Nelze vytvořit složku."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
msgstr "Nelze vytvořit složku."
#: scene/2d/animated_sprite.cpp
@@ -7387,22 +7665,6 @@ msgid "Path property must point to a valid Node2D node to work."
msgstr ""
"Pro zajiÅ¡tÄ›ní funkÄnosti musí vlastnost path ukazovat na platný uzel Node2D."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Pro zajiÅ¡tÄ›ní funkÄností musí vlastnost path ukazovat na platný uzel "
-"Viewport. Takový Viewport musí být nastaven do módu 'render target'."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Aby tento sprite mohl fungovat, Viewport nastavený ve vlastnosti path musí "
-"být nastaven do módu 'render target'."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7469,6 +7731,14 @@ msgstr ""
"Aby CollisionShape mohl fungovat, musí mu být poskytnut tvar. Vytvořte mu "
"prosím zdroj tvar!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7543,6 +7813,11 @@ msgstr "Pozor!"
msgid "Please Confirm..."
msgstr "PotvrÄte prosím..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Vybrat vše"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7560,6 +7835,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7594,6 +7873,42 @@ msgstr "Chyba nahrávání fontu."
msgid "Invalid font size."
msgstr "Neplatná velikost fontu."
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "Zdroj"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Běž na řádek"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Testované"
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Pouze výběr"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Pouze výběr"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Pro zajiÅ¡tÄ›ní funkÄností musí vlastnost path ukazovat na platný uzel "
+#~ "Viewport. Takový Viewport musí být nastaven do módu 'render target'."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Aby tento sprite mohl fungovat, Viewport nastavený ve vlastnosti path "
+#~ "musí být nastaven do módu 'render target'."
+
#~ msgid "Filter:"
#~ msgstr "Filtr:"
diff --git a/editor/translations/da.po b/editor/translations/da.po
index 50da2c54b8..c784df0e58 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -4,19 +4,21 @@
# This file is distributed under the same license as the Godot source code.
#
# David Lamhauge <davidlamhauge@gmail.com>, 2016.
+# Kim Nielsen <kimmowich@stofanet.dk>, 2017.
+# Michael Madsen <mim@michael-madsen.dk>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-27 07:06+0000\n"
-"Last-Translator: David Lamhauge <davidlamhauge@gmail.com>\n"
+"PO-Revision-Date: 2017-11-29 08:12+0000\n"
+"Last-Translator: Kim Nielsen <kimmowich@stofanet.dk>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/"
"godot/da/>\n"
"Language: da\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.8-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -83,9 +85,8 @@ msgid "Anim Track Change Value Mode"
msgstr "Anim spor Skift værdi Mode"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Track Change Wrap Mode"
-msgstr "Anim spor Skift værdi Mode"
+msgstr "Anim Spor Skift Wrap Mode"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
@@ -100,8 +101,9 @@ msgid "Anim Delete Keys"
msgstr "Anim slet Keys"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr "Dubler valg"
+msgstr "Dupliker valgt"
#: editor/animation_editor.cpp
msgid "Duplicate Transposed"
@@ -133,7 +135,7 @@ msgstr "Anim Flyt Keys"
#: editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr "Skalering Valg"
+msgstr "Skalér markerede"
#: editor/animation_editor.cpp
msgid "Scale From Cursor"
@@ -170,7 +172,7 @@ msgstr "Ind-Ud"
#: editor/animation_editor.cpp
msgid "Out-In"
-msgstr "Out-in"
+msgstr "Ud-Ind"
#: editor/animation_editor.cpp
msgid "Transitions"
@@ -243,11 +245,11 @@ msgstr "Animation Zoom."
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "Længde (s):"
+msgstr "Længde (r):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr "Animation Længde (i sekunder)."
+msgstr "Animations Længde (i sekunder)."
#: editor/animation_editor.cpp
msgid "Step (s):"
@@ -370,9 +372,8 @@ msgid "No Matches"
msgstr "Ingen Match"
#: editor/code_editor.cpp
-#, fuzzy
msgid "Replaced %d occurrence(s)."
-msgstr "Erstattede %d tilfælde."
+msgstr "Erstattede %d forekomst(er)."
#: editor/code_editor.cpp
msgid "Replace"
@@ -420,7 +421,7 @@ msgstr "Erstattes af"
#: editor/code_editor.cpp
msgid "Case Sensitive"
-msgstr ""
+msgstr "Forskel på små og store bogstaver"
#: editor/code_editor.cpp
msgid "Backwards"
@@ -463,6 +464,8 @@ msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
+"Target metode ikke fundet! Angiv en gyldig metode eller vedhæft et script "
+"til target Noden."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
@@ -555,11 +558,11 @@ msgstr "Opret en ny"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
msgid "Favorites:"
-msgstr ""
+msgstr "Favoritter:"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
msgid "Recent:"
-msgstr ""
+msgstr "Seneste:"
#: editor/create_dialog.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -578,7 +581,7 @@ msgstr "Matches:"
#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_editor_debugger.cpp
msgid "Description:"
-msgstr ""
+msgstr "Beskrivelse:"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
@@ -632,15 +635,22 @@ msgstr "Afhængigheds Editor"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr ""
+msgstr "Søg Erstatnings Ressource:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Ã…ben"
#: editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr ""
+msgstr "Ejer af:"
#: editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
-msgstr ""
+msgstr "Fjern de valgte filer fra projekt? (ej fortrydes)"
#: editor/dependency_editor.cpp
msgid ""
@@ -648,129 +658,139 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
+"De filer der fjernes er nødvendige for, at andre ressourcer kan fungere.\n"
+"Fjern dem alligevel? (ej fortrydes)"
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "Kan ikke fjerne:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr ""
+msgstr "Load fejl:"
#: editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
+msgstr "Indlæs af Scene fejler, fordi den er afhængig af noget der mangler:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
-msgstr ""
+msgstr "Ã…ben alligevel"
#: editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr ""
+msgstr "Hvilken handling skal udføres?"
#: editor/dependency_editor.cpp
msgid "Fix Dependencies"
-msgstr ""
+msgstr "Fix Afhængigheder"
#: editor/dependency_editor.cpp
msgid "Errors loading!"
-msgstr ""
+msgstr "Fejl ved load!"
#: editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
+msgstr "Slette %d styk(s) permanent? (ej fortryd)"
#: editor/dependency_editor.cpp
msgid "Owns"
-msgstr ""
+msgstr "Ejer"
#: editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr ""
+msgstr "Ressourcer uden klart ejerskab:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr ""
+msgstr "Forældreløs ressource udforsker"
#: editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr ""
+msgstr "Slet markerede filer?"
#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
#: editor/editor_node.cpp editor/filesystem_dock.cpp
#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
msgid "Delete"
-msgstr ""
+msgstr "Slet"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Ændre ordbogs nøgle"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Ændre Dictionary Værdi"
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
-msgstr ""
+msgstr "Tak fra Godot fællesskabet!"
#: editor/editor_about.cpp
msgid "Thanks!"
-msgstr ""
+msgstr "Tak!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Godot Engine bidragsydere"
#: editor/editor_about.cpp
msgid "Project Founders"
-msgstr ""
+msgstr "Projekt grundlæggere"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "Ledende Udvikler"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr ""
+msgstr "Projektleder"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "Udviklere"
#: editor/editor_about.cpp
msgid "Authors"
-msgstr ""
+msgstr "Forfattere"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Platin sponsorer"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Guld sponsorer"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Mini sponsorer"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Guld donorer"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Sølv donorer"
#: editor/editor_about.cpp
msgid "Bronze Donors"
-msgstr ""
+msgstr "Bronze donorer"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Donorer"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "Licens"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "Tredjeparts licens"
#: editor/editor_about.cpp
msgid ""
@@ -779,269 +799,269 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"Godot Engine er afhængig af en række tredjeparts gratis og open source-"
+"biblioteker, som alle er kompatible med vilkårene i MIT-licensen. Følgende "
+"er en udtømmende liste over alle sådanne tredjepartskomponenter med deres "
+"respektive ophavsretlige udsagn og licensbetingelser."
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "Kontinuerlig"
+msgstr "Alle komponenter"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "Kontinuerlig"
+msgstr "Komponenter"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "Licenser"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "Fejl ved åbning af pakke fil, ikke i zip format."
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
-msgstr ""
+msgstr "Udpakker Aktiver"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr ""
+msgstr "Pakke installeret med succes!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "Succes!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Install"
-msgstr ""
+msgstr "Installer"
#: editor/editor_asset_installer.cpp
msgid "Package Installer"
-msgstr ""
+msgstr "Pakke Installation"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr ""
+msgstr "Højtalere"
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
-msgstr ""
+msgstr "Tilføj effekt"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "Omdøb Funktion"
+msgstr "Omdøb Audio Bus"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
-msgstr ""
+msgstr "Skift Audio Bus Solo"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr ""
+msgstr "Skift Audio Bus Mute"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "Skift Audio Bus Bypass Effekter"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
-msgstr ""
+msgstr "Vælg Audio Bus Send"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "Tilføj Audio Bus Effect"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "Flyt Bus Effect"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "Slet Valgte"
+msgstr "Slet Bus Effekt"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr ""
+msgstr "Audio Bus, Træk og slip for at omrokerer."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr ""
+msgstr "Solo"
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Mute"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr ""
+msgstr "Skip"
#: editor/editor_audio_buses.cpp
msgid "Bus options"
-msgstr ""
+msgstr "Bus muligheder"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr ""
+msgstr "Duplikere"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "Nulstil Zoom"
+msgstr "Nulstil Volume"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "Slet Valgte"
+msgstr "Slet Effekt"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus"
-msgstr ""
+msgstr "Tilføj Audio Bus"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "Master bus kan ikke slettes!"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Audio Bus"
-msgstr "Optimer Animation"
+msgstr "Slet Audio Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Duplicate Audio Bus"
-msgstr "Dubler valg"
+msgstr "Duplikér Audio Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "Nulstil Zoom"
+msgstr "Nulstil Bus Volume"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Move Audio Bus"
-msgstr "Flyt Add Key"
+msgstr "Flyt Audio Bus"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
-msgstr ""
+msgstr "Gem Audio Bus Layout Som.."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout.."
-msgstr ""
+msgstr "Placering for Ny Layout.."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "Ã…ben Audio Bus Layout"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "Der er ingen 'res://default_bus_layout.tres' fil."
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
-msgstr ""
+msgstr "Ugyldig fil, er ikke et audio bus layout."
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
-msgstr ""
+msgstr "Tilføj Bus"
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr ""
+msgstr "Opret et nyt Bus Layout."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Load"
-msgstr ""
+msgstr "Indlæs"
#: editor/editor_audio_buses.cpp
msgid "Load an existing Bus Layout."
-msgstr ""
+msgstr "Indlæs et eksisterende Bus Layout"
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr ""
+msgstr "Gem som"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "Gem dette Bus Layout til fil."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
msgid "Load Default"
-msgstr ""
+msgstr "Indlæs Default"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "Indlæs standard Bus Layout."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
-msgstr ""
+msgstr "Ugyldigt navn."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
-msgstr ""
+msgstr "Gyldige karakterer:"
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing engine class name."
msgstr ""
+"Ugyldigt navn. Det må ikke være i konflikt med eksisterende engine class "
+"navn."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing buit-in type name."
msgstr ""
+"Ugyldigt navn. Det må ikke være i konflikt med eksisterende built-in type "
+"navne."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
+"Ugyldigt navn. Må ikke være i konflikt med eksisterende global constant navn."
#: editor/editor_autoload_settings.cpp
msgid "Invalid Path."
-msgstr ""
+msgstr "Ugyldig Sti."
#: editor/editor_autoload_settings.cpp
msgid "File does not exist."
-msgstr ""
+msgstr "Fil eksisterer ikke."
#: editor/editor_autoload_settings.cpp
msgid "Not in resource path."
-msgstr ""
+msgstr "Ikke i stien for ressource."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr ""
+msgstr "Tilføj AutoLoad"
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "Autoload '%s' eksisterer allerede!"
#: editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "Omdøb Autoload"
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Toggle AutoLoad Globals"
-msgstr ""
+msgstr "Skift Autoload Globals"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr ""
+msgstr "Flyt Autoload"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
-msgstr ""
+msgstr "Fjern Autoload"
#: editor/editor_autoload_settings.cpp
msgid "Enable"
-msgstr ""
+msgstr "Aktivér"
#: editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
-msgstr ""
+msgstr "Flytte om på Autoloads"
#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
#: scene/gui/file_dialog.cpp
@@ -1050,39 +1070,39 @@ msgstr "Sti:"
#: editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr ""
+msgstr "Node navn:"
#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
msgid "Name"
-msgstr ""
+msgstr "Navn"
#: editor/editor_autoload_settings.cpp
msgid "Singleton"
-msgstr ""
+msgstr "Singleton"
#: editor/editor_autoload_settings.cpp
msgid "List:"
-msgstr ""
+msgstr "Liste:"
#: editor/editor_data.cpp
msgid "Updating Scene"
-msgstr ""
+msgstr "Opdatere Scene"
#: editor/editor_data.cpp
msgid "Storing local changes.."
-msgstr ""
+msgstr "Gemmer lokale ændringer.."
#: editor/editor_data.cpp
msgid "Updating scene.."
-msgstr ""
+msgstr "Opdatere scene.."
#: editor/editor_dir_dialog.cpp
msgid "Please select a base directory first"
-msgstr ""
+msgstr "Vælg en basis mappe først"
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
-msgstr ""
+msgstr "Vælg en Mappe"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
@@ -1103,25 +1123,30 @@ msgstr "Kunne ikke oprette mappe."
#: editor/editor_dir_dialog.cpp
msgid "Choose"
-msgstr ""
+msgstr "Vælg"
#: editor/editor_export.cpp
msgid "Storing File:"
-msgstr ""
+msgstr "Lagrings fil:"
#: editor/editor_export.cpp
msgid "Packing"
-msgstr ""
+msgstr "Pakker"
#: editor/editor_export.cpp platform/javascript/export/export.cpp
msgid "Template file not found:\n"
-msgstr ""
+msgstr "Skabelon fil ikke fundet:\n"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File Exists, Overwrite?"
msgstr "Filen findes, overskrives?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Opret mappe"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Alle Genkendte"
@@ -1129,12 +1154,6 @@ msgstr "Alle Genkendte"
msgid "All Files (*)"
msgstr "Alle filer (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Ã…ben"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Ã…ben en Fil"
@@ -1163,48 +1182,47 @@ msgstr "Gem en fil"
#: editor/editor_file_dialog.cpp
msgid "Go Back"
-msgstr ""
+msgstr "GÃ¥ Tilbage"
#: editor/editor_file_dialog.cpp
msgid "Go Forward"
-msgstr ""
+msgstr "GÃ¥ Fremad"
#: editor/editor_file_dialog.cpp
msgid "Go Up"
-msgstr ""
+msgstr "GÃ¥ Op"
#: editor/editor_file_dialog.cpp
msgid "Refresh"
-msgstr ""
+msgstr "Opdater"
#: editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr ""
+msgstr "Skift Skjulte Filer"
#: editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
-msgstr ""
+msgstr "Skift Favorit"
#: editor/editor_file_dialog.cpp
msgid "Toggle Mode"
-msgstr ""
+msgstr "Skift Modus"
#: editor/editor_file_dialog.cpp
msgid "Focus Path"
-msgstr ""
+msgstr "Fokus Sti"
#: editor/editor_file_dialog.cpp
msgid "Move Favorite Up"
-msgstr ""
+msgstr "Flyt Favorit Op"
#: editor/editor_file_dialog.cpp
msgid "Move Favorite Down"
-msgstr ""
+msgstr "Flyt Favorit Ned"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "Kunne ikke oprette mappe."
+msgstr "GÃ¥ til overliggende mappe"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1212,7 +1230,7 @@ msgstr "Mapper & filer:"
#: editor/editor_file_dialog.cpp
msgid "Preview:"
-msgstr ""
+msgstr "Forhåndsvisning:"
#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
#: scene/gui/file_dialog.cpp
@@ -1225,117 +1243,113 @@ msgstr "Skal bruge en gyldig udvidelse."
#: editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr ""
+msgstr "Skan Kilder"
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
-msgstr ""
+msgstr "(Gen)Importér Aktiver"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
-msgstr ""
+msgstr "Søg Hjælp"
#: editor/editor_help.cpp
msgid "Class List:"
-msgstr ""
+msgstr "Class Liste:"
#: editor/editor_help.cpp
msgid "Search Classes"
-msgstr ""
+msgstr "Søg Classes"
#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Top"
-msgstr ""
+msgstr "Top"
#: editor/editor_help.cpp editor/property_editor.cpp
msgid "Class:"
-msgstr ""
+msgstr "Class:"
#: editor/editor_help.cpp editor/scene_tree_editor.cpp
msgid "Inherits:"
-msgstr ""
+msgstr "Inherits:"
#: editor/editor_help.cpp
+#, fuzzy
msgid "Inherited by:"
-msgstr ""
+msgstr "Arvet af:"
#: editor/editor_help.cpp
msgid "Brief Description:"
-msgstr ""
+msgstr "Kort Beskrivelse:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Medlemmer:"
+msgstr "Medlemmer"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "Medlemmer:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "Vælg alle"
+msgstr "Public Methods"
#: editor/editor_help.cpp
msgid "Public Methods:"
-msgstr ""
+msgstr "Public Methods:"
#: editor/editor_help.cpp
msgid "GUI Theme Items"
-msgstr ""
+msgstr "GUI Temaelementer"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
-msgstr ""
+msgstr "GUI Temaelementer:"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Signals:"
msgstr "Signaler:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Funktioner:"
+msgstr "Tællinger"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations:"
-msgstr "Funktioner:"
+msgstr "Tællinger:"
#: editor/editor_help.cpp
msgid "enum "
-msgstr ""
+msgstr "enum "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "Konstant"
+msgstr "Constants"
#: editor/editor_help.cpp
msgid "Constants:"
-msgstr ""
+msgstr "Constants:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "Opret abonnement"
+msgstr "Beskrivelse"
#: editor/editor_help.cpp
msgid "Properties"
-msgstr ""
+msgstr "Egenskaber"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Property Description:"
-msgstr "Opret abonnement"
+msgstr "Property beskrivelse:"
#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Der er i øjeblikket ingen beskrivelse af denne egenskab. Hjælp os venligst "
+"med et [color=$color][url=$url]bidrag[/url][/color]!"
#: editor/editor_help.cpp
#, fuzzy
@@ -1344,21 +1358,24 @@ msgstr "Metode liste:"
#: editor/editor_help.cpp
msgid "Method Description:"
-msgstr ""
+msgstr "Metode Beskrivelse:"
#: editor/editor_help.cpp
msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Der er i øjeblikket ingen beskrivelse af denne metode. Det vil være en stor "
+"hjælp, hvis du kan [color=$color][url=$url]bidrage[/url][/color] med en "
+"beskrivelse!"
#: editor/editor_help.cpp
msgid "Search Text"
-msgstr ""
+msgstr "Søg Tekst"
#: editor/editor_log.cpp
msgid "Output:"
-msgstr ""
+msgstr "Output:"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
@@ -1368,108 +1385,113 @@ msgstr "Clear"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Error saving resource!"
-msgstr ""
+msgstr "Fejl ved at gemme ressource!"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Save Resource As.."
-msgstr ""
+msgstr "Gem Ressource Som.."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+#, fuzzy
msgid "I see.."
-msgstr ""
+msgstr "Jeg ser.."
#: editor/editor_node.cpp
+#, fuzzy
msgid "Can't open file for writing:"
-msgstr ""
+msgstr "Kan ikke åbne fil til skrivning:"
#: editor/editor_node.cpp
msgid "Requested file format unknown:"
-msgstr ""
+msgstr "Ønskede filformat er ukendt:"
#: editor/editor_node.cpp
msgid "Error while saving."
-msgstr ""
+msgstr "Fejl når der gemmes."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "Forbind..."
+msgstr "Kan ikke åbne '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "Error loading skrifttype."
+msgstr "Error ved parsing af '%s'."
#: editor/editor_node.cpp
+#, fuzzy
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Uventet afslutning af fil '%s'."
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
-msgstr ""
+msgstr "Mangler '%s' eller det den afhænger af."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "Error loading skrifttype."
+msgstr "Fejl ved load af '%s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
-msgstr ""
+msgstr "Gemmer Scene"
#: editor/editor_node.cpp
msgid "Analyzing"
-msgstr ""
+msgstr "Analysere"
#: editor/editor_node.cpp
msgid "Creating Thumbnail"
-msgstr ""
+msgstr "Opretter Thumbnail"
#: editor/editor_node.cpp
+#, fuzzy
msgid "This operation can't be done without a tree root."
-msgstr ""
+msgstr "Denne handling kan ikke foretages uden tree root"
#: editor/editor_node.cpp
msgid ""
"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
msgstr ""
+"Kunne ikke gemme scene. Måske fordi visse afhængigheder (forekomster) ikke "
+"kunne opfyldes."
#: editor/editor_node.cpp
msgid "Failed to load resource."
-msgstr ""
+msgstr "Fejler med at indlæse ressource."
#: editor/editor_node.cpp
+#, fuzzy
msgid "Can't load MeshLibrary for merging!"
-msgstr ""
+msgstr "Kan ikke indlæse MeshLibrary til sammenlægning!"
#: editor/editor_node.cpp
msgid "Error saving MeshLibrary!"
-msgstr ""
+msgstr "Fejl, kan ikke gemme MeshLibrary!"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Can't load TileSet for merging!"
-msgstr ""
+msgstr "Kan ikke indlæse TileSet til sammenlægning!"
#: editor/editor_node.cpp
msgid "Error saving TileSet!"
-msgstr ""
+msgstr "Fejl, kan ikke gemme TileSet!"
#: editor/editor_node.cpp
msgid "Error trying to save layout!"
-msgstr ""
+msgstr "Fejl, forsøger at gemme layout!"
#: editor/editor_node.cpp
msgid "Default editor layout overridden."
-msgstr ""
+msgstr "Standard editor layout overskrevet."
#: editor/editor_node.cpp
msgid "Layout name not found!"
-msgstr ""
+msgstr "Layout navn er ikke fundet!"
#: editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr ""
+msgstr "Gendannet standardlayout til basisindstillinger."
#: editor/editor_node.cpp
msgid ""
@@ -1477,18 +1499,26 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Denne ressource tilhører en scene der var importeret, så den kan ikke "
+"redigeres.\n"
+"Læs venligst dokumentationen, for bedre at forstå arbejdsgangen der er "
+"relevant ved importering af scener."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Denne ressource tilhører en scene, der blev instanseret eller arvet.\n"
+"Ændringer vil ikke blive gemt, når denne scene gemmes."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Denne ressource var importeret, så den kan ikke redigeres. Skift "
+"indstillingerne i importpanelet og importér den igen."
#: editor/editor_node.cpp
msgid ""
@@ -1497,38 +1527,60 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Denne scene blev importeret, så ændringer i den vil ikke blive husket.\n"
+"Instancing eller inheriting vil gøre det muligt at foretage ændringer.\n"
+"Læs venligst den dokumentation der er relevant for import af scener, for "
+"bedre at forstå denne arbejdsgang."
#: editor/editor_node.cpp
-msgid "Copy Params"
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
msgstr ""
+"Dette er et fjernt objekt, så ændringer til det vil ikke blive opbevaret.\n"
+"Læs venligst dokumentationen, der er relevant for fejlfinding, for bedre at "
+"forstå denne arbejdsgang."
#: editor/editor_node.cpp
-msgid "Paste Params"
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
msgstr ""
+#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Kopier Parametre"
+
+#: editor/editor_node.cpp
+msgid "Paste Params"
+msgstr "Indsæt Parametre"
+
#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Paste Resource"
-msgstr ""
+msgstr "Indsæt Ressource"
#: editor/editor_node.cpp
msgid "Copy Resource"
-msgstr ""
+msgstr "Kopier Ressource"
#: editor/editor_node.cpp
msgid "Make Built-In"
-msgstr ""
+msgstr "Gør Indbygget"
#: editor/editor_node.cpp
msgid "Make Sub-Resources Unique"
-msgstr ""
+msgstr "Gør Under-Ressourcer Unikke"
#: editor/editor_node.cpp
msgid "Open in Help"
-msgstr ""
+msgstr "Åben i Hjælp"
#: editor/editor_node.cpp
msgid "There is no defined scene to run."
-msgstr ""
+msgstr "Der er ingen defineret scene at køre."
#: editor/editor_node.cpp
msgid ""
@@ -1536,6 +1588,9 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"Ingen hoved scene er nogen sinde blevet defineret, vælg en?\n"
+"Du kan ændre det senere i \"Projekt Indstillinger\" under kategorien "
+"'Applikation'."
#: editor/editor_node.cpp
msgid ""
@@ -1543,6 +1598,9 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"Den valgte scene '%s' findes ikke, vælg en gyldig?\n"
+"Du kan ændre det senere i \"Projekt Indstillinger\" i kategorien "
+"'applikation'."
#: editor/editor_node.cpp
msgid ""
@@ -1550,331 +1608,364 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"Den valgte scene '%s' er ikke en scenefil, vælg en gyldig en?\n"
+"Du kan ændre det senere i \"Projektindstillinger\" under kategorien "
+"'applikation'."
#: editor/editor_node.cpp
msgid "Current scene was never saved, please save it prior to running."
-msgstr ""
+msgstr "Den nuværende scene er aldrig gemt, venligst gem før du kører."
#: editor/editor_node.cpp
msgid "Could not start subprocess!"
-msgstr ""
+msgstr "Kunne ikke starte underproces!"
#: editor/editor_node.cpp
msgid "Open Scene"
-msgstr ""
+msgstr "Ã…bn Scene"
#: editor/editor_node.cpp
msgid "Open Base Scene"
-msgstr ""
+msgstr "Ã…bn Grund Scene"
#: editor/editor_node.cpp
msgid "Quick Open Scene.."
-msgstr ""
+msgstr "Hurtig Ã…bn Scene.."
#: editor/editor_node.cpp
msgid "Quick Open Script.."
-msgstr ""
+msgstr "Hurtig Ã…bn Script.."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Close"
-msgstr "Gem en fil"
+msgstr "Gem & Luk"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "Gem ændringer til '%s' før lukning?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr ""
+msgstr "Gem Scene Som.."
#: editor/editor_node.cpp
msgid "No"
-msgstr ""
+msgstr "Nej"
#: editor/editor_node.cpp
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#: editor/editor_node.cpp
msgid "This scene has never been saved. Save before running?"
-msgstr ""
+msgstr "Denne scene er aldrig blevet gemt. Gem før kørsel?"
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr ""
+msgstr "Denne operation kan ikke udføres uden en scene."
#: editor/editor_node.cpp
msgid "Export Mesh Library"
-msgstr ""
+msgstr "Eksporter Maske Bibliotek"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Denne operation kan ikke udføres uden en rod node."
#: editor/editor_node.cpp
msgid "Export Tile Set"
-msgstr ""
+msgstr "Eksporter Flise Sæt"
#: editor/editor_node.cpp
msgid "This operation can't be done without a selected node."
-msgstr ""
+msgstr "Denne operation kan ikke udføres uden en valgt node."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
-msgstr ""
+msgstr "Nuværende scene er ikke gemt. Åbn alligevel?"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
-msgstr ""
+msgstr "Kan ikke genindlæse en scene, der aldrig blev gemt."
#: editor/editor_node.cpp
msgid "Revert"
-msgstr ""
+msgstr "Vend tilbage"
#: editor/editor_node.cpp
msgid "This action cannot be undone. Revert anyway?"
-msgstr ""
+msgstr "Denne handling kan ikke fortrydes. Vend tilbage alligevel?"
#: editor/editor_node.cpp
msgid "Quick Run Scene.."
-msgstr ""
+msgstr "Hurtig Kør Scene.."
#: editor/editor_node.cpp
msgid "Quit"
-msgstr ""
+msgstr "Afslut"
#: editor/editor_node.cpp
msgid "Exit the editor?"
-msgstr ""
+msgstr "Forlad editoren?"
#: editor/editor_node.cpp
msgid "Open Project Manager?"
-msgstr ""
+msgstr "Ã…bn Projekt Manager?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Quit"
-msgstr "Gem en fil"
+msgstr "Gem & Afslut"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "Gem ændringer i følgende scener før du afslutter?"
#: editor/editor_node.cpp
msgid "Save changes the following scene(s) before opening Project Manager?"
-msgstr ""
+msgstr "Gem ændringer følgende scener, før du åbner Projekt Manager?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Denne mulighed er forældet. Situationer, hvor opdatering skal tvinges, "
+"betragtes nu som en fejl. Rapporter venligst."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
-msgstr ""
+msgstr "Vælg en Hoved Scene"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
msgstr ""
+"Kan ikke aktivere addon plugin ved: '%s' parsing af konfiguration "
+"mislykkedes."
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr ""
+msgstr "Kan ikke finde scriptfelt for addon plugin på: 'res://addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Error loading skrifttype."
+msgstr "Kan ikke loade addon script fra stien: '%s'."
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
msgstr ""
+"Kan ikke indlæse addon script fra sti: '%s' Grund typen er ikke EditorPlugin."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
+"Kan ikke indlæse addon script fra sti: '%s' Script er ikke i "
+"værktøjstilstand."
#: editor/editor_node.cpp
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
+"Scene '%s' blev automatisk importeret, så den kan ikke ændres.\n"
+"For at lave ændringer til den, kan en ny arvet scene oprettes."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+#, fuzzy
msgid "Ugh"
-msgstr ""
+msgstr "Ugh"
#: editor/editor_node.cpp
msgid ""
"Error loading scene, it must be inside the project path. Use 'Import' to "
"open the scene, then save it inside the project path."
msgstr ""
+"Fejl ved indlæsning af scenen, den skal være indenfor projektstien. Brug "
+"'Import' for at åbne scenen, og gem den så inden for projektstien."
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr ""
+msgstr "Scene '%s' har brudte afhængigheder:"
#: editor/editor_node.cpp
msgid "Clear Recent Scenes"
-msgstr ""
+msgstr "Fjern Seneste Scener"
#: editor/editor_node.cpp
msgid "Save Layout"
-msgstr ""
+msgstr "Gem Layout"
#: editor/editor_node.cpp
msgid "Delete Layout"
-msgstr ""
+msgstr "Slet Layout"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr ""
+msgstr "Standard"
#: editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr ""
+msgstr "Skift Scene Fane"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr ""
+msgid "%d more files or folders"
+msgstr "%d flere filer og mapper"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr ""
+msgid "%d more folders"
+msgstr "%d flere mapper"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d flere filer"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Dock Position"
+msgstr "Dock Position"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
-msgstr ""
+msgstr "Distraktions Fri Modus"
#: editor/editor_node.cpp
msgid "Toggle distraction-free mode."
-msgstr ""
+msgstr "Skift distraktions-fri modus."
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Tilføj en ny scene."
#: editor/editor_node.cpp
+#, fuzzy
msgid "Scene"
-msgstr ""
+msgstr "Scene"
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
-msgstr ""
+msgstr "Gå til den forrige åbnede scene."
#: editor/editor_node.cpp
msgid "Next tab"
-msgstr ""
+msgstr "Næste fane"
#: editor/editor_node.cpp
msgid "Previous tab"
-msgstr ""
+msgstr "Forrige fane"
#: editor/editor_node.cpp
msgid "Filter Files.."
-msgstr ""
+msgstr "Filtrer filer.."
#: editor/editor_node.cpp
msgid "Operations with scene files."
-msgstr ""
+msgstr "Operationer med scene filer."
#: editor/editor_node.cpp
msgid "New Scene"
-msgstr ""
+msgstr "Ny Scene"
#: editor/editor_node.cpp
msgid "New Inherited Scene.."
-msgstr ""
+msgstr "Ny Arved Scene.."
#: editor/editor_node.cpp
msgid "Open Scene.."
-msgstr ""
+msgstr "Ã…bn Scene.."
#: editor/editor_node.cpp
msgid "Save Scene"
-msgstr ""
+msgstr "Gem Scene"
#: editor/editor_node.cpp
msgid "Save all Scenes"
-msgstr ""
+msgstr "Gem alle Scener"
#: editor/editor_node.cpp
msgid "Close Scene"
-msgstr ""
+msgstr "Luk Scene"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Open Recent"
-msgstr ""
+msgstr "Ã…ben Seneste"
#: editor/editor_node.cpp
msgid "Convert To.."
-msgstr ""
+msgstr "Konverter Til.."
#: editor/editor_node.cpp
msgid "MeshLibrary.."
-msgstr ""
+msgstr "MaskeBibliotek.."
#: editor/editor_node.cpp
msgid "TileSet.."
-msgstr ""
+msgstr "FliseSæt.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Fortryd"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
-msgstr ""
+msgstr "Annuller Fortyd"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Revert Scene"
-msgstr ""
+msgstr "Vend Scene Tilbage"
#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr ""
+msgstr "Diverse projekt eller scene redskaber."
#: editor/editor_node.cpp
msgid "Project"
-msgstr ""
+msgstr "Projekt"
#: editor/editor_node.cpp
msgid "Project Settings"
-msgstr ""
+msgstr "Projekt Indstillinger"
#: editor/editor_node.cpp
msgid "Run Script"
-msgstr ""
+msgstr "Kør Script"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export"
-msgstr ""
+msgstr "Eksporter"
#: editor/editor_node.cpp
msgid "Tools"
-msgstr ""
+msgstr "Værktøjer"
#: editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr ""
+msgstr "Afslut til Projekt Listen"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#, fuzzy
msgid "Debug"
-msgstr ""
+msgstr "Debug"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr ""
+msgstr "Deploy med Remote Debug"
#: editor/editor_node.cpp
msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
msgstr ""
+"Ved eksport eller deploy, vil den resulterende eksekverbare fil forsøge at "
+"oprette forbindelse til denne computers IP adresse for at blive debugged."
#: editor/editor_node.cpp
msgid "Small Deploy with Network FS"
-msgstr ""
+msgstr "Lille Deploy med Nætværks FS"
#: editor/editor_node.cpp
msgid ""
@@ -1885,30 +1976,39 @@ msgid ""
"On Android, deploy will use the USB cable for faster performance. This "
"option speeds up testing for games with a large footprint."
msgstr ""
+"NÃ¥r denne indstilling er aktiveret, vil eksport eller deploy producere en "
+"minimal eksekverbar.\n"
+"Filsystemet vil blive leveret fra projektet af redaktøren over netværket.\n"
+"PÃ¥ Android vil deploy bruge USB-kablet til hurtigere ydeevne. Denne mulighed "
+"gør det hurtigere at teste spil, der fylder meget."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
-msgstr ""
+msgstr "Synlig Kollisionsformer"
#: editor/editor_node.cpp
msgid ""
"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
"running game if this option is turned on."
msgstr ""
+"Kollisionsformer og raycast-noder (til 2D og 3D) vil være synlige på det "
+"kørende spil, hvis denne indstilling er tændt."
#: editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr ""
+msgstr "Synlig Navigation"
#: editor/editor_node.cpp
msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
msgstr ""
+"Navigationsmasker og polygoner vil være synlige på det kørende spil, hvis "
+"denne indstilling er tændt."
#: editor/editor_node.cpp
msgid "Sync Scene Changes"
-msgstr ""
+msgstr "Synkroniser Scene Ændringer"
#: editor/editor_node.cpp
msgid ""
@@ -1917,10 +2017,14 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"Når denne indstilling er tændt, vil eventuelle ændringer til scenen i "
+"editoren blive replikeret i det kørende spil.\n"
+"Når det bruges eksternt på en enhed, er dette mere effektivt med "
+"netværksfilsystem."
#: editor/editor_node.cpp
msgid "Sync Script Changes"
-msgstr ""
+msgstr "Synkroniser Script Ændringer"
#: editor/editor_node.cpp
msgid ""
@@ -1929,47 +2033,51 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"Når denne indstilling er tændt, genindlæses gemte script, på det kørende "
+"spil.\n"
+"Når det bruges eksternt på en enhed, er dette mere effektivt med "
+"netværksfilsystem."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Editor"
-msgstr "Rediger"
+msgstr "Editor"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr ""
+msgstr "Editor Indstillinger"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Editor Layout"
-msgstr ""
+msgstr "Editor Layout"
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
-msgstr ""
+msgstr "Skift fuldskærm"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Manage Export Templates"
-msgstr ""
+msgstr "Organiser Eksport Skabeloner"
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "Hjælp"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
-msgstr ""
+msgstr "Klasser"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Online Docs"
-msgstr ""
+msgstr "Online Dokumentation"
#: editor/editor_node.cpp
msgid "Q&A"
-msgstr ""
+msgstr "Spørgsmål og Svar"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "Problem Tracker"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -1977,402 +2085,515 @@ msgstr "Fællesskabet"
#: editor/editor_node.cpp
msgid "About"
-msgstr ""
+msgstr "Om"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr ""
+msgstr "Spil projektet."
#: editor/editor_node.cpp
msgid "Play"
-msgstr ""
+msgstr "Spil"
#: editor/editor_node.cpp
msgid "Pause the scene"
-msgstr ""
+msgstr "Sæt scenen på pause"
#: editor/editor_node.cpp
msgid "Pause Scene"
-msgstr ""
+msgstr "Sæt scenen på pause"
#: editor/editor_node.cpp
msgid "Stop the scene."
-msgstr ""
+msgstr "Stop scenen."
#: editor/editor_node.cpp
msgid "Stop"
-msgstr ""
+msgstr "Stop"
#: editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr ""
+msgstr "Spil den redigerede scene."
#: editor/editor_node.cpp
msgid "Play Scene"
-msgstr ""
+msgstr "Spil Scenen"
#: editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "Spil tilpasset scene"
#: editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "Spil tilpasset scene"
#: editor/editor_node.cpp
msgid "Spins when the editor window repaints!"
-msgstr ""
+msgstr "Snurrer når editor vinduer gentegnes!"
#: editor/editor_node.cpp
msgid "Update Always"
-msgstr ""
+msgstr "Opdater Altid"
#: editor/editor_node.cpp
msgid "Update Changes"
-msgstr ""
+msgstr "Opdater Ændringer"
#: editor/editor_node.cpp
msgid "Disable Update Spinner"
-msgstr ""
+msgstr "Slå Opdaterings Snurrer Fra"
#: editor/editor_node.cpp
msgid "Inspector"
-msgstr ""
+msgstr "Inspektør"
#: editor/editor_node.cpp
msgid "Create a new resource in memory and edit it."
-msgstr ""
+msgstr "Opret en ny ressource i hukommelsen og rediger den."
#: editor/editor_node.cpp
msgid "Load an existing resource from disk and edit it."
-msgstr ""
+msgstr "Indlæs en eksisterende ressource fra disk og rediger den."
#: editor/editor_node.cpp
msgid "Save the currently edited resource."
-msgstr ""
+msgstr "Gem den aktuelt redigerede ressource."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Save As.."
-msgstr ""
+msgstr "Gem Som.."
#: editor/editor_node.cpp
msgid "Go to the previous edited object in history."
-msgstr ""
+msgstr "GÃ¥ til det forrige redigerede objekt i historien."
#: editor/editor_node.cpp
msgid "Go to the next edited object in history."
-msgstr ""
+msgstr "Gå til det næste redigerede objekt i historien."
#: editor/editor_node.cpp
msgid "History of recently edited objects."
-msgstr ""
+msgstr "Historie af for nyligt redigerede objekter."
#: editor/editor_node.cpp
msgid "Object properties."
-msgstr ""
+msgstr "Objekt Egenskaber."
#: editor/editor_node.cpp
msgid "Changes may be lost!"
-msgstr ""
+msgstr "Ændringer kan mistes!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "Importer"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr ""
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
-msgstr ""
+msgstr "Node"
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "FilSystem"
#: editor/editor_node.cpp
msgid "Output"
-msgstr ""
+msgstr "Output"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "Gem Ikke"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr ""
+msgstr "Importer Skabeloner Fra ZIP Fil"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export Project"
-msgstr ""
+msgstr "Eksporter Projekt"
#: editor/editor_node.cpp
msgid "Export Library"
-msgstr ""
+msgstr "Eksporter Bibliotek"
#: editor/editor_node.cpp
msgid "Merge With Existing"
-msgstr ""
+msgstr "Flet Med Eksisterende"
#: editor/editor_node.cpp
msgid "Password:"
-msgstr ""
+msgstr "Kodeord:"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
-msgstr ""
+msgstr "Åben & Kør et Script"
#: editor/editor_node.cpp
msgid "New Inherited"
-msgstr ""
+msgstr "Ny Arved"
#: editor/editor_node.cpp
msgid "Load Errors"
-msgstr ""
+msgstr "Indlæs Fejl"
#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Select"
-msgstr ""
+msgstr "Vælg"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 2D Editor"
-msgstr "Ã…bn en mappe"
+msgstr "Ã…bn 2D Editor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 3D Editor"
-msgstr "Ã…bn en mappe"
+msgstr "Ã…bn 3D Editor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Script Editor"
-msgstr "Afhængigheds Editor"
+msgstr "Ã…bn Script Editor"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr ""
+msgstr "Ã…ben Bibliotek over Aktiver"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the next Editor"
-msgstr "Afhængigheds Editor"
+msgstr "Åbn næste Editor"
#: editor/editor_node.cpp
msgid "Open the previous Editor"
-msgstr ""
+msgstr "Ã…ben den forrige Editor"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
-msgstr ""
+msgstr "Opretter Maske Forhåndsvisninger"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
-msgstr ""
+msgstr "Miniature.."
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr ""
+msgstr "Installerede Plugins:"
#: editor/editor_plugin_settings.cpp
msgid "Update"
-msgstr ""
+msgstr "Opdater"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Version:"
-msgstr ""
+msgstr "Version:"
#: editor/editor_plugin_settings.cpp
msgid "Author:"
-msgstr ""
+msgstr "Forfatter:"
#: editor/editor_plugin_settings.cpp
msgid "Status:"
-msgstr ""
+msgstr "Status:"
#: editor/editor_profiler.cpp
msgid "Stop Profiling"
-msgstr ""
+msgstr "Stop Profilering"
#: editor/editor_profiler.cpp
msgid "Start Profiling"
-msgstr ""
+msgstr "Start Profilering"
#: editor/editor_profiler.cpp
msgid "Measure:"
-msgstr ""
+msgstr "MÃ¥ling:"
#: editor/editor_profiler.cpp
msgid "Frame Time (sec)"
-msgstr ""
+msgstr "Frame Tid (sek)"
#: editor/editor_profiler.cpp
msgid "Average Time (sec)"
-msgstr ""
+msgstr "Gennemsnitlig Tid (sek)"
#: editor/editor_profiler.cpp
+#, fuzzy
msgid "Frame %"
-msgstr ""
+msgstr "Frame %"
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
-msgstr ""
+msgstr "Fysik Frame %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
-msgstr ""
+msgstr "Tid:"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr ""
+msgstr "Inklusiv"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr ""
+msgstr "Selv"
#: editor/editor_profiler.cpp
+#, fuzzy
msgid "Frame #:"
-msgstr ""
+msgstr "Frame #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Vælg enhed fra listen"
#: editor/editor_run_native.cpp
msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the export menu."
msgstr ""
+"Ingen kørbare eksport forudindstillinger fundet til denne platform.\n"
+"Tilføj venligst en kørbar forudindstilling i eksportmenuen."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr ""
+msgstr "Skriv din logik i metoden _run ()."
#: editor/editor_run_script.cpp
msgid "There is an edited scene already."
-msgstr ""
+msgstr "Der er allerede en editeret scene."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr ""
+msgstr "Kunne ikke instantiere script:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
-msgstr ""
+msgstr "Glemte du 'tool' keywordet?"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
-msgstr ""
+msgstr "Kunne ikke køre script:"
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
-msgstr ""
+msgstr "Glemte du '_run' metoden?"
#: editor/editor_settings.cpp
msgid "Default (Same as Editor)"
-msgstr ""
+msgstr "Standard (Samme som Editor)"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr ""
+msgstr "Vælg Noder at Importere"
#: editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr ""
+msgstr "Scene Sti:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr ""
+msgstr "Importer Fra Node:"
#: editor/export_template_manager.cpp
msgid "Re-Download"
-msgstr ""
+msgstr "Gen-Download"
#: editor/export_template_manager.cpp
msgid "Uninstall"
-msgstr ""
+msgstr "Afinstaller"
#: editor/export_template_manager.cpp
msgid "(Installed)"
-msgstr ""
+msgstr "(Installeret)"
#: editor/export_template_manager.cpp
msgid "Download"
-msgstr ""
+msgstr "Download"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(Mangler)"
#: editor/export_template_manager.cpp
msgid "(Current)"
-msgstr ""
+msgstr "(Nuværende)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Henter spejle, vent venligst .."
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "Fjern skabelonversion '%s'?"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
-msgstr ""
+msgstr "Kan ikke åbne eksport skabeloner zip."
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "Ugyldigt version.txt format inde i skabeloner."
#: editor/export_template_manager.cpp
msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
msgstr ""
+"Ugyldigt version.txt format inde i skabeloner. Revision er ikke en gyldig "
+"identifikator."
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "Ingen version.txt fundet inde i skabeloner."
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Error creating path for templates:\n"
-msgstr ""
+msgstr "Fejl ved oprettelse af sti til skabeloner:\n"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
-msgstr ""
+msgstr "Udpakning af Eksportskabeloner"
#: editor/export_template_manager.cpp
msgid "Importing:"
-msgstr ""
+msgstr "Importerer:"
#: editor/export_template_manager.cpp
-msgid "Current Version:"
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
msgstr ""
+"Ingen download links fundet til denne version. Direkte download er kun "
+"tilgængelig til officielle udgivelser."
#: editor/export_template_manager.cpp
-msgid "Installed Versions:"
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't resolve."
+msgstr "Kan ikke løses."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Ingen forbindelse."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Ingen reaktion."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
msgstr ""
#: editor/export_template_manager.cpp
-msgid "Install From File"
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
msgstr ""
#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Fejlet:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Kan ikke skrive til fil."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Download fuldført."
+
+#: editor/export_template_manager.cpp
#, fuzzy
-msgid "Remove Template"
-msgstr "Fjern markering"
+msgid "Error requesting url: "
+msgstr "Fejl i anmodning url: "
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "Forbinder..."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Afbrudt"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Løse"
#: editor/export_template_manager.cpp
#, fuzzy
+msgid "Can't Resolve"
+msgstr "Kan ikke Løses"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Forbinder.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Ingen forbindelse"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Tilsluttet"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Anmoder.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Indlæser"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Forbindelses fejl"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "SSL Handshake Fejl"
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr "Nuværende version:"
+
+#: editor/export_template_manager.cpp
+msgid "Installed Versions:"
+msgstr "Installerede Versioner:"
+
+#: editor/export_template_manager.cpp
+msgid "Install From File"
+msgstr "Installer fra Fil"
+
+#: editor/export_template_manager.cpp
+msgid "Remove Template"
+msgstr "Fjern Template"
+
+#: editor/export_template_manager.cpp
msgid "Select template file"
-msgstr "Vælg alle"
+msgstr "Vælg template fil"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Download Skabeloner"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2390,13 +2611,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
-"\n"
-"Source: "
-msgstr "Ressource"
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2407,7 +2621,7 @@ msgstr ""
#: editor/filesystem_dock.cpp
#, fuzzy
msgid "Error moving:\n"
-msgstr "Error loading skrifttype."
+msgstr "Fejl i flytning:\n"
#: editor/filesystem_dock.cpp
msgid "Unable to update dependencies:\n"
@@ -2434,9 +2648,8 @@ msgid "A file or folder with this name already exists."
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Omdøbe variablen"
+msgstr "Omdøb fil:"
#: editor/filesystem_dock.cpp
msgid "Renaming folder:"
@@ -2463,9 +2676,8 @@ msgid "Move To.."
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "Opret mappe"
+msgstr "Opret mappe.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2604,9 +2816,8 @@ msgid "Clear Default for '%s'"
msgstr ""
#: editor/import_dock.cpp
-#, fuzzy
msgid " Files"
-msgstr "Fil:"
+msgstr " Filer"
#: editor/import_dock.cpp
msgid "Import As:"
@@ -2658,8 +2869,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2670,6 +2880,10 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Slet points"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2687,9 +2901,8 @@ msgid "Change Animation Name:"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Delete Animation?"
-msgstr "Optimer Animation"
+msgstr "Slet Animation?"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
@@ -2815,6 +3028,56 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Beskrivelse"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Indsæt"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2851,9 +3114,8 @@ msgid "New name:"
msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
-#, fuzzy
msgid "Edit Filters"
-msgstr "Fil:"
+msgstr "Rediger filtre"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
@@ -2994,66 +3256,38 @@ msgid "Free"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Contents:"
-msgstr "Kontinuerlig"
+msgstr "Indhold:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "View Files"
-msgstr "Fil:"
+msgstr "Vis filer"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Can't connect."
-msgstr "Forbind..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Can't connect to host:"
-msgstr "Opret forbindelse til Node:"
+msgstr "Kan ikke forbinde til host:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3082,19 +3316,8 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Connecting.."
-msgstr "Forbind..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "Tester"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
-msgstr "Error loading skrifttype."
+msgstr "Fejl ved forespørgsel"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
@@ -3205,6 +3428,34 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Opret ny vertikal guide"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Fjern vertikal guide"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Opret ny horisontal guide"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Fjern horisontal guide"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3274,7 +3525,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
msgid "Toggles snapping"
-msgstr "Skift/Toggle Breakpoint"
+msgstr "Skift snapping mode"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3326,10 +3577,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3380,6 +3637,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3416,9 +3677,8 @@ msgid "Drag pivot from mouse position"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "Fjern Signal"
+msgstr "Sæt midtpunkt på musens position"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -3464,7 +3724,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
msgid "Change default type"
-msgstr "Skift Array værditype"
+msgstr "Ændre standard typen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -3511,9 +3771,8 @@ msgid "Flat1"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
-msgstr "Skalering Valg"
+msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
msgid "Ease out"
@@ -3536,14 +3795,12 @@ msgid "Load Curve Preset"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Add point"
-msgstr "Tilføj Signal"
+msgstr "Tilføj punkt"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove point"
-msgstr "Fjern Signal"
+msgstr "Fjern punkt"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3559,9 +3816,8 @@ msgid "Load preset"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove Curve Point"
-msgstr "Fjern Signal"
+msgstr "Fjern Kurve Punkt"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
@@ -3571,6 +3827,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3603,6 +3863,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3618,59 +3882,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "GÃ¥ til linje"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4068,16 +4279,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4088,7 +4329,7 @@ msgstr ""
#: editor/plugins/path_editor_plugin.cpp
#, fuzzy
msgid "Set Curve Point Position"
-msgstr "Fjern Signal"
+msgstr "Fjern Kurve Punktets Position"
#: editor/plugins/path_editor_plugin.cpp
#, fuzzy
@@ -4218,7 +4459,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4263,6 +4503,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Sorter"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4311,9 +4565,12 @@ msgid "Close Docs"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close All"
-msgstr "Luk"
+msgstr "Luk alt"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
@@ -4325,13 +4582,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4357,9 +4612,8 @@ msgid "Keep Debugger Open"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Debug with external editor"
-msgstr "Afhængigheds Editor"
+msgstr "Debug med ekstern editor"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Godot online documentation"
@@ -4382,9 +4636,8 @@ msgid "Go to next edited document."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Discard"
-msgstr "Diskret"
+msgstr "Kassér"
#: editor/plugins/script_editor_plugin.cpp
msgid "Create Script"
@@ -4437,37 +4690,25 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Cut"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Kopier"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Vælg alle"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Delete Line"
-msgstr "Optimer Animation"
+msgstr "Fjern Line"
#: editor/plugins/script_text_editor.cpp
msgid "Indent Left"
@@ -4486,6 +4727,22 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "Fold Line"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4527,17 +4784,14 @@ msgid "Convert To Uppercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Convert To Lowercase"
-msgstr "Opret forbindelse til Node:"
+msgstr "Konverter til små bogstaver"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4546,7 +4800,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4711,6 +4964,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Oversætter: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4775,9 +5036,8 @@ msgid "Material Changes"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes"
-msgstr "Skift"
+msgstr "Skift Shader"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Surface Changes"
@@ -4792,6 +5052,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4824,6 +5088,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Vis FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Halv opløsning"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4844,18 +5116,16 @@ msgid "Freelook Forward"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Backwards"
-msgstr "Baglæns"
+msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Up"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Down"
-msgstr "Hjulet ned."
+msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Speed Modifier"
@@ -4870,9 +5140,8 @@ msgid "XForm Dialog"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode (Q)\n"
-msgstr "Vælg alle"
+msgstr "Vælg Mode (Q)\n"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -4938,9 +5207,8 @@ msgid "Align Selection With View"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Tool Select"
-msgstr "All selection"
+msgstr "Vælg værktøj"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Tool Move"
@@ -4955,6 +5223,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5124,9 +5396,8 @@ msgid "Insert Empty (After)"
msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (Before)"
-msgstr "Sti til Node:"
+msgstr "Flyt (Før)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Move (After)"
@@ -5198,14 +5469,12 @@ msgid "Remove Item"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Items"
-msgstr "Fjern markering"
+msgstr "Fjern Alt"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All"
-msgstr "Fjern"
+msgstr "Fjern Alt"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
@@ -5232,6 +5501,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5305,18 +5578,16 @@ msgid "Color"
msgstr ""
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Erase Selection"
-msgstr "Skalering Valg"
+msgstr "Slet valgte"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint TileMap"
msgstr ""
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Line Draw"
-msgstr "Lineær"
+msgstr "Line Draw"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rectangle Paint"
@@ -5407,7 +5678,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5461,9 +5732,8 @@ msgid ""
msgstr ""
#: editor/project_export.cpp
-#, fuzzy
msgid "Patches"
-msgstr "Matches:"
+msgstr "Patches"
#: editor/project_export.cpp
msgid "Make Patch"
@@ -5478,9 +5748,8 @@ msgid "Custom (comma-separated):"
msgstr ""
#: editor/project_export.cpp
-#, fuzzy
msgid "Feature List:"
-msgstr "Metode liste:"
+msgstr "Funktions Liste:"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -5549,9 +5818,8 @@ msgid "The following files failed extraction from package:"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "Omdøb Funktion"
+msgstr "Omdøb Projekt"
#: editor/project_manager.cpp
msgid "Couldn't get project.godot in the project path."
@@ -5599,9 +5867,8 @@ msgid "Unnamed Project"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "Forbind..."
+msgstr "Kan ikke åbne projekt"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -5657,9 +5924,8 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Templates"
-msgstr "Fjern markering"
+msgstr "Skabeloner"
#: editor/project_manager.cpp
msgid "Exit"
@@ -5670,9 +5936,14 @@ msgid "Restart Now"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't run project"
-msgstr "Forbind..."
+msgstr "Kan ikke kører projekt"
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -5707,10 +5978,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta +"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5824,32 +6091,28 @@ msgid "Wheel Down."
msgstr "Hjulet ned."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add Global Property"
-msgstr "Tilføj Getter Egenskab"
+msgstr "Tilføj Global Property"
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Tester"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Delete Item"
msgstr "Slet Valgte"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "Opret forbindelse til Node:"
+msgstr "Kan ikke indeholde '/' eller ':'"
#: editor/project_settings_editor.cpp
msgid "Already existing"
@@ -5896,9 +6159,8 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Skift Array værditype"
+msgstr "Ændret Lokalfilter"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
@@ -5977,9 +6239,8 @@ msgid "Show only selected locales"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Filter:"
+msgstr "Filter mode:"
#: editor/project_settings_editor.cpp
msgid "Locales:"
@@ -6026,9 +6287,8 @@ msgid "Assign"
msgstr ""
#: editor/property_editor.cpp
-#, fuzzy
msgid "Select Node"
-msgstr "Vælg alle"
+msgstr "Vælg Node"
#: editor/property_editor.cpp
msgid "New Script"
@@ -6043,9 +6303,8 @@ msgid "Show in File System"
msgstr ""
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "Opret forbindelse til Node:"
+msgstr "Konverter Til %s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
@@ -6056,9 +6315,8 @@ msgid "Selected node is not a Viewport!"
msgstr ""
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Node"
-msgstr "Sti til Node:"
+msgstr "Vælg en Node"
#: editor/property_editor.cpp
msgid "Bit %d, val %d."
@@ -6081,19 +6339,16 @@ msgid "Sections:"
msgstr ""
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Property"
-msgstr "Tilføj Setter Egenskab"
+msgstr "Vælg Property"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Virtual Method"
-msgstr "Vælg alle"
+msgstr "Vælg Virtual Method"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Method"
-msgstr "Vælg alle"
+msgstr "Vælg Method"
#: editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
@@ -6243,7 +6498,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
#, fuzzy
msgid "Sub-Resources:"
-msgstr "Ressource"
+msgstr "Sub-Ressourcer:"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
@@ -6274,9 +6529,8 @@ msgid "Attach Script"
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Clear Script"
-msgstr "Opret abonnement"
+msgstr "Ryd Script"
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
@@ -6305,9 +6559,8 @@ msgid ""
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Filter nodes"
-msgstr "Filter:"
+msgstr "Filtrer noder"
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script for the selected node."
@@ -6318,6 +6571,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Fjern"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6360,9 +6622,8 @@ msgid "Instance:"
msgstr ""
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Open script"
-msgstr "Opret abonnement"
+msgstr "Ã…ben script"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -6401,19 +6662,16 @@ msgid "Select a Node"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading template '%s'"
-msgstr "Error loading skrifttype."
+msgstr "Fejl ved indlæsning af skabelon '%s'"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error - Could not create script in filesystem."
-msgstr "Kunne ikke oprette mappe."
+msgstr "Fejl - kunne ikke oprette script i filsystem."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading script from %s"
-msgstr "Error loading skrifttype."
+msgstr "Fejl ved load af script fra %s"
#: editor/script_create_dialog.cpp
msgid "N/A"
@@ -6436,9 +6694,8 @@ msgid "Directory of the same name exists"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "Filen findes, overskrives?"
+msgstr "Filen findes, vil blive genbrugt"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6449,18 +6706,16 @@ msgid "Wrong extension chosen"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid Path"
-msgstr ": Ugyldige argumenter: "
+msgstr "Ugyldig sti"
#: editor/script_create_dialog.cpp
msgid "Invalid class name"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid inherited parent name or path"
-msgstr "Ugyldigt index egenskabsnavn."
+msgstr "Ugyldigt inherited parent navn eller sti"
#: editor/script_create_dialog.cpp
msgid "Script valid"
@@ -6475,9 +6730,8 @@ msgid "Built-in script (into scene file)"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Create new script file"
-msgstr "Opret abonnement"
+msgstr "Opret ny script fil"
#: editor/script_create_dialog.cpp
msgid "Load existing script file"
@@ -6496,9 +6750,8 @@ msgid "Class Name"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Template"
-msgstr "Fjern markering"
+msgstr "Skabelon"
#: editor/script_create_dialog.cpp
msgid "Built-in Script"
@@ -6509,6 +6762,11 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Fjern"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6565,18 +6823,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6708,78 +6954,84 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Ugyldigt type argument til convert(), brug TYPE_* konstanter."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Ikke nok bytes til afkodning af bytes, eller ugyldigt format."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "trin argument er nul!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Ikke et script med en instans"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Ikke baseret på et script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Ikke baseret på en ressource fil"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Ugyldig instans ordbogs format (mangler @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "Ugyldig instans ordbogs format (kan ikke indlæse script ved @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Ugyldig forekomst ordbog format (ugyldigt script på @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Ugyldig forekomst ordbog (ugyldige underklasser)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "GridMap Delete Selection"
-msgstr "Slet Valgte"
+msgstr "GridMap Slet Markerede"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Duplicate Selection"
-msgstr "Dubler valg"
+msgstr "GridMap Duplikér Markerede"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Clip Disabled"
-msgstr "Deaktiveret"
+msgstr "Clip Deaktiveret"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
@@ -6830,9 +7082,8 @@ msgid "Cursor Clear Rotation"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Create Area"
-msgstr "Opret en ny"
+msgstr "Opret Area"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Create Exterior Connector"
@@ -6843,14 +7094,8 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Kun Valgte"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Kun Valgte"
+msgid "Clear Selection"
+msgstr "Ryd Markerede"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6901,28 +7146,24 @@ msgid "Stack overflow with stack depth: "
msgstr "Stakoverløb med stak dybde: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Signal Arguments"
-msgstr "Rediger Signal argumenter:"
+msgstr "Rediger Signal argumenter"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument Type"
-msgstr "Skift Array værditype"
+msgstr "Skift Argument Type"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument name"
-msgstr "Ændre Array-værdi"
+msgstr "Ændre Argument navn"
#: modules/visual_script/visual_script_editor.cpp
msgid "Set Variable Default Value"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Set Variable Type"
-msgstr "Rediger Variabel:"
+msgstr "Sæt Variabel Type"
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
@@ -6967,23 +7208,22 @@ msgstr "Tilføj Signal"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Change Expression"
-msgstr "Anim Skift Overgang"
+msgstr "Skift udtryk"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
msgstr "Tilføj Node"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Nodes"
-msgstr "Fjerne ugyldige keys"
+msgstr "Fjern VisualScript Nodes"
#: modules/visual_script/visual_script_editor.cpp
msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6991,7 +7231,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6999,7 +7239,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7007,9 +7247,8 @@ msgid "Hold Ctrl to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Preload Node"
-msgstr "Tilføj Node"
+msgstr "Tilføj Preload Node"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -7024,29 +7263,24 @@ msgid "Add Setter Property"
msgstr "Tilføj Setter Egenskab"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Base Type"
-msgstr "Skift Array værditype"
+msgstr "Skift Base Type"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Move Node(s)"
-msgstr "Sti til Node:"
+msgstr "Flyt Node(s)"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Node"
-msgstr "Fjern Variabel"
+msgstr "Fjern VisualScript Node"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Nodes"
-msgstr "Opret forbindelse til Node:"
+msgstr "Forbind Nodes"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Condition"
-msgstr "Overgang"
+msgstr "Tilstand"
#: modules/visual_script/visual_script_editor.cpp
msgid "Sequence"
@@ -7065,9 +7299,8 @@ msgid "While"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Return"
-msgstr "Tilbage:"
+msgstr "Retur"
#: modules/visual_script/visual_script_editor.cpp
msgid "Call"
@@ -7082,9 +7315,8 @@ msgid "Script already has function '%s'"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Input Value"
-msgstr "Ændre Array-værdi"
+msgstr "Ændre Input Værdi"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't copy the function node."
@@ -7095,27 +7327,24 @@ msgid "Clipboard is empty!"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Paste VisualScript Nodes"
-msgstr "Sti til Node:"
+msgstr "Indsæt VisualScript Nodes"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
msgstr "Fjern Funktion"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable"
-msgstr "Rediger Variabel:"
+msgstr "Rediger Variabel"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
msgstr "Fjern Variabel"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal"
-msgstr "Redigerer Signal:"
+msgstr "Rediger Signal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
@@ -7167,9 +7396,8 @@ msgid "Cut Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Paste Nodes"
-msgstr "Sti til Node:"
+msgstr "Indsæt Node"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -7237,19 +7465,26 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not write file:\n"
-msgstr "Kunne ikke oprette mappe."
+msgstr "Kunne ikke skrive til fil:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
-msgstr "Kunne ikke oprette mappe."
+msgid "Could not open template for export:\n"
+msgstr "Kan ikke åbne skabelon til eksport:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "Ugyldigt eksport skabelon:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "Kan ikke læse brugerdefineret HTML shell:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
-msgstr "Kunne ikke oprette mappe."
+msgid "Could not read boot splash image file:\n"
+msgstr "Kan ikke læse boot splash billed fil:\n"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7362,22 +7597,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "Egenskaben Path skal pege på en gyldig Node2D node for at virke."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Egenskaben Path skal pege på en gyldig Viewport node for at virke. Sådan en "
-"Viewport skal indstilles til 'render target' tilstand."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Viewport angivet i egenskaben path skal indstilles som 'render target' for "
-"at denne sprite kan virke."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7446,6 +7665,14 @@ msgstr ""
"En figur skal gives for at CollisionShape fungerer. Opret en figur ressource "
"til det!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7473,9 +7700,8 @@ msgid ""
msgstr ""
#: scene/3d/remote_transform.cpp
-#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
-msgstr "Egenskaben Path skal pege på en gyldig Particles2D node for at virke."
+msgstr "Stien skal pege på en gyldig fysisk node for at virke."
#: scene/3d/scenario_fx.cpp
msgid ""
@@ -7518,6 +7744,11 @@ msgstr "Advarsel!"
msgid "Please Confirm..."
msgstr "Bekræft venligst..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Vælg Method"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7535,6 +7766,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7569,6 +7804,45 @@ msgstr "Error loading skrifttype."
msgid "Invalid font size."
msgstr "Ugyldig skriftstørrelse."
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "Ressource"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "GÃ¥ til linje"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta +"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Tester"
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Kun Valgte"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Kun Valgte"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Egenskaben Path skal pege på en gyldig Viewport node for at virke. Sådan "
+#~ "en Viewport skal indstilles til 'render target' tilstand."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Viewport angivet i egenskaben path skal indstilles som 'render target' "
+#~ "for at denne sprite kan virke."
+
#~ msgid "Filter:"
#~ msgstr "Filter:"
diff --git a/editor/translations/de.po b/editor/translations/de.po
index 986987978c..53b69c444a 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -7,7 +7,9 @@
# Andreas Esau <andreasesau@gmail.com>, 2016.
# Andreas Haas <liu.gam3@gmail.com>, 2016.
# Andreas Hirschauer <andreas@hirschauer-it.de>, 2016.
+# Ben <benedikt.tuchen@gmail.com>, 2017.
# Christian Fisch <christian.fiesel@gmail.com>, 2016-2017.
+# CitrusEdition <mariankloesler@web.de>, 2017.
# danjo <atze@libra.uberspace.de>, 2016.
# Eurocloud KnowHow <tobias.kloy@werde-volunteer.info>, 2017.
# hyperglow <greensoma@web.de>, 2016.
@@ -18,6 +20,7 @@
# Peter Friedland <peter_friedland@gmx.de>, 2016.
# No need for a name <endoplasmatik@gmx.net>, 2016.
# So Wieso <sowieso@dukun.de>, 2016-2017.
+# Tim Schellenberg <smwleod@gmail.com>, 2017.
# Timo Schwarzer <account@timoschwarzer.com>, 2016.
# viernullvier <hannes.breul+github@gmail.com>, 2016.
#
@@ -25,8 +28,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2017-10-07 04:45+0000\n"
-"Last-Translator: anonymous <>\n"
+"PO-Revision-Date: 2017-11-24 09:46+0000\n"
+"Last-Translator: Ben <benedikt.tuchen@gmail.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
"Language: de\n"
@@ -34,7 +37,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -117,6 +120,7 @@ msgid "Anim Delete Keys"
msgstr "Anim Schlüsselbilder löschen"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Auswahl duplizieren"
@@ -312,7 +316,7 @@ msgstr "Max. Linearer Fehler:"
#: editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr "Max. Winkel Fehler:"
+msgstr "Max. Winkel-Fehler:"
#: editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
@@ -653,6 +657,13 @@ msgstr "Abhängigkeiteneditor"
msgid "Search Replacement Resource:"
msgstr "Ersatz-Ressource suchen:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Öffnen"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Besitzer von:"
@@ -672,9 +683,8 @@ msgstr ""
"Trotzdem entfernen? (Nicht Wiederherstellbar)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Cannot remove:\n"
-msgstr "Kann nicht auflösen."
+msgstr "Kann nicht entfernt werden:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -727,6 +737,14 @@ msgstr "Ausgewählte Dateien löschen?"
msgid "Delete"
msgstr "Löschen"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Dictionary-Schlüssel ändern"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Dictionary-Wert ändern"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Danke von der Godot-Gemeinschaft!"
@@ -761,32 +779,31 @@ msgstr "Autoren"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Platin Sponsoren"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Gold Sponsoren"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Klein Sponsoren"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Gold Unterstützer"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Silber Unterstützer"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "Klone herunter"
+msgstr "Bronze Unterstützer"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Unterstützer"
#: editor/editor_about.cpp
msgid "License"
@@ -827,7 +844,7 @@ msgstr "Fehler beim Öffnen der Paketdatei, kein Zip-Format."
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
-msgstr "Entpacke Assets"
+msgstr "Entpacke Nutzerinhalte"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
@@ -872,7 +889,6 @@ msgid "Toggle Audio Bus Bypass Effects"
msgstr "Audiobus-Bypasseffekte umschalten"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Select Audio Bus Send"
msgstr "Audiobus Senden auswählen"
@@ -894,7 +910,7 @@ msgstr "Audiobus, ziehen um umzusortieren."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr "Solo"
+msgstr "Einzeln"
#: editor/editor_audio_buses.cpp
msgid "Mute"
@@ -902,7 +918,7 @@ msgstr "Stumm"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr "Bypass"
+msgstr "Überbrückung"
#: editor/editor_audio_buses.cpp
msgid "Bus options"
@@ -914,9 +930,8 @@ msgid "Duplicate"
msgstr "Duplizieren"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "Vergrößerung zurücksetzen"
+msgstr "Lautstärke zurücksetzen"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
@@ -939,9 +954,8 @@ msgid "Duplicate Audio Bus"
msgstr "Audiobus duplizieren"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "Vergrößerung zurücksetzen"
+msgstr "Bus-Lautstärke zurücksetzen"
#: editor/editor_audio_buses.cpp
msgid "Move Audio Bus"
@@ -1150,6 +1164,11 @@ msgid "File Exists, Overwrite?"
msgstr "Datei existiert bereits. Überschreiben?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Ordner erstellen"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Alle bekannte Dateitypen"
@@ -1157,12 +1176,6 @@ msgstr "Alle bekannte Dateitypen"
msgid "All Files (*)"
msgstr "Alle Dateien (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Öffnen"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Datei öffnen"
@@ -1229,10 +1242,9 @@ msgstr "Favorit nach oben schieben"
msgid "Move Favorite Down"
msgstr "Favorit nach unten schieben"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "Ordner konnte nicht erstellt werden."
+msgstr "Gehe zu übergeordnetem Ordner"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1257,7 +1269,7 @@ msgstr "Lese Quellen"
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
-msgstr "Importiere Assets erneut"
+msgstr "Importiere Nutzerinhalte erneut"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -1293,27 +1305,24 @@ msgid "Brief Description:"
msgstr "Kurze Beschreibung:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Mitglieder:"
+msgstr "Mitglieder"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "Mitglieder:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "Öffentliche Methoden:"
+msgstr "Öffentliche Methoden"
#: editor/editor_help.cpp
msgid "Public Methods:"
msgstr "Öffentliche Methoden:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "GUI Theme Items"
-msgstr "GUI-Theme-Elemente:"
+msgstr "GUI-Thema-Elemente"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
@@ -1324,9 +1333,8 @@ msgid "Signals:"
msgstr "Signale:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Enums:"
+msgstr "Aufzählungen"
#: editor/editor_help.cpp
msgid "Enumerations:"
@@ -1337,23 +1345,20 @@ msgid "enum "
msgstr "Enum "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "Konstanten:"
+msgstr "Konstanten"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr "Konstanten:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "Beschreibung:"
+msgstr "Beschreibung"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Properties"
-msgstr "Eigenschaften:"
+msgstr "Eigenschaften"
#: editor/editor_help.cpp
msgid "Property Description:"
@@ -1364,11 +1369,12 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Es gibt zurzeit keine Beschreibung dieses Objekts. [color=$color][url="
+"$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr erwünscht!"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "Methodenliste:"
+msgstr "Methoden"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1379,6 +1385,8 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Es gibt zurzeit keine Beschreibung dieser Methode. [color=$color][url="
+"$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr erwünscht!"
#: editor/editor_help.cpp
msgid "Search Text"
@@ -1420,28 +1428,24 @@ msgid "Error while saving."
msgstr "Fehler beim speichern."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "Kann mit ‚..‘ nicht arbeiten"
+msgstr "‚%s‘ kann nicht geöffnet werden."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "Fehler beim speichern."
+msgstr "Fehler beim Parsen von ‚%s‘."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Unerwartetes Dateiende ‚%s‘."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Missing '%s' or its dependencies."
-msgstr "Szene '%s' hat defekte Abhängigkeiten:"
+msgstr "‚%s‘ oder zugehörige Abhängigkeiten fehlen."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "Fehler beim speichern."
+msgstr "Fehler beim Laden von ‚%s‘."
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1508,18 +1512,27 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Diese Ressource gehört zu einer importierten Szene, sie ist nicht "
+"bearbeitbar.\n"
+"Die Dokumentation zum Szenenimport beschreibt den nötigen Arbeitsablauf."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Diese Ressource gehört zu einer instantiierten oder geerbten Szene.\n"
+"Änderungen an der Ressource werden beim Speichern der Szene nicht "
+"mitgespeichert."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Diese Ressource wurde importiert und ist nicht bearbeitbar. Es kann "
+"allerdings ein Neu-Import mit geänderten Einstellungen im Import-Menü "
+"durchgeführt werden."
#: editor/editor_node.cpp
msgid ""
@@ -1528,6 +1541,28 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Diese Szene wurde importiert, Änderungen an ihr werden nicht gespeichert.\n"
+"Instantiierung oder Vererbung sind nötig um Änderungen vorzunehmen.\n"
+"Die Dokumentation zum Szenenimport beschreibt den nötigen Arbeitsablauf."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Dies ist ein Fern-Objekt, die Änderungen an ihm werden nicht gespeichert.\n"
+"Die Dokumentation zum Debugging beschreibt den nötigen Arbeitsablauf."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Alle expandieren"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Alle einklappen"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1650,6 +1685,10 @@ msgid "Export Mesh Library"
msgstr "MeshLibrary exportieren"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Diese Aktion kann nicht ohne eine ausgewählte Node ausgeführt werden."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Tileset exportieren"
@@ -1710,37 +1749,41 @@ msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Diese Option ist veraltet. Situationen die Neu-Laden erzwingen werden jetzt "
+"als Fehler betrachtet. Meldung erwünscht."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
msgstr "Wähle eine Hauptszene"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "Plugin bei ‚"
+msgstr ""
+"Erweiterung lässt sich nicht aktivieren: ‚%‘ Parsen der Konfiguration "
+"fehlgeschlagen."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
-"Skript-Feld für Addon-Plugin in ‚res://addons/‘ konnte nicht gefunden werden."
+"Skript-Feld für Erweiterung in ‚res://addons/%s‘ konnte nicht gefunden "
+"werden."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "AddOn-Skript konnte nicht geladen werden: '"
+msgstr "Erweiterungsskript konnte nicht geladen werden: ‚%s‘."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "AddOn-Skript konnte nicht geladen werden: '"
+msgstr ""
+"Erweiterungsskript konnte nicht geladen werden: ‚%s‘ Basistyp ist nicht "
+"EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "AddOn-Skript konnte nicht geladen werden: '"
+msgstr ""
+"Erweiterungsskript konnte nicht geladen werden: ‚%s‘ Skript ist nicht im "
+"Werkzeugmodus."
#: editor/editor_node.cpp
msgid ""
@@ -1771,9 +1814,8 @@ msgid "Scene '%s' has broken dependencies:"
msgstr "Szene '%s' hat defekte Abhängigkeiten:"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Clear Recent Scenes"
-msgstr "Letzte Dateien leeren"
+msgstr "Verlauf leeren"
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -1793,12 +1835,20 @@ msgid "Switch Scene Tab"
msgstr "Szenentab wechseln"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr "%d weitere Datei(en) oder Ordner"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "%d weitere(r) Ordner"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
msgstr "%d weitere Datei(en)"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d weitere Datei(en) oder Ordner"
+msgid "Dock Position"
+msgstr "Leistenanordnung"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1809,6 +1859,10 @@ msgid "Toggle distraction-free mode."
msgstr "Ablenkungsfreien Modus umschalten."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Eine neue Szene hinzufügen."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Szene"
@@ -1873,13 +1927,12 @@ msgid "TileSet.."
msgstr "TileSet.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Rückgängig machen"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Wiederherstellen"
@@ -2044,7 +2097,6 @@ msgid "Q&A"
msgstr "Fragen&Antworten"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Issue Tracker"
msgstr "Problem-Melder"
@@ -2149,9 +2201,8 @@ msgid "Object properties."
msgstr "Objekteigenschaften."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Changes may be lost!"
-msgstr "Ändere Bildergruppe"
+msgstr "Änderungen können verloren gehen!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2159,14 +2210,14 @@ msgid "Import"
msgstr "Import"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "Dateisystem"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Node"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Dateisystem"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Ausgabe"
@@ -2200,7 +2251,7 @@ msgstr "Skript öffnen und ausführen"
#: editor/editor_node.cpp
msgid "New Inherited"
-msgstr "Neue geerbte Szene.."
+msgstr "Neu Geerbte"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -2222,9 +2273,9 @@ msgstr "3D Editor öffnen"
msgid "Open Script Editor"
msgstr "Skripteditor öffnen"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr "Öffne Bibliothek"
+msgstr "Öffne Nutzerinhalte-Bibliothek"
#: editor/editor_node.cpp
msgid "Open the next Editor"
@@ -2235,9 +2286,8 @@ msgid "Open the previous Editor"
msgstr "Vorigen Editor öffnen"
#: editor/editor_plugin.cpp
-#, fuzzy
msgid "Creating Mesh Previews"
-msgstr "Erzeuge MeshLibrary"
+msgstr "Mesh-Vorschauen erzeugen"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
@@ -2289,9 +2339,8 @@ msgid "Frame %"
msgstr "Bild %"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "Fixiertes Bild %"
+msgstr "Physik-Frame %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2386,6 +2435,10 @@ msgid "(Current)"
msgstr "(Aktuell)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Mirrors werden geladen, bitte warten..."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "Template-Version ‚%s‘ entfernen?"
@@ -2422,6 +2475,102 @@ msgid "Importing:"
msgstr "Importiere:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Für diese Version wurde kein Downloadlink gefunden. Direkter Download steht "
+"nur für offizielle Veröffentlichungen bereit."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Kann nicht auflösen."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Kann nicht verbinden."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Keine Antwort."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Anfrage fehlgeschlagen."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Weiterleitungsschleife."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Fehlgeschlagen:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Konnte Datei nicht schreiben."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Download abgeschlossen."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Fehler beim Abrufen der URL: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Verbinde mit Mirror.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Getrennt"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Löse aus"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Kann nicht aufgelöst werden"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Verbinde.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Keine Verbindung möglich"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Verbunden"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Frage an.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Wird heruntergeladen"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Verbindungsfehler"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "SSL-Handshake-Fehler"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "Aktuelle Version:"
@@ -2445,6 +2594,14 @@ msgstr "Vorlagendatei wählen"
msgid "Export Template Manager"
msgstr "Exportvorlagenverwaltung"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Lade Template herunter"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Mirror aus Liste auswählen: "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
@@ -2452,83 +2609,70 @@ msgstr ""
"Der Dateityp-Cache wird nicht gespeichert!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "Kann Ordner ‚"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+"Kann nicht zu '%s' navigierien, da es sich nicht im Dateisystem gefunden "
+"wurde!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Einträge in Vorschaugitter anzeigen"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Einträge als Liste anzeigen"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
"\n"
-"Quelle: "
+"Status: Dateiimport fehlgeschlagen. Manuelle Reparatur und Neuimport nötig."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move/rename resources root."
-msgstr "Quellschriftart kann nicht geladen/verarbeitet werden."
+msgstr "Ressourcen-Wurzel kann nicht verschoben oder umbenannt werden."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move a folder into itself.\n"
-msgstr "Datei kann nicht in sich selbst importiert werden:"
+msgstr "Ordner kann nicht in sich selbst verschoben werden.\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "Fehler beim Verzeichnisverschieben:\n"
+msgstr "Fehler beim Verschieben:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "Szene '%s' hat defekte Abhängigkeiten:"
+msgstr "Fehler beim Aktualisieren der Abhängigkeiten:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "Kein Name angegeben"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "Angegebener Name enthält ungültige Zeichen"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "No name provided."
-msgstr "Umbenennen oder Verschieben.."
+msgstr "Kein Name angegeben."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "Gültige Zeichen:"
+msgstr "Name enthält ungültige Zeichen."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "A file or folder with this name already exists."
-msgstr "Gruppenname existiert bereits!"
+msgstr "Es existiert bereits eine Datei oder ein Ordner mit diesem Namen."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Variable umbenennen"
+msgstr "Benenne Datei um:"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming folder:"
-msgstr "Node umbenennen"
+msgstr "Benenne Ordner um:"
#: editor/filesystem_dock.cpp
msgid "Expand all"
@@ -2543,18 +2687,16 @@ msgid "Copy Path"
msgstr "Pfad kopieren"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Rename.."
-msgstr "Umbenennen"
+msgstr "Umbenennen.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
msgstr "Verschiebe zu.."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "Ordner erstellen"
+msgstr "Neuer Ordner.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2622,9 +2764,8 @@ msgid "Import as Single Scene"
msgstr "Als einzelne Szene importieren"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Animations"
-msgstr "Import mit separaten Materialien"
+msgstr "Import mit separaten Animationen"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
@@ -2639,19 +2780,16 @@ msgid "Import with Separate Objects+Materials"
msgstr "Import mit separaten Objekten und Materialien"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Objects+Animations"
-msgstr "Import mit separaten Objekten und Materialien"
+msgstr "Import mit separaten Objekten und Animationen"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Materials+Animations"
-msgstr "Import mit separaten Materialien"
+msgstr "Import mit separaten Materialien und Animationen"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "Import mit separaten Objekten und Materialien"
+msgstr "Import mit separaten Objekten, Materialien und Animationen"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
@@ -2738,9 +2876,8 @@ msgid "Edit Poly"
msgstr "Polygon bearbeiten"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#, fuzzy
msgid "Insert Point"
-msgstr "Füge Ein"
+msgstr "Punkt einfügen"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -2753,9 +2890,8 @@ msgid "Remove Poly And Point"
msgstr "Polygon und Punkt entfernen"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "Polygon von Grund auf neu erstellen."
+msgid "Create a new polygon from scratch"
+msgstr "Polygon von Grund auf neu erstellen"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2769,6 +2905,10 @@ msgstr ""
"Strg+LMT: Segment aufteilen.\n"
"RMT: Punkt löschen."
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Punkte entfernen"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "Automatisches Abspielen umschalten"
@@ -2913,6 +3053,57 @@ msgid "Copy Animation"
msgstr "Animation kopieren"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Abschnitte:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Einfügen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Funktionen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Neue Animation erstellen"
@@ -3103,18 +3294,10 @@ msgid "Can't resolve hostname:"
msgstr "Kann Hostnamen nicht auflösen:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "Kann nicht auflösen."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Verbindungsfehler, bitte erneut versuchen."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "Kann nicht verbinden."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "Kann nicht zu Host verbinden:"
@@ -3123,30 +3306,14 @@ msgid "No response from host:"
msgstr "Keine Antwort von Host:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Keine Antwort."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "Anfrage fehlgeschlagen: Rückgabewert:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Anfrage fehlgeschlagen."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "Anfrage fehlgeschlagen, zu viele Weiterleitungen"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Weiterleitungsschleife."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Fehlgeschlagen:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "Falsche Download-Prüfsumme, Datei könnte manipuliert worden sein."
@@ -3164,7 +3331,7 @@ msgstr "Sha256-Prüfung fehlgeschlagen"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr "Asset-Download-Fehler:"
+msgstr "Nutzerinhalte-Download-Fehler:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Fetching:"
@@ -3175,14 +3342,6 @@ msgid "Resolving.."
msgstr "Löse auf.."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Verbinde.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Frage an.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "Fehler bei Anfrage"
@@ -3196,11 +3355,11 @@ msgstr "Erneut versuchen"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download Error"
-msgstr "Übertragungsfehler"
+msgstr "Downloadfehler"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "Dieser Posten wird bereits herunter geladen!"
+msgstr "Dieser Nutzerinhalt wird bereits herunter geladen!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
@@ -3246,7 +3405,7 @@ msgstr "Seite:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Support.."
-msgstr "Unterstützung.."
+msgstr "Stabilität.."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Official"
@@ -3258,7 +3417,7 @@ msgstr "Testphase"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr "Projektdaten als ZIP-Datei"
+msgstr "Nutzerinhalte als ZIP-Datei"
#: editor/plugins/camera_editor_plugin.cpp
msgid "Preview"
@@ -3295,6 +3454,34 @@ msgid "Move Action"
msgstr "Aktion verschieben"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Vertikale Hilfslinie verschieben"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Neue vertikale Hilfslinie erstellen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Vertikale Hilfslinie löschen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Horizontale Hilfslinie verschieben"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Neue horizontale Hilfslinie erstellen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Horizontale Hilfslinie löschen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Neue horizontale und vertikale Hilfslinien erstellen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "IK-Kette bearbeiten"
@@ -3303,14 +3490,12 @@ msgid "Edit CanvasItem"
msgstr "CanvasItem bearbeiten"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Anchors only"
-msgstr "Anker"
+msgstr "nur Anker"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change Anchors and Margins"
-msgstr "Ankerpunkte ändern"
+msgstr "Anker und Ränder ändern"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
@@ -3369,9 +3554,8 @@ msgid "Pan Mode"
msgstr "Schwenkmodus"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggles snapping"
-msgstr "Haltepunkt umschalten"
+msgstr "Einrasten umschalten"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3379,23 +3563,20 @@ msgid "Use Snap"
msgstr "Einrasten aktivieren"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snapping options"
-msgstr "Animationseinstellungen"
+msgstr "Einrasteinstellungen"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to grid"
-msgstr "Einrastmodus:"
+msgstr "Am Gitter einrasten"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
msgstr "Rotationsraster benutzen"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Configure Snap..."
-msgstr "Einrasten konfigurieren.."
+msgstr "Einrasten konfigurieren..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
@@ -3407,31 +3588,36 @@ msgstr "Pixelraster benutzen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "Intelligentes Einrasten"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to parent"
-msgstr "Auf übergeordnetes Node ausdehnen"
+msgstr "An Elternobjekt einrasten"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "Am Node-Anker einrasten"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "An Node-Seiten einrasten"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "An anderen Nodes einrasten"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "An Hilfslinien einrasten"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
"Das ausgewählte Objekt an seiner Position sperren (kann nicht bewegt werden)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Das ausgewählte Objekt entsperren (kann bewegt werden)."
@@ -3474,14 +3660,16 @@ msgid "Show Grid"
msgstr "Raster anzeigen"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show helpers"
-msgstr "Knochen anzeigen"
+msgstr "Helfer anzeigen"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show rulers"
-msgstr "Knochen anzeigen"
+msgstr "Lineale anzeigen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Hilfslinien anzeigen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3492,9 +3680,8 @@ msgid "Frame Selection"
msgstr "Auswahl einrahmen"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Layout speichern"
+msgstr "Layout"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
@@ -3518,20 +3705,19 @@ msgstr "Pose zurücksetzen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "Pivotpunkt von Mauszeigerposition ziehen"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "Position der Ausgangskurve setzen"
+msgstr "Pivotpunkt auf Mausposition setzen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Gitterstufe verdoppeln"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "Gitterstufe halbieren"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3610,25 +3796,23 @@ msgstr "Aus Szene aktualisieren"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat0"
-msgstr ""
+msgstr "Flach0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat1"
-msgstr ""
+msgstr "Flach1"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
-msgstr "Einblenden"
+msgstr "Einspannen"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease out"
-msgstr "Ausblenden"
+msgstr "Ausspannen"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
-msgstr ""
+msgstr "Sanft-Stufig"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Point"
@@ -3674,6 +3858,10 @@ msgstr "Lineare Kurventangente umschalten"
msgid "Hold Shift to edit tangents individually"
msgstr "Umsch halten um Tangenten einzeln zu bearbeiten"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "GI Sonde einbetten"
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "Farbverlaufspunkt hinzufügen/entfernen"
@@ -3708,6 +3896,10 @@ msgid "Create Occluder Polygon"
msgstr "Occluder-Polygon erzeugen"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Polygon von Grund auf neu erstellen."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Bestehendes Polygon bearbeiten:"
@@ -3723,58 +3915,6 @@ msgstr "Strg+LMT: Segment aufteilen."
msgid "RMB: Erase Point."
msgstr "RMT: Punkt entfernen."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "Punkt von Line2D entfernen"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Punkt zu Line2D hinzufügen"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Punkt in Line2D verschieben"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Punkte auswählen"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Ziehen: Kontrollpunkte auswählen"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Klicken: Punkt hinzufügen"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Rechtsklick: Punkt löschen"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Punkt hinzufügen (in leerem Raum)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "Segment aufteilen (in Linie)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Punk löschen"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "Mesh ist leer!"
@@ -3957,73 +4097,64 @@ msgid "Bake!"
msgstr "Backen!"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Bake the navigation mesh.\n"
-msgstr "Navigations-Mesh erzeugen"
+msgstr "Navigations-Mesh erzeugen.\n"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Clear the navigation mesh."
-msgstr "Navigations-Mesh erzeugen"
+msgstr "Navigations-Mesh löschen."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "Konfiguration wird erstellt..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "Gittergröße wird berechnet..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating heightfield..."
-msgstr "erstelle Licht-Octree"
+msgstr "Höhenmodell erstellen..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Marking walkable triangles..."
-msgstr "Übersetzbare Textbausteine.."
+msgstr "Begehbare Dreiecke markieren..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "Kompaktes Höhenmodell wir konstruiert..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "Begehbare Gebiete werden erodiert..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
-msgstr "Warnung"
+msgstr "Einteilen..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating contours..."
-msgstr "Erstelle Octree-Textur"
+msgstr "Konturen erzeugen..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating polymesh..."
-msgstr "Umriss-Mesh erzeugen.."
+msgstr "Polymesh erzeugen..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Converting to native navigation mesh..."
-msgstr "Navigations-Mesh erzeugen"
+msgstr "In natives Navigation-Mesh konvertieren..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "Navigation-Mesh-Generatoreinstellungen:"
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Parsing Geometry..."
-msgstr "Analysiere Geometrie"
+msgstr "Parse Geometrie…"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "Abgeschlossen!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4184,16 +4315,46 @@ msgid "Move Out-Control in Curve"
msgstr "Ausgangsgriff auf Kurve verschieben"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Punkte auswählen"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Ziehen: Kontrollpunkte auswählen"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Klicken: Punkt hinzufügen"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Rechtsklick: Punkt löschen"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Kontrollpunkte auswählen (Shift+Ziehen)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Punkt hinzufügen (in leerem Raum)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Segment aufteilen (in Kurve)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Punk löschen"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Kurve schließen"
@@ -4202,19 +4363,16 @@ msgid "Curve Point #"
msgstr "Kurvenpunkt #"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
-msgstr "Position des Kurvenpunkts setzen"
+msgstr "Kurvenpunktposition festlegen"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve In Position"
-msgstr "Position der Eingangskurve setzen"
+msgstr "Kurven-Eingangsposition festlegen"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Out Position"
-msgstr "Position der Ausgangskurve setzen"
+msgstr "Kurven-Ausgangsposition festlegen"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Path"
@@ -4333,7 +4491,6 @@ msgstr "Ressource laden"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4380,6 +4537,20 @@ msgid " Class Reference"
msgstr " Klassenreferenz"
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Sortiere"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Schiebe hoch"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Schiebe herunter"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Nächstes Skript"
@@ -4431,6 +4602,10 @@ msgstr "Dokumentation schließen"
msgid "Close All"
msgstr "Alle schließen"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Andere Tabs schließen"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Ausführen"
@@ -4441,13 +4616,11 @@ msgstr "Seitenleiste umschalten"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Finde.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Finde Nächstes"
@@ -4555,33 +4728,22 @@ msgstr "Kleinbuchstaben"
msgid "Capitalize"
msgstr "Kapitalisiere"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Ausschneiden"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Kopieren"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Alles auswählen"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Schiebe hoch"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Schiebe herunter"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr "Linie löschen"
@@ -4603,6 +4765,22 @@ msgid "Clone Down"
msgstr "Klone herunter"
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "Zeile einklappen"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "Zeile aufklappen"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "Alle Zeilen einklappen"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "Alle Zeilen aufklappen"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "Symbol vervollständigen"
@@ -4648,12 +4826,10 @@ msgid "Convert To Lowercase"
msgstr "In Kleinbuchstaben konvertieren"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Finde Vorheriges"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Ersetzen.."
@@ -4662,7 +4838,6 @@ msgid "Goto Function.."
msgstr "Springe zu Funktion.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Springe zu Zeile.."
@@ -4827,6 +5002,14 @@ msgid "View Plane Transform."
msgstr "Zeige Flächentransformation."
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "Skalierung: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Übersetze: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Rotiere %s Grad."
@@ -4907,6 +5090,10 @@ msgid "Vertices"
msgstr "Vertices"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Auf Sicht ausrichten"
@@ -4939,6 +5126,14 @@ msgid "View Information"
msgstr "Sicht-Informationen"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "FPS anzeigen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Halbe Auflösung"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "Audiosenke"
@@ -5069,6 +5264,10 @@ msgid "Tool Scale"
msgstr "Werkzeug Skalieren"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Freie Kamera umschalten"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Transformation"
@@ -5238,14 +5437,12 @@ msgid "Insert Empty (After)"
msgstr "Empty einfügen (danach)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (Before)"
-msgstr "Node(s) verschieben"
+msgstr "Davor bewegen"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (After)"
-msgstr "nach links"
+msgstr "Dahinter bewegen"
#: editor/plugins/style_box_editor_plugin.cpp
msgid "StyleBox Preview:"
@@ -5322,11 +5519,11 @@ msgstr "Alles entfernen"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "Thema bearbeiten.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "Thema-Bearbeitungsmenü."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5345,6 +5542,10 @@ msgid "Create Empty Editor Template"
msgstr "Leeres Editor-Template erstellen"
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "Aus derzeitigem Editor-Thema erstellen"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "Kontrollkasten Radio1"
@@ -5462,9 +5663,8 @@ msgid "Mirror Y"
msgstr "Y-Koordinaten spiegeln"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Paint Tile"
-msgstr "Zeichne TileMap"
+msgstr "Kachel zeichnen"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -5519,17 +5719,16 @@ msgid "Runnable"
msgstr "ausführbar"
#: editor/project_export.cpp
-msgid "Delete patch '"
-msgstr "Patch von Liste löschen"
+msgid "Delete patch '%s' from list?"
+msgstr "Patch ‚%s‘ von Liste löschen?"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
msgstr "Vorlage ‚%s‘ löschen?"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted: "
-msgstr "Export-Templates für diese Systeme fehlen:"
+msgstr "Export-Vorlagen für dieses Systeme fehlen / sind fehlerhaft: "
#: editor/project_export.cpp
msgid "Presets"
@@ -5606,33 +5805,32 @@ msgid "Export templates for this platform are missing:"
msgstr "Export-Templates für diese Systeme fehlen:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Export-Templates für diese Systeme fehlen:"
+msgstr "Export-Vorlagen für dieses Systeme fehlen / sind fehlerhaft:"
#: editor/project_export.cpp
msgid "Export With Debug"
msgstr "Exportiere mit Debuginformationen"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "Datei existiert nicht."
+msgstr "Dieser Pfad existiert nicht."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Please choose a 'project.godot' file."
-msgstr "Bitte außerhalb des Projektordners exportieren!"
+msgstr "Eine ‚project.godot‘-Datei auswählen."
#: editor/project_manager.cpp
msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
msgstr ""
+"Das Projekt wir in einem nicht-leeren Ordner erstellt (meist sind leere "
+"Ordner die bessere Wahl)."
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
-msgstr ""
+msgstr "Ein Ordner ohne ‚project.godot‘-Datei muss ausgewählt werden."
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -5640,25 +5838,23 @@ msgstr "Importiertes Projekt"
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "Es wird empfohlen das Projekt zu benennen."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
msgstr "Ungültiger Projektpfad (etwas geändert?)."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in project path."
-msgstr "Konnte project.godot im Projektpfad nicht erzeugen."
+msgstr "project.godot konnte nicht im Projektpfad gefunden werden."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't edit project.godot in project path."
-msgstr "Konnte project.godot im Projektpfad nicht erzeugen."
+msgstr "project.godot des Projektpfads konnte nicht bearbeitet werden."
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
@@ -5669,14 +5865,12 @@ msgid "The following files failed extraction from package:"
msgstr "Die folgenden Dateien ließen sich nicht aus dem Paket extrahieren:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "Unbenanntes Projekt"
+msgstr "Projekt umbenennen"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in the project path."
-msgstr "Konnte project.godot im Projektpfad nicht erzeugen."
+msgstr "project.godot konnte nicht im Projektpfad gefunden werden."
#: editor/project_manager.cpp
msgid "New Game Project"
@@ -5699,7 +5893,6 @@ msgid "Project Name:"
msgstr "Projektname:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
msgstr "Ordner erstellen"
@@ -5720,9 +5913,8 @@ msgid "Unnamed Project"
msgstr "Unbenanntes Projekt"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "Projekt kann nicht ausgeführt werden"
+msgstr "Projekt kann nicht geöffnet werden"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -5743,7 +5935,8 @@ msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
-"Projekt kann nicht ausgeführt werden: Assets müssen importiert werden.\n"
+"Projekt kann nicht ausgeführt werden: Nutzerinhalte müssen importiert "
+"werden.\n"
"Das Projekt muss eingestellt werden einen ersten Import einzuleiten."
#: editor/project_manager.cpp
@@ -5761,6 +5954,9 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Sprache geändert.\n"
+"Die Benutzeroberfläche wird beim nächsten Start des Editors oder der "
+"Projektverwaltung aktualisiert."
#: editor/project_manager.cpp
msgid ""
@@ -5793,14 +5989,19 @@ msgid "Exit"
msgstr "Verlassen"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "Neu starten (s):"
+msgstr "Jetzt Neustarten"
#: editor/project_manager.cpp
msgid "Can't run project"
msgstr "Projekt kann nicht ausgeführt werden"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Taste "
@@ -5834,10 +6035,6 @@ msgid "Add Input Action Event"
msgstr "Eingabeaktionsereignis hinzufügen"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Umschalt+"
@@ -5955,31 +6152,28 @@ msgid "Add Global Property"
msgstr "Globale Eigenschaft hinzufügen"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Select a setting item first!"
-msgstr "Ein Einstellungspunkt muss zuerst ausgewählt werden!"
+msgstr "Zuerst Einstellungspunkt auswählen!"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr "Keine Eigenschaft ‚"
+msgid "No property '%s' exists."
+msgstr "Eigenschaft ‚%s‘ existiert nicht."
#: editor/project_settings_editor.cpp
-msgid "Setting '"
-msgstr "Einstellung ‚"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "Einstellung '%s' ist intern und kann nicht gelöscht werden."
#: editor/project_settings_editor.cpp
msgid "Delete Item"
msgstr "Eintrag löschen"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "Kann nicht zu Host verbinden:"
+msgstr "Darf nicht ‚/‘ oder ‚:‘ beinhalten"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Already existing"
-msgstr "Persistente an- und ausschalten"
+msgstr "Existiert bereits"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -6022,13 +6216,12 @@ msgid "Remove Resource Remap Option"
msgstr "Ressourcen-Remap-Option entfernen"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Überblendungszeit ändern"
+msgstr "Sprachfilter geändert"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Sprachfiltermodus geändert"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -6091,28 +6284,24 @@ msgid "Locale"
msgstr "Lokalisierung"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "Bildfilter:"
+msgstr "Sprachfilter"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "Knochen anzeigen"
+msgstr "Alle Sprachen anzeigen"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "Nur ausgewählte Sprachen anzeigen"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Nodes filtern"
+msgstr "Filtermodus:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "Lokalisierung"
+msgstr "Sprachen:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -6163,18 +6352,16 @@ msgid "New Script"
msgstr "Neues Skript"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "Knochen erstellen"
+msgstr "Einzigartig machen"
#: editor/property_editor.cpp
msgid "Show in File System"
msgstr "Im Dateisystem anzeigen"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "Umwandeln zu.."
+msgstr "Umwandeln zu %s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
@@ -6213,9 +6400,8 @@ msgid "Select Property"
msgstr "Eigenschaft auswählen"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Virtual Method"
-msgstr "Methode auswählen"
+msgstr "Virtuelle Methode auswählen"
#: editor/property_selector.cpp
msgid "Select Method"
@@ -6450,6 +6636,14 @@ msgid "Clear a script for the selected node."
msgstr "Leere ein Skript für das ausgewählte Node."
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "Fern"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "Lokal"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "Vererbung wirklich leeren? (Lässt sich nicht rückgängig machen!)"
@@ -6535,9 +6729,8 @@ msgid "Scene Tree (Nodes):"
msgstr "Szenenbaum (Nodes):"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Node Configuration Warning!"
-msgstr "Node-Konfigurationswarnung:"
+msgstr "Node-Konfigurationswarnung!"
#: editor/scene_tree_editor.cpp
msgid "Select a Node"
@@ -6573,12 +6766,11 @@ msgstr "Ungültiger Pfad"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "Ein Verzeichnis mit gleichem Namen existiert bereits"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "Datei existiert bereits. Überschreiben?"
+msgstr "Datei existiert bereits, wird erneut verwendet"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6645,6 +6837,10 @@ msgid "Attach Node Script"
msgstr "Node-Skript hinzufügen"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Fern "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Bytes:"
@@ -6666,7 +6862,7 @@ msgstr "Funktion:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "Ein oder mehrere Einträge der Liste auswählen um Graph anzuzeigen."
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6701,18 +6897,6 @@ msgid "Stack Trace (if applicable):"
msgstr "Stack Trace (falls geeignet):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Remote Inspektor"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Echtzeit Szenenbaum:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Eigenschaften entfernter Objekte: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Profiler"
@@ -6825,75 +7009,72 @@ msgid "Change Particles AABB"
msgstr "Ändere Partikel AABB"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Change Probe Extents"
msgstr "Sondenausmaße ändern"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Library"
-msgstr "MeshLibrary.."
+msgstr "Bibliothek"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Status"
-msgstr "Status:"
+msgstr "Status"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Bibliotheken: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"Ungültiger Argument-Typ in convert()-Aufruf, TYPE_*-Konstanten benötigt."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
"Nicht genügend Bytes zum dekodieren des Byte-Strings, oder ungültiges Format."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "Schrittargument ist null!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Skript hat keine Instanz"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Nicht auf einem Skript basierend"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Nicht auf einer Ressourcendatei basierend"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Ungültiges Instanz-Verzeichnisformat (@path fehlt)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Ungültiges Instanz-Verzeichnisformat (Skript in @path kann nicht geladen "
"werden)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Ungültiges Instanz-Verzeichnisformat (ungültiges Skript in @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Ungültiges Instanz-Verzeichnisformat (ungültige Unterklasse)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "Objekt kann keine Länge vorweisen."
@@ -6906,16 +7087,24 @@ msgid "GridMap Duplicate Selection"
msgstr "GridMap-Auswahl duplizieren"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "Ebene:"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Gitterkarte"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr "Sicht einrasten"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+msgid "Previous Floor"
+msgstr "Vorherige Ebene"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
-msgstr ""
+msgid "Next Floor"
+msgstr "Nächste Ebene"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Disabled"
@@ -6982,12 +7171,8 @@ msgid "Erase Area"
msgstr "Bereich entfernen"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr "Auswahl → Duplizieren"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr "Auswahl → Löschen"
+msgid "Clear Selection"
+msgstr "Auswahl leeren"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6999,7 +7184,7 @@ msgstr "Auswahlradius:"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
-msgstr ""
+msgstr "Fertigstellungen"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -7116,10 +7301,10 @@ msgid "Duplicate VisualScript Nodes"
msgstr "VisualScript-Nodes duplizieren"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Alt-Taste gedrückt halten, um einen Getter zu setzen. Umschalt-Taste halten, "
-"um eine allgemeine Signatur zu setzen."
+"%s gedrückt halten, um einen Getter zu setzen. Umschalt-Taste halten, um "
+"eine allgemeine Signatur zu setzen."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
@@ -7128,16 +7313,16 @@ msgstr ""
"allgemeine Signatur zu setzen."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "Alt-Taste halten um einfache Referenz zu Node hinzuzufügen."
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "%s halten um einfache Referenz zum Node hinzuzufügen."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Strg-Taste halten um einfache Referenz zu Node hinzuzufügen."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "Alt-Taste halten um einen Variablen-Setter zu setzen."
+msgid "Hold %s to drop a Variable Setter."
+msgstr "%s halten um einen Variablen-Setter zu setzen."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7209,7 +7394,7 @@ msgstr "Abfragen"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr ""
+msgstr "Skript enthält bereits Funktion ‚%s‘"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Input Value"
@@ -7367,13 +7552,21 @@ msgid "Could not write file:\n"
msgstr "Konnte Datei nicht schreiben:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "Konnte Datei nicht lesen:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "Konnte Exportvorlage nicht öffnen:\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "Ungültige Exportvorlage:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "Konnte benutzerdefinierte HTML-Shell nicht lesen:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "Konnte Bilddatei des Startbildschirms nicht lesen:\n"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7501,22 +7694,6 @@ msgstr ""
"Die Pfad-Eigenschaft muss auf ein gültiges Node2D-Node zeigen um zu "
"funktionieren."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Die Pfad Eigenschaft muss auf eine gültige Viewport Node verweisen um zu "
-"funktionieren. Dieser Viewport muss in 'render target' Modus gesetzt werden."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Der Viewport, der in der Pfad-Eigenschaft gesetzt wurde, muss als ‚Render "
-"Target‘ definiert sein, damit das Sprite funktioniert."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7589,6 +7766,14 @@ msgstr ""
"Damit CollisionShape funktionieren kann, muss eine Form vorhanden sein. "
"Bitte erzeuge eine shape Ressource dafür!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "Plotte Mesh"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "Stelle Plot fertig"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7644,6 +7829,9 @@ msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
msgstr ""
+"VehicleWheel ist verfügbar um mit VehicleBody ein Rädersystem zu "
+"implementieren. Es kann ausschließlich als Unterobjekt von VehicleBody "
+"verwendet werden."
#: scene/gui/color_picker.cpp
msgid "Raw Mode"
@@ -7665,6 +7853,11 @@ msgstr "Warnung!"
msgid "Please Confirm..."
msgstr "Bitte bestätigen..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Methode auswählen"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7688,6 +7881,10 @@ msgstr ""
"ein Control als Unterobjekt verwendet und dessen Minimalgröße eingestellt "
"werden."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Andere)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7725,6 +7922,70 @@ msgstr "Fehler beim Laden der Schriftart."
msgid "Invalid font size."
msgstr "Ungültige Schriftgröße."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "Kann Ordner ‚"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "Quelle: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Punkt von Line2D entfernen"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Punkt zu Line2D hinzufügen"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Punkt in Line2D verschieben"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Segment aufteilen (in Linie)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#~ msgid "Setting '"
+#~ msgstr "Einstellung ‚"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Remote Inspektor"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Echtzeit Szenenbaum:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Eigenschaften entfernter Objekte: "
+
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "Vorherige Stufe (%s Mausrad runter)"
+
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "Nächste Stufe (%s Mausrad hoch)"
+
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Auswahl → Duplizieren"
+
+#~ msgid "Selection -> Clear"
+#~ msgstr "Auswahl → Löschen"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Die Pfad Eigenschaft muss auf eine gültige Viewport Node verweisen um zu "
+#~ "funktionieren. Dieser Viewport muss in 'render target' Modus gesetzt "
+#~ "werden."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Der Viewport, der in der Pfad-Eigenschaft gesetzt wurde, muss als ‚Render "
+#~ "Target‘ definiert sein, damit das Sprite funktioniert."
+
#~ msgid "Filter:"
#~ msgstr "Filter:"
@@ -7751,9 +8012,6 @@ msgstr "Ungültige Schriftgröße."
#~ msgid "Removed:"
#~ msgstr "Entfernt:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Fehler beim speichern des Atlas:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Atlas Untertextur konnte nicht gespeichert werden:"
@@ -8143,9 +8401,6 @@ msgstr "Ungültige Schriftgröße."
#~ msgid "Cropping Images"
#~ msgstr "Bilder werden beschnitten"
-#~ msgid "Blitting Images"
-#~ msgstr "Blitting Bilder"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "Atlas-Bild konnte nicht gespeichert werden:"
@@ -8519,9 +8774,6 @@ msgstr "Ungültige Schriftgröße."
#~ msgid "Save Translatable Strings"
#~ msgstr "Speichere übersetzbare Zeichenketten"
-#~ msgid "Install Export Templates"
-#~ msgstr "Exportvorlagen installieren"
-
#~ msgid "Edit Script Options"
#~ msgstr "Skriptoptionen bearbeiten"
diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po
index 8c9e4cc1de..213d7ab1d7 100644
--- a/editor/translations/de_CH.po
+++ b/editor/translations/de_CH.po
@@ -99,6 +99,7 @@ msgid "Anim Delete Keys"
msgstr "Anim Bilder löschen"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr ""
@@ -629,6 +630,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Öffnen"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -699,6 +707,15 @@ msgstr ""
msgid "Delete"
msgstr ""
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "Typ ändern"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -1112,6 +1129,11 @@ msgid "File Exists, Overwrite?"
msgstr "Datei existiert, Überschreiben?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Node(s) löschen"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr ""
@@ -1119,12 +1141,6 @@ msgstr ""
msgid "All Files (*)"
msgstr "Alle Dateien (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Öffnen"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Datei öffnen"
@@ -1191,7 +1207,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1482,6 +1498,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1593,6 +1624,11 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a root node."
+msgstr "Ohne eine Szene kann das nicht funktionieren."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1721,11 +1757,20 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+#, fuzzy
+msgid "%d more folders"
+msgstr "Node erstellen"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1737,6 +1782,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1802,13 +1851,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2071,14 +2119,14 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr ""
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Node"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr ""
@@ -2137,7 +2185,7 @@ msgstr "Verzeichnis öffnen"
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2297,6 +2345,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2332,6 +2384,107 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "Neues Projekt erstellen"
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "Szene kann nicht gespeichert werden."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "Connections editieren"
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Connections editieren"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "Neues Projekt erstellen"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "Verbindung zu Node:"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "Connections editieren"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2356,12 +2509,21 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Ungültige Bilder löschen"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2379,12 +2541,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2649,8 +2805,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2661,6 +2816,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Bild einfügen"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "Autoplay Umschalten"
@@ -2810,6 +2970,55 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Script hinzufügen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -3002,18 +3211,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Can't connect to host:"
msgstr "Verbindung zu Node:"
@@ -3023,30 +3224,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3076,15 +3261,6 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Connecting.."
-msgstr "Connections editieren"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
msgstr "Szene kann nicht gespeichert werden."
@@ -3197,6 +3373,38 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "Neues Projekt erstellen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Ungültige Bilder löschen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "Neues Projekt erstellen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Ungültige Bilder löschen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3319,10 +3527,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3373,6 +3587,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3563,6 +3781,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3595,6 +3817,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3610,58 +3836,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4065,16 +4239,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4214,7 +4418,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4259,6 +4462,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4310,6 +4527,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4320,13 +4541,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4430,33 +4649,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4479,6 +4687,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Bild einfügen"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4525,12 +4750,10 @@ msgid "Convert To Lowercase"
msgstr "Verbindung zu Node:"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4539,7 +4762,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4704,6 +4926,15 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Transition-Node"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4786,6 +5017,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4818,6 +5053,15 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "Datei(en) öffnen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4947,6 +5191,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5224,6 +5472,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5397,7 +5649,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5670,6 +5922,12 @@ msgstr ""
msgid "Can't run project"
msgstr "Neues Projekt erstellen"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Taste "
@@ -5703,10 +5961,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5829,11 +6083,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6315,6 +6569,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Ungültige Bilder löschen"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6504,6 +6767,11 @@ msgid "Attach Node Script"
msgstr "Script hinzufügen"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Ungültige Bilder löschen"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6560,18 +6828,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6703,49 +6959,49 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6758,15 +7014,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6836,12 +7100,9 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+#, fuzzy
+msgid "Clear Selection"
+msgstr "Script hinzufügen"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -6970,7 +7231,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr "Node(s) duplizieren"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6978,7 +7239,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6986,7 +7247,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7228,11 +7489,19 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7342,18 +7611,6 @@ msgstr ""
"Die Pfad-Variable muss auf einen gültigen Node2D Node zeigen um zu "
"funktionieren."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
#, fuzzy
msgid ""
@@ -7415,6 +7672,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7480,6 +7745,11 @@ msgstr "Alert!"
msgid "Please Confirm..."
msgstr "Bitte bestätigen..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Node(s) löschen"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7494,6 +7764,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index efddb63796..84505f1719 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -93,6 +93,7 @@ msgid "Anim Delete Keys"
msgstr ""
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr ""
@@ -622,6 +623,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr ""
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -692,6 +700,14 @@ msgstr ""
msgid "Delete"
msgstr ""
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -1100,17 +1116,15 @@ msgid "File Exists, Overwrite?"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-msgid "All Recognized"
+msgid "Select Current Folder"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-msgid "All Files (*)"
+msgid "All Recognized"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
@@ -1179,7 +1193,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1465,6 +1479,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1574,6 +1603,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1699,11 +1732,19 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1715,6 +1756,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1779,13 +1824,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2043,11 +2087,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2106,7 +2150,7 @@ msgstr ""
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2266,6 +2310,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2300,6 +2348,100 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2323,12 +2465,20 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2346,12 +2496,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2609,8 +2753,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2621,6 +2764,10 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2765,6 +2912,54 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Directions"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2955,18 +3150,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -2975,30 +3162,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3027,14 +3198,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3147,6 +3310,34 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3267,10 +3458,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3321,6 +3518,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3505,6 +3706,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3537,6 +3742,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3552,58 +3761,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4001,16 +4158,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4147,7 +4334,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4192,6 +4378,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4243,6 +4443,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4253,13 +4457,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4363,33 +4565,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr ""
@@ -4411,6 +4602,22 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4456,12 +4663,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4470,7 +4675,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4635,6 +4839,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4715,6 +4927,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4747,6 +4963,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4874,6 +5098,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5148,6 +5376,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5321,7 +5553,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5581,6 +5813,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5614,10 +5852,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5739,11 +5973,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6210,6 +6444,14 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6392,6 +6634,10 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6448,18 +6694,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6591,49 +6825,49 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6646,15 +6880,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6722,11 +6964,7 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
+msgid "Clear Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6848,7 +7086,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6856,7 +7094,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6864,7 +7102,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7090,11 +7328,19 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7186,18 +7432,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7256,6 +7490,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7319,6 +7561,10 @@ msgstr ""
msgid "Please Confirm..."
msgstr ""
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7333,6 +7579,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
diff --git a/editor/translations/el.po b/editor/translations/el.po
index 02de498110..0b5ed8fda8 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-10-24 18:46+0000\n"
+"PO-Revision-Date: 2017-11-27 10:46+0000\n"
"Last-Translator: George Tsiamasiotis <gtsiam@windowslive.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/"
"el/>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -99,6 +99,7 @@ msgid "Anim Delete Keys"
msgstr "Anim ΔιαγÏαφή κλειδιών"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Διπλασιασμός επιλογής"
@@ -636,6 +637,13 @@ msgstr "ΕπεξεÏγαστής εξαÏτήσεων"
msgid "Search Replacement Resource:"
msgstr "Αναζήτηση αντικαταστάτη πόÏου:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Άνοιγμα"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Ιδιοκτήτες του:"
@@ -708,6 +716,14 @@ msgstr "ΔιαγÏαφή επιλεγμένων αÏχείων;"
msgid "Delete"
msgstr "ΔιαγÏαφή"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Αλλαγή ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î»ÎµÎ¾Î¹ÎºÏŒÏ…"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Αλλαγή τιμής λεξικοÏ"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "ΕυχαÏιστίες από την κοινότητα της Godot!"
@@ -1123,6 +1139,11 @@ msgid "File Exists, Overwrite?"
msgstr "Το αÏχείο υπάÏχει. Θέλετε να το αντικαταστήσετε;"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "ΔημιουÏγία φακέλου"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Όλα τα αναγνωÏισμένα"
@@ -1130,12 +1151,6 @@ msgstr "Όλα τα αναγνωÏισμένα"
msgid "All Files (*)"
msgstr "Όλα τα αÏχεία (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Άνοιγμα"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Άνοιγμα αÏχείου"
@@ -1146,11 +1161,11 @@ msgstr "Άνοιγμα αÏχείου/-ων"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a Directory"
-msgstr "Άνοιγμα λεξικοÏ"
+msgstr "Άνοιγμα φακέλου"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File or Directory"
-msgstr "Άνοιγμα αÏχείου ή λεξικοÏ"
+msgstr "Άνοιγμα αÏχείου ή φακέλου"
#: editor/editor_file_dialog.cpp editor/editor_node.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -1202,7 +1217,7 @@ msgstr "Μετακίνηση αγαπημένου πάνω"
msgid "Move Favorite Down"
msgstr "Μετακίνηση αγαπημένου κάτω"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr "Πήγαινε στον γονικό φάκελο"
@@ -1246,7 +1261,7 @@ msgstr "Αναζήτηση κλάσεων"
#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Top"
-msgstr "Πάνω"
+msgstr "ΚοÏυφή"
#: editor/editor_help.cpp editor/property_editor.cpp
msgid "Class:"
@@ -1329,6 +1344,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Δεν υπάÏχει ακόμη πεÏιγÏαφή για αυτήν την ιδιότητα. ΠαÏακαλοÏμε βοηθήστε μας "
+"[color=$color][url=$url]γÏάφοντας μία[/url][/color]!"
#: editor/editor_help.cpp
msgid "Methods"
@@ -1343,6 +1360,8 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Δεν υπάÏχει ακόμη πεÏιγÏαφή για αυτήν την μέθοδο. ΠαÏακαλοÏμε βοηθήστε μας "
+"[color=$color][url=$url]γÏάφοντας μία[/url][/color]!"
#: editor/editor_help.cpp
msgid "Search Text"
@@ -1393,7 +1412,7 @@ msgstr "Σφάλμα κατά η ανάλυση του '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Αναπάντεχο τέλος αÏχείου '%s'."
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
@@ -1468,18 +1487,26 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Αυτός ο πόÏος ανήκει σε μία σκηνή που έχει εισαχθεί, οπότε δεν είναι "
+"επεξεÏγάσιμο.\n"
+"ΠαÏακαλοÏμε διαβάστε την τεκμηÏίωση σχετική με την εισαγωγή σκηνών, για να "
+"καταλάβετε καλÏτεÏα την διαδικασία."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Αυτός ο πόÏος ανήκει σε μία σκηνή που έχει κλωνοποιηθεί ή κληÏονομηθεί.\n"
+"Οι αλλαγές δεν θα διατηÏηθοÏν κατά την αποθήκευση της Ï„Ïέχουσας σκηνής."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Αυτός ο πόÏος έχει εισαχθεί, οπότε δεν είναι επεξεÏγάσιμος. Αλλάξτε τις "
+"Ïυθμίσεις στο πλαίσιο εισαγωγής και μετά επαν-εισάγετε."
#: editor/editor_node.cpp
msgid ""
@@ -1488,6 +1515,31 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Αυτή η σκηνή έχει εισαχθεί, οπότε αλλαγές σε αυτήν δεν θα διατηÏηθοÏν.\n"
+"Η κλωνοποίηση ή η κληÏονόμηση της θα επιτÏέψει την επεξεÏγασία της.\n"
+"ΠαÏακαλοÏμε διαβάστε την τεκμηÏίωση σχετική με την εισαγωγή σκηνών, για να "
+"καταλάβετε καλÏτεÏα την διαδικασία."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Αυτό είναι ένα απομακÏυσμένο αντικείμενο, οπότε αλλαγές σε αυτό δεν θα "
+"διατηÏηθοÏν.\n"
+"ΠαÏακαλοÏμε διαβάστε την τεκμηÏίωση σχετική με την αποσφαλμάτωση, για να "
+"καταλάβετε καλÏτεÏα την διαδικασία."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Ανάπτυξη όλων"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "ΣÏμπτηξη όλων"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1507,7 +1559,7 @@ msgstr "ΑντιγÏαφή πόÏου"
#: editor/editor_node.cpp
msgid "Make Built-In"
-msgstr "ΜετατÏοπή σε ενσωματωμένο"
+msgstr "Κάνε ενσωματωμένο"
#: editor/editor_node.cpp
msgid "Make Sub-Resources Unique"
@@ -1611,6 +1663,10 @@ msgid "Export Mesh Library"
msgstr "Εξαγωγή βιβλιοθήκης πλεγμάτων"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Αυτή η λειτουÏγία δεν μποÏεί να γίνει χωÏίς έναν πηγαίο κόμβο."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Εξαγωγή σετ πλακιδίων"
@@ -1672,38 +1728,41 @@ msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Αυτή η επιλογή έχει αποÏÏιφθεί. Καταστάσεις στις οποίες Ï€Ïέπει να γίνει "
+"ανανέωση θεωÏοÏνται σφάλματα, και σας ζητοÏμε να τις αναφέÏετε."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
msgstr "Επιλογή κÏÏιας σκηνής"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "ΑδÏνατη η ενεÏγοποίηση Ï€Ïόσθετης επέκτασης στο: '"
+msgstr ""
+"ΑδÏνατη η ενεÏγοποίηση Ï€Ïόσθετης επέκτασης στο: '%s'. Απέτυχε η ανάλυση του "
+"αÏχείου ÏÏθμισης."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
"ΑδÏνατη η έυÏεση του πεδίου 'script' για την Ï€Ïόσθετη επέκταση στο: 'res://"
-"addons/"
+"addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€Ïοσθέτου από τη διαδÏομή: '"
+msgstr "ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€Ïοσθέτου από τη διαδÏομή: '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€Ïοσθέτου από τη διαδÏομή: '"
+msgstr ""
+"ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€Ïοσθέτου από τη διαδÏομή: '%s'. Ο "
+"βασικός Ï„Ïπος δεν είναι το EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€Ïοσθέτου από τη διαδÏομή: '"
+msgstr ""
+"ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€Ïοσθέτου από τη διαδÏομή: '%s'. Δεν "
+"είναι σε λειτουÏγία tool."
#: editor/editor_node.cpp
msgid ""
@@ -1754,12 +1813,20 @@ msgid "Switch Scene Tab"
msgstr "Εναλλαγή καÏτέλας σκηνής"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr "%d πεÏισσότεÏα αÏχεία ή φάκελοι"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "%d πεÏισσότεÏοι φάκελοι"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
msgstr "%d πεÏισσότεÏα αÏχεία"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d πεÏισσότεÏα αÏχεία ή φάκελοι"
+msgid "Dock Position"
+msgstr "Θέση αγκÏÏωσης"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1770,6 +1837,10 @@ msgid "Toggle distraction-free mode."
msgstr "Εναλλαγή λειτουÏγίας χωÏίς πεÏισπασμοÏÏ‚."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "ΠÏοσθήκη νέας σκηνής."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Σκηνή"
@@ -1834,13 +1905,12 @@ msgid "TileSet.."
msgstr "TileSet..."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "ΑναίÏεση"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "ΑκÏÏωση αναίÏεσης"
@@ -2118,14 +2188,14 @@ msgid "Import"
msgstr "Εισαγωγή"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "ΣÏστημα αÏχείων"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Κόμβος"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "ΣÏστημα αÏχείων"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Έξοδος"
@@ -2181,7 +2251,7 @@ msgstr "Άνοιγμα 3D επεξεÏγαστή"
msgid "Open Script Editor"
msgstr "Άνοιγμα επεξεÏγαστή δεσμής ενεÏγειών"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "Άνοιγμα βιβλιοθήκης"
@@ -2194,7 +2264,6 @@ msgid "Open the previous Editor"
msgstr "Άνοιγμα του Ï€ÏοηγοÏμενου επεξεÏγαστή"
#: editor/editor_plugin.cpp
-#, fuzzy
msgid "Creating Mesh Previews"
msgstr "ΔημιουÏγία Ï€Ïοεπισκοπήσεων πλεγμάτων"
@@ -2248,9 +2317,8 @@ msgid "Frame %"
msgstr "ΚαÏέ %"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "ΣταθεÏÏŒ καÏέ %"
+msgstr "KαÏέ φυσικής %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2345,6 +2413,10 @@ msgid "(Current)"
msgstr "(ΤÏέχων)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Ανάκτηση δεδοένων κατοπτÏισμοÏ, παÏακαλώ πεÏιμένετε.."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "ΑφαίÏεση Ï€Ïότυπης εκδοχής '%s';"
@@ -2381,6 +2453,102 @@ msgid "Importing:"
msgstr "Εισαγωγή:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Δεν βÏέθηκαν συνδέσμοι λήψης για την Ï„Ïέχουσα έκδοση. Η απευθείας λήψη είναι "
+"διαθέσιμη μόνο για τις επίσημες εκδόσεις."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Δεν είναι δυνατή η επίλυση."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Δεν ήταν δυνατή η σÏνδεση."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Δεν λήφθηκε απόκÏιση."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Το αίτημα απέτυχε."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Î’Ïόχος ανακατευθήνσεων."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Απέτυχε:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Δεν ήταν δυνατή η εγγÏαφή στο αÏχείο."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Η λήψη ολοκληÏώθηκε."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Σφάλμα κατά Ï„o αίτημα για διεÏθηνση url: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "ΣÏνδεση σε διακομιστή κατοπτÏισμοÏ.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Αποσυνδέθηκε"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Επίλυση"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Δεν είναι δυνατή η επίλυση"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "ΣÏνδεση.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Δεν ήταν δυνατή η σÏνδεση"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Συνδέθηκε"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Γίνεται αίτημα.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Λήψη"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Σφάλμα σÏνδεσης"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Σφάλμα χαιÏÎµÏ„Î¹ÏƒÎ¼Î¿Ï SSL"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "ΤÏέχουσα έκδοση:"
@@ -2404,6 +2572,14 @@ msgstr "Επιλέξτε ένα αÏχείο Ï€ÏοτÏπων"
msgid "Export Template Manager"
msgstr "ΔιαχειÏιστής Ï€ÏοτÏπων εξαγωγής"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Λήψη Ï€ÏοτÏπων"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Επιλέξτε έναν διακοσμιτή κατοπτÏÎ¹ÏƒÎ¼Î¿Ï Î±Ï€ÏŒ την λίστα: "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
@@ -2411,82 +2587,70 @@ msgstr ""
"αποθήκευσης cache Ï„Ïπου αÏχείου!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "ΑδÏνατη η πλοήγηση στο '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+"Δεν ήταν δυνατή η πλοήγηση στο '%s', καθώς δεν βÏέθηκε στο σÏστημα αÏχείων!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Εμφάνιση αντικειμένων σε πλέγμα μικÏγÏαφιών"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Εμφάνιση αντικειμένων σε λίστα"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
"\n"
-"Πηγή: "
+"Κατάσταση: Η εισαγωγή απέτυχε. ΠαÏακαλοÏμε διοÏθώστε το αÏχείο και "
+"επανεισάγετε το χειÏοκίνητα."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move/rename resources root."
-msgstr "Δεν ήταν δυνατή η φόÏτωση/επεξεÏγασία της πηγαίας γÏαμματοσειÏάς."
+msgstr "Δεν ήταν δυνατή η μετακίνηση/μετονομασία του πηγαίου καταλόγου."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move a folder into itself.\n"
-msgstr "Δεν είναι δυνατή η εισαγωγή ενός αÏχείου πάνω στον εαυτό του:"
+msgstr "Δεν είναι δυνατή η μετακίνηση ενός φακέλου στον εαυτό του.\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "Σφάλμα κατά την μετακίνηση καταλόγου:\n"
+msgstr "Σφάλμα κατά την μετακίνηση:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "Η σκηνή '%s' έχει σπασμένες εξαÏτήσεις:"
+msgstr "ΑδÏνατη η ενημέÏωση των εξαÏτήσεων:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "Δεν δόθηκε όνομα"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "Το δοσμένο όνομα πεÏιέχει άκυÏους χαÏακτήÏες"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "No name provided."
-msgstr "Μετονομασία ή μετακίνηση.."
+msgstr "Δεν δόθηκε όνομα."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "ΈγκυÏοι χαÏακτήÏες:"
+msgstr "Το όνομα πεÏιέχει άκυÏους χαÏακτήÏες."
#: editor/filesystem_dock.cpp
msgid "A file or folder with this name already exists."
-msgstr ""
+msgstr "ΥπάÏχει ήδη ένα αÏχείο ή φάκελος με αυτό το όνομα."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Μετονομασία μεταβλητής"
+msgstr "Μετονομασία αÏχείου:"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming folder:"
-msgstr "Μετονομασία κόμβου"
+msgstr "Μετονομασία καταλόγου:"
#: editor/filesystem_dock.cpp
msgid "Expand all"
@@ -2501,18 +2665,16 @@ msgid "Copy Path"
msgstr "ΑντιγÏαφή διαδÏομής"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Rename.."
-msgstr "Μετονομασία"
+msgstr "Μετονομασία..."
#: editor/filesystem_dock.cpp
msgid "Move To.."
-msgstr "Μετακίνηση σε..."
+msgstr "Μετακίνηση σε"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "ΔημιουÏγία φακέλου"
+msgstr "Îέος φάκελος"
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2524,11 +2686,11 @@ msgstr "Στιγμιότυπο"
#: editor/filesystem_dock.cpp
msgid "Edit Dependencies.."
-msgstr "ΕπεξεÏγασία εξαÏτήσεων .."
+msgstr "ΕπεξεÏγασία εξαÏτήσεων"
#: editor/filesystem_dock.cpp
msgid "View Owners.."
-msgstr "ΠÏοβολή Ιδιοκτητών .."
+msgstr "ΠÏοβολή ιδιοκτητών"
#: editor/filesystem_dock.cpp
msgid "Previous Directory"
@@ -2582,9 +2744,8 @@ msgid "Import as Single Scene"
msgstr "Εισαγωγή ως μονή σκηνή"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Animations"
-msgstr "Εισαγωγή με ξεχωÏιστά υλικά"
+msgstr "Εισαγωγή με ξεχωÏιστές κινήσεις"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
@@ -2599,19 +2760,16 @@ msgid "Import with Separate Objects+Materials"
msgstr "Εισαγωγή με ξεχωÏιστά υλικά και αντικείμενα"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Objects+Animations"
-msgstr "Εισαγωγή με ξεχωÏιστά υλικά και αντικείμενα"
+msgstr "Εισαγωγή με ξεχωÏιστά αντικείμενα και κινήσεις"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Materials+Animations"
-msgstr "Εισαγωγή με ξεχωÏιστά υλικά"
+msgstr "Εισαγωγή με ξεχωÏιστά υλικά και κινήσεις"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "Εισαγωγή με ξεχωÏιστά υλικά και αντικείμενα"
+msgstr "Εισαγωγή με ξεχωÏιστά αντικείμενα, υλικά και κινήσεις"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
@@ -2700,9 +2858,8 @@ msgid "Edit Poly"
msgstr "ΕπεγεÏγασία πολυγώνου"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#, fuzzy
msgid "Insert Point"
-msgstr "Εισαγωγή"
+msgstr "Εισαγωγή σημείου"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -2715,9 +2872,8 @@ msgid "Remove Poly And Point"
msgstr "ΑφαίÏεση πολυγώνου και σημείου"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "ΔημιουÏγία νέου πολυγώνου από την αÏχή."
+msgid "Create a new polygon from scratch"
+msgstr "ΔημιουÏγία νέου πολυγώνου από την αÏχή"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2731,6 +2887,10 @@ msgstr ""
"Ctrl + ΑÏιστεÏÏŒ κλικ: ΔιαίÏεση τμήματος.\n"
"Δεξί κλικ: ΔιαγÏαφή σημείου."
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "ΔιαγÏαφή σημείων"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "Εναλλαγή αυτόματης αναπαÏαγωγής"
@@ -2875,6 +3035,57 @@ msgid "Copy Animation"
msgstr "ΑνιγÏαφή κίνησης"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Ενότητες:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Επικόληση"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Δυνατότητες"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "ΔημιουÏγία νέας κίνησης"
@@ -3065,18 +3276,10 @@ msgid "Can't resolve hostname:"
msgstr "Δεν είναι δυνατή η επίλυση του ονόματος του κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "Δεν είναι δυνατή η επίλυση."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Σφάλμα σÏνδεσης, παÏακαλώ ξαναπÏοσπαθήστε."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "Δεν ήταν δυνατή η σÏνδεση."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "Δεν ήταν δυνατή η σÏνδεση στον κεντÏικό υπολογιστή:"
@@ -3085,30 +3288,14 @@ msgid "No response from host:"
msgstr "Δεν λήφθηκε απόκÏιση από τον κεντÏικό υπολογιστή:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Δεν λήφθηκε απόκÏιση."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "Το αίτημα απέτυχε, κώδικας επιστÏοφής:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Το αίτημα απέτυχε."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "Το αίτημα απέτυχε, πάÏα πολλές ανακατευθήνσεις"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Î’Ïόχος ανακατευθήνσεων."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Απέτυχε:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
"Εσφαλμένος κωδικός κατακεÏματισμοÏ, θα θεωÏηθεί ότι το αÏχείο έχει αλοιωθεί."
@@ -3138,14 +3325,6 @@ msgid "Resolving.."
msgstr "Επίλυση..."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "ΣÏνδεση.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Γίνεται αίτημα.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "Σφάλμα κατά την Ï€Ïαγματοποίηση αιτήματος"
@@ -3258,6 +3437,34 @@ msgid "Move Action"
msgstr "ΕνέÏγεια μετακίνησης"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Μετακίνηση κάθετου οδηγοÏ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "ΔημιουÏγία νέου κάθετου οδηγοÏ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "ΑφαίÏεση κάθετου οδηγοÏ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Μετακίνηση οÏιζόντιου οδηγοÏ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "ΔημιουÏγία νέου οÏιζόντιου οδηγοÏ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "ΑφαίÏεση οÏιζόντιου οδηγοÏ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "ΔημιουÏγία νέων οÏιζοντίων και κάθετων οδηγών"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "ΕπεξεÏγασία Αλυσίδας IK"
@@ -3266,14 +3473,12 @@ msgid "Edit CanvasItem"
msgstr "ΕπεξεÏγασία στοιχείου κανβά"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Anchors only"
-msgstr "ΆγκυÏα"
+msgstr "Μόνο άγκυÏες"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change Anchors and Margins"
-msgstr "Αλλαγή αγκυÏών"
+msgstr "Αλλαγή αγκÏÏων και πεÏιθωÏίων"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
@@ -3331,9 +3536,8 @@ msgid "Pan Mode"
msgstr "ΛειτουÏγία Μετακίνησης κάμεÏας"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggles snapping"
-msgstr "Εναλλαγή σημείου διακοπής"
+msgstr "Εναλλαγή κουμπώματος"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3341,23 +3545,20 @@ msgid "Use Snap"
msgstr "ΧÏήση κουμπώματος"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snapping options"
-msgstr "Επιλογές κίνησης"
+msgstr "Επιλογές κουμπώματος"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to grid"
-msgstr "ΛειτουÏγία κουμπώματος:"
+msgstr "κουμπώματος στο πλέγμα"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
msgstr "ΧÏήση κουμπώματος πεÏιστÏοφής"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Configure Snap..."
-msgstr "ΔιαμόÏφωση κουμπώματος.."
+msgstr "ΔιαμόÏφωση κουμπώματος..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
@@ -3369,30 +3570,35 @@ msgstr "ΧÏήση κουμπώματος εικονοστοιχείου"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "Έξυπνο κοÏμπωμα"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to parent"
-msgstr "Επικάλυψη γονέα"
+msgstr "ΚοÏμπωμα στον γονέα"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "ΚοÏμπωμα στην άγκυÏα του κόμβου"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "ΚοÏμπωμα στις πλευÏές του κόμβου"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "ΚοÏμπωμα σε άλλους κόμβους"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "ΚοÏμπωμα στους οδηγοÏÏ‚"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Κλείδωμα του επιλεγμένου αντικείμένου (Δεν μποÏεί να μετακινηθεί)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Ξεκλείδωμα του επιλεγμένου αντικείμένου (ΜποÏεί να μετακινηθεί)."
@@ -3435,14 +3641,16 @@ msgid "Show Grid"
msgstr "Εμφάνιση πλέγματος"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show helpers"
-msgstr "Εμφάνιση οστών"
+msgstr "Εμφάνιση βοηθών"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show rulers"
-msgstr "Εμφάνιση οστών"
+msgstr "Εμφάνιση χαÏάκων"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Εμφάνιση οδηγών"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3453,9 +3661,8 @@ msgid "Frame Selection"
msgstr "Πλαισίωμα επιλογής"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Αποθήκευση διάταξης"
+msgstr "Διάταξη"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
@@ -3479,20 +3686,19 @@ msgstr "ΕκκαθάÏιση στάσης"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "ΣÏÏσιμο κέντÏου από την θέση του ποντικιοÏ"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "ΟÏισμός θέσης εξόδου καμπÏλης"
+msgstr "ΟÏισμός κέντÏου στον κέÏσοÏα"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Πολλαπλασιαμός βήματος πλέγματος με 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "ΔιαίÏεση βήματος πλέγματος με 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3572,25 +3778,23 @@ msgstr "ΑναπÏοσαÏμογή από την σκηνή"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat0"
-msgstr ""
+msgstr "Επίπεδο 0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat1"
-msgstr ""
+msgstr "Επίπεδο 1"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
-msgstr "Ομαλή κίνηση Ï€Ïος τα μέσα"
+msgstr "Ομαλά μέσα"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease out"
-msgstr "Ομαλή κίνηση Ï€Ïος τα έξω"
+msgstr "Ομαλά έξω"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
-msgstr ""
+msgstr "Ομαλό βήμα"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Point"
@@ -3636,6 +3840,10 @@ msgstr "Εναλλαγή γÏαμμικής εφαπτομένης καμπÏλÎ
msgid "Hold Shift to edit tangents individually"
msgstr "Πατήστε το Shift για να επεξεÏγαστείτε εφαπτομένες μεμονωμένα"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "ΠÏοετοιμασία διεÏεÏνησης GI"
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "ΠÏοσθήκη αφαίÏεση σημείου διαβάθμισης χÏωμάτων"
@@ -3670,6 +3878,10 @@ msgid "Create Occluder Polygon"
msgstr "ΔημιουÏγία πολυγώνου εμποδίου"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "ΔημιουÏγία νέου πολυγώνου από την αÏχή."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "ΕπεξεÏγασία υπαÏÎºÏ„Î¿Ï Ï€Î¿Î»Ï…Î³ÏŽÎ½Î¿Ï…:"
@@ -3685,58 +3897,6 @@ msgstr "Ctrl+ΑÏιστεÏÏŒ κλικ: ΔιαχωÏσμός τμήματος."
msgid "RMB: Erase Point."
msgstr "Δεξί κλικ: ΔιαγÏαφή σημείου."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "ΔιαγÏαφή σημείου από την δισδιάστατη γÏαμμή"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "ΠÏόσθεσε σημείο στην δισδυάστατη γÏαμμή"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Μετακίινηση σημείου στην δισδιάστατη γÏαμμή"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Επιλογή σημείων"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift + ΣÏÏσιμο: Επιλογή σημείψν ελέγχου"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Κλικ: ΠÏοσθήκη σημείου"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Δεξί κλικ: ΔιαγÏαφή σημείου"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "ΠÏοσθήκη σημείου (σε άδειο χώÏο)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "ΔιαχωÏισμός τμήματος (στη γÏαμμή)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "ΔιαγÏαφή σημείου"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "Το πλέγμα είναι άδειο!"
@@ -3920,73 +4080,64 @@ msgid "Bake!"
msgstr "ΠÏοεπεξεÏγάσου!"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Bake the navigation mesh.\n"
-msgstr "ΔημιουÏγία πλέγματος πλοήγησης"
+msgstr "ΠÏοετοιμασία του πλέγματος πλοήγησης.\n"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Clear the navigation mesh."
-msgstr "ΔημιουÏγία πλέγματος πλοήγησης"
+msgstr "ΕκκαθάÏιση του πλέγματος πλοήγησης."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "ΡÏθμιση παÏαμέτÏων..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "Υπολογισμός μεγέθους πλέγματος..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating heightfield..."
-msgstr "ΔημιουÏγία Î¿ÎºÏ„Î±Î´Î¹ÎºÎ¿Ï Î´Î­Î½Ï„Ïου φωτός"
+msgstr "ΔημιουÏγία πεδίου Ïψους..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Marking walkable triangles..."
-msgstr "ΜεταφÏάσιμες συμβολοσειÏές..."
+msgstr "Επισήμανση βατών Ï„Ïιγώνων..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "ΔημιουÏγία συμπυκνωμένου πεδίου Ïψους..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "ΔιάβÏωση βατής πεÏιοχής..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
-msgstr "ΠÏοειδοποίηση"
+msgstr "ΔιαμεÏισμός..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating contours..."
-msgstr "ΔημιουÏγία υφής Î¿ÎºÏ„Î±Î´Î¹ÎºÎ¿Ï Î´Î­Î½Ï„Ïου"
+msgstr "ΔημιουÏγία πεÏιγÏαμμάτων..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating polymesh..."
-msgstr "ΔημιουÏγία πλέγματος πεÏιγÏάμματος.."
+msgstr "ΔημιουÏγία πολÏ-πλέγματος..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Converting to native navigation mesh..."
-msgstr "ΔημιουÏγία πλέγματος πλοήγησης"
+msgstr "ΜετατÏοπή σε εγγενή πλέγμα πλοήγησης..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "ΡÏθμιση γενήτÏιας πλέγματος πλοήγησης:"
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Parsing Geometry..."
-msgstr "Ανάλυση γεωμετÏίας"
+msgstr "Ανάλυση γεωμετÏίας..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "Τέλος!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4147,16 +4298,46 @@ msgid "Move Out-Control in Curve"
msgstr "Μετακίνηση ελεγκτή εξόδου στην καμπÏλη"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Επιλογή σημείων"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift + ΣÏÏσιμο: Επιλογή σημείψν ελέγχου"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Κλικ: ΠÏοσθήκη σημείου"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Δεξί κλικ: ΔιαγÏαφή σημείου"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Επλογή σημείων ελέγχου (Shift + ΣÏÏσιμο)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "ΠÏοσθήκη σημείου (σε άδειο χώÏο)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "ΔιαχωÏισμός τμήματος (στην καμπÏλη)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "ΔιαγÏαφή σημείου"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "κλείσιμο καμπÏλης"
@@ -4165,17 +4346,14 @@ msgid "Curve Point #"
msgstr "Σημείο καμπÏλης #"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
msgstr "ΟÏισμός θέσης σημείου καμπÏλης"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve In Position"
msgstr "ΟÏισμός θέσης εισόδου καμπÏλης"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Out Position"
msgstr "ΟÏισμός θέσης εξόδου καμπÏλης"
@@ -4296,7 +4474,6 @@ msgstr "ΦόÏτωση πόÏου"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4343,6 +4520,20 @@ msgid " Class Reference"
msgstr " ΑναφοÏά κλασεων"
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Ταξινόμηση"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Μετακίνηση πάνω"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Μετακίνηση κάτω"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Επόμενη δεσμή ενεÏγειών"
@@ -4394,6 +4585,10 @@ msgstr "Κλείσιμο τεκμηÏίωσης"
msgid "Close All"
msgstr "Κλείσιμο όλων"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Κλείσιμο άλλον καÏτελών"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Εκτέλεση"
@@ -4404,13 +4599,11 @@ msgstr "Εναλλαγή πλαισίου δεσμών ενεÏγειών"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "ΕÏÏεση.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "ΕÏÏεση επόμενου"
@@ -4492,7 +4685,7 @@ msgid ""
"Built-in scripts can only be edited when the scene they belong to is loaded"
msgstr ""
"Οι ενσωματομένες δεσμές ενεÏγειών μποÏοÏν να επεξεÏγαστοÏν μόνο όταν η σκηνή "
-"στην οποία ανοίκουν είναι φοÏτωμένη"
+"στην οποία ανήκουν είναι φοÏτωμένη"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
@@ -4518,33 +4711,22 @@ msgstr "Πεζά"
msgid "Capitalize"
msgstr "Κεφαλαιοποίηση"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Αποκοπή"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "ΑντιγÏαφή"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Επιλογή όλων"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Μετακίνηση πάνω"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Μετακίνηση κάτω"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr "ΔιαγÏαφή γÏαμμής"
@@ -4566,6 +4748,22 @@ msgid "Clone Down"
msgstr "Κλωνοποίηση κάτω"
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "Αναδίπλωση γÏαμμής"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "Ξεδίπλωμα γÏαμμής"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "Αναδίπλωση όλων των γÏαμμών"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "Ξεδίπλωμα όλων των γÏαμμών"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "ΣυμπλήÏωση συμβόλου"
@@ -4611,12 +4809,10 @@ msgid "Convert To Lowercase"
msgstr "ΜετατÏοπή σε πεζά"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "ΈυÏεση Ï€ÏοηγοÏμενου"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Αντικατάσταση.."
@@ -4625,7 +4821,6 @@ msgid "Goto Function.."
msgstr "Πήγαινε σε συνάÏτηση.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Πήγαινε σε γÏαμμή.."
@@ -4790,6 +4985,14 @@ msgid "View Plane Transform."
msgstr "Μετασχηματισμός στο επίπεδο θέασης."
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "Κλιμάκωση: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Μετακίνηση: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "ΠεÏιστÏοφή %s μοίÏες."
@@ -4871,6 +5074,10 @@ msgid "Vertices"
msgstr "ΚοÏυφές"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Στοίχηση με την Ï€Ïοβολή"
@@ -4903,12 +5110,20 @@ msgid "View Information"
msgstr "Εμφάνιση πληÏοφοÏιών"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Εμφάνιση FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Μισή ανάλυση"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "ΑκÏοατής ήχου"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Doppler Enable"
-msgstr "ΕνεÏγοποίηση φαινομένου dollper"
+msgstr "Φαινόμενο ÎτόπλεÏ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
@@ -5033,6 +5248,10 @@ msgid "Tool Scale"
msgstr "ΕÏγαλείο κλιμάκωσης"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Εναλλαγή ελεÏθεÏης κάμεÏας"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Μετασχηματισμός"
@@ -5202,14 +5421,12 @@ msgid "Insert Empty (After)"
msgstr "Εισαγωγή άδειου (Μετά)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (Before)"
-msgstr "Μετακίνηση κόμβων"
+msgstr "Μετακίνηση (ΠÏιν)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (After)"
-msgstr "Μετκίνιση αÏιστεÏά"
+msgstr "Μετκίνιση (Μετά)"
#: editor/plugins/style_box_editor_plugin.cpp
msgid "StyleBox Preview:"
@@ -5286,11 +5503,11 @@ msgstr "ΑφαίÏεση όλων"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "ΕπεξεÏγασία θέματος.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "ÎœÎµÎ½Î¿Ï ÎµÏ€ÎµÎ¾ÎµÏγασίας θέματος."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5309,6 +5526,10 @@ msgid "Create Empty Editor Template"
msgstr "ΔημιουÏγία άδειου Ï€ÏοτÏπου επεξεÏγαστή"
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "ΔημιουÏγία από το Ï„Ïέχων θέμα του επεξεÏγαστή"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "Κουμπί επιλογής1"
@@ -5426,9 +5647,8 @@ msgid "Mirror Y"
msgstr "ΣυμμετÏία στον άξονα Î¥"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Paint Tile"
-msgstr "Βάψιμο TileMap"
+msgstr "Βάψιμο πλακιδίου"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -5483,17 +5703,17 @@ msgid "Runnable"
msgstr "Εκτελέσιμο"
#: editor/project_export.cpp
-msgid "Delete patch '"
-msgstr "ΔιαγÏαφή ενημέÏωσης '"
+msgid "Delete patch '%s' from list?"
+msgstr "ΔιαγÏαφή ενημέÏωσης '%s' από την λίστα;"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
msgstr "ΔιαγÏαφή διαμόÏφωσης '%s';"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted: "
-msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:"
+msgstr ""
+"Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν ή είναι κατεστÏαμμένα: "
#: editor/project_export.cpp
msgid "Presets"
@@ -5570,32 +5790,34 @@ msgid "Export templates for this platform are missing:"
msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:"
+msgstr ""
+"Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν ή είναι κατεστÏαμμένα:"
#: editor/project_export.cpp
msgid "Export With Debug"
msgstr "Εξαγωγή με αποσφαλμάτωση"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "Το αÏχείο δεν υπάÏχει."
+msgstr "Η διαδÏομή δεν υπάÏχει."
#: editor/project_manager.cpp
msgid "Please choose a 'project.godot' file."
-msgstr ""
+msgstr "ΠαÏακαλοÏμε επιλέκτε ένα αÏχείο 'project.godot'."
#: editor/project_manager.cpp
msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
msgstr ""
+"Το έÏγο θα δημιουÏγηθεί σε έναν μη-άδειο φάκελο (Ίσως θέλετε να "
+"δημιουÏγήσετε έναν καινοÏÏγιο)."
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
msgstr ""
+"ΠαÏακαλοÏμε επιλέξτε έναν φάκελο που δεν πεÏιέχει ένα αÏχείο 'project.godot'."
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -5603,25 +5825,24 @@ msgstr "Εισαγμένο έÏγο"
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "Είναι καλή ιδέα να ονομάσετε το έÏγο σας."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
msgstr "Μη έγκυÏη διαδÏομή έÏγου (Αλλάξατε τίποτα;)."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in project path."
-msgstr "Δεν ήταν δυνατή η δημιουÏγία του project.godot στη διαδÏομή έÏγου."
+msgstr "Δεν βÏέθηκε το project.godot στη διαδÏομή του έÏγου."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't edit project.godot in project path."
-msgstr "Δεν ήταν δυνατή η δημιουÏγία του project.godot στη διαδÏομή έÏγου."
+msgstr ""
+"Δεν ήταν δυνατή η επεξεÏγασία του project.godot στη διαδÏομή του έÏγου."
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
@@ -5632,14 +5853,12 @@ msgid "The following files failed extraction from package:"
msgstr "Η εξαγωγή των ακόλουθων αÏχείων από το πακέτο απέτυχε:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "Ανώνυμο έÏγο"
+msgstr "Μετονομασία έÏγου"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in the project path."
-msgstr "Δεν ήταν δυνατή η δημιουÏγία του project.godot στη διαδÏομή έÏγου."
+msgstr "Δεν βÏέθηκε το project.godot στη διαδÏομή του έÏγου."
#: editor/project_manager.cpp
msgid "New Game Project"
@@ -5662,7 +5881,6 @@ msgid "Project Name:"
msgstr "Όνομα έÏγου:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
msgstr "ΔημιουÏγία φακέλου"
@@ -5683,9 +5901,8 @@ msgid "Unnamed Project"
msgstr "Ανώνυμο έÏγο"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "Δεν είναι δυνατή η εκτέλεση του έÏγου"
+msgstr "Δεν ήταν δυνατό το άνοιγμα του έÏγου"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -5724,6 +5941,9 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Η γλώσσα άλλαξε.\n"
+"Το πεÏιβάλλον θα αλλάξει την επόμενη φοÏά που θα ξεκινήσει ο επεξεÏγαστής ή "
+"ο διαχειÏιστής έÏγων."
#: editor/project_manager.cpp
msgid ""
@@ -5757,14 +5977,19 @@ msgid "Exit"
msgstr "Έξοδος"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "Επανεκκίνηση (δευτεÏόλεπτα):"
+msgstr "Επανεκκίνηση τώÏα"
#: editor/project_manager.cpp
msgid "Can't run project"
msgstr "Δεν είναι δυνατή η εκτέλεση του έÏγου"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Κλειδί "
@@ -5798,10 +6023,6 @@ msgid "Add Input Action Event"
msgstr "ΠÏοσθήκη συμβάντος εισόδου"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5919,31 +6140,28 @@ msgid "Add Global Property"
msgstr "ΠÏοσθήκη καθολικής ιδιότητας"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Select a setting item first!"
msgstr "Επιλέξτε ένα αντικείμενο ÏÏθμισης Ï€Ïώτα!"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr "Δεν υπάÏχει ιδιότητα '"
+msgid "No property '%s' exists."
+msgstr "Η ιδιότητα '%s' δεν υπάÏχει."
#: editor/project_settings_editor.cpp
-msgid "Setting '"
-msgstr "Ρυθμίση '"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "Η ÏÏθμιση '%s' είναι εσωτεÏική και δεν μποÏεί να διαγÏαφεί."
#: editor/project_settings_editor.cpp
msgid "Delete Item"
msgstr "ΔιαγÏαφή αντικειμένου"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "Δεν ήταν δυνατή η σÏνδεση στον κεντÏικό υπολογιστή:"
+msgstr "Δεν μποÏεί να πεÏιέχει '/' ή ':'"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Already existing"
-msgstr "Η ενέÏγεια '%s' υπάÏχει ήδη!"
+msgstr "ΥπάÏχει ήδη"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -5986,13 +6204,12 @@ msgid "Remove Resource Remap Option"
msgstr "ΑφαίÏεση επιλογής ανακατεÏθυνσης πόÏου"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Αλλαγή χÏόνου ανάμειξης"
+msgstr "Αλλαγή φίλτÏου τοπικών Ïυθμίσεων"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Αλλαγή λειτουÏγίας φίλτÏου τοπικών Ïυθμίσεων"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -6055,28 +6272,24 @@ msgid "Locale"
msgstr "ΠεÏιοχή"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "ΠεÏιοχή"
+msgstr "ΦίλτÏο τοπικών Ïυθμίσεων"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "Εμφάνιση οστών"
+msgstr "Εμφάνιση όλων των τοπικών Ïυθμίσεων"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "Εμφάνιση μόνο επιλεγμένων τοπικών Ïυθμίσεων"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "ΦιλτÏάÏισμα κόμβων"
+msgstr "ΛειτουÏγία φιλτÏαÏίσματος:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "ΠεÏιοχή"
+msgstr "ΠεÏιοχές:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -6127,18 +6340,16 @@ msgid "New Script"
msgstr "Îεα δεσμή ενεÏγειών"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "ΔημιουÏγία οστών"
+msgstr "Κάνε μοναδικό"
#: editor/property_editor.cpp
msgid "Show in File System"
msgstr "Εμφάνιση στο σÏστημα αÏχείων"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "ΜετατÏοπή σε..."
+msgstr "ΜετατÏοπή σε %s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
@@ -6177,9 +6388,8 @@ msgid "Select Property"
msgstr "Επιλογή ιδιότητας"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Virtual Method"
-msgstr "Επιλογή μεθόδου"
+msgstr "Επιλογή εικονικής μεθόδου"
#: editor/property_selector.cpp
msgid "Select Method"
@@ -6417,6 +6627,14 @@ msgid "Clear a script for the selected node."
msgstr "ΕκκαθάÏιση δεσμής ενεÏγειών για τον επιλεγμένο κόμβο."
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "ΑπομακÏυσμένο"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "Τοπικό"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "ΕκκαθάÏιση κληÏονομικότητας; (Δεν γίνεται ανέÏαιση!)"
@@ -6539,12 +6757,11 @@ msgstr "Μη έγκυÏη βασική διαδÏομή"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "ΥπάÏχει ήδη ένας κατάλογος με το ίδιο όνομα"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "Το αÏχείο υπάÏχει. Θέλετε να το αντικαταστήσετε;"
+msgstr "Το αÏχείο υπάÏχει, θα επαναχÏησιμοποιηθεί"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6576,7 +6793,7 @@ msgstr "ΕπιτÏεπόμενα: a-z, A-Z, 0-9 και _"
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)"
-msgstr "Ενσωμάτωση δεσμής ενεÏγειών (στο αÏχείο σκηνής)"
+msgstr "Ενσωμάτωση (στο αÏχείο σκηνής)"
#: editor/script_create_dialog.cpp
msgid "Create new script file"
@@ -6604,13 +6821,17 @@ msgstr "ΠÏότυπο"
#: editor/script_create_dialog.cpp
msgid "Built-in Script"
-msgstr "Ενσωματωμένη δεσμή ενεÏγειών"
+msgstr "Ενσωμάτωση"
#: editor/script_create_dialog.cpp
msgid "Attach Node Script"
msgstr "ΣÏνδεση δεσμής ενεÏγειών κόμβου"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "ΑπομακÏυσμένο "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Ψηφιολέξεις:"
@@ -6633,6 +6854,8 @@ msgstr "ΣυνάÏτηση:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
msgstr ""
+"Επιλέξτε ένα ή πεÏισσότεÏα αντικείμενα από την λίστα για να εμφανιστεί το "
+"γÏάφημα."
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6667,18 +6890,6 @@ msgid "Stack Trace (if applicable):"
msgstr "Ιχνηλάτηση στοίβας (Εάν υφίσταται):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "ΑπομακÏυσμένος επιθεωÏητής"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Ζωντανό δέντÏο σκηνής:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "ΑπομακÏυσμένες ιδιότητες αντικειμένου: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "ΠÏόγÏαμμα δημιουÏγίας Ï€Ïοφιλ"
@@ -6795,69 +7006,67 @@ msgid "Change Probe Extents"
msgstr "Αλλαγή διαστάσεων αισθητήÏα"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Library"
-msgstr "Βιβλιοθήκη πλεγμάτων..."
+msgstr "Βιβλιοθήκη"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Status"
-msgstr "Κατάσταση:"
+msgstr "Κατάσταση"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Βιβλιοθήκες: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"Μη έγκυÏη παÏάμετÏος στην convert(). ΧÏησιμοποιήστε τις σταθεÏές TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Δεν υπάÏχουν αÏκετά byte για την αποκωδικοποίηση, ή άκυÏη μοÏφή."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "Η παÏάμετÏος step είναι μηδέν!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Δεν είναι δεσμή ενεÏγειών με στιγμιότυπο"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Δεν είναι βασισμένο σε δεσμή ενεÏγειών"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Δεν βασίζεται σε αÏχείο πόÏων"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "ΆκυÏη μοÏφή Î»ÎµÎ¾Î¹ÎºÎ¿Ï ÏƒÏ„Î¹Î³Î¼Î¹Î¿Ï„Ïπων (λείπει το @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"ΆκυÏη μοÏφή Î»ÎµÎ¾Î¹ÎºÎ¿Ï ÏƒÏ„Î¹Î³Î¼Î¹Î¿Ï„Ïπων (αδÏνατη η φόÏτωση της δεσμής ενεÏγειών στο "
"@path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "ΆκυÏη μοÏφή Î»ÎµÎ¾Î¹ÎºÎ¿Ï ÏƒÏ„Î¹Î³Î¼Î¹Î¿Ï„Ïπων (Μη έγκυÏη δεσμή ενεÏγειών στο @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "ΆκυÏη μοÏφή Î»ÎµÎ¾Î¹ÎºÎ¿Ï ÏƒÏ„Î¹Î³Î¼Î¹Î¿Ï„Ïπων (άκυÏες υπό-κλάσεις)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "Το αντικείμενο δεν έχει μήκος."
@@ -6870,18 +7079,24 @@ msgid "GridMap Duplicate Selection"
msgstr "GridMap Διπλασιασμός επιλογής"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "Δάπεδο:"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "ΧάÏτης δικτÏου"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr "ΚοÏμπωμα όψης"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Prev Level (%sDown Wheel)"
-msgstr "ΠÏοηγοÏμενο επίπεδο ("
+msgid "Previous Floor"
+msgstr "ΠÏοηγοÏμενο πάτωμα"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Next Level (%sUp Wheel)"
-msgstr "Επόμενο επίπεδο ("
+msgid "Next Floor"
+msgstr "Επόμενο πάτωμα"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Disabled"
@@ -6948,12 +7163,8 @@ msgid "Erase Area"
msgstr "ΔιαγÏαφή πεÏσιοχής"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr "Επιλογή -> Διπλασιασμός"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr "Επιλογή -> ΕκκαθάÏιση"
+msgid "Clear Selection"
+msgstr "ΕκκαθάÏιση επιλογής"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6965,7 +7176,7 @@ msgstr "Επιλογή απόστασης:"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
-msgstr ""
+msgstr "Δόμηση"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -7082,9 +7293,9 @@ msgid "Duplicate VisualScript Nodes"
msgstr "Διπλασιασμός κόμβων VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Πατήστε παÏατεταμένα το κουμπί Meta για να Ï€Ïοσθέσετε έναν Getter. Πατήστε "
+"Πατήστε παÏατεταμένα το %s για να Ï€Ïοσθέσετε έναν Getter. Πατήστε "
"παÏατεταμένα το Shift για να Ï€Ïοσθέσετε μία γενική υπογÏαφή."
#: modules/visual_script/visual_script_editor.cpp
@@ -7094,10 +7305,9 @@ msgstr ""
"παÏατεταμένα το Shift για να Ï€Ïοσθέσετε μία γενική υπογÏαφή."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
-"Πατήστε παÏατεταμένα το κουμπί Meta για να Ï€Ïοσθέσετε μία απλή αναφοÏά στον "
-"κόμβο."
+"Πατήστε παÏατεταμένα το %s για να Ï€Ïοσθέσετε μία απλή αναφοÏά στον κόμβο."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
@@ -7105,9 +7315,8 @@ msgstr ""
"Πατήστε παÏατεταμένα το Ctrl για να Ï€Ïοσθέσετε μία απλή αναφοÏά στον κόμβο."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr ""
-"Πατήστε παÏατεταμένα το κουμπί Meta για να Ï€Ïοσθέσετε έναν Setter μεταβλητής."
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Πατήστε παÏατεταμένα το %s για να Ï€Ïοσθέσετε έναν Setter μεταβλητής."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7179,7 +7388,7 @@ msgstr "ΠάÏε"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr ""
+msgstr "Η δεσμή ενεÏγειών έχει ήδη συνάÏτηση '%s'"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Input Value"
@@ -7335,13 +7544,21 @@ msgid "Could not write file:\n"
msgstr "Δεν ήταν δυνατό το γÏάψιμο στο αÏχείο:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "Δεν ήταν δυνατή η ανάγνωση του αÏχείου:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "Δεν ήταν δυνατό το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "ΆκυÏο Ï€ÏοτÏπο εξαγωγής:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "Δεν ήταν δυνατή η ανάγνωση του Ï€ÏοσαÏμοσμένου κελÏφους HTML:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "Δεν ήταν δυνατή η ανάγνωση της εικόνας εκκίνησης:\n"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7463,22 +7680,6 @@ msgstr ""
"Η ιδιότητα Path Ï€Ïέπει να δείχνει σε έναν έγκυÏο κόμβο Node2D για να "
"δουλέψει."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Η ιδιότητα Path Ï€Ïέπει να δείχνει σε έναν έγκυÏο κόμβο Ï„Ïπου Viewport σε "
-"λειτουÏγία 'render target' για να δουλέψει."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Το Viewport που οÏίστηκε στην ιδιότητα 'path' Ï€Ïέπει να είναι σε λειτουÏγία "
-"'render target' για να δουλέψει αυτό to sprite."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7553,6 +7754,14 @@ msgstr ""
"Ένα σχήμα Ï€Ïέπει να δοθεί στο CollisionShape για να λειτουÏγήσει. "
"ΔημιουÏγήστε ένα πόÏο σχήματος για αυτό!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "Τοποθέτηση πλεγμάτων"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "ΟλοκλήÏωση σχεδιαγÏάμματος"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7609,6 +7818,8 @@ msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
msgstr ""
+"Το VehicleWheel δίνει ένα σÏστημα Ï„Ïοχών για το VehicleBody. ΠαÏακαλοÏμε "
+"χÏησιμοποιήστε το ως παιδί του VehicleBody."
#: scene/gui/color_picker.cpp
msgid "Raw Mode"
@@ -7630,6 +7841,11 @@ msgstr "Ειδοποίηση!"
msgid "Please Confirm..."
msgstr "ΠαÏακαλώ επιβεβαιώστε..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Επιλογή μεθόδου"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7651,6 +7867,10 @@ msgstr ""
"ΧÏησιμοποιήστε ένα container ως παιδί (VBox, HBox, κτλ), ή ένα Control και "
"οÏίστε το Ï€ÏοσαÏμοσμένο ελάχιστο μέγεθος χειÏοκίνητα."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Άλλο)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7687,6 +7907,69 @@ msgstr "Σφάλμα κατά την φόÏτωση της γÏαμματοσεÎ
msgid "Invalid font size."
msgstr "Μη έγκυÏο μέγεθος γÏαμματοσειÏάς."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "ΑδÏνατη η πλοήγηση στο '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "Πηγή: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "ΔιαγÏαφή σημείου από την δισδιάστατη γÏαμμή"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "ΠÏόσθεσε σημείο στην δισδυάστατη γÏαμμή"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Μετακίινηση σημείου στην δισδιάστατη γÏαμμή"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "ΔιαχωÏισμός τμήματος (στη γÏαμμή)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#~ msgid "Setting '"
+#~ msgstr "Ρυθμίση '"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "ΑπομακÏυσμένος επιθεωÏητής"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Ζωντανό δέντÏο σκηνής:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "ΑπομακÏυσμένες ιδιότητες αντικειμένου: "
+
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "ΠÏοηγοÏμενο επίπεδο (%sΚάτω Ροδέλα)"
+
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "Επόμενο επίπεδο (%sΠάνω Ïοδέλα)"
+
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Επιλογή -> Διπλασιασμός"
+
+#~ msgid "Selection -> Clear"
+#~ msgstr "Επιλογή -> ΕκκαθάÏιση"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Η ιδιότητα Path Ï€Ïέπει να δείχνει σε έναν έγκυÏο κόμβο Ï„Ïπου Viewport σε "
+#~ "λειτουÏγία 'render target' για να δουλέψει."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Το Viewport που οÏίστηκε στην ιδιότητα 'path' Ï€Ïέπει να είναι σε "
+#~ "λειτουÏγία 'render target' για να δουλέψει αυτό to sprite."
+
#~ msgid "Filter:"
#~ msgstr "ΦίλτÏο:"
@@ -7711,9 +7994,6 @@ msgstr "Μη έγκυÏο μέγεθος γÏαμματοσειÏάς."
#~ msgid "Removed:"
#~ msgstr "ΑφαιÏέθηκαν:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Σφάλμα κατά την αποθήκευση άτλαντα:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "ΑδÏνατη η αποθήκευση υπό-εικόνας άτλαντα:"
@@ -8106,9 +8386,6 @@ msgstr "Μη έγκυÏο μέγεθος γÏαμματοσειÏάς."
#~ msgid "Cropping Images"
#~ msgstr "ΠεÏικοπή Εικόνων"
-#~ msgid "Blitting Images"
-#~ msgstr "Συνδυασμός εικόνων"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "Δεν ήταν δυνατή η αποθήκευση εικόνας άτλαντα:"
@@ -8487,6 +8764,3 @@ msgstr "Μη έγκυÏο μέγεθος γÏαμματοσειÏάς."
#~ msgid "Save Translatable Strings"
#~ msgstr "Αποθήκευση μεταφÏάσιμων συμβολοσειÏών"
-
-#~ msgid "Install Export Templates"
-#~ msgstr "Εγκατάσταση Ï€ÏοτÏπων εξαγωγής"
diff --git a/editor/translations/es.po b/editor/translations/es.po
index dd4b811bff..0fd0d7674a 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -7,9 +7,17 @@
# Alejandro Alvarez <eliluminado00@gmail.com>, 2017.
# BLaDoM GUY <simplybladom@gmail.com>, 2017.
# Carlos López <genetita@gmail.com>, 2016.
+# David Couto <davidcouto@gmail.com>, 2017.
+# Dharkael <izhe@hotmail.es>, 2017.
+# Diego López <diegodario21@gmail.com>, 2017.
+# Gustavo Leon <gleondiaz@gmail.com>, 2017.
+# Juan Quiroga <juanquiroga9@gmail.com>, 2017.
+# Kiji Pixel <raccoon.fella@gmail.com>, 2017.
# Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2017.
+# Lonsfor <lotharw@protonmail.com>, 2017.
+# Oscar Carballal <oscar.carballal@protonmail.com>, 2017.
# Rabid Orange <theorangerabid@gmail.com>, 2017.
-# Roger BR <drai_kin@hotmail.com>, 2016.
+# Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2017.
# Sebastian Silva <sebastian@fuentelibre.org>, 2016.
# Swyter <swyterzone@gmail.com>, 2016-2017.
#
@@ -17,8 +25,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2017-10-23 01:48+0000\n"
-"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n"
+"PO-Revision-Date: 2017-11-28 18:49+0000\n"
+"Last-Translator: Diego López <diegodario21@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot/es/>\n"
"Language: es\n"
@@ -26,7 +34,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -93,9 +101,8 @@ msgid "Anim Track Change Value Mode"
msgstr "Cambiar modo de valor de pista de animación"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Track Change Wrap Mode"
-msgstr "Cambiar modo de valor de pista de animación"
+msgstr "Cambiar modo de ciclo de pista de animación"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
@@ -110,6 +117,7 @@ msgid "Anim Delete Keys"
msgstr "Borrar claves de animación"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Duplicar selección"
@@ -241,24 +249,23 @@ msgstr "Insertar animación"
#: editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr "Escalar claves de animación"
+msgstr "Escalar Claves de Animación"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Add Call Track"
-msgstr "Añadir «call track» de animación"
+msgstr "Añadir «call track» de Animación"
#: editor/animation_editor.cpp
msgid "Animation zoom."
-msgstr "Zoom de animación."
+msgstr "Zoom de Animación."
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "Duración (seg.):"
+msgstr "Duración (s):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr "Duración de animación (en segundos)."
+msgstr "Duración de Animación (en segundos)."
#: editor/animation_editor.cpp
msgid "Step (s):"
@@ -270,15 +277,15 @@ msgstr "Fijado de cursor por pasos (en segundos)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr "Repetir o no la animación."
+msgstr "Activar/Desactivar Bucle de Animación."
#: editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr "Añadir nuevas pistas."
+msgstr "Añadir Nuevas Pistas."
#: editor/animation_editor.cpp
msgid "Move current track up."
-msgstr "Subir la pista actual."
+msgstr "Subir la pasta actual."
#: editor/animation_editor.cpp
msgid "Move current track down."
@@ -286,7 +293,7 @@ msgstr "Bajar la pista actual."
#: editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr "Quitar el pista seleccionada."
+msgstr "Remover la pista seleccionada."
#: editor/animation_editor.cpp
msgid "Track tools"
@@ -298,19 +305,19 @@ msgstr "Editar claves individuales al hacer clic."
#: editor/animation_editor.cpp
msgid "Anim. Optimizer"
-msgstr "Optimizar animación"
+msgstr "Optimizar Animación"
#: editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr "Máximo error lineal:"
+msgstr "Error Lineal Máximo:"
#: editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr "Máximo error angular:"
+msgstr "Error Angular Máximo:"
#: editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr "Máximo ángulo optimizable:"
+msgstr "Ãngulo Optimizable Máximo:"
#: editor/animation_editor.cpp
msgid "Optimize"
@@ -319,7 +326,7 @@ msgstr "Optimizar"
#: editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
-"Selecciona un AnimationPlayer desde el árbol de escenas para editar "
+"Selecciona un AnimationPlayer desde el Ãrbol de Escenas para editar "
"animaciones."
#: editor/animation_editor.cpp
@@ -332,7 +339,7 @@ msgstr "Transición"
#: editor/animation_editor.cpp
msgid "Scale Ratio:"
-msgstr "Relación de escalado:"
+msgstr "Relación de Escalado:"
#: editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
@@ -471,13 +478,12 @@ msgid "Method in target Node must be specified!"
msgstr "¡Debes establecer un método en el nodo seleccionado!"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
-"No se ha encontrado el método objetivo. Especifica un método válido o ancla "
-"un script en el nodo objetivo."
+"No se ha encontrado el método objetivo. Especifica un método válido o "
+"adjunta un script en el Nodo objetivo."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
@@ -497,9 +503,8 @@ msgid "Remove"
msgstr "Quitar"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Add Extra Call Argument:"
-msgstr "Añadir argumento de llamada extra:"
+msgstr "Añadir argumento de llamada Extra:"
#: editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
@@ -650,6 +655,13 @@ msgstr "Editor de dependencias"
msgid "Search Replacement Resource:"
msgstr "Buscar reemplazo de recurso:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Abrir"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Dueños de:"
@@ -671,9 +683,8 @@ msgstr ""
"¿Seguro que quieres quitarlos? (No puedes deshacerlo)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Cannot remove:\n"
-msgstr "No se ha podido resolver."
+msgstr "No se puede eliminar:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -726,6 +737,14 @@ msgstr "¿Quieres eliminar los archivos seleccionados?"
msgid "Delete"
msgstr "Eliminar"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Cambiar Clave de Diccionario"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Cambiar Valor del Diccionario"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "¡Muchas gracias de parte de la comunidad de Godot!"
@@ -739,14 +758,12 @@ msgid "Godot Engine contributors"
msgstr "Contribuidores de Godot"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Project Founders"
-msgstr "Administrador de proyectos"
+msgstr "Los Fundadores del Proyecto"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Lead Developer"
-msgstr "Desarrolladores"
+msgstr "Desarrollador Principal"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
@@ -757,38 +774,36 @@ msgid "Developers"
msgstr "Desarrolladores"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Authors"
-msgstr "Autor:"
+msgstr "Autores"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Patrocinadores Platino"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Patrocinadores Oro"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Mini Patrocinadores"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Donadores Oro"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Donadores Plata"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "Clonar hacia abajo"
+msgstr "Donadores Bronce"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Donantes"
#: editor/editor_about.cpp
msgid "License"
@@ -811,14 +826,12 @@ msgstr ""
"sus respectivas declaraciones de derechos de autor y términos de licencia."
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "Constantes:"
+msgstr "Todos los Componentes"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "Constantes:"
+msgstr "Componentes"
#: editor/editor_about.cpp
msgid "Licenses"
@@ -831,7 +844,7 @@ msgstr "Error al abrir el paquete, no se encuentra en formato zip."
#: editor/editor_asset_installer.cpp
#, fuzzy
msgid "Uncompressing Assets"
-msgstr "Sin comprimir"
+msgstr "Descomprimir Assets"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
@@ -848,38 +861,32 @@ msgid "Install"
msgstr "Instalar"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Installer"
-msgstr "¡El paquete se ha instalado correctamente!"
+msgstr "Instalador de Paquetes"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
msgstr "Altavoces"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Effect"
-msgstr "Añadir elemento vacío"
+msgstr "Añadir Efecto"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "Abrir diseño del Audio Bus"
+msgstr "Renombrar Audio Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Solo"
-msgstr "Abrir diseño del Audio Bus"
+msgstr "Alternar Audio Bus Solo"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Mute"
-msgstr "Abrir diseño del Audio Bus"
+msgstr "Alternar Mute del Bus de Audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Bypass Effects"
-msgstr "Cambiar efectos de bypass del Bus de Audio"
+msgstr "Alternar efectos de bypass del Bus de Audio"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -897,17 +904,14 @@ msgid "Move Bus Effect"
msgstr "Mover Efecto de Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "Quitar seleccionados"
+msgstr "Borrar Efecto de Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr "Bus de Audio, arrastra y suelta para reordenar."
+msgstr "Bus de Audio, Arrastra y Suelta para reordenar."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Solo"
msgstr "Solo"
@@ -916,14 +920,13 @@ msgid "Mute"
msgstr "Silenciar"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bypass"
-msgstr "Bypass"
+msgstr "Sobrepasar"
#: editor/editor_audio_buses.cpp
#, fuzzy
msgid "Bus options"
-msgstr "Opciones de depuración"
+msgstr "Opciones del Bus"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
@@ -931,43 +934,36 @@ msgid "Duplicate"
msgstr "Duplicar"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "Restablecer zoom"
+msgstr "Restablecer Volumen"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "Quitar seleccionados"
+msgstr "Borrar Efecto"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Audio Bus"
-msgstr "Añadir todos"
+msgstr "Añadir Bus de Audio"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
msgstr "¡El Bus Maestro no puede ser borrado!"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Audio Bus"
-msgstr "Borrar ajustes"
+msgstr "Borrar Bus de Audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Duplicate Audio Bus"
-msgstr "Duplicar animación"
+msgstr "Duplicar Bus de Audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "Restablecer zoom"
+msgstr "Restablecer Volumen de Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Move Audio Bus"
-msgstr "Mover acción"
+msgstr "Mover Bus de Audio"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
@@ -982,26 +978,21 @@ msgid "Open Audio Bus Layout"
msgstr "Abrir diseño del Audio Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "There is no 'res://default_bus_layout.tres' file."
msgstr "No existe el archivo 'res://default_bus_layout.tres'."
#: editor/editor_audio_buses.cpp
#, fuzzy
msgid "Invalid file, not an audio bus layout."
-msgstr ""
-"La extensión del archivo no es correcta.\n"
-"Prueba con la extensión .fnt."
+msgstr "Archivo inválido, no es un layout de bus de audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Bus"
-msgstr "Añadir todos"
+msgstr "Añadir Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Create a new Bus Layout."
-msgstr "Crear recurso nuevo"
+msgstr "Crear nuevo Formato de Bus de Audio."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
@@ -1009,9 +1000,8 @@ msgid "Load"
msgstr "Cargar"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Load an existing Bus Layout."
-msgstr "Cargar un recurso existente desde disco y editarlo."
+msgstr "Cargar un Fomato de Bus de Audio existente."
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -1024,14 +1014,12 @@ msgid "Save this Bus Layout to a file."
msgstr "Guardar formato de los Audio Bus como..."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
-#, fuzzy
msgid "Load Default"
-msgstr "Predeterminado"
+msgstr "Cargar Predeterminado"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Load the default Bus Layout."
-msgstr "Cargar el Diseño del Bus por defecto."
+msgstr "Cargar Formato del Bus por defecto."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1137,9 +1125,8 @@ msgid "Updating scene.."
msgstr "Actualizando escena.."
#: editor/editor_dir_dialog.cpp
-#, fuzzy
msgid "Please select a base directory first"
-msgstr "Prueba guardando la escena primero."
+msgstr "Por favor seleccione primero un directorio base."
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
@@ -1175,15 +1162,19 @@ msgid "Packing"
msgstr "Empaquetando"
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-#, fuzzy
msgid "Template file not found:\n"
-msgstr "No se encontró archivo de base:\n"
+msgstr "No se encontró archivo plantilla:\n"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File Exists, Overwrite?"
msgstr "El archivo ya existe, ¿quieres sobreescribirlo?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Crear carpeta"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Reconocidos"
@@ -1191,12 +1182,6 @@ msgstr "Reconocidos"
msgid "All Files (*)"
msgstr "Todos los archivos (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Abrir"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Abrir un archivo"
@@ -1263,10 +1248,9 @@ msgstr "Subir favorito"
msgid "Move Favorite Down"
msgstr "Bajar favorito"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "No se pudo crear la carpeta."
+msgstr "Ir a la carpeta principal"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1290,9 +1274,8 @@ msgid "ScanSources"
msgstr "AnalizandoFuentes"
#: editor/editor_file_system.cpp
-#, fuzzy
msgid "(Re)Importing Assets"
-msgstr "Reimportando"
+msgstr "Reimportando Assets"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -1328,27 +1311,24 @@ msgid "Brief Description:"
msgstr "Descripción breve:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Miembros:"
+msgstr "Miembros"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "Miembros:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "Métodos públicos:"
+msgstr "Métodos Públicos"
#: editor/editor_help.cpp
msgid "Public Methods:"
msgstr "Métodos públicos:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "GUI Theme Items"
-msgstr "Elementos de tema de interfaz:"
+msgstr "Elementos de tema de GUI"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
@@ -1359,54 +1339,48 @@ msgid "Signals:"
msgstr "Señales:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Animaciones"
+msgstr "Enumeraciones"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations:"
-msgstr "Animaciones"
+msgstr "Enumeraciones:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "enum "
msgstr "enum "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "Constantes:"
+msgstr "Constantes"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr "Constantes:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "Descripción:"
+msgstr "Descripción"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Properties"
-msgstr "Propiedades:"
+msgstr "Propiedades"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Property Description:"
-msgstr "Descripción breve:"
+msgstr "Descripción de Propiedad:"
#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Actualmente no hay una descripción para esta propiedad. Por favor, ¡ayúdanos "
+"[color=$color][url=$url]aportando una[/url][/color]!"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "Lista de métodos:"
+msgstr "Métodos"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1417,15 +1391,16 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Actualmente no hay una descripción para este método. Por favor, ¡ayúdanos "
+"[color=$color][url=$url]aportando una[/url][/color]!"
#: editor/editor_help.cpp
msgid "Search Text"
msgstr "Texto de búsqueda"
#: editor/editor_log.cpp
-#, fuzzy
msgid "Output:"
-msgstr " Salida:"
+msgstr "Salida:"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
@@ -1443,7 +1418,6 @@ msgstr "Guardar recurso como.."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
-#, fuzzy
msgid "I see.."
msgstr "Ya veo.."
@@ -1460,28 +1434,24 @@ msgid "Error while saving."
msgstr "Error al guardar."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "No se puede operar en «…»"
+msgstr "No se puede abrir '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "Error al guardar."
+msgstr "Error al analizar '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Fin de archivo inesperado '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Missing '%s' or its dependencies."
-msgstr "La escena «%s» tiene dependencias rotas:"
+msgstr "La escena '%s' tiene dependencias rotas."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "Error al guardar."
+msgstr "Error al cargar '%s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1549,18 +1519,26 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Este recurso pertenece a una escena importada, por tanto, no es editable.\n"
+"Por favor, lee la documentación referente a la importación de escenas para "
+"entender mejor el flujo de trabajo."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Este recurso pertenece a una escena instanciada o heredada.\n"
+"Los cambios realizados sobre éste no se mantendrán al guardar la escena "
+"actual."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Este recurso fue importado, por lo tanto, no es modificable. Cambia sus "
+"ajustes en el panel de importación e impórtalo de nuevo."
#: editor/editor_node.cpp
msgid ""
@@ -1569,6 +1547,30 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Esta escena ha sido importada, por lo tanto, los cambios no se mantendrán.\n"
+"Instanciarlo o heredarlo permitirá hacerle cambios.\n"
+"Por favor, lee la documentación referente a la importación de escenas para "
+"entender mejor el flujo de trabajo."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Este es un objeto remoto, por lo tanto, los cambios no se mantendrán.\n"
+"Por favor, lee la documentación referente a la depuración para entender "
+"mejor el flujo de trabajo."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Expandir todo"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Colapsar todo"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1603,7 +1605,6 @@ msgid "There is no defined scene to run."
msgstr "No hay escena definida para ejecutar."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"No main scene has ever been defined, select one?\n"
"You can change it later in \"Project Settings\" under the 'application' "
@@ -1660,12 +1661,10 @@ msgid "Quick Open Script.."
msgstr "Apertura rápida de script.."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Close"
-msgstr "Guardar un archivo"
+msgstr "Guardar & Cerrar"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save changes to '%s' before closing?"
msgstr "¿Guardar cambios a '%s' antes de cerrar?"
@@ -1674,9 +1673,8 @@ msgid "Save Scene As.."
msgstr "Guardar escena como.."
#: editor/editor_node.cpp
-#, fuzzy
msgid "No"
-msgstr "Nodo"
+msgstr "No"
#: editor/editor_node.cpp
msgid "Yes"
@@ -1696,13 +1694,16 @@ msgid "Export Mesh Library"
msgstr "Exportar biblioteca de modelos"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Esta operación no puede realizarse sin un Nodo Raíz."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Exportar Tile Set"
#: editor/editor_node.cpp
-#, fuzzy
msgid "This operation can't be done without a selected node."
-msgstr "Esta operación no puede realizarse sin una escena."
+msgstr "Esta operación no puede realizarse sin un nodo seleccionado."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
@@ -1733,63 +1734,62 @@ msgid "Exit the editor?"
msgstr "¿Quieres salir del editor?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Project Manager?"
-msgstr "Administrador de proyectos"
+msgstr "¿Abrir el Administrador de Proyectos?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Quit"
-msgstr "Guardar un archivo"
+msgstr "Guardar & Salir"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
msgstr "¿Guardar cambios a la(s) siguiente(s) escena(s) antes de salir?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save changes the following scene(s) before opening Project Manager?"
msgstr ""
-"¿Guardar cambios a la(s) siguiente(s) escena(s) antes de abrir el Gestor de "
-"Proyectos?"
+"¿Guardar cambios a la(s) siguiente(s) escena(s) antes de abrir el "
+"Administrador de Proyectos?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Esta opción está obsoleta. Las situaciones en las que el refresco debe ser "
+"forzado se consideran ahora un error. Por favor, repórtalo."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
msgstr "Elige una escena principal"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "No se pudo activar el plugin addon en: '"
+msgstr ""
+"No se pudo activar el plugin addon en: '%s' falló lectura de configuración."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
"No se pudo encontrar el campo del script para el plugin addon en: 'res://"
-"addons/"
+"addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "No se pudo cargar el script addon desde la ruta: '"
+msgstr "No se pudo cargar el script addon desde la ruta: '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "No se pudo cargar el script addon desde la ruta: '"
+msgstr ""
+"No se pudo cargar el script addon desde la ruta: '%s' El tipo de base no es "
+"un EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "No se pudo cargar el script addon desde la ruta: '"
+msgstr ""
+"No se pudo cargar el script addon desde la ruta: '%s' El script no está en "
+"Modo Herramienta."
#: editor/editor_node.cpp
msgid ""
@@ -1819,9 +1819,8 @@ msgid "Scene '%s' has broken dependencies:"
msgstr "La escena «%s» tiene dependencias rotas:"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Clear Recent Scenes"
-msgstr "Reestablecer huesos"
+msgstr "Limpiar Escenas Recientes"
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -1841,12 +1840,20 @@ msgid "Switch Scene Tab"
msgstr "Cambiar pestaña de escena"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr "%d archivos más"
+msgid "%d more files or folders"
+msgstr "%d más archivos o carpetas"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d archivos o carpetas más"
+msgid "%d more folders"
+msgstr "%d más carpetas"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d más archivos"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Posición del Dock"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1855,7 +1862,11 @@ msgstr "Modo sin distracciones"
#: editor/editor_node.cpp
#, fuzzy
msgid "Toggle distraction-free mode."
-msgstr "Modo sin distracciones"
+msgstr "Alternar Modo sin distracciones"
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Añadir nueva Escena."
#: editor/editor_node.cpp
msgid "Scene"
@@ -1874,9 +1885,8 @@ msgid "Previous tab"
msgstr "Pestaña anterior"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Filter Files.."
-msgstr "Filtrado rápido de archivos…"
+msgstr "Filtrado de archivos.."
#: editor/editor_node.cpp
msgid "Operations with scene files."
@@ -1919,18 +1929,16 @@ msgid "MeshLibrary.."
msgstr "MeshLibrary.."
#: editor/editor_node.cpp
-#, fuzzy
msgid "TileSet.."
msgstr "TileSet.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Deshacer"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Rehacer"
@@ -1943,9 +1951,8 @@ msgid "Miscellaneous project or scene-wide tools."
msgstr "Herramientas varias o de escenas."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Project"
-msgstr "Proyecto nuevo"
+msgstr "Proyecto"
#: editor/editor_node.cpp
msgid "Project Settings"
@@ -2059,9 +2066,8 @@ msgstr ""
"sistema de archivos de red."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Editor"
-msgstr "Editar"
+msgstr "Editor"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
@@ -2072,14 +2078,12 @@ msgid "Editor Layout"
msgstr "Ajustes de diseño del editor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Toggle Fullscreen"
-msgstr "Modo pantalla completa"
+msgstr "Modo Pantalla Completa"
#: editor/editor_node.cpp editor/project_export.cpp
-#, fuzzy
msgid "Manage Export Templates"
-msgstr "Cargando plantillas de exportación"
+msgstr "Cargando Plantillas de Exportación"
#: editor/editor_node.cpp
msgid "Help"
@@ -2090,9 +2094,8 @@ msgid "Classes"
msgstr "Clases"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Online Docs"
-msgstr "Cerrar documentación"
+msgstr "Documentación en Línea"
#: editor/editor_node.cpp
msgid "Q&A"
@@ -2163,9 +2166,8 @@ msgid "Update Changes"
msgstr "Actualizar cambios"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Disable Update Spinner"
-msgstr "Desactivar la animación al actualizar"
+msgstr "Desactivar Indicador de Actividad"
#: editor/editor_node.cpp
msgid "Inspector"
@@ -2204,9 +2206,8 @@ msgid "Object properties."
msgstr "Propiedades del objeto."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Changes may be lost!"
-msgstr "Cambiar grupo de imágenes"
+msgstr "¡Se pueden perder los cambios!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2214,14 +2215,14 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "SistDeArchivos"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Nodo"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "SistDeArchivos"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Salida"
@@ -2256,7 +2257,7 @@ msgstr "Abrir y ejecutar un script"
#: editor/editor_node.cpp
#, fuzzy
msgid "New Inherited"
-msgstr "Nueva escena heredada…"
+msgstr "Nueva escena heredada"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -2267,34 +2268,28 @@ msgid "Select"
msgstr "Seleccionar"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 2D Editor"
-msgstr "Abrir en el editor"
+msgstr "Abrir Editor 2D"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 3D Editor"
-msgstr "Abrir en el editor"
+msgstr "Abrir Editor 3D"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Script Editor"
-msgstr "Abrir en el editor"
+msgstr "Abrir Editor de Script"
-#: editor/editor_node.cpp
-#, fuzzy
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr "Exportar biblioteca"
+msgstr "Abrir Biblioteca de Assets"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the next Editor"
-msgstr "Abrir en el editor"
+msgstr "Abrir Editor siguiente"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the previous Editor"
-msgstr "Abrir en el editor"
+msgstr "Abrir Editor anterior"
#: editor/editor_plugin.cpp
#, fuzzy
@@ -2426,33 +2421,32 @@ msgid "Import From Node:"
msgstr "Importar desde nodo:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Re-Download"
-msgstr "Volver a cargar"
+msgstr "Volver a descargar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall"
-msgstr "Instalar"
+msgstr "Desinstalar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "(Installed)"
-msgstr "Instalar"
+msgstr "(Instalado)"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download"
-msgstr "Abajo"
+msgstr "Descargar"
#: editor/export_template_manager.cpp
msgid "(Missing)"
msgstr "(No encontrado)"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "(Current)"
-msgstr "Actual:"
+msgstr "(Actual)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Obteniendo mirrors, por favor espere..."
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
@@ -2472,7 +2466,7 @@ msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
msgstr ""
-"formato de version.txt invalido. La revisión no es un identificador valido."
+"Formato de version.txt inválido. Revision no es un identificador válido."
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
@@ -2481,46 +2475,145 @@ msgstr "No se ha encontrado el archivo version.txt dentro de las plantillas."
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Error creating path for templates:\n"
-msgstr "Error al guardar atlas:"
+msgstr "Error al crear ruta para las plantillas:\n"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Extracting Export Templates"
-msgstr "Cargando plantillas de exportación"
+msgstr "Extrayendo plantillas de exportación"
#: editor/export_template_manager.cpp
msgid "Importing:"
msgstr "Importando:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"No se han encontrado enlaces de descarga para esta versión. La descarga "
+"directa solo está disponible para las versiones oficiales."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "No se ha podido resolver."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "No se puede conectar."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "No responde."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Solicitud fallida."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Bucle de redireccionamiento."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Fallido:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "No se puede escribir el archivo."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Descarga completada."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Error al solicitar url: "
+
+#: editor/export_template_manager.cpp
#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "Conectando.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Resolviendo"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "No se puede resolver"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Conectando.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "No se puede conectar"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Conectado"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Solicitando.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Descargando"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Error de conexión"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Error de negociación SSL"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
-msgstr "Escena actual"
+msgstr "Versión actual:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Installed Versions:"
-msgstr "Plugins instalados:"
+msgstr "Versiones instaladas:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install From File"
-msgstr "Instalar proyecto:"
+msgstr "Instalar desde archivo"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove Template"
-msgstr "Remover Item"
+msgstr "Eliminar plantilla"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Select template file"
-msgstr "¿Quieres eliminar los archivos seleccionados?"
+msgstr "Seleccionar archivo de plantilla"
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Export Template Manager"
-msgstr "Cargando plantillas de exportación"
+msgstr "Gestor de plantillas de exportación"
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Descargar plantillas"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Seleccionar mirror de la lista: "
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
@@ -2529,87 +2622,77 @@ msgstr ""
"de tipos de archivo!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "No se puede navegar a '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+"¡No se puede navegar a '%s' ya que no se ha encontrado en el sistema de "
+"archivos!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Ver elementos como una cuadrícula de miniaturas"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Ver elementos como una lista"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
"\n"
-"Source: "
-msgstr "Fuente:"
+"Estado: No se pudo importar el archivo. Por favor, arregla el archivo e "
+"impórtalo manualmente."
#: editor/filesystem_dock.cpp
#, fuzzy
msgid "Cannot move/rename resources root."
-msgstr "No se puede cargar/procesar la tipografía elegida."
+msgstr "No se puede mover/renombrar la raíz de recursos."
#: editor/filesystem_dock.cpp
#, fuzzy
msgid "Cannot move a folder into itself.\n"
-msgstr "No se puede importar un archivo sobre si mismo:"
+msgstr "No se puede importar una carpeta sobre si misma.\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "Hubo un error al importar:"
+msgstr "Error al mover:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "La escena «%s» tiene dependencias rotas:"
+msgstr "No se ha podido actualizar las dependencias:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "No se proveyó un nombre"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "El nombre obtenido contiene caracteres inválidos"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "No name provided."
-msgstr "Renombrar o mover.."
+msgstr "Nombre no proporcionado."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "Letras válidas:"
+msgstr "El nombre contiene caracteres inválidos."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "A file or folder with this name already exists."
-msgstr "¡El nombre de grupo ya existe!"
+msgstr "Ya existe un archivo o carpeta con este nombre."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Renombrar variable"
+msgstr "Renombrar archivo:"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming folder:"
-msgstr "Renombrar nodo"
+msgstr "Renombrar carpeta:"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Expand all"
-msgstr "Expandir al padre"
+msgstr "Expandir todo"
#: editor/filesystem_dock.cpp
msgid "Collapse all"
@@ -2620,9 +2703,8 @@ msgid "Copy Path"
msgstr "Copiar ruta"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Rename.."
-msgstr "Renombrar"
+msgstr "Renombrar.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
@@ -2839,8 +2921,8 @@ msgid "Remove Poly And Point"
msgstr "Quitar polígono y punto"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+#, fuzzy
+msgid "Create a new polygon from scratch"
msgstr "Crea un nuevo polígono desde cero."
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2855,6 +2937,11 @@ msgstr ""
"Control + Click izquierdo: Dividir segmento.\n"
"Click derecho: Borrar punto."
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Eliminar punto"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "Des/activar reproducción automática"
@@ -3002,6 +3089,57 @@ msgid "Copy Animation"
msgstr "Copiar animación"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Selecciones:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Pegar"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Textura"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Crear animación nueva"
@@ -3193,18 +3331,10 @@ msgid "Can't resolve hostname:"
msgstr "No se ha podido resolver el nombre de Dominio:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "No se ha podido resolver."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Error de conexion, por favor intente otra vez."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "No se puede conectar."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Can't connect to host:"
msgstr "No se puede conectar al host:"
@@ -3214,32 +3344,16 @@ msgid "No response from host:"
msgstr "No hay respuesta desde el host:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "No responde."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Request failed, return code:"
msgstr "Petición falida, código de retorno:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Solicitud fallida."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Request failed, too many redirects"
msgstr "Petición fallida, demasiadas redirecciones"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Bucle de redireccionamiento."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Fallido:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "Error de descarga, al pareser el archivo ha sido manipulado."
@@ -3264,17 +3378,8 @@ msgid "Fetching:"
msgstr "Buscando:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Resolving.."
-msgstr "Guardando…"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Conectando.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Solicitando.."
+msgstr "Resolviendo..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
@@ -3389,6 +3494,39 @@ msgid "Move Action"
msgstr "Mover acción"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Mover Guía Vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "Crear script"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Quitar variable"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Move horizontal guide"
+msgstr "Mover Punto en Curva"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "Crear script"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Quitar claves incorrectas"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Crear nuevas guías horizontales y verticales"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "Editar Cadena IK"
@@ -3499,8 +3637,9 @@ msgid "Use Pixel Snap"
msgstr "Adherir a píxeles"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Smart snapping"
-msgstr ""
+msgstr "Ajuste Inteligente"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3508,22 +3647,32 @@ msgid "Snap to parent"
msgstr "Expandir al padre"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Snap to node anchor"
-msgstr ""
+msgstr "Ajustar al Nodo Ancla"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Snap to node sides"
-msgstr ""
+msgstr "Ajustar a Lados del Nodo"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Snap to other nodes"
-msgstr ""
+msgstr "Ajustar a Otros Nodos"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Snap to guides"
+msgstr "Modo de fijado:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Inmovilizar el objeto."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Liberar el objeto."
@@ -3577,6 +3726,11 @@ msgid "Show rulers"
msgstr "Crear huesos"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Show guides"
+msgstr "Crear huesos"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr "Centrar selección"
@@ -3611,7 +3765,7 @@ msgstr "Restablecer pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "Arrastrar pivote desde la posición del ratón"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3619,12 +3773,14 @@ msgid "Set pivot at mouse position"
msgstr "Establecer pos. de salida de curva"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Multiplicar paso de cuadŕicula por 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "Dividir paso de cuadrícula por 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3707,11 +3863,11 @@ msgstr "Actualizar desde escena"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat0"
-msgstr ""
+msgstr "Flat0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat1"
-msgstr ""
+msgstr "Flat1"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3781,6 +3937,10 @@ msgstr "Cambiar tangente de curva lineal"
msgid "Hold Shift to edit tangents individually"
msgstr "Mantén Mayus para editar las tangentes individualmente"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
#, fuzzy
msgid "Add/Remove Color Ramp Point"
@@ -3816,6 +3976,10 @@ msgid "Create Occluder Polygon"
msgstr "Crear polígono oclusor"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Crea un nuevo polígono desde cero."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Editar polígono existente:"
@@ -3831,63 +3995,6 @@ msgstr "Ctrl + LMB: Partir segmento."
msgid "RMB: Erase Point."
msgstr "Clic derecho: Borrar punto."
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Remove Point from Line2D"
-msgstr "Borrar punto de curva"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "Añadir punto a curva"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Move Point in Line2D"
-msgstr "Mover Punto en Curva"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Seleccionar puntos"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Mayús + arrastrar: Seleccionar puntos de control"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
-msgid "Click: Add Point"
-msgstr "Clic: Añadir punto"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Clic derecho: Eliminar punto"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Añadir punto (en espacio vacío)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Split Segment (in line)"
-msgstr "Dividir segmento (en curva)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Eliminar punto"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "¡El modelo está vacío!"
@@ -4083,12 +4190,14 @@ msgid "Clear the navigation mesh."
msgstr "Crear modelo de navegación 3D"
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "Estableciendo la Configuración..."
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Calculating grid size..."
-msgstr ""
+msgstr "Calculando tamaño de cuadrícula..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -4105,8 +4214,9 @@ msgid "Constructing compact heightfield..."
msgstr ""
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "Erosión del área transitable..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -4129,8 +4239,9 @@ msgid "Converting to native navigation mesh..."
msgstr "Crear modelo de navegación 3D"
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "Configuración del Generador de Malla de Navegación:"
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -4139,7 +4250,7 @@ msgstr "Leyendo geometría"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "¡Hecho!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4318,16 +4429,47 @@ msgid "Move Out-Control in Curve"
msgstr "Mover Out-Control en Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Seleccionar puntos"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Mayús + arrastrar: Seleccionar puntos de control"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+#, fuzzy
+msgid "Click: Add Point"
+msgstr "Clic: Añadir punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Clic derecho: Eliminar punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Seleccionar puntos de control (Mayús + arrastrar)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Añadir punto (en espacio vacío)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Dividir segmento (en curva)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Eliminar punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Cerrar curva"
@@ -4469,7 +4611,6 @@ msgstr "Cargar recurso"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4517,6 +4658,21 @@ msgid " Class Reference"
msgstr " Referencia de clase"
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Ordenar:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Subir"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Bajar"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Script siguiente"
@@ -4569,6 +4725,10 @@ msgstr "Cerrar documentación"
msgid "Close All"
msgstr "Cerrar"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Cerrar las demás pestañas"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Ejecutar"
@@ -4580,13 +4740,11 @@ msgstr "Añadir/quitar favorito"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Buscar.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Buscar siguiente"
@@ -4698,35 +4856,24 @@ msgstr "Minúscula"
#: editor/plugins/script_text_editor.cpp
msgid "Capitalize"
-msgstr "Insertar mayúsculas"
+msgstr "Convertir en Mayúsculas"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Cortar"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Copiar"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Seleccionar todo"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Subir"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Bajar"
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4749,6 +4896,26 @@ msgid "Clone Down"
msgstr "Clonar hacia abajo"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Ir a línea"
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Unfold Line"
+msgstr "Desplegar Línea"
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold All Lines"
+msgstr "Plegar Todas las Líneas"
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Unfold All Lines"
+msgstr "Desplegar Todas las Líneas"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "Completar símbolo"
@@ -4797,12 +4964,10 @@ msgid "Convert To Lowercase"
msgstr "Convertir a…"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Buscar anterior"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Reemplazar.."
@@ -4811,7 +4976,6 @@ msgid "Goto Function.."
msgstr "Ir a función.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Ir a línea.."
@@ -4978,6 +5142,16 @@ msgid "View Plane Transform."
msgstr "Ver transformación en plano."
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Scaling: "
+msgstr "Escala:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Traducciones:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Girando %s grados."
@@ -5064,6 +5238,10 @@ msgid "Vertices"
msgstr "Vértice"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Alinear con vista"
@@ -5099,6 +5277,16 @@ msgid "View Information"
msgstr "Ver información"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "Ver Archivos"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "Escalar selección"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "Oyente de Audio"
@@ -5242,6 +5430,11 @@ msgid "Tool Scale"
msgstr "Escala:"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Modo pantalla completa"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Transformar"
@@ -5498,11 +5691,11 @@ msgstr "Quitar"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "Editar tema.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "Menú de edición de tema."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5521,6 +5714,11 @@ msgid "Create Empty Editor Template"
msgstr "Crear plantilla de editor vacía"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Create From Current Editor Theme"
+msgstr "Crear plantilla de editor vacía"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "CheckBox Radio1"
@@ -5701,7 +5899,7 @@ msgstr "Activar"
#: editor/project_export.cpp
#, fuzzy
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr "Eliminar entrada"
#: editor/project_export.cpp
@@ -5826,10 +6024,13 @@ msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
msgstr ""
+"Tu proyecto se creará en un directorio existente (quizás quieras crear un "
+"directorio nuevo)."
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
msgstr ""
+"Por favor, elige un directorio que no contenga un archivo 'project.godot'."
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -5841,7 +6042,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "Sería una buena idea nombrar tu proyecto."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
@@ -5961,6 +6162,9 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Idioma cambiado.\n"
+"La interfaz se actualizará la próxima vez que se inicie el editor o el "
+"gestor de proyectos."
#: editor/project_manager.cpp
msgid ""
@@ -6005,6 +6209,12 @@ msgstr "Reiniciar (s):"
msgid "Can't run project"
msgstr "Conectar.."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Tecla "
@@ -6038,10 +6248,6 @@ msgid "Add Input Action Event"
msgstr "Añadir evento de acción de entrada"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Mayús+"
@@ -6169,13 +6375,12 @@ msgstr "¡Selecciona un item primero!"
#: editor/project_settings_editor.cpp
#, fuzzy
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr "Propiedad:"
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Ajustes"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "El ajuste '%s' es interno y no puede ser eliminado."
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6239,8 +6444,9 @@ msgid "Changed Locale Filter"
msgstr "Cambiar tiempo de mezcla"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Modo de Filtro del Locale Cambiado"
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6315,8 +6521,9 @@ msgid "Show all locales"
msgstr "Crear huesos"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid "Show only selected locales"
-msgstr ""
+msgstr "Mostrar solo Las Configuraciones Regionales Seleccionadas"
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6429,9 +6636,8 @@ msgid "Sections:"
msgstr "Selecciones:"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Property"
-msgstr "Seleccionar puntos"
+msgstr "Seleccionar Propiedad"
#: editor/property_selector.cpp
#, fuzzy
@@ -6678,6 +6884,16 @@ msgid "Clear a script for the selected node."
msgstr "Crear un nuevo script para el nodo seleccionado."
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Quitar"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Local"
+msgstr "Idioma"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "¿Quieres limpiar la herencia? (No se puede deshacer)"
@@ -6694,9 +6910,8 @@ msgid "Toggle CanvasItem Visible"
msgstr "Act/Desact. CanvasItem Visible"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Node configuration warning:"
-msgstr "Alerta de configuración de Nodos:"
+msgstr "Alerta de configuración de nodos:"
#: editor/scene_tree_editor.cpp
#, fuzzy
@@ -6808,7 +7023,7 @@ msgstr "Ruta base incorrecta"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "Ya existe un directorio con el mismo nombre"
#: editor/script_create_dialog.cpp
#, fuzzy
@@ -6892,6 +7107,11 @@ msgid "Attach Node Script"
msgstr "Crear script de nodo"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Quitar"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Bytes:"
@@ -6913,7 +7133,7 @@ msgstr "Función:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "Elige uno o más elementos de la lista para mostrar el gráfico."
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6948,18 +7168,6 @@ msgid "Stack Trace (if applicable):"
msgstr "Stack Trace (si aplica):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Inspector Remoto"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Ãrbol de Escenas en Vivo:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Propiedades de Objeto Remoto: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Profiler"
@@ -7088,63 +7296,63 @@ msgstr "Estado:"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Bibliotecas: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"El argumento para convert() no es correcto, prueba utilizando constantes "
"TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
"O no hay suficientes bytes para decodificar bytes o el formato no es "
"correcto."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "¡El argumento «step» es cero!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "No es un script con una instancia"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "No está basado en un script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "No está basado en un archivo de recursos"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "El formato de diccionario de instancias no es correcto (falta @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"El formato de diccionario de instancias no es correcto (no se puede cargar "
"el script en @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
"El formato de diccionario de instancias no es correcto (script incorrecto en "
"@path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "El diccionario de instancias no es correcto (subclases erróneas)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "El objeto no puede proporcionar una longitud."
@@ -7159,19 +7367,27 @@ msgid "GridMap Duplicate Selection"
msgstr "Duplicar selección"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Grid Map"
+msgstr "Adherir a cuadrícula"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Snap View"
msgstr "Vista superior"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Prev Level (%sDown Wheel)"
-msgstr "Nivel anterior ("
+msgid "Previous Floor"
+msgstr "Pestaña anterior"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Next Level (%sUp Wheel)"
-msgstr "Siguiente nivel ("
+msgid "Next Floor"
+msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7252,13 +7468,8 @@ msgstr "Borrar TileMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Sólo selección"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Sólo selección"
+msgid "Clear Selection"
+msgstr "Centrar selección"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7397,7 +7608,8 @@ msgid "Duplicate VisualScript Nodes"
msgstr "Duplicar Nodo(s) de Gráfico"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+#, fuzzy
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"Mantén pulsado Meta para quitar un «Setter». Mantén pulsado Mayús para "
"quitar una firma genérica."
@@ -7409,7 +7621,8 @@ msgstr ""
"quitar una firma genérica."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+#, fuzzy
+msgid "Hold %s to drop a simple reference to the node."
msgstr "Mantén pulsado Meta para quitar una referencia simple del nodo."
#: modules/visual_script/visual_script_editor.cpp
@@ -7417,7 +7630,8 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Mantén pulsado Ctrl para quitar una referencia simple del nodo."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+#, fuzzy
+msgid "Hold %s to drop a Variable Setter."
msgstr "Mantén pulsado Meta para quitar un «Setter» de variable."
#: modules/visual_script/visual_script_editor.cpp
@@ -7497,7 +7711,7 @@ msgstr "Obtener"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr ""
+msgstr "El script ya contiene la función '%s'"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
@@ -7667,13 +7881,23 @@ msgstr "No se pudo cargar el tile:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
+msgstr "No se pudo crear la carpeta."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Invalid export template:\n"
+msgstr "Instalar plantillas de exportación"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
msgstr "No se pudo cargar el tile:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
-msgstr "No se pudo crear la carpeta."
+msgid "Could not read boot splash image file:\n"
+msgstr "No se pudo cargar el tile:"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7794,22 +8018,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "La propiedad Path debe apuntar a un nodo Node2D válido para funcionar."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"La propiedad Path debe apuntar a un nodo Viewport válido para funcionar. "
-"Dicho Viewport debe ser seteado a modo 'render target'."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"El Viewport seteado en la propiedad path debe ser seteado como 'render "
-"target' para que este sprite funcione."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7884,6 +8092,15 @@ msgstr ""
"Se debe proveer un shape para que CollisionShape funcione. Creale un recurso "
"shape!"
+#: scene/3d/gi_probe.cpp
+#, fuzzy
+msgid "Plotting Meshes"
+msgstr "Copiando datos de imágenes"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7939,10 +8156,13 @@ msgstr ""
"para que AnimatedSprite3D pueda mostrar frames."
#: scene/3d/vehicle_body.cpp
+#, fuzzy
msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
msgstr ""
+"VehicleWheel sirve para proporcionar un sistema de ruedas a un VehicleBody. "
+"Úselo como un hijo de un VehicleBody."
#: scene/gui/color_picker.cpp
#, fuzzy
@@ -7965,6 +8185,11 @@ msgstr "Alerta!"
msgid "Please Confirm..."
msgstr "Confirmar decisión…"
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Modo de selección"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7986,8 +8211,11 @@ msgstr ""
"Usa un container como hijo (VBox,HBox,etc), o un Control y ajusta el tamaño "
"mínimo personalizado manualmente."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Otros)"
+
#: scene/main/scene_tree.cpp
-#, fuzzy
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
"> Default Environment) could not be loaded."
@@ -8002,7 +8230,7 @@ msgid ""
"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
"texture to some node for display."
msgstr ""
-"Este viewport no está seteado como render target. Si tenés intención de que "
+"Este viewport no está seteado como render target. Si tienes intención de que "
"muestre contenidos directo a la pantalla, hacelo un hijo de un Control para "
"que pueda obtener un tamaño. Alternativamente, hacelo un RenderTarget y "
"asigná su textura interna a algún otro nodo para mostrar."
@@ -8023,6 +8251,77 @@ msgstr "Error al cargar la tipografía."
msgid "Invalid font size."
msgstr "Tamaño de tipografía incorrecto."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "No se puede navegar a '"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "Fuente:"
+
+#, fuzzy
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Borrar punto de curva"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Añadir punto a curva"
+
+#, fuzzy
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Mover Punto en Curva"
+
+#, fuzzy
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Dividir segmento (en curva)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Ajustes"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Inspector Remoto"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Ãrbol de Escenas en Vivo:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Propiedades de Objeto Remoto: "
+
+#, fuzzy
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "Nivel anterior ("
+
+#, fuzzy
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "Siguiente nivel ("
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Sólo selección"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Sólo selección"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "La propiedad Path debe apuntar a un nodo Viewport válido para funcionar. "
+#~ "Dicho Viewport debe ser seteado a modo 'render target'."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "El Viewport seteado en la propiedad path debe ser seteado como 'render "
+#~ "target' para que este sprite funcione."
+
#~ msgid "Filter:"
#~ msgstr "Filtro:"
@@ -8049,9 +8348,6 @@ msgstr "Tamaño de tipografía incorrecto."
#~ msgid "Removed:"
#~ msgstr "Eliminado:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Error al guardar atlas:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "No se pudo guardar la subtextura del altas:"
@@ -8446,9 +8742,6 @@ msgstr "Tamaño de tipografía incorrecto."
#~ msgid "Cropping Images"
#~ msgstr "Recortando imágenes"
-#~ msgid "Blitting Images"
-#~ msgstr "Copiando datos de imágenes"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "No se pudo guardar la imagen de atlas:"
@@ -8860,9 +9153,6 @@ msgstr "Tamaño de tipografía incorrecto."
#~ msgid "Save Translatable Strings"
#~ msgstr "Guardar cadenas traducibles"
-#~ msgid "Install Export Templates"
-#~ msgstr "Instalar plantillas de exportación"
-
#~ msgid "Edit Script Options"
#~ msgstr "Editar opciones de script"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index 3d0c4ee410..4b84add916 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -3,6 +3,7 @@
# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
+# Diego López <diegodario21@gmail.com>, 2017.
# Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2017.
# Roger BR <drai_kin@hotmail.com>, 2016.
# Sebastian Silva <sebastian@sugarlabs.org>, 2016.
@@ -11,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2017-10-23 00:50+0000\n"
-"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n"
+"PO-Revision-Date: 2017-11-29 03:50+0000\n"
+"Last-Translator: Diego López <diegodario21@gmail.com>\n"
"Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/"
"godot-engine/godot/es_AR/>\n"
"Language: es_AR\n"
@@ -20,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -32,7 +33,7 @@ msgstr "Toda la Selección"
#: editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr "Mover Agregar Clave"
+msgstr "Mover o Agregar Clave"
#: editor/animation_editor.cpp
msgid "Anim Change Transition"
@@ -44,7 +45,7 @@ msgstr "Cambiar Transform de Anim"
#: editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr "Cambiar Valor de Anim"
+msgstr "Cambiar valor de animación"
#: editor/animation_editor.cpp
msgid "Anim Change Call"
@@ -52,7 +53,7 @@ msgstr "Cambiar Call de Anim"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr "Agregar Track de Anim"
+msgstr "Agregar pista de animación"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
@@ -60,23 +61,23 @@ msgstr "Duplicar Claves de Anim"
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr "Subir Track de Anim"
+msgstr "Subir pista de animación"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr "Bajar Track de Anim"
+msgstr "Bajar pista de animación"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr "Quitar Track de Anim"
+msgstr "Quitar pista de animación"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr "Setear Transiciones a:"
+msgstr "Establecer Transiciones a:"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr "Renombrar Track de Anim"
+msgstr "Renombrar pista de animación"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
@@ -103,6 +104,7 @@ msgid "Anim Delete Keys"
msgstr "Borrar Claves de Anim"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Duplicar Selección"
@@ -206,15 +208,15 @@ msgstr "Crear"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr "Crear e Insertar Anim"
+msgstr "Crear e Insertar Animación"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr "Insertar Track y Clave de Anim"
+msgstr "Insertar Pista y Clave de Animación"
#: editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr "Insertar Clave de Anim"
+msgstr "Insertar Clave de Animación"
#: editor/animation_editor.cpp
msgid "Change Anim Len"
@@ -222,7 +224,7 @@ msgstr "Cambiar Largo de Anim"
#: editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr "Cambiar Loop de Anim"
+msgstr "Cambiar Loop de Animación"
#: editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
@@ -245,12 +247,13 @@ msgid "Animation zoom."
msgstr "Zoom de animación."
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Length (s):"
-msgstr "Largo (s):"
+msgstr "Duración (seg):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr "Largo de Animación (en segundos)."
+msgstr "Duración de la animación (en segundos)."
#: editor/animation_editor.cpp
msgid "Step (s):"
@@ -262,27 +265,27 @@ msgstr "Snap de cursor por pasos (en segundos)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr "Activar/Desactivar loopeo en la animación."
+msgstr "Activar/Desactivar ciclo en la animación."
#: editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr "Agregar nuevos tracks."
+msgstr "Agregar nuevas pistas."
#: editor/animation_editor.cpp
msgid "Move current track up."
-msgstr "Subir el track actual."
+msgstr "Subir pista actual."
#: editor/animation_editor.cpp
msgid "Move current track down."
-msgstr "Bajar el track actual."
+msgstr "Bajar pista actual."
#: editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr "Quitar el track seleccionado."
+msgstr "Quitar la pista seleccionada."
#: editor/animation_editor.cpp
msgid "Track tools"
-msgstr "Herramientas de tracks"
+msgstr "Herramientas de pistas"
#: editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
@@ -290,7 +293,7 @@ msgstr "Activar la edición de claves individuales al cliquearlas."
#: editor/animation_editor.cpp
msgid "Anim. Optimizer"
-msgstr "Optimizador de Anim."
+msgstr "Optimizador de animación"
#: editor/animation_editor.cpp
msgid "Max. Linear Error:"
@@ -311,7 +314,7 @@ msgstr "Optimizar"
#: editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
-"Seleccioná un AnimationPlayer de el Arbol de Escenas para editar animaciones."
+"Selecciona un AnimationPlayer del Ãrbol de Escenas para editar animaciones."
#: editor/animation_editor.cpp
msgid "Key"
@@ -326,6 +329,7 @@ msgid "Scale Ratio:"
msgstr "Ratio de Escala:"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Call Functions in Which Node?"
msgstr "Llamar Funciones en Cual Nodo?"
@@ -335,7 +339,7 @@ msgstr "Quitar claves inválidas"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr "Quitar tracks vacios y sin resolver"
+msgstr "Quitar pistas vacías y sin resolver"
#: editor/animation_editor.cpp
msgid "Clean-up all animations"
@@ -598,7 +602,7 @@ msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will not take effect unless reloaded."
msgstr ""
-"La Escena '%s' esta siendo editada actualmente.\n"
+"La Escena '%s' esté siendo editada actualmente.\n"
"Los cambios no tendrán efecto hasta recargarlo."
#: editor/dependency_editor.cpp
@@ -637,6 +641,13 @@ msgstr "Editor de Dependencias"
msgid "Search Replacement Resource:"
msgstr "Buscar Reemplazo de Recurso:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Abrir"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Dueños De:"
@@ -711,6 +722,14 @@ msgstr "Eliminar archivos seleccionados?"
msgid "Delete"
msgstr "Eliminar"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Cambiar Clave del Diccionario"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Cambiar Valor del Diccionario"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Gracias de parte de la comunidad Godot!"
@@ -1129,6 +1148,11 @@ msgid "File Exists, Overwrite?"
msgstr "El Archivo Existe, Sobreescribir?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Crear Carpeta"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Todas Reconocidas"
@@ -1136,12 +1160,6 @@ msgstr "Todas Reconocidas"
msgid "All Files (*)"
msgstr "Todos los Archivos (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Abrir"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Abrir un Archivo"
@@ -1208,7 +1226,7 @@ msgstr "Subir Favorito"
msgid "Move Favorite Down"
msgstr "Bajar Favorito"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr "Ir a carpeta padre"
@@ -1335,7 +1353,7 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Actualmente no existe descripción para esta propiedad. Por favor ayudanos "
+"Actualmente no existe descripción para esta propiedad. Por favor ayúdanos "
"[color=$color][url=$url]contribuyendo una[/url][/color]!"
#: editor/editor_help.cpp
@@ -1470,7 +1488,7 @@ msgstr "Nombre de layout no encontrado!"
#: editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr "Se restauró el layout por defecto a sus seteos base."
+msgstr "Se restauró el layout por defecto a su configuración básica."
#: editor/editor_node.cpp
msgid ""
@@ -1506,13 +1524,33 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
-"Esta escena fue importada, por ende los cambios que se le realicen no "
+"Esta escena fue importada, por tanto los cambios que se le realicen no "
"perduraran.\n"
-"Instanciá o hereda para poder realizar cambios.\n"
-"Por favor leé la documentación relevante a importar escenas para entender "
+"Instancia o hereda para poder realizar cambios.\n"
+"Por favor lee la documentación relevante a importar escenas para entender "
"mejor este workflow."
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Este es un objeto remoto, los cambios que se hagan no se van a mantener.\n"
+"Lea la documentación relacionada con la depuración para comprender mejor "
+"este workflow."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Expandir todos"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Colapsar todos"
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr "Copiar Params"
@@ -1633,6 +1671,10 @@ msgid "Export Mesh Library"
msgstr "Exportar Librería de Meshes"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Esta operación no puede hacerse sin un nodo raíz."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Exportar Tile Set"
@@ -1691,7 +1733,7 @@ msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
-"Esta opción esta deprecada. Las situaciones donde se debe forzar un refresco "
+"Esta opción está deprecada. Las situaciones donde se debe forzar un refresco "
"son ahora consideradas bugs. Por favor reportalo."
#: editor/editor_node.cpp
@@ -1699,32 +1741,33 @@ msgid "Pick a Main Scene"
msgstr "Elegí una Escena Principal"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "No se pudo activar el plugin de addon en : '"
+msgstr ""
+"No se pudo activar el plugin de addon en: '%s' falló el parseo de la "
+"configuración."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
"No se pudo encontrar el campo script para el plugin de addon en: 'res://"
-"addons/"
+"addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "No se pudo cargar el script de addon desde la ruta: '"
+msgstr "No se pudo cargar el script de addon desde la ruta: '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "No se pudo cargar el script de addon desde la ruta: '"
+msgstr ""
+"No se pudo cargar el script de addon desde la ruta: El tipo base de '%s' no "
+"es EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "No se pudo cargar el script de addon desde la ruta: '"
+msgstr ""
+"No se pudo cargar el script de addon desde la ruta: El script '%s' no está "
+"en modo tool."
#: editor/editor_node.cpp
msgid ""
@@ -1746,7 +1789,7 @@ msgid ""
"open the scene, then save it inside the project path."
msgstr ""
"Error al cargar la escena, debe estar dentro de la ruta del proyecto. Usa "
-"'Importar' para abrir la escena, luego guardala dentro de la ruta del "
+"'Importar' para abrir la escena, luego guárdala dentro de la ruta del "
"proyecto."
#: editor/editor_node.cpp
@@ -1755,7 +1798,7 @@ msgstr "La escena '%s' tiene dependencias rotas:"
#: editor/editor_node.cpp
msgid "Clear Recent Scenes"
-msgstr "Reestablecer Escenas Recientes"
+msgstr "Restablecer Escenas Recientes"
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -1775,12 +1818,20 @@ msgid "Switch Scene Tab"
msgstr "Cambiar Pestaña de Escena"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr "%d archivo(s) más"
+msgid "%d more files or folders"
+msgstr "%d más archivos o carpetas"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d archivo(s) o carpeta(s) más"
+msgid "%d more folders"
+msgstr "%d más carpetas"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d más archivos"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Posición del Panel"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1791,6 +1842,10 @@ msgid "Toggle distraction-free mode."
msgstr "Act./Desact. modo sin distracciones."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Agregar nueva escena."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Escena"
@@ -1855,13 +1910,12 @@ msgid "TileSet.."
msgstr "TileSet.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Deshacer"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Rehacer"
@@ -1910,8 +1964,8 @@ msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
msgstr ""
-"Al exportar o hacer deploy, el ejecutable resultante tratara de contectarse "
-"a la IP de esta computadora de manera de ser debugueado."
+"Al exportar o hacer deploy, el ejecutable resultante tratara de conectarse a "
+"la IP de esta computadora de manera de ser debugueado."
#: editor/editor_node.cpp
msgid "Small Deploy with Network FS"
@@ -1942,7 +1996,7 @@ msgid ""
"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
"running game if this option is turned on."
msgstr ""
-"Los Collision shapes y nodos raycast (para 2D y 3D) seran visibiles durante "
+"Los Collision shapes y nodos raycast (para 2D y 3D) serán visibles durante "
"la ejecución del juego cuando esta opción queda activada."
#: editor/editor_node.cpp
@@ -1954,7 +2008,7 @@ msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
msgstr ""
-"Los meshes de navegación y los polígonos seran visibles durante la ejecución "
+"Los meshes de navegación y los polígonos serán visibles durante la ejecución "
"del juego si esta opción queda activada."
#: editor/editor_node.cpp
@@ -1968,9 +2022,9 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
-"Cuando esta opción este encendida, cualquier cambio hecho a la escena en el "
-"editor sera replicado en el juego en ejecución.\n"
-"Cuando se usa remotamente en un dispositivo, esto es mas eficiente con un "
+"Cuando esta opción esté encendida, cualquier cambio hecho a la escena en el "
+"editor será replicado en el juego en ejecución.\n"
+"Cuando se usa remotamente en un dispositivo, esto es más eficiente con un "
"sistema de archivos remoto."
#: editor/editor_node.cpp
@@ -1984,9 +2038,9 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
-"Cuando esta opción esta activa, cualquier script que se guarde sera vuelto a "
+"Cuando esta opción está activa, cualquier script que se guarde sera vuelto a "
"cargar en el juego en ejecución.\n"
-"Cuando se use remotamente en un dispositivo, esto es mas eficiente con un "
+"Cuando se use remotamente en un dispositivo, esto es más eficiente con un "
"sistema de archivos de red."
#: editor/editor_node.cpp
@@ -2139,14 +2193,14 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "FileSystem"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Nodo"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "FileSystem"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Salida"
@@ -2202,7 +2256,7 @@ msgstr "Abrir en Editor 3D"
msgid "Open Script Editor"
msgstr "Abrir en Editor de Script"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "Exportar Libreria de Assets"
@@ -2268,9 +2322,8 @@ msgid "Frame %"
msgstr "Frame %"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "Fixed Frame %"
+msgstr "Frames de Física %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2299,7 +2352,7 @@ msgid ""
msgstr ""
"No se encontró ningún preset de exportación ejecutable para esta "
"plataforma.\n"
-"Por favor agregá un preset ejecutable en el menú de exportación."
+"Por favor agregue un preset ejecutable en el menú de exportación."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -2366,6 +2419,10 @@ msgid "(Current)"
msgstr "(Actual)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Recuperando mirrors, esperá, por favor.."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "Quitar plantilla version '%s'?"
@@ -2402,6 +2459,102 @@ msgid "Importing:"
msgstr "Importando:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"No se encontraron links de descarga para esta versión. Las descargas "
+"directas solo están disponibles para releases oficiales."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "No se ha podido resolver."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "No se puede conectar."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Sin respuesta."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Solicitud fallida."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Bucle de redireccionamiento."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Fallido:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "No se puede escribir el archivo."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Descarga Completa."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Error al pedir el url: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Conectando al Mirror.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Resolviendo"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "No se ha podido resolver"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Conectando.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "No se puede conectar"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Conectado"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Solicitando.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Descargando"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Error de Conexión"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Error de Handshake SSL"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "Version Actual:"
@@ -2425,6 +2578,14 @@ msgstr "Elegir archivo de plantilla"
msgid "Export Template Manager"
msgstr "Gestor de Plantillas de Exportación"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Descargar Plantillas"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Seleccionar mirror de la lista: "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
@@ -2432,8 +2593,9 @@ msgstr ""
"de tipos de archivo!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "No se puede navegar a '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+"No se puede navegar a '%s' ya que no se encontro en el sistema de archivos!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
@@ -2449,16 +2611,8 @@ msgid ""
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
"\n"
-"Estado: Fallo la importación del archivo. Por favor arreglá el archivo y "
-"reimportá manualmente."
-
-#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-"\n"
-"Fuente: "
+"Estado: Falló la importación del archivo. Por favor arregle el archivo y "
+"reimporta manualmente."
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
@@ -2554,9 +2708,10 @@ msgstr "Directorio Siguiente"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr "Reescanear Sistema de Archivos"
+msgstr "Reexaminar Sistema de Archivos"
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "Toggle folder status as Favorite"
msgstr "Act/Desact. estado de carpeta como Favorito"
@@ -2665,7 +2820,7 @@ msgstr "Asignar como Predeterminado para '%s'"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr "Reestablecer Predeterminados para '%s'"
+msgstr "Restablecer Predeterminados para '%s'"
#: editor/import_dock.cpp
msgid " Files"
@@ -2721,9 +2876,8 @@ msgid "Remove Poly And Point"
msgstr "Remover Polígono y Punto"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "Crear un nuevo polígono de cero."
+msgid "Create a new polygon from scratch"
+msgstr "Crear un nuevo polígono desde cero"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2737,6 +2891,10 @@ msgstr ""
"Ctrl+Click izq: Dividir Segmento.\n"
"Click der: Eliminar Punto."
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Eliminar puntos"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "Activar/Desact. Autoplay"
@@ -2883,6 +3041,57 @@ msgid "Copy Animation"
msgstr "Copiar Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Selecciones:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Pegar"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Características"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Crear Nueva Animación"
@@ -3073,18 +3282,10 @@ msgid "Can't resolve hostname:"
msgstr "No se ha podido resolver el nombre del host:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "No se ha podido resolver."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Error de conexión, por favor intentá de nuevo."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "No se puede conectar."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "No se puede conectar al host:"
@@ -3093,30 +3294,14 @@ msgid "No response from host:"
msgstr "No hay respuesta desde el host:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Sin respuesta."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "Solicitud fallida. Código de retorno:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Solicitud fallida."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "Solicitud fallida, demasiadas redireccinoes"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Bucle de redireccionamiento."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Fallido:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "Hash de descarga incorrecto, asumiendo que el archivo fue manipulado."
@@ -3145,14 +3330,6 @@ msgid "Resolving.."
msgstr "Resolviendo.."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Conectando.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Solicitando.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "Error al realizar la solicitud"
@@ -3170,7 +3347,7 @@ msgstr "Error de Descarga"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "La descarga de este asset ya esta en progreso!"
+msgstr "La descarga de este asset ya está en progreso!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
@@ -3265,6 +3442,34 @@ msgid "Move Action"
msgstr "Mover Acción"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Mover guía vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Crear nueva guía vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Quitar guía vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Mover guía horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Crear nueva guía horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Quitar guía horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Crear nuevas guías horizontales y verticales"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "Editar Cadena IK"
@@ -3389,10 +3594,16 @@ msgid "Snap to other nodes"
msgstr "Alinear a otros nodos"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "Alinear a guías"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Inmovilizar Objeto."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Desinmovilizar Objeto."
@@ -3410,7 +3621,7 @@ msgstr "Crear Huesos"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
-msgstr "Reestablecer Huesos"
+msgstr "Restablecer Huesos"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Bones"
@@ -3443,6 +3654,10 @@ msgid "Show rulers"
msgstr "Mostrar reglas"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Mostrar guías"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr "Centrar Selección"
@@ -3472,7 +3687,7 @@ msgstr "Copiar Pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr "Reestablecer Pose"
+msgstr "Restablecer Pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
@@ -3629,6 +3844,10 @@ msgstr "Act./Desact. Tangente Lineal de Curva"
msgid "Hold Shift to edit tangents individually"
msgstr "Mantené Shift para editar tangentes individualmente"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "Hacer Bake de GI Probe"
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "Agregar/Quitar Punto de Rampa de Color"
@@ -3663,6 +3882,10 @@ msgid "Create Occluder Polygon"
msgstr "Crear Polígono Oclusor"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Crear un nuevo polígono de cero."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Editar polígono existente:"
@@ -3678,61 +3901,9 @@ msgstr "Ctrl+Click Izq.: Partir Segmento en Dos."
msgid "RMB: Erase Point."
msgstr "Click Der.: Borrar Punto."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "Remover Punto de Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Agregar Punto a Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Mover Punto en Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Seleccionar Puntos"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Arrastrar: Seleccionar Puntos de Control"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Click: Agregar Punto"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Click Derecho: Eliminar Punto"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Agregar Punto (en espacio vacío)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "Partir Segmento (en línea)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Eliminar Punto"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
-msgstr "El Mesh esta vacío!"
+msgstr "El Mesh está vacío!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
@@ -3917,7 +4088,7 @@ msgstr "Hacer bake de mesh de navegación.\n"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
-msgstr "Reestablecer mesh de navegación."
+msgstr "Restablecer mesh de navegación."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
@@ -3944,7 +4115,6 @@ msgid "Eroding walkable area..."
msgstr "Erocionando area caminable..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
msgstr "Particionando..."
@@ -4130,16 +4300,46 @@ msgid "Move Out-Control in Curve"
msgstr "Mover Out-Control en Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Seleccionar Puntos"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Arrastrar: Seleccionar Puntos de Control"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Click: Agregar Punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Click Derecho: Eliminar Punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Seleccionar Puntos de Control (Shift+Arrastrar)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Agregar Punto (en espacio vacío)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Partir Segmento (en curva)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Eliminar Punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Cerrar Curva"
@@ -4276,7 +4476,6 @@ msgstr "Cargar Recurso"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4284,7 +4483,7 @@ msgstr "Pegar"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Files"
-msgstr "Reestablecer Archivos Recientes"
+msgstr "Restablecer Archivos Recientes"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
@@ -4323,6 +4522,20 @@ msgid " Class Reference"
msgstr " Referencia de Clases"
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Ordenar"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Subir"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Bajar"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Script siguiente"
@@ -4374,6 +4587,10 @@ msgstr "Cerrar Docs"
msgid "Close All"
msgstr "Cerrar Todos"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Cerrar Otras Pestañas"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Ejecutar"
@@ -4384,13 +4601,11 @@ msgstr "Act/Desact. Panel de Scripts"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Encontrar.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Encontrar Siguiente"
@@ -4471,8 +4686,8 @@ msgstr "Debugger"
msgid ""
"Built-in scripts can only be edited when the scene they belong to is loaded"
msgstr ""
-"Los scripts built-in solo pueden ser editados cuando la escena a la que "
-"pertenecen esta cargada"
+"Los scripts built-in sólo pueden ser editados cuando la escena a la que "
+"pertenecen está cargada"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
@@ -4498,33 +4713,22 @@ msgstr "Minúsculas"
msgid "Capitalize"
msgstr "Capitalizar"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Cortar"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Copiar"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Seleccionar Todo"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Subir"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Bajar"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr "Eliminar Línea"
@@ -4546,6 +4750,22 @@ msgid "Clone Down"
msgstr "Clonar hacia Abajo"
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "Colapsar Línea"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "Expandir Línea"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "Colapsar Todas las Líneas"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "Expandir Totas las Líneas"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "Completar Símbolo"
@@ -4591,12 +4811,10 @@ msgid "Convert To Lowercase"
msgstr "Convertir A Minúscula"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Encontrar Anterior"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Reemplazar.."
@@ -4605,7 +4823,6 @@ msgid "Goto Function.."
msgstr "Ir a Función.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Ir a Línea.."
@@ -4770,6 +4987,14 @@ msgid "View Plane Transform."
msgstr "Ver Transformación en Plano."
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "Escalado: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Traducciones: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Torando %s grados."
@@ -4850,6 +5075,10 @@ msgid "Vertices"
msgstr "Vértices"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Alinear con vista"
@@ -4882,6 +5111,14 @@ msgid "View Information"
msgstr "Ver Información"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Ver FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Media Resolución"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "Oyente de Audio"
@@ -5012,6 +5249,10 @@ msgid "Tool Scale"
msgstr "Herramienta Escalar"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Act./Desact. Vista Libre"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Transformar"
@@ -5263,11 +5504,11 @@ msgstr "Quitar Todos"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "Editar tema.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "Menu de edición de temas."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5286,6 +5527,10 @@ msgid "Create Empty Editor Template"
msgstr "Crear Plantilla de Editor Vacía"
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "Crear Desde Tema de Editor Actual"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "CheckBox Radio1"
@@ -5319,7 +5564,7 @@ msgstr "Opciones"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Have,Many,Several,Options!"
-msgstr "Tenés,Muchas,Variadas,Opciones!"
+msgstr "Tienes, Muchas, Variadas, Opciones!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Tab 1"
@@ -5459,8 +5704,8 @@ msgid "Runnable"
msgstr "Ejecutable"
#: editor/project_export.cpp
-msgid "Delete patch '"
-msgstr "Eliminar parche '"
+msgid "Delete patch '%s' from list?"
+msgstr "Eliminar parche '%s' de la lista?"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
@@ -5469,7 +5714,7 @@ msgstr "Eliminar preset '%s'?"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted: "
msgstr ""
-"Las plantillas de exportación para esta plataforma estan faltando o "
+"Las plantillas de exportación para esta plataforma están faltando o "
"corruptas: "
#: editor/project_export.cpp
@@ -5494,7 +5739,7 @@ msgstr "Exportar escenas seleccionadas (y dependencias)"
#: editor/project_export.cpp
msgid "Export selected resources (and dependencies)"
-msgstr "Exportar ecursos seleccionados (y dependencias)"
+msgstr "Exportar recursos seleccionados (y dependencias)"
#: editor/project_export.cpp
msgid "Export Mode:"
@@ -5549,7 +5794,7 @@ msgstr "Faltan las plantillas de exportación para esta plataforma:"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted:"
msgstr ""
-"Las plantillas de exportación para esta plataforma estan faltando o "
+"Las plantillas de exportación para esta plataforma están faltando o "
"corruptas:"
#: editor/project_export.cpp
@@ -5663,7 +5908,7 @@ msgstr "No se pudo abrir el proyecto"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
-msgstr "¿Estás seguro/a que querés abrir mas de un proyecto?"
+msgstr "¿Estás seguro/a que quieres abrir más de un proyecto?"
#: editor/project_manager.cpp
msgid ""
@@ -5686,7 +5931,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Are you sure to run more than one project?"
-msgstr "¿Estás seguro/a que querés ejecutar mas de un proyecto?"
+msgstr "¿Estás seguro/a que quieres ejecutar más de un proyecto?"
#: editor/project_manager.cpp
msgid "Remove project from the list? (Folder contents will not be modified)"
@@ -5699,14 +5944,17 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Lenguaje cambiado.\n"
+"La interfaz de usuario se actualizara la próxima vez que el editor o gestor "
+"de proyectos inicie."
#: editor/project_manager.cpp
msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
msgstr ""
-"Estas a punto de examinar %s carpetas en busca de proyectos de Godot. "
-"Confirmar?"
+"Estás a punto de examinar %s carpetas en busca de proyectos de Godot. "
+"¿Confirmar?"
#: editor/project_manager.cpp
msgid "Project List"
@@ -5714,7 +5962,7 @@ msgstr "Listado de Proyectos"
#: editor/project_manager.cpp
msgid "Scan"
-msgstr "Escanear"
+msgstr "Examinar"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -5733,14 +5981,19 @@ msgid "Exit"
msgstr "Salir"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "Reiniciar (s):"
+msgstr "Reiniciar Ahora"
#: editor/project_manager.cpp
msgid "Can't run project"
msgstr "No se puede ejecutar el proyecto"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Tecla "
@@ -5774,10 +6027,6 @@ msgid "Add Input Action Event"
msgstr "Agregar Evento de Acción de Entrada"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5899,12 +6148,12 @@ msgid "Select a setting item first!"
msgstr "Selecciona un ítem primero!"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr "No existe la propiedad '"
+msgid "No property '%s' exists."
+msgstr "No existe la propiedad '%s'."
#: editor/project_settings_editor.cpp
-msgid "Setting '"
-msgstr "Ajuste '"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "La configuración '%s' es interna y no puede ser eliminada."
#: editor/project_settings_editor.cpp
msgid "Delete Item"
@@ -5959,13 +6208,12 @@ msgid "Remove Resource Remap Option"
msgstr "Remover Opción de Remapeo de Recursos"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Cambiar Tiempo de Blend"
+msgstr "Cambiar Filtro de Locale"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Cambiar Modo de Filtro de Locale"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -6028,28 +6276,24 @@ msgid "Locale"
msgstr "Locale"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "Filtro de Imágenes:"
+msgstr "Filtro de Locales"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "Mostrar Huesos"
+msgstr "Mostrar todos los locales"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "Mostrar solo los locales seleccionados"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Filtrar nodos"
+msgstr "Filtrar modo:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "Locale"
+msgstr "Locales:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -6340,7 +6584,7 @@ msgstr "Adjuntar Script"
#: editor/scene_tree_dock.cpp
msgid "Clear Script"
-msgstr "Reestablecer Script"
+msgstr "Restablecer Script"
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
@@ -6380,7 +6624,15 @@ msgstr "Adjuntar un script nuevo o existente para el nodo seleccionado."
#: editor/scene_tree_dock.cpp
msgid "Clear a script for the selected node."
-msgstr "Reestablecer un script para el nodo seleccionado."
+msgstr "Restablecer un script para el nodo seleccionado."
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "Remoto"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "Local"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
@@ -6423,7 +6675,7 @@ msgid ""
"Node is in group(s).\n"
"Click to show groups dock."
msgstr ""
-"El nodo esta en un grupo/s.\n"
+"El nodo está en un grupo/s.\n"
"Click para mostrar el panel de grupos."
#: editor/scene_tree_editor.cpp
@@ -6439,7 +6691,7 @@ msgid ""
"Node is locked.\n"
"Click to unlock"
msgstr ""
-"El nodo esta bloqueado.\n"
+"El nodo está bloqueado.\n"
"Clic para desbloquear"
#: editor/scene_tree_editor.cpp
@@ -6456,7 +6708,8 @@ msgstr "Act/Desact. Visibilidad"
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
-msgstr "Nobre de nodo inválido, los siguientes caracteres no estan permitidos:"
+msgstr ""
+"Nombre de nodo inválido, los siguientes caracteres no están permitidos:"
#: editor/scene_tree_editor.cpp
msgid "Rename Node"
@@ -6492,7 +6745,7 @@ msgstr "N/A"
#: editor/script_create_dialog.cpp
msgid "Path is empty"
-msgstr "La ruta está vacia"
+msgstr "La ruta está vacía"
#: editor/script_create_dialog.cpp
msgid "Path is not local"
@@ -6575,6 +6828,10 @@ msgid "Attach Node Script"
msgstr "Adjuntar Script de Nodo"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Remoto "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Bytes:"
@@ -6631,18 +6888,6 @@ msgid "Stack Trace (if applicable):"
msgstr "Stack Trace (si aplica):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Inspector Remoto"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Ãrbol de Escenas en Vivo:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Propiedades de Objeto Remoto: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Profiler"
@@ -6774,53 +7019,53 @@ msgstr "Bibliotecas: "
msgid "GDNative"
msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Argumento de tipo inválido para convert(), usá constantes TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
"No hay suficientes bytes para decodificar bytes, o el formato es inválido."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "el argumento step es cero!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "No es un script con una instancia"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "No está basado en un script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "No está basado en un archivo de recursos"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Formato de diccionario de instancias inválido (@path faltante)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Formato de diccionario de instancias inválido (no se puede cargar el script "
"en @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
"Formato de diccionario de instancias inválido (script inválido en @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Diccionario de instancias inválido (subclases inválidas)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "El objeto no puede proveer un largo."
@@ -6833,16 +7078,24 @@ msgid "GridMap Duplicate Selection"
msgstr "Duplicar Selección en GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "Piso:"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Mapa de Grilla"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr "Anclar Vista"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr "Nivel Previo (%sRueda Abajo)"
+msgid "Previous Floor"
+msgstr "Piso Anterior"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
-msgstr "Nivel Siguiente (%sRueda Arriba)"
+msgid "Next Floor"
+msgstr "Piso Siguiente"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Disabled"
@@ -6909,12 +7162,8 @@ msgid "Erase Area"
msgstr "Borrar Ãrea"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr "Selección -> Duplicar"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr "Selección -> Restablecer"
+msgid "Clear Selection"
+msgstr "Limpiar Selección"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6937,11 +7186,12 @@ msgstr ""
"documentacion sobre como usar yield correctamente!"
#: modules/visual_script/visual_script.cpp
+#, fuzzy
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
-"El nodo rindió(yielded), pero no retornó un estado de función en la primera "
+"El nodo rindió (yielded), pero no retornó un estado de función en la primera "
"memoria de trabajo."
#: modules/visual_script/visual_script.cpp
@@ -7042,9 +7292,9 @@ msgid "Duplicate VisualScript Nodes"
msgstr "Duplicar Nodos VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Mantené pulsado Meta para depositar un Getter. Mantené pulsado Shift para "
+"Mantené pulsado %s para depositar un Getter. Mantené pulsado Shift para "
"depositar una firma generica."
#: modules/visual_script/visual_script_editor.cpp
@@ -7054,16 +7304,16 @@ msgstr ""
"depositar una firma genérica."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "Mantené pulsado Meta para depositar una referencia simple al nodo."
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "Mantené pulsado %s para depositar una referencia simple al nodo."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Mantené pulsado Ctrl para depositar una referencia simple al nodo."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "Mantené pulsado Meta para depositar un Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Mantené pulsado %s para depositar un Variable Setter."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7292,13 +7542,21 @@ msgid "Could not write file:\n"
msgstr "No se pudo escribir el archivo:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "No se pudo leer el archivo:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "No se pudo abrir la plantilla para exportar:\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "Plantilla de exportación inválida:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "No se pudo leer el shell HTML personalizado:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "No se pudo leer la imagen de boot splash:\n"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7364,7 +7622,7 @@ msgstr ""
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
-msgstr "El polígono de este oclusor esta vacío. Dibujá un polígono!"
+msgstr "El polígono de este oclusor está vacío. ¡Dibuja un polígono!"
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -7386,7 +7644,7 @@ msgstr ""
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
-"ParallaxLayer node solo funciona cuando esta seteado como hijo de un nodo "
+"El nodo ParallaxLayer sólo funciona cuando está seteado como hijo de un nodo "
"ParallaxBackground."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
@@ -7400,7 +7658,7 @@ msgstr ""
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
msgstr ""
-"PathFollow2D solo funciona cuando está seteado como hijo de un nodo Path2D."
+"PathFollow2D sólo funciona cuando está seteado como hijo de un nodo Path2D."
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -7416,22 +7674,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "La propiedad Path debe apuntar a un nodo Node2D válido para funcionar."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"La propiedad Path debe apuntar a un nodo Viewport válido para funcionar. "
-"Dicho Viewport debe ser seteado a modo 'render target'."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"El Viewport seteado en la propiedad path debe ser seteado como 'render "
-"target' para que este sprite funcione."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7504,6 +7746,14 @@ msgstr ""
"Se debe proveer un shape para que CollisionShape funcione. Creale un recurso "
"shape!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "Ploteando Meshes"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "Terminando Ploteo"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7580,6 +7830,11 @@ msgstr "Alerta!"
msgid "Please Confirm..."
msgstr "Confirmá, por favor..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Seleccionar Método"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7596,10 +7851,14 @@ msgid ""
"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
"minimum size manually."
msgstr ""
-"ScrollContainer esta diseñado para trabajan con un unico control hijo.\n"
-"Usá un container como hijo (VBox, HBox, etc), o un Control y seteá el tamaño "
+"ScrollContainer está diseñado para trabajar con un único control hijo.\n"
+"Usa un container como hijo (VBox, HBox, etc), o un Control y setea el tamaño "
"mínimo personalizado de forma manual."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Otro)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7615,10 +7874,10 @@ msgid ""
"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
"texture to some node for display."
msgstr ""
-"Este viewport no está seteado como render target. Si tenés intención de que "
-"muestre contenidos directo a la pantalla, hacelo un hijo de un Control para "
-"que pueda obtener un tamaño. Alternativamente, hacelo un RenderTarget y "
-"asigná su textura interna a algún otro nodo para mostrar."
+"Este viewport no está seteado como render target. Si tienes intención de que "
+"muestre contenidos directo a la pantalla, haz un hijo de un Control para que "
+"pueda obtener un tamaño. Alternativamente, haz un RenderTarget y asigna su "
+"textura interna a algún otro nodo para mostrar."
#: scene/resources/dynamic_font.cpp
msgid "Error initializing FreeType."
@@ -7636,6 +7895,69 @@ msgstr "Error cargando tipografía."
msgid "Invalid font size."
msgstr "Tamaño de tipografía inválido."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "No se puede navegar a '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "Fuente: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Remover Punto de Line2D"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Agregar Punto a Line2D"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Mover Punto en Line2D"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Partir Segmento (en línea)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#~ msgid "Setting '"
+#~ msgstr "Ajuste '"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Inspector Remoto"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Ãrbol de Escenas en Vivo:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Propiedades de Objeto Remoto: "
+
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "Nivel Previo (%sRueda Abajo)"
+
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "Nivel Siguiente (%sRueda Arriba)"
+
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Selección -> Duplicar"
+
+#~ msgid "Selection -> Clear"
+#~ msgstr "Selección -> Restablecer"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "La propiedad Path debe apuntar a un nodo Viewport válido para funcionar. "
+#~ "Dicho Viewport debe ser seteado a modo 'render target'."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "El Viewport seteado en la propiedad path debe ser seteado como 'render "
+#~ "target' para que este sprite funcione."
+
#~ msgid "Filter:"
#~ msgstr "Filtro:"
@@ -7660,9 +7982,6 @@ msgstr "Tamaño de tipografía inválido."
#~ msgid "Removed:"
#~ msgstr "Removido:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Error al guardar atlas:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "No se pudo guardar la subtextura de altas:"
@@ -8052,9 +8371,6 @@ msgstr "Tamaño de tipografía inválido."
#~ msgid "Cropping Images"
#~ msgstr "Cropeando Imágenes"
-#~ msgid "Blitting Images"
-#~ msgstr "Haciendo Blitting de Imágenes"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "No se pudo guardar la imagen de atlas:"
@@ -8443,9 +8759,6 @@ msgstr "Tamaño de tipografía inválido."
#~ msgid "Save Translatable Strings"
#~ msgstr "Guardar Strings Traducibles"
-#~ msgid "Install Export Templates"
-#~ msgstr "Instalar Templates de Exportación"
-
#~ msgid "Edit Script Options"
#~ msgstr "Editar Opciones de Script"
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index 87e473d49c..bcd06f9051 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -5,20 +5,22 @@
#
# alabd14313 <alabd14313@yahoo.com>, 2016.
# hamed nasib <cghamed752@chmail.ir>, 2016.
+# Hasan Hejdari Nasab <hsn6@openmailbox.org>, 2017.
# rezapouya <r.pouya@chmail.ir>, 2016.
+# sayyed hamed nasib <cghamed752@chmail.ir>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-12 12:55+0000\n"
-"Last-Translator: alabd14313 <alabd14313@yahoo.com>\n"
+"PO-Revision-Date: 2017-11-26 16:49+0000\n"
+"Last-Translator: sayyed hamed nasib <cghamed752@chmail.ir>\n"
"Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/"
"godot/fa/>\n"
"Language: fa\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.8-dev\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -102,6 +104,7 @@ msgid "Anim Delete Keys"
msgstr "کلیدها را در انیمیشن حذ٠کن"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "انتخاب شده را به دو تا تکثیر کن"
@@ -187,13 +190,12 @@ msgid "Clean-Up Animation"
msgstr "انیمیشن را پاکسازی کن"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Create NEW track for %s and insert key?"
-msgstr "یک ترک جدید برای s% ایجاد کن و کلید را درج کن؟"
+msgstr "یک ترک جدید برای s% بساز و کلید را درج کن؟"
#: editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr "تعداد d% ترک جدید ایجاد، و کلیدها را درج کن؟"
+msgstr "ساختن تعداد d% ترک جدید، ودرج کلیدها؟"
#: editor/animation_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
@@ -202,11 +204,11 @@ msgstr "تعداد d% ترک جدید ایجاد، Ùˆ کلیدها را درج Ú
#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
msgid "Create"
-msgstr "ایجاد کن"
+msgstr "ساختن"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr "ایجاد و درج در انیمیشن"
+msgstr "ساختن و درج انیمیشن"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
@@ -262,7 +264,7 @@ msgstr "گام چسبنده‌ی مکان‌نما (به ثانیه)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr "ایجاد حلقه را در انیمیشن ÙØ¹Ø§Ù„/غیر ÙØ¹Ø§Ù„ Ú©Ù†."
+msgstr "حلقه را در انیمیشن ÙØ¹Ø§Ù„/غیر ÙØ¹Ø§Ù„ Ú©Ù†."
#: editor/animation_editor.cpp
msgid "Add new tracks."
@@ -506,9 +508,8 @@ msgid "Deferred"
msgstr "معوق"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Oneshot"
-msgstr "تک شات"
+msgstr "تک نما"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/export_template_manager.cpp
@@ -555,7 +556,7 @@ msgstr "سیگنال‌ها"
#: editor/create_dialog.cpp
msgid "Create New"
-msgstr "جدید ایجاد کن"
+msgstr "ساختن جدید"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -586,9 +587,8 @@ msgid "Description:"
msgstr "توضیح:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Search Replacement For:"
-msgstr "جستجو کن جایگزینی را برای:"
+msgstr "جستجوی جایگزین برای:"
#: editor/dependency_editor.cpp
msgid "Dependencies For:"
@@ -640,6 +640,13 @@ msgstr "ویرایشگر بستگی"
msgid "Search Replacement Resource:"
msgstr "منبع جایگزینی را جستجو کن:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "باز کن"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "مالکانÙ:"
@@ -656,7 +663,7 @@ msgid ""
msgstr ""
"پرونده‌هایی که می‌خواهید حذ٠شوند برای منابع دیگر مورد نیاز هستند تا کار "
"کنند.\n"
-"آیا در هر صورت حذ٠شوند (بدون undo)؟"
+"آیا در هر صورت حذ٠شوند؟(بدون برگشت)"
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
@@ -691,9 +698,8 @@ msgid "Permanently delete %d item(s)? (No undo!)"
msgstr "به طور دائمی تعداد 'd%' آیتم را حذ٠کند؟ (بدون undo !)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Owns"
-msgstr "مال خود"
+msgstr "اموال"
#: editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
@@ -714,6 +720,14 @@ msgstr "آیا پرونده‌های انتخاب شده حذ٠شود؟"
msgid "Delete"
msgstr "حذ٠کن"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "تغییر ارزش دیکشنری"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -727,9 +741,8 @@ msgid "Godot Engine contributors"
msgstr ""
#: editor/editor_about.cpp
-#, fuzzy
msgid "Project Founders"
-msgstr "صادر کردن پروژه"
+msgstr "برپا کننده های پروژه"
#: editor/editor_about.cpp
msgid "Lead Developer"
@@ -737,16 +750,15 @@ msgstr ""
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr ""
+msgstr "مدیر پروژه"
#: editor/editor_about.cpp
msgid "Developers"
msgstr ""
#: editor/editor_about.cpp
-#, fuzzy
msgid "Authors"
-msgstr "خالق:"
+msgstr "Ù…Ø¤Ù„ÙØ§Ù†"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
@@ -793,14 +805,12 @@ msgid ""
msgstr ""
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "مستمر"
+msgstr "همه اجزا"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "مستمر"
+msgstr "اجزا"
#: editor/editor_about.cpp
msgid "Licenses"
@@ -811,9 +821,8 @@ msgid "Error opening package file, not in zip format."
msgstr ""
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Uncompressing Assets"
-msgstr "در حال وارد کردن دوباره..."
+msgstr "عست های غیر ÙØ´Ø±Ø¯Ù‡"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
@@ -842,9 +851,8 @@ msgid "Add Effect"
msgstr ""
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "بارگذاری خودکار را تغییر نام بده"
+msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
@@ -871,9 +879,8 @@ msgid "Move Bus Effect"
msgstr ""
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "انتخاب شده را حذ٠کن"
+msgstr "حذ٠اثر گذرا"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
@@ -901,14 +908,12 @@ msgid "Duplicate"
msgstr ""
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "بازنشانی بزرگنمایی"
+msgstr "بازنشانی حجم"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "انتخاب شده را حذ٠کن"
+msgstr "حذ٠اثر"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus"
@@ -969,7 +974,7 @@ msgstr ""
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Load"
-msgstr ""
+msgstr "بارگیری"
#: editor/editor_audio_buses.cpp
msgid "Load an existing Bus Layout."
@@ -978,16 +983,15 @@ msgstr ""
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr ""
+msgstr "ذخیره در"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
msgstr ""
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
-#, fuzzy
msgid "Load Default"
-msgstr "Ù¾ÛŒØ´ÙØ±Ø¶"
+msgstr "بارگیری پیش ÙØ±Ø¶"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
@@ -1064,7 +1068,7 @@ msgstr "مسیر:"
#: editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr ""
+msgstr "نام گره:"
#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
msgid "Name"
@@ -1101,7 +1105,7 @@ msgstr ""
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
msgid "Create Folder"
-msgstr "پوشه ایجاد کن"
+msgstr "ساختن پوشه"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
@@ -1113,7 +1117,7 @@ msgstr "نام:"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
msgid "Could not create folder."
-msgstr "نمی‌تواند یک پوشه ایجاد شود."
+msgstr "ناتوان در ساختن پوشه."
#: editor/editor_dir_dialog.cpp
msgid "Choose"
@@ -1136,18 +1140,17 @@ msgid "File Exists, Overwrite?"
msgstr "ÙØ§ÛŒÙ„ وجود دارد، آیا بازنویسی شود؟"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "ساختن پوشه"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
-msgstr "همه ی موارد شناخته شده اند."
+msgstr "همه ی موارد شناخته شده اند"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Files (*)"
-msgstr "تمام پرونده‌ها (*)"
-
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "باز کن"
+msgstr "همهٔ پرونده‌ها (*)"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
@@ -1215,10 +1218,9 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "نمی‌تواند یک پوشه ایجاد شود."
+msgstr "Ø±ÙØªÙ† به پوشه والد"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1242,14 +1244,13 @@ msgid "ScanSources"
msgstr ""
#: editor/editor_file_system.cpp
-#, fuzzy
msgid "(Re)Importing Assets"
-msgstr "در حال وارد کردن دوباره..."
+msgstr "(در حال) وارد کردن دوباره عست ها"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
-msgstr ""
+msgstr "جستجوی راهنما"
#: editor/editor_help.cpp
msgid "Class List:"
@@ -1280,18 +1281,16 @@ msgid "Brief Description:"
msgstr "خلاصه توضیحات:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "عضوها:"
+msgstr "عضوها"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "عضوها:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "انتخاب حالت"
+msgstr "روش های عمومی"
#: editor/editor_help.cpp
msgid "Public Methods:"
@@ -1310,41 +1309,36 @@ msgid "Signals:"
msgstr "سیگنال ها:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "وظایÙ:"
+msgstr "شمارش ها"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations:"
-msgstr "وظایÙ:"
+msgstr "شمارش ها:"
#: editor/editor_help.cpp
msgid "enum "
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "ثابت"
+msgstr "ثابت ها"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "توضیح:"
+msgstr "توضیح"
#: editor/editor_help.cpp
msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
msgid "Property Description:"
-msgstr "خلاصه توضیحات:"
+msgstr "توضیحات مشخصه:"
#: editor/editor_help.cpp
msgid ""
@@ -1353,9 +1347,8 @@ msgid ""
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "Ùهرست متدها:"
+msgstr "روش ها"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1372,9 +1365,8 @@ msgid "Search Text"
msgstr "جستجوی متن"
#: editor/editor_log.cpp
-#, fuzzy
msgid "Output:"
-msgstr " خروجی:"
+msgstr "خروجی:"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
@@ -1515,6 +1507,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1592,9 +1599,8 @@ msgid "Quick Open Script.."
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Close"
-msgstr "یک پرونده را ذخیره کن"
+msgstr "ذخیره و بستن"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
@@ -1625,10 +1631,14 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
-msgid "Export Tile Set"
+msgid "This operation can't be done without a root node."
msgstr ""
#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "صدور مجموعه کاشی"
+
+#: editor/editor_node.cpp
msgid "This operation can't be done without a selected node."
msgstr ""
@@ -1662,12 +1672,11 @@ msgstr "از ویرایشگر خارج می شوید؟"
#: editor/editor_node.cpp
msgid "Open Project Manager?"
-msgstr ""
+msgstr "باز شدن مدیر پروژه؟"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Quit"
-msgstr "یک پرونده را ذخیره کن"
+msgstr "ذخیره و خروج"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
@@ -1752,11 +1761,20 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+#, fuzzy
+msgid "%d more folders"
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1768,6 +1786,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† صحنه جدید."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "صحنه"
@@ -1832,13 +1854,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "خنثی کردن (Undo)"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -1851,21 +1872,20 @@ msgid "Miscellaneous project or scene-wide tools."
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Project"
-msgstr "صادر کردن پروژه"
+msgstr "پروژه"
#: editor/editor_node.cpp
msgid "Project Settings"
-msgstr ""
+msgstr "ترجیحات پروژه"
#: editor/editor_node.cpp
msgid "Run Script"
-msgstr ""
+msgstr "اجرای اسکریپت"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export"
-msgstr ""
+msgstr "صدور"
#: editor/editor_node.cpp
msgid "Tools"
@@ -1873,11 +1893,11 @@ msgstr "ابزارها"
#: editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr ""
+msgstr "خروج به Ùهرست پروژه ها"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Debug"
-msgstr ""
+msgstr "اشکال زدا"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
@@ -1948,9 +1968,8 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Editor"
-msgstr "ویرایش کردن"
+msgstr "ویرایشگر"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
@@ -1967,11 +1986,11 @@ msgstr "حالت تمام ØµÙØ­Ù‡"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Manage Export Templates"
-msgstr ""
+msgstr "مدیریت صدور قالب ها"
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "راهنما"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
@@ -1999,7 +2018,7 @@ msgstr "معرÙÛŒ"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr ""
+msgstr "اجرای پروژه."
#: editor/editor_node.cpp
msgid "Play"
@@ -2096,15 +2115,15 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "وارد کردن"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr ""
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
-msgstr ""
+msgstr "گره"
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "سامانه پرونده"
#: editor/editor_node.cpp
msgid "Output"
@@ -2120,11 +2139,11 @@ msgstr "واردکردن قالب ها از درون یک ÙØ§ÛŒÙ„ ZIP"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export Project"
-msgstr "صادر کردن پروژه"
+msgstr "صدور پروژه"
#: editor/editor_node.cpp
msgid "Export Library"
-msgstr "صادکردن ÙØ§ÛŒÙ„ کتابخانه ای"
+msgstr "صدور کتابخانه"
#: editor/editor_node.cpp
msgid "Merge With Existing"
@@ -2136,12 +2155,11 @@ msgstr "گذرواژه:"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
-msgstr "باز کردن و اجرای یک اسکریپت"
+msgstr "گشودن و اجرای یک اسکریپت"
#: editor/editor_node.cpp
-#, fuzzy
msgid "New Inherited"
-msgstr "به ارث رسیده به وسیله:"
+msgstr "وارث جدید"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -2152,29 +2170,24 @@ msgid "Select"
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 2D Editor"
-msgstr "یک دیکشنری را باز کن"
+msgstr "گشودن ویرایشگر دو بعدی"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 3D Editor"
-msgstr "یک دیکشنری را باز کن"
+msgstr "یگشودن ویرایشگر سه بعدی"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Script Editor"
-msgstr "ویرایشگر بستگی"
+msgstr "گشودن ویرایشگر اسکریپت"
-#: editor/editor_node.cpp
-#, fuzzy
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr "صادکردن ÙØ§ÛŒÙ„ کتابخانه ای"
+msgstr "گشودن کتابخانه عست"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the next Editor"
-msgstr "ویرایشگر بستگی"
+msgstr "گشودن ویرایشگر متن"
#: editor/editor_node.cpp
msgid "Open the previous Editor"
@@ -2293,7 +2306,7 @@ msgstr ""
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr ""
+msgstr "انتخاب گره (ها) برای وارد شدن"
#: editor/editor_sub_scene.cpp
msgid "Scene Path:"
@@ -2301,7 +2314,7 @@ msgstr ""
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr ""
+msgstr "وارد کردن از گره:"
#: editor/export_template_manager.cpp
msgid "Re-Download"
@@ -2312,9 +2325,8 @@ msgid "Uninstall"
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "(Installed)"
-msgstr "Ø§ÙØ²ÙˆÙ†Ù‡ های نصب شده:"
+msgstr "(نصب شده)"
#: editor/export_template_manager.cpp
msgid "Download"
@@ -2329,6 +2341,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2363,39 +2379,138 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "ناتوان در اتصال."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "ناتوان در نوشتن پرونده."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "دانلود کامل."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "خطای آدرس درخواستی: "
+
+#: editor/export_template_manager.cpp
#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "در حال اتصال..."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "اتصال قطع شده"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "در حال اتصال.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "ناتوان در اتصال"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "وصل شده"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "در حال درخواست.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "در حال بارگیری"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "خطای اتصال"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "دست دادن خطای اس اس ال"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
-msgstr "نسخه:"
+msgstr "نسخه اخیر:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Installed Versions:"
-msgstr "Ø§ÙØ²ÙˆÙ†Ù‡ های نصب شده:"
+msgstr "نسخه های نصب شده:"
#: editor/export_template_manager.cpp
msgid "Install From File"
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove Template"
-msgstr "برداشتن انتخاب شده"
+msgstr "حذ٠قالب"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Select template file"
-msgstr "آیا پرونده‌های انتخاب شده حذ٠شود؟"
+msgstr "انتخاب پرونده قالب"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "بارگیری قالب ها"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2413,13 +2528,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
-"\n"
-"Source: "
-msgstr "منبع"
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2481,16 +2589,15 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Rename.."
-msgstr ""
+msgstr "تغییر نام.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "پوشه ایجاد کن"
+msgstr "ساختن پوشه.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2518,7 +2625,7 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr ""
+msgstr "پویش دوباره سامانه پرونده"
#: editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
@@ -2541,7 +2648,7 @@ msgstr ""
#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Rename"
-msgstr ""
+msgstr "تغییر نام"
#: editor/groups_editor.cpp
msgid "Add to Group"
@@ -2565,23 +2672,23 @@ msgstr ""
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "وارد کردن با اشیا جداگانه"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "وارد کردن با اشیا و مواد"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "وارد کردن با اشیا و انیمیشن ها"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "وارد کردن با مواد و انیمیشن ها"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "وارد کردن با اشیا و مواد و انیمیشن ها"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
@@ -2629,9 +2736,8 @@ msgid "Clear Default for '%s'"
msgstr ""
#: editor/import_dock.cpp
-#, fuzzy
msgid " Files"
-msgstr "پرونده:"
+msgstr " پوشه ها"
#: editor/import_dock.cpp
msgid "Import As:"
@@ -2642,9 +2748,8 @@ msgid "Preset.."
msgstr ""
#: editor/import_dock.cpp
-#, fuzzy
msgid "Reimport"
-msgstr "در حال وارد کردن دوباره..."
+msgstr "وارد کردن دوباره"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
@@ -2684,8 +2789,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2696,6 +2800,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "حذ٠کن"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2713,9 +2822,8 @@ msgid "Change Animation Name:"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Delete Animation?"
-msgstr "انیمیشن را بهینه‌سازی کن"
+msgstr "انیمیشن حذ٠شود؟"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
@@ -2733,7 +2841,7 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr ""
+msgstr "تغییر نام انیمیشن"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
@@ -2841,6 +2949,56 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "توضیح"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "چسباندن"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2877,9 +3035,8 @@ msgid "New name:"
msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
-#, fuzzy
msgid "Edit Filters"
-msgstr "پرونده:"
+msgstr "ویرایش صاÙÛŒ ها"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
@@ -2969,7 +3126,7 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation Node"
-msgstr ""
+msgstr "گره انیمیشن"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
@@ -2977,19 +3134,19 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix Node"
-msgstr ""
+msgstr "گره ترکیب"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend2 Node"
-msgstr ""
+msgstr "گره مخلوط۲"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend3 Node"
-msgstr ""
+msgstr "گره مخلوط۳"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend4 Node"
-msgstr ""
+msgstr "گره مخلوط۴"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeScale Node"
@@ -3001,7 +3158,7 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "گره جابجای"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
@@ -3009,7 +3166,7 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr ""
+msgstr "ویرایش صاÙÛŒ های گره"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Filters.."
@@ -3020,34 +3177,23 @@ msgid "Free"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Contents:"
-msgstr "مستمر"
+msgstr "محتواها:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "View Files"
-msgstr "پرونده:"
+msgstr "نمایش پرونده ها"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Can't connect."
-msgstr "در حال اتصال..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Can't connect to host:"
msgstr "اتصال به گره:"
@@ -3056,30 +3202,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3109,16 +3239,6 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Connecting.."
-msgstr "در حال اتصال..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "آزمودن"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
msgstr "خطای بارگذاری قلم."
@@ -3131,9 +3251,8 @@ msgid "Retry"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Download Error"
-msgstr "خطاهای بارگذاری"
+msgstr "خطاهای بارگیری"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
@@ -3232,6 +3351,36 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "ساختن راهنمای عمودی"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "برداشتن متغیر"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "ساختن راهنمای اÙÙ‚ÛŒ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "کلیدهای نامعتبر را حذ٠کن"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3353,10 +3502,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3407,6 +3562,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3443,9 +3602,8 @@ msgid "Drag pivot from mouse position"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "برداشتن موج"
+msgstr "گذاشتن محور در مکان موشواره"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -3466,7 +3624,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Create Node"
-msgstr ""
+msgstr "ساختن گره"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -3515,19 +3673,19 @@ msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Add Item"
-msgstr ""
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† مورد"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove Selected Item"
-msgstr ""
+msgstr "حذ٠مورد انتخاب‌شده"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import from Scene"
-msgstr ""
+msgstr "وارد کردن از صحنه"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Update from Scene"
-msgstr ""
+msgstr "به‌روزرسانی از صحنه"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat0"
@@ -3538,40 +3696,36 @@ msgid "Flat1"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
-msgstr "انتخاب شده را تغییر مقیاس بده"
+msgstr "Ú©Ùندی در آغاز"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Ease out"
-msgstr ""
+msgstr "Ú©Ùندی در پایان"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
-msgstr ""
+msgstr "گام نرم"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Point"
-msgstr ""
+msgstr "ویرایش نقطهٔ منحنی"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Tangent"
-msgstr ""
+msgstr "ویرایش مماس منحنی"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Load Curve Preset"
-msgstr "خطاهای بارگذاری"
+msgstr "بارگیری منحنی ذخیره‌شده"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Add point"
-msgstr "Signal را اضاÙÙ‡ Ú©Ù†"
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† نقطه"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove point"
-msgstr "برداشتن موج"
+msgstr "برداشتن نقطه"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3588,9 +3742,8 @@ msgid "Load preset"
msgstr "خطاهای بارگذاری"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove Curve Point"
-msgstr "برداشتن موج"
+msgstr "حذ٠نقطهٔ منحنی"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
@@ -3600,6 +3753,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3632,6 +3789,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3647,59 +3808,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "برو به خط"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4097,16 +4205,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4192,7 +4330,7 @@ msgstr ""
#: editor/project_settings_editor.cpp editor/property_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit"
-msgstr "ویرایش کردن"
+msgstr "ویرایش"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon->UV"
@@ -4229,7 +4367,7 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Rename Resource"
-msgstr ""
+msgstr "تغییر نام منبع"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
@@ -4247,7 +4385,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4292,6 +4429,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "مرتب‌سازی:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4344,9 +4496,13 @@ msgstr ""
msgid "Close All"
msgstr "بستن"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
-msgstr ""
+msgstr "اجرا"
#: editor/plugins/script_editor_plugin.cpp
msgid "Toggle Scripts Panel"
@@ -4354,13 +4510,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4466,33 +4620,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "بریدن"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "کپی کردن"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "انتخاب همه"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4515,6 +4658,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "برو به خط"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4561,12 +4721,10 @@ msgid "Convert To Lowercase"
msgstr "اتصال به گره:"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4575,7 +4733,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4740,6 +4897,15 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "انتقال"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4821,6 +4987,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4853,6 +5023,16 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "پرونده:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "انتخاب شده را تغییر مقیاس بده"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4984,6 +5164,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "دید آزاد"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5126,7 +5310,7 @@ msgstr ""
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "(empty)"
-msgstr ""
+msgstr "(خالی)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animations"
@@ -5254,10 +5438,14 @@ msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Template"
-msgstr ""
+msgstr "ساختن قالب خالی"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
+msgstr "ساختن قالب خالی ویرایشگر"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
@@ -5437,7 +5625,7 @@ msgstr ""
#: editor/project_export.cpp
#, fuzzy
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr "حذ٠کن"
#: editor/project_export.cpp
@@ -5475,11 +5663,11 @@ msgstr ""
#: editor/project_export.cpp
msgid "Export Mode:"
-msgstr ""
+msgstr "حالت صدور:"
#: editor/project_export.cpp
msgid "Resources to export:"
-msgstr ""
+msgstr "منابع برای صدور:"
#: editor/project_export.cpp
msgid ""
@@ -5515,7 +5703,7 @@ msgstr "Ùهرست متدها:"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
-msgstr ""
+msgstr "صدور pck/zip"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
@@ -5527,7 +5715,7 @@ msgstr ""
#: editor/project_export.cpp
msgid "Export With Debug"
-msgstr ""
+msgstr "صدور با اشکال زدا"
#: editor/project_manager.cpp
#, fuzzy
@@ -5550,7 +5738,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Imported Project"
-msgstr ""
+msgstr "پروژه واردشده"
#: editor/project_manager.cpp
msgid " "
@@ -5581,9 +5769,8 @@ msgid "The following files failed extraction from package:"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "صادر کردن پروژه"
+msgstr "تغییر نام پروژه"
#: editor/project_manager.cpp
msgid "Couldn't get project.godot in the project path."
@@ -5591,32 +5778,31 @@ msgstr ""
#: editor/project_manager.cpp
msgid "New Game Project"
-msgstr ""
+msgstr "پروژه بازی جدید"
#: editor/project_manager.cpp
msgid "Import Existing Project"
-msgstr ""
+msgstr "وارد کردن پروژه موجود"
#: editor/project_manager.cpp
msgid "Create New Project"
-msgstr ""
+msgstr "ساختن پروژه جدید"
#: editor/project_manager.cpp
msgid "Install Project:"
-msgstr ""
+msgstr "نصب پروژه:"
#: editor/project_manager.cpp
msgid "Project Name:"
-msgstr ""
+msgstr "نام پروژه:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
-msgstr "پوشه ایجاد کن"
+msgstr "ساختن پوشه"
#: editor/project_manager.cpp
msgid "Project Path:"
-msgstr ""
+msgstr "مسیر پروژه:"
#: editor/project_manager.cpp
msgid "Browse"
@@ -5628,12 +5814,11 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Unnamed Project"
-msgstr ""
+msgstr "پروژه بی نام"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "در حال اتصال..."
+msgstr "ناتوان در گشودن پروژه"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -5671,42 +5856,46 @@ msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
msgstr ""
-"شما درخواست بررسی پوشه های ٪‌ را برای پیدا کردن پروژه های Godot‌ را داده اید. "
-"آیا انجام این عمل را تایید می کنید!؟‌"
+"شما درخواست بررسی پوشه های s٪‌ برای پیدا کردن پروژه های گودات را داده اید. "
+"آیا انجام این عمل را تایید می کنید؟‌"
#: editor/project_manager.cpp
msgid "Project List"
-msgstr ""
+msgstr "Ùهرست پروژه ها"
#: editor/project_manager.cpp
msgid "Scan"
-msgstr ""
+msgstr "پویش"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
-msgstr ""
+msgstr "انتخاب یک پوشه برای پویش"
#: editor/project_manager.cpp
msgid "New Project"
-msgstr ""
+msgstr "پروژه جدید"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Templates"
-msgstr "برداشتن انتخاب شده"
+msgstr "قالب ها"
#: editor/project_manager.cpp
msgid "Exit"
-msgstr ""
+msgstr "خروج"
#: editor/project_manager.cpp
msgid "Restart Now"
-msgstr ""
+msgstr "راه اندازی دوباره"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't run project"
-msgstr "در حال اتصال..."
+msgstr "ناتوان در اجرای پروژه"
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -5741,10 +5930,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "+Meta"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "+Shift"
@@ -5819,15 +6004,15 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
-msgstr ""
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† عمل ورودی"
#: editor/project_settings_editor.cpp
msgid "Erase Input Action Event"
-msgstr ""
+msgstr "حذ٠رویداد عمل ورودی"
#: editor/project_settings_editor.cpp
msgid "Add Event"
-msgstr ""
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† رویداد"
#: editor/project_settings_editor.cpp
msgid "Device"
@@ -5839,15 +6024,15 @@ msgstr "دکمه"
#: editor/project_settings_editor.cpp
msgid "Left Button."
-msgstr "دکمه‌ی چپ."
+msgstr "دکمهٔ چپ."
#: editor/project_settings_editor.cpp
msgid "Right Button."
-msgstr "دکمه‌ی راست."
+msgstr "دکمهٔ راست."
#: editor/project_settings_editor.cpp
msgid "Middle Button."
-msgstr "دکمه‌ی وسط."
+msgstr "دکمهٔ میانی."
#: editor/project_settings_editor.cpp
msgid "Wheel Up."
@@ -5858,44 +6043,40 @@ msgid "Wheel Down."
msgstr "غلطاندن به پایین."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add Global Property"
-msgstr "دارایی Getter را اضاÙÙ‡ Ú©Ù†"
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† ویژگی سراسری"
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
-msgstr ""
+msgstr "نخست، یک تنظیم را انتخاب کنید!"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr ""
+msgid "No property '%s' exists."
+msgstr "ویژگی '%s' موجود نیست."
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "ترجیحات"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "تنظیم '%s' درونی است، نمی‌تواند حذ٠شود."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Delete Item"
-msgstr "حذ٠کن"
+msgstr "حذ٠مورد"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "اتصال به گره:"
+msgstr "نمی‌تواند شامل '/' یا ':' باشد"
#: editor/project_settings_editor.cpp
msgid "Already existing"
-msgstr ""
+msgstr "پیش از این وجود داشته است"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
-msgstr ""
+msgstr "خطای ذخیرهٔ تنظیمات."
#: editor/project_settings_editor.cpp
msgid "Settings saved OK."
-msgstr ""
+msgstr "تنظیمات با موÙقیت ذخیره شد."
#: editor/project_settings_editor.cpp
msgid "Override for Feature"
@@ -5903,11 +6084,11 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Add Translation"
-msgstr ""
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† ترجمه"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
-msgstr ""
+msgstr "حذ٠ترجمه"
#: editor/project_settings_editor.cpp
msgid "Add Remapped Path"
@@ -5930,25 +6111,24 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "نوع مقدار آرایه را تغییر بده"
+msgstr "صاÙÛŒ بومی‌سازی تغییر کرد"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "حالت صاÙÛŒ بومی‌سازی تغییر کرد"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
-msgstr ""
+msgstr "تنظیمات پروژه (پروژه.گودات)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
-msgstr ""
+msgstr "کلی"
#: editor/project_settings_editor.cpp editor/property_editor.cpp
msgid "Property:"
-msgstr ""
+msgstr "ویژگی:"
#: editor/project_settings_editor.cpp
msgid "Override For.."
@@ -5968,60 +6148,59 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Index:"
-msgstr ""
+msgstr "اندیس:"
#: editor/project_settings_editor.cpp
msgid "Localization"
-msgstr ""
+msgstr "بومی‌سازی"
#: editor/project_settings_editor.cpp
msgid "Translations"
-msgstr ""
+msgstr "ترجمه‌ها"
#: editor/project_settings_editor.cpp
msgid "Translations:"
-msgstr ""
+msgstr "ترجمه‌ها:"
#: editor/project_settings_editor.cpp
msgid "Remaps"
-msgstr ""
+msgstr "بازطرح‌شده‌ها"
#: editor/project_settings_editor.cpp
msgid "Resources:"
-msgstr ""
+msgstr "منابع:"
#: editor/project_settings_editor.cpp
msgid "Remaps by Locale:"
-msgstr ""
+msgstr "بازطرح‌شده‌ها توسط بومی‌سازی:"
#: editor/project_settings_editor.cpp
msgid "Locale"
-msgstr ""
+msgstr "بومی‌سازی"
#: editor/project_settings_editor.cpp
msgid "Locales Filter"
-msgstr ""
+msgstr "صاÙÛŒ بومی‌سازی‌ها"
#: editor/project_settings_editor.cpp
msgid "Show all locales"
-msgstr ""
+msgstr "نشان دادن همهٔ بومی‌سازی‌ها"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "نشان دادن تنها بومی‌سازی‌های انتخاب‌شده"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "صاÙÛŒ:"
+msgstr "حالت صاÙÛŒ:"
#: editor/project_settings_editor.cpp
msgid "Locales:"
-msgstr ""
+msgstr "بومی‌سازی‌ها:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
-msgstr ""
+msgstr "بارگیری خودکار"
#: editor/property_editor.cpp
msgid "Pick a Viewport"
@@ -6060,9 +6239,8 @@ msgid "Assign"
msgstr ""
#: editor/property_editor.cpp
-#, fuzzy
msgid "Select Node"
-msgstr "انتخاب حالت"
+msgstr "گره انتخاب"
#: editor/property_editor.cpp
#, fuzzy
@@ -6091,9 +6269,8 @@ msgid "Selected node is not a Viewport!"
msgstr ""
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Node"
-msgstr "مسیر به سمت گره:"
+msgstr "کاویدن گره"
#: editor/property_editor.cpp
msgid "Bit %d, val %d."
@@ -6140,7 +6317,7 @@ msgstr ""
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent Node"
-msgstr ""
+msgstr "گره تغییر والد"
#: editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
@@ -6219,7 +6396,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)?"
-msgstr ""
+msgstr "حذ٠گره(ها)؟"
#: editor/scene_tree_dock.cpp
msgid "Can not perform with the root node."
@@ -6235,11 +6412,11 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
-msgstr ""
+msgstr "ÙØ±Ø²Ù†Ø¯ قابل ویرایش"
#: editor/scene_tree_dock.cpp
msgid "Load As Placeholder"
-msgstr ""
+msgstr "بارگیری به عنوان جانگهدار"
#: editor/scene_tree_dock.cpp
msgid "Discard Instancing"
@@ -6259,7 +6436,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
-msgstr ""
+msgstr "حذ٠گره(ها)"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -6276,38 +6453,36 @@ msgid "Error duplicating scene to save it."
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Sub-Resources:"
-msgstr "منبع"
+msgstr "زیرمنبع‌ها:"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
-msgstr ""
+msgstr "پاک کردن ارث‌بری"
#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
msgid "Open in Editor"
-msgstr ""
+msgstr "گشودن در ویرایشگر"
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)"
-msgstr ""
+msgstr "حذ٠گره(ها)"
#: editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr ""
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† گره ÙØ±Ø²Ù†Ø¯"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr ""
+msgstr "ارث‌بری صحنهٔ ÙØ±Ø²Ù†Ø¯"
#: editor/scene_tree_dock.cpp
msgid "Change Type"
-msgstr ""
+msgstr "تغییر نوع"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Attach Script"
-msgstr "صحنه جدید"
+msgstr "پیوست کردن اسکریپت"
#: editor/scene_tree_dock.cpp
#, fuzzy
@@ -6316,23 +6491,23 @@ msgstr "صحنه جدید"
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr ""
+msgstr "ادغام از صحنه"
#: editor/scene_tree_dock.cpp
msgid "Save Branch as Scene"
-msgstr ""
+msgstr "ذخیرهٔ شاخه به عنوان صحنه"
#: editor/scene_tree_dock.cpp
msgid "Copy Node Path"
-msgstr ""
+msgstr "رونوشت مسیر گره"
#: editor/scene_tree_dock.cpp
msgid "Delete (No Confirm)"
-msgstr "خذÙ(تایید نشده)"
+msgstr "حذ٠(بدون تأیید)"
#: editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
-msgstr ""
+msgstr "Ø§ÙØ²ÙˆØ¯Ù†/ساختن گره جدید"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -6341,25 +6516,32 @@ msgid ""
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Filter nodes"
-msgstr "صاÙÛŒ:"
+msgstr "صاÙÛŒ کردن گره‌ها"
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script for the selected node."
-msgstr ""
+msgstr "پیوست کردن یک اسکریپت جدید یا از پیش موجود برای گره انتخابی."
#: editor/scene_tree_dock.cpp
msgid "Clear a script for the selected node."
-msgstr ""
+msgstr "حذ٠یک اسکریپت برای گره انتخابی."
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "از راه دور"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "محلی"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
-msgstr ""
+msgstr "وراثت حذ٠شود؟ (بدون بازگشت!)"
#: editor/scene_tree_dock.cpp
msgid "Clear!"
-msgstr ""
+msgstr "حذÙ!"
#: editor/scene_tree_editor.cpp
msgid "Toggle Spatial Visible"
@@ -6422,7 +6604,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Rename Node"
-msgstr ""
+msgstr "تغییر نام گره"
#: editor/scene_tree_editor.cpp
msgid "Scene Tree (Nodes):"
@@ -6434,7 +6616,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Select a Node"
-msgstr ""
+msgstr "انتخاب یک گره"
#: editor/script_create_dialog.cpp
#, fuzzy
@@ -6457,7 +6639,7 @@ msgstr ""
#: editor/script_create_dialog.cpp
msgid "Path is empty"
-msgstr ""
+msgstr "مسیر خالی است"
#: editor/script_create_dialog.cpp
msgid "Path is not local"
@@ -6511,9 +6693,8 @@ msgid "Built-in script (into scene file)"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Create new script file"
-msgstr "جدید ایجاد کن"
+msgstr "ساختن اسکریپت جدید"
#: editor/script_create_dialog.cpp
msgid "Load existing script file"
@@ -6548,6 +6729,11 @@ msgid "Attach Node Script"
msgstr "صحنه جدید"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "برداشتن"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6604,18 +6790,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6749,56 +6923,56 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"نوع آرگومان برای متد ()convert ‌ نامعتبر است ،‌ از ثابت های *_TYPE‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ "
"کنید ."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
"تعداد بایت های مورد نظر برای رمزگشایی بایت ها کاÙÛŒ نیست ،‌ Ùˆ یا ÙØ±Ù…ت نامعتبر "
"است ."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "آرگومان step ØµÙØ± است!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Not a script with an instance"
msgstr "اسکریپتی با یک نمونه نیست ."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
-msgstr "بر اساس یک اسکریپت نیست."
+msgstr "بر اساس یک اسکریپت نیست"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
-msgstr "بر اساس یک ÙØ§ÛŒÙ„ منبع نیست."
+msgstr "بر اساس یک ÙØ§ÛŒÙ„ منبع نیست"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "ÙØ±Ù…ت دیکشنری نمونه نامعتبر (pass@ Ù…Ùقود)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"ÙØ±Ù…ت نمونه ÛŒ دیکشنری نامعتبر است . ( نمی توان اسکریپت را از مسیر path@ "
"بارگذاری کرد.)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "ÙØ±Ù…ت دیکشنری نمونه نامعتبر (اسکریپت نامعتبر در path@)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "نمونه ی دیکشنری نامعتبر است . (زیرکلاس‌های نامعتبر)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6813,15 +6987,24 @@ msgid "GridMap Duplicate Selection"
msgstr "انتخاب شده را به دو تا تکثیر کن"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Snap View"
+msgid "Floor:"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Grid Map"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Previous Floor"
+msgstr "زبانه قبلی"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6878,9 +7061,8 @@ msgid "Cursor Clear Rotation"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Create Area"
-msgstr "جدید ایجاد کن"
+msgstr "ساختن ناحیه"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Create Exterior Connector"
@@ -6892,13 +7074,8 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "تنها در قسمت انتخاب شده"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "تنها در قسمت انتخاب شده"
+msgid "Clear Selection"
+msgstr "انتخاب شده را تغییر مقیاس بده"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -6919,7 +7096,7 @@ msgid ""
"properly!"
msgstr ""
"یک گره بدون قرارگیری در Ø­Ø§ÙØ¸Ù‡ ،‌ متوق٠شده است. Ù„Ø·ÙØ§ اسناد رسمی Godot‌ را برای "
-"یادگیری درست متوق٠کردن(yield‌ کردن بازی)، مطالعه کنید."
+"یادگیری درست متوق٠کردن(yield‌ کردن بازی)، مطالعه کنید!"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -7034,7 +7211,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7042,7 +7219,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7050,7 +7227,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7068,57 +7245,51 @@ msgstr "گره(ها) را از درخت اضاÙÙ‡ Ú©Ù†"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Getter Property"
-msgstr "دارایی Getter را اضاÙÙ‡ Ú©Ù†"
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† ویژگی Ø¯Ø±ÛŒØ§ÙØªâ€ŒÚ©Ù†Ù†Ø¯Ù‡"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Setter Property"
-msgstr "دارایی Setter را اضاÙÙ‡ Ú©Ù†"
+msgstr "Ø§ÙØ²ÙˆØ¯Ù† ویژگی تنظیم‌کننده"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Base Type"
-msgstr "نوع مقدار آرایه را تغییر بده"
+msgstr "تغییر نوع پایه"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Move Node(s)"
-msgstr "مسیر به سمت گره:"
+msgstr "حرکت دادن گره(ها)"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Node"
-msgstr "برداشتن متغیر"
+msgstr "حذ٠گره اسکریپت٠دیداری"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Nodes"
-msgstr "اتصال به گره:"
+msgstr "اتصال گره‌ها"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Condition"
-msgstr "انتقال"
+msgstr "شرط"
#: modules/visual_script/visual_script_editor.cpp
msgid "Sequence"
-msgstr ""
+msgstr "دنباله"
#: modules/visual_script/visual_script_editor.cpp
msgid "Switch"
-msgstr ""
+msgstr "گزینه"
#: modules/visual_script/visual_script_editor.cpp
msgid "Iterator"
-msgstr ""
+msgstr "تکرارکننده"
#: modules/visual_script/visual_script_editor.cpp
msgid "While"
-msgstr ""
+msgstr "تا زمانی که"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Return"
-msgstr "بازگشت:"
+msgstr "بازگشت"
#: modules/visual_script/visual_script_editor.cpp
msgid "Call"
@@ -7126,16 +7297,15 @@ msgstr "ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ"
#: modules/visual_script/visual_script_editor.cpp
msgid "Get"
-msgstr ""
+msgstr "Ú¯Ø±ÙØªÙ†"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Input Value"
-msgstr "مقدار آرایه را تغییر بده"
+msgstr "تغییر مقدار ورودی"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't copy the function node."
@@ -7143,7 +7313,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
-msgstr ""
+msgstr "Ø­Ø§ÙØ¸Ù‡ پنهان خالی است!"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
@@ -7155,26 +7325,24 @@ msgid "Remove Function"
msgstr "برداشتن نقش"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable"
-msgstr "متغیر را ویرایش کن:"
+msgstr "ویرایش متغیر"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
-msgstr "برداشتن متغیر"
+msgstr "حذ٠متغیر"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal"
-msgstr "ویرایش سیگنال:"
+msgstr "ویرایش سیگنال"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
-msgstr "برداشتن موج"
+msgstr "حذ٠سیگنال"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
-msgstr "ویرایش متغیر:"
+msgstr "متغیر در حال ویرایش:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
@@ -7190,11 +7358,11 @@ msgstr "گره های موجود:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr "یک تابع انتخاب یا ایجاد کنید تا گرا٠را ویرایش کنید"
+msgstr "انتخاب یا ساختن یک نقش در ویرایشگر گراÙ"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr "آرگومان‌های سیگنال را ویرایش کن"
+msgstr "آرگومان‌های سیگنال را ویرایش کن:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
@@ -7246,7 +7414,7 @@ msgstr "شیء پایه یک گره نیست!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
-msgstr "مسیربه یک گره نمی رسد!‌"
+msgstr "مسیر به یک گره نمیرسد!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
@@ -7296,12 +7464,22 @@ msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr "نام دارایی ایندکس نامعتبر."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: scene/2d/animated_sprite.cpp
@@ -7418,22 +7596,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "دارایی Path باید به یک گره Node2D معتبر اشاره کند تا کار کند."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"دارایی Path باید به یک گره Viewport معتبر اشاره کند تا کار کند. این Viewport "
-"باید روی حالت render target تنظیم شود."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Viewport تنظیم شده در داریی path باید به صورت render target برای این اسپرایت "
-"تنظیم شود تا کار کند."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7504,6 +7666,14 @@ msgstr ""
"باید یک Ø´Ú©Ù„ برای CollisionShape ÙØ±Ø§Ù‡Ù… شده باشد تا عمل کند. Ù„Ø·ÙØ§ یک منبع Ø´Ú©Ù„ "
"برای آن ایجاد کنید!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr "یک منبع NavigationMesh باید برای یک گره تنظیم یا ایجاد شود تا کار کند."
@@ -7572,7 +7742,12 @@ msgstr "هشدار!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
-msgstr "Ù„Ø·ÙØ§ تأیید کنید..."
+msgstr "Ù„Ø·ÙØ§Ù‹ تأیید کنید…"
+
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "انتخاب حالت"
#: scene/gui/popup.cpp
msgid ""
@@ -7591,6 +7766,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(دیگر)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7611,7 +7790,7 @@ msgstr ""
#: scene/resources/dynamic_font.cpp
msgid "Error initializing FreeType."
-msgstr "خطا در ارزش‌دهی آغارین به FreeType."
+msgstr "خطا در ارزش‌دهی آغازین به FreeType."
#: scene/resources/dynamic_font.cpp
msgid "Unknown font format."
@@ -7623,7 +7802,46 @@ msgstr "خطای بارگذاری قلم."
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
-msgstr "اندازه‌ی قلم نامعتبر."
+msgstr "اندازهٔ قلم نامعتبر."
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "منبع"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "برو به خط"
+
+#~ msgid "Meta+"
+#~ msgstr "+Meta"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "ترجیحات"
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "تنها در قسمت انتخاب شده"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "تنها در قسمت انتخاب شده"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "دارایی Path باید به یک گره Viewport معتبر اشاره کند تا کار کند. این "
+#~ "Viewport باید روی حالت render target تنظیم شود."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Viewport تنظیم شده در داریی path باید به صورت render target برای این "
+#~ "اسپرایت تنظیم شود تا کار کند."
#~ msgid "Filter:"
#~ msgstr "صاÙÛŒ:"
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index 12cafa85fc..afa22fa263 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -3,20 +3,22 @@
# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
+# Bastian Salmela <bastian.salmela@gmail.com>, 2017.
# ekeimaja <ekeimaja@gmail.com>, 2017.
+# Jarmo Riikonen <amatrelan@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-08-25 14:41+0000\n"
-"Last-Translator: ekeimaja <ekeimaja@gmail.com>\n"
+"PO-Revision-Date: 2017-11-28 13:44+0000\n"
+"Last-Translator: Bastian Salmela <bastian.salmela@gmail.com>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/"
"godot/fi/>\n"
"Language: fi\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -40,22 +42,20 @@ msgid "Anim Change Transform"
msgstr "Vaihda animaation muunnosta"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Change Value"
-msgstr "Animaation muutosarvo"
+msgstr "Animaatio: muuta arvoa"
#: editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr ""
+msgstr "Anmaatio: Muuta kutsua"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Add Track"
-msgstr "Lisää animaatioraita"
+msgstr "Animaatio: Lisää raita"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr ""
+msgstr "Animaatio: Monista avaimet"
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
@@ -79,35 +79,37 @@ msgstr "Nimeä animaatioraita uudelleen"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr ""
+msgstr "Animaatio: Vaihda raidan interpolaatiota"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr ""
+msgstr "Animaatio: Muuta avainta tila"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Track Change Wrap Mode"
-msgstr ""
+msgstr "Animaatio: Muuta toisto tila"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr ""
+msgstr "Muokkaa noden käyrää"
#: editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr ""
+msgstr "Muokkaa valinnan käyrää"
#: editor/animation_editor.cpp
msgid "Anim Delete Keys"
msgstr "Poista avaimet"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Monista valinta"
#: editor/animation_editor.cpp
msgid "Duplicate Transposed"
-msgstr ""
+msgstr "Monista käänteisesti"
#: editor/animation_editor.cpp
msgid "Remove Selection"
@@ -188,12 +190,13 @@ msgid "Clean-Up Animation"
msgstr "Siivoa animaatio"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Create NEW track for %s and insert key?"
-msgstr ""
+msgstr "Luo uusi raita %s ja lisää avain?"
#: editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "Luo %d uutta raitaa ja lisää avaimet?"
#: editor/animation_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
@@ -206,19 +209,19 @@ msgstr "Luo"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "Animaatio: Luo ja lisää"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr ""
+msgstr "Animaatio: Lisää raita ja avain"
#: editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr ""
+msgstr "Animaatio: Lisää avain"
#: editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr ""
+msgstr "Vaihda animaation pituutta"
#: editor/animation_editor.cpp
#, fuzzy
@@ -226,20 +229,22 @@ msgid "Change Anim Loop"
msgstr "Vaihda animaation toistoa"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Create Typed Value Key"
-msgstr ""
+msgstr "Animaatio: Luo tyyppipohjainen arvo avain"
#: editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr ""
+msgstr "Animaatio: Lisää"
#: editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr ""
+msgstr "Animaatio: Skaalaa avaimia"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Add Call Track"
-msgstr ""
+msgstr "Animaatio: Lisää kutsu raita"
#: editor/animation_editor.cpp
msgid "Animation zoom."
@@ -255,11 +260,12 @@ msgstr "Animaation pituus (sekunteina)."
#: editor/animation_editor.cpp
msgid "Step (s):"
-msgstr ""
+msgstr "Askellus:"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Cursor step snap (in seconds)."
-msgstr ""
+msgstr "Kohdistimen tarttuminen (sekunneissa)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
@@ -287,7 +293,7 @@ msgstr "Raidan työkalut"
#: editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr ""
+msgstr "Mahdollistaa avainten muokkaamisen klikkaamalla."
#: editor/animation_editor.cpp
msgid "Anim. Optimizer"
@@ -315,7 +321,7 @@ msgstr "Valitse AnimationPlayer Scenepuusta muokataksesi animaatioita."
#: editor/animation_editor.cpp
msgid "Key"
-msgstr ""
+msgstr "Avain"
#: editor/animation_editor.cpp
msgid "Transition"
@@ -327,7 +333,7 @@ msgstr "Skaalaussuhde:"
#: editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr ""
+msgstr "Mistä nodesta kutsutaan funktiota?"
#: editor/animation_editor.cpp
msgid "Remove invalid keys"
@@ -431,7 +437,7 @@ msgstr "Taaksepäin"
#: editor/code_editor.cpp
msgid "Prompt On Replace"
-msgstr ""
+msgstr "Kysy vaihdettaessa"
#: editor/code_editor.cpp
msgid "Skip"
@@ -466,6 +472,8 @@ msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
+"Kohde metodia ei löytynyt! Määrittele voimassa oleva metodi tai kiinnitä "
+"skripti nodeen."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
@@ -485,12 +493,13 @@ msgid "Remove"
msgstr "Poista"
#: editor/connections_dialog.cpp
+#, fuzzy
msgid "Add Extra Call Argument:"
-msgstr ""
+msgstr "Lisää ylimääräinen argumentti kutsulle:"
#: editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr ""
+msgstr "Ylimääräiset argumentit:"
#: editor/connections_dialog.cpp
msgid "Path to Node:"
@@ -505,9 +514,8 @@ msgid "Deferred"
msgstr "Lykätty"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Oneshot"
-msgstr "Ainoa"
+msgstr "Ainutkertainen"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/export_template_manager.cpp
@@ -562,9 +570,8 @@ msgid "Favorites:"
msgstr "Suosikit:"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
-#, fuzzy
msgid "Recent:"
-msgstr "Viimeaikainen / Viimeaikaiset:"
+msgstr "Viimeaikaiset:"
#: editor/create_dialog.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -637,11 +644,19 @@ msgstr "Riippuvuusmuokkain"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr ""
+msgstr "Etsi korvaava resurssi:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Avaa"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid "Owners Of:"
-msgstr ""
+msgstr "Omistajat:"
#: editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
@@ -653,10 +668,13 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
+"Poistettavaksi merkittyjä tiedostoja tarvitaan muiden resurssien "
+"toimivuuteen.\n"
+"Poistetaanko silti? (ei mahdollisuutta kumota)"
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "Ei voida poistaa:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -671,9 +689,8 @@ msgid "Open Anyway"
msgstr "Avaa kuitenkin"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Which action should be taken?"
-msgstr "Mikä toiminto pitäisi tehdä? / Mitkä toiminnot"
+msgstr "Mikä toiminto pitäisi tehdä?"
#: editor/dependency_editor.cpp
msgid "Fix Dependencies"
@@ -697,8 +714,9 @@ msgid "Resources Without Explicit Ownership:"
msgstr "Resurssit, joilla ei ole selvää omistajaa:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
+#, fuzzy
msgid "Orphan Resource Explorer"
-msgstr ""
+msgstr "Orpojen resurssien selain"
#: editor/dependency_editor.cpp
msgid "Delete selected files?"
@@ -711,6 +729,16 @@ msgstr "Poista valitut tiedostot?"
msgid "Delete"
msgstr "Poista"
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Key"
+msgstr "Vaihda taulukon avainta"
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "Vaihda taulukon arvoa"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Kiitos Godot-yhteisöltä!"
@@ -721,16 +749,15 @@ msgstr "Kiitos!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Godot moottorin kehittäjät"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Project Founders"
-msgstr "Projektinhallinta"
+msgstr "Projektin perustajat"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "Pääkehittäjä"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
@@ -738,49 +765,47 @@ msgstr "Projektinhallinta"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "Kehittäjät"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Authors"
-msgstr "Tekijä:"
+msgstr "Tekijät"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Platinum sponsorit"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Kulta sponsorit"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Mini sponsorit"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Kulta lahjoittajat"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Hopea lahjoittajat"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "Kloonaa alas"
+msgstr "Pronssi lahjoittajat"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Lahjoittajat"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "Lisenssi"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "Kolmannen osapuolen lisenssi"
#: editor/editor_about.cpp
msgid ""
@@ -789,29 +814,30 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"Godot moottori käyttää useita kolmannen osapuolen ilmaisia ja avoimia "
+"kirjastoja, jotka kaikki ovat yhteensopivia sen MIT lisenssin kanssa. "
+"Seuraava tyhjentävä listaus sisältää kaikki tälläiset kolmannen osapuolen "
+"komponentit ja niiden vastaavat copyright ja lisenssi määritelmät."
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "Vakiot:"
+msgstr "Kaikki komponentit"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "Vakiot:"
+msgstr "Komponentit"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "Lisenssit"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "Virhe avattaessa pakettia, ei zip muotoinen."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Uncompressing Assets"
-msgstr "Purettu"
+msgstr "Puretaan assetteja"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
@@ -820,7 +846,7 @@ msgstr "Paketti asennettu onnistuneesti!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "Onnistui!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
@@ -828,35 +854,32 @@ msgid "Install"
msgstr "Asenna"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Installer"
-msgstr "Paketti asennettu onnistuneesti!"
+msgstr "Pakettien asentaja"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr ""
+msgstr "Kaiuttimiet"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Effect"
-msgstr "Lisää tyhjä"
+msgstr "Lisää efekti"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "Nimeä funktio uudelleen"
+msgstr "Nimeä väylä uudelleen"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
-msgstr ""
+msgstr "Ääniväylä sooloksi"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr ""
+msgstr "Mykistä ääniväylä"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "Käytä ääniväylän efektejä"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
@@ -864,37 +887,35 @@ msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "Lisää väylälle efekti"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "Siirrä väylän efektiä"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "Poista valitut"
+msgstr "Poista väylän efekti"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr ""
+msgstr "Ääniväylä, tartu ja vedä järjestelläksesi uudelleen."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr ""
+msgstr "Soolo"
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Mykkä"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr ""
+msgstr "Ohita"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus options"
-msgstr "Debug-asetukset"
+msgstr "Väylän asetukset"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
@@ -902,66 +923,56 @@ msgid "Duplicate"
msgstr "Monista"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "Nollaa lähennys"
+msgstr "Palauta äänenvoimakkuus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "Poista valitut"
+msgstr "Poista efekti"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Audio Bus"
-msgstr "Lisää väylä"
+msgstr "Lisää ääniväylä"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "Pääväylää ei voi poistaa!"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Audio Bus"
-msgstr "Poista Layout"
+msgstr "Poista ääniväylä"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Duplicate Audio Bus"
-msgstr "Monista animaatio"
+msgstr "Monista ääniväylä"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "Nollaa lähennys"
+msgstr "Palauta äänenvoimakkuus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Move Audio Bus"
-msgstr "Siirrä lisäyspainiketta"
+msgstr "Siirrä ääniväylää"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
-msgstr ""
+msgstr "Tallenna ääniväylän asettelu nimellä..."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout.."
-msgstr ""
+msgstr "Sijainti uudelle asettelulle..."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "Avaa ääniväylän asettelu"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "Tiedostoa 'res://default_bus_layout.tres' ei löytynyt."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Invalid file, not an audio bus layout."
-msgstr ""
-"Virheellinen tiedostolaajennus.\n"
-"Käytä .fnt -tiedostoa."
+msgstr "Virheellinen tiedosto. Tämä ei ole ääniväylän asettelu ensinkään."
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -969,7 +980,7 @@ msgstr "Lisää väylä"
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr ""
+msgstr "Luo uusi ääniväylän asettelu."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
@@ -977,9 +988,8 @@ msgid "Load"
msgstr "Lataa"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Load an existing Bus Layout."
-msgstr "Lataa olemassaoleva resurssi levyltä ja muokkaa sitä."
+msgstr "Lataa olemassaoleva väylän asettelu."
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -988,16 +998,15 @@ msgstr "Tallenna nimellä"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "Tallenna väylän asettelu tiedostoksi."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
-#, fuzzy
msgid "Load Default"
-msgstr "Oletus"
+msgstr "Lataa oletus"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "Lataa väylän oletusasettelu."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1010,14 +1019,20 @@ msgstr "Kelvolliset merkit:"
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing engine class name."
msgstr ""
+"Virheellinen nimi. Ei saa mennä päällekkäin olemassa olevan luokan nimen "
+"kanssa."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing buit-in type name."
msgstr ""
+"Virheellinen nimi. Ei saa mennä päällekkäin jo olemassa olevan, "
+"sisäänrakennetun tyypin nimen kanssa."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
+"Virheellinen nimi. Ei saa mennä päällekkäin jo olemassa olevan globaalin "
+"vakion nimen kanssa."
#: editor/editor_autoload_settings.cpp
msgid "Invalid Path."
@@ -1028,28 +1043,31 @@ msgid "File does not exist."
msgstr "Tiedostoa ei ole olemassa."
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Not in resource path."
-msgstr ""
+msgstr "Ei löytynyt resurssipolusta."
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Add AutoLoad"
-msgstr ""
+msgstr "Lisää automaattisesti ladattava"
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "Automaattisesti ladattava '%s' löytyi jo!"
#: editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "Nimeä automaattisesti ladattava uudelleen"
#: editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
msgstr ""
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Move Autoload"
-msgstr ""
+msgstr "Siirrä automaattisesti ladattavaa"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
@@ -1061,7 +1079,7 @@ msgstr "Ota käyttöön"
#: editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
-msgstr ""
+msgstr "Järjestele uudelleen automaattiset lataukset"
#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
#: scene/gui/file_dialog.cpp
@@ -1077,8 +1095,9 @@ msgid "Name"
msgstr "Nimi"
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Singleton"
-msgstr ""
+msgstr "Ainokainen"
#: editor/editor_autoload_settings.cpp
msgid "List:"
@@ -1086,7 +1105,7 @@ msgstr "Lista:"
#: editor/editor_data.cpp
msgid "Updating Scene"
-msgstr "Päivitetään sceneä"
+msgstr "Päivitetään skeneä"
#: editor/editor_data.cpp
msgid "Storing local changes.."
@@ -1094,11 +1113,11 @@ msgstr "Varastoidaan paikalliset muutokset..."
#: editor/editor_data.cpp
msgid "Updating scene.."
-msgstr "Päivitetään sceneä..."
+msgstr "Päivitetään skeneä..."
#: editor/editor_dir_dialog.cpp
msgid "Please select a base directory first"
-msgstr ""
+msgstr "Valitse ensin päähakemisto"
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
@@ -1142,19 +1161,18 @@ msgid "File Exists, Overwrite?"
msgstr "Tiedosto on jo olemassa, korvaa?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Luo kansio"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
-msgstr "Kaikki tunnistettu"
+msgstr "Kaikki tunnistetut"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Files (*)"
msgstr "Kaikki tiedostot (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Avaa"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Avaa tiedosto"
@@ -1223,7 +1241,7 @@ msgstr "Siirrä suosikkia ylös"
msgid "Move Favorite Down"
msgstr "Siirrä suosikkia alas"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Go to parent folder"
msgstr "Kansiota ei voitu luoda."
@@ -1309,15 +1327,15 @@ msgstr "Julkiset metodit:"
#: editor/editor_help.cpp
msgid "GUI Theme Items"
-msgstr ""
+msgstr "GUI teeman osat"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
-msgstr ""
+msgstr "GUI teeman osat:"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Signals:"
-msgstr ""
+msgstr "Signaalit:"
#: editor/editor_help.cpp
#, fuzzy
@@ -1362,6 +1380,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Tälle ei vielä löydy kuvailua. Voit auttaa meitä [color=$color][url="
+"$url]kirjoittamalla sellaisen[/url][/color]!"
#: editor/editor_help.cpp
#, fuzzy
@@ -1377,6 +1397,8 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Tälle metodille ei vielä löydy kuvailua. Voit auttaa meitä [color=$color]"
+"[url=$url]kirjoittamalla sellaisen[/url][/color]!"
#: editor/editor_help.cpp
msgid "Search Text"
@@ -1430,7 +1452,7 @@ msgstr "Virhe tallennettaessa."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Odottamaton loppu tiedostossa '%s'."
#: editor/editor_node.cpp
#, fuzzy
@@ -1486,7 +1508,7 @@ msgstr "Virhe tallennettaessa tilesetiä!"
#: editor/editor_node.cpp
msgid "Error trying to save layout!"
-msgstr ""
+msgstr "Virhe tallennettaessa asettelua!"
#: editor/editor_node.cpp
msgid "Default editor layout overridden."
@@ -1497,8 +1519,9 @@ msgid "Layout name not found!"
msgstr "Layoutin nimeä ei löytynyt!"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Restored default layout to base settings."
-msgstr ""
+msgstr "Palautettiin oletusasettelu alkuperäiseen muotoonsa."
#: editor/editor_node.cpp
msgid ""
@@ -1506,18 +1529,25 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Tämä resurssi kuuluu tuotuun skeneen, joten sitä ei voi suoraan muokata.\n"
+"Lue ohjeet skenejen tuomisesta, jotta ymmärrät paremmin tämän työkulun."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Tämä resurssi kuuluu skeneen josta on luotu instanssi, tai joka on "
+"periytyvä.\n"
+"Muutokset tähän eivät ole pysyviä, kun tallennat nykyisen skenen."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Tämä resurssi on tuotu, joten sitä ei voi muokata. Vaihda asetukset tuonti-"
+"paneelista ja tuo se uudelleen."
#: editor/editor_node.cpp
msgid ""
@@ -1526,6 +1556,30 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Tämä skene on tuotu, joten siihen tehtyjä muutoksia ei säilytetä.\n"
+"Instanssin, tai periytyvän skenen luominen mahdollistaa tämän.\n"
+"Ole hyvä ja lue tarkemmat ohjeet skenejen tuomisesta jotta ymmärrät paremmin "
+"tämän työnkulun."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Tämä on etä-objekti, joten siihen tehtyjä muutoksia ei säilytetä.\n"
+"Ole hyvä ja lue ohjeet debuggaamisesta ymmärtääksesi paremmin tämän "
+"työnkulun."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Laajenna kaikki"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Pienennä kaikki"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1549,8 +1603,9 @@ msgid "Make Built-In"
msgstr "Tee sisäänrakennettu"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Make Sub-Resources Unique"
-msgstr ""
+msgstr "Tee ali-resursseista yksilöllisiä."
#: editor/editor_node.cpp
msgid "Open in Help"
@@ -1607,11 +1662,11 @@ msgstr "Avaa kantascene"
#: editor/editor_node.cpp
msgid "Quick Open Scene.."
-msgstr ""
+msgstr "Nopea skenen avaus..."
#: editor/editor_node.cpp
msgid "Quick Open Script.."
-msgstr ""
+msgstr "Nopea skriptin avaus..."
#: editor/editor_node.cpp
#, fuzzy
@@ -1619,8 +1674,9 @@ msgid "Save & Close"
msgstr "Tallenna tiedosto"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "Tallennetaanko muutokset '%s' ennen sulkemista?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
@@ -1648,6 +1704,11 @@ msgid "Export Mesh Library"
msgstr "Tuo Mesh-kirjasto"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a root node."
+msgstr "Tätä toimintoa ei voi tehdä ilman Sceneä."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Tuo tileset"
@@ -1662,7 +1723,7 @@ msgstr "Nykyistä sceneä ei ole tallennettu. Avaa joka tapauksessa?"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
-msgstr ""
+msgstr "Ei voida uudelleen ladata skeneä jota ei ole vielä tallennettu."
#: editor/editor_node.cpp
msgid "Revert"
@@ -1674,7 +1735,7 @@ msgstr "Tätä toimintoa ei voida peruttaa. Palauta joka tapauksessa?"
#: editor/editor_node.cpp
msgid "Quick Run Scene.."
-msgstr ""
+msgstr "Nopea skenen käynnistys..."
#: editor/editor_node.cpp
msgid "Quit"
@@ -1696,17 +1757,21 @@ msgstr "Tallenna tiedosto"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "Tallenetaanko muutokset seuraaviin skeneihin ennen sulkemista?"
#: editor/editor_node.cpp
msgid "Save changes the following scene(s) before opening Project Manager?"
msgstr ""
+"Tallennetaanko muutokset seuraaviin skeneihin ennen Projektienhallinnan "
+"avaamista?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Tämä ominaisuus on wanhentunut. Tilanteita joissa virkistys täytyy pakottaa "
+"pidetään nykyään bugeina. Ole hyvä ja raportoi."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -1783,24 +1848,39 @@ msgstr "Vaihda Scenen välilehteä"
#: editor/editor_node.cpp
#, fuzzy
-msgid "%d more file(s)"
+msgid "%d more files or folders"
msgstr "%d muuta tiedostoa"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr ""
+#, fuzzy
+msgid "%d more folders"
+msgstr "%d muuta tiedostoa"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "%d more files"
+msgstr "%d muuta tiedostoa"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Telakan sijainti"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
-msgstr ""
+msgstr "Häiriötön tila"
#: editor/editor_node.cpp
msgid "Toggle distraction-free mode."
-msgstr ""
+msgstr "Käytä häiriötöntä tilaa."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Add a new scene."
+msgstr "Lisää uusia raitoja."
#: editor/editor_node.cpp
msgid "Scene"
-msgstr "Scene"
+msgstr "Näkymä"
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
@@ -1856,20 +1936,19 @@ msgstr "Muunna..."
#: editor/editor_node.cpp
msgid "MeshLibrary.."
-msgstr ""
+msgstr "MalliKirjasto..."
#: editor/editor_node.cpp
msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Peru"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Tee uudelleen"
@@ -1935,24 +2014,29 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
msgid "Visible Collision Shapes"
-msgstr ""
+msgstr "Näytä osuma-alueet"
#: editor/editor_node.cpp
msgid ""
"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
"running game if this option is turned on."
msgstr ""
+"Osuma-alueet ja raycast nodet (2D ja 3D) ovat näkyvillä peliä ajettaessa jos "
+"tämä on valittu."
#: editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr ""
+msgstr "Näkyvä navigaatio"
#: editor/editor_node.cpp
msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
msgstr ""
+"Navigaation muodot ja polygonit ovat näkyvillä peliä ajettaessa mikäli tämä "
+"on valittu."
#: editor/editor_node.cpp
msgid "Sync Scene Changes"
@@ -1971,12 +2055,17 @@ msgid "Sync Script Changes"
msgstr "Synkronoi skriptin muutokset"
#: editor/editor_node.cpp
+#, fuzzy
msgid ""
"When this option is turned on, any script that is saved will be reloaded on "
"the running game.\n"
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"Jos tämä on valittu, kaikki tallennetut skriptit ladataan uudelleen pelin "
+"käynnistyessä.\n"
+"Mikäli peli ajetaan etälaitteella, on tehokkaampaa käyttää "
+"verkkotiedostojärjestelmää ."
#: editor/editor_node.cpp
#, fuzzy
@@ -2001,24 +2090,24 @@ msgstr "Hallitse vietäviä Templateja"
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "Ohje"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
msgstr "Luokat"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Online Docs"
-msgstr "Sulje dokumentaatio"
+msgstr "Dokumentaatio"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Q&A"
-msgstr ""
+msgstr "Kysy&Vastaa"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "Ilmoita viasta"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -2029,9 +2118,8 @@ msgid "About"
msgstr "Tietoja"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Play the project."
-msgstr "Toista projekti"
+msgstr "Käynnistä projekti"
#: editor/editor_node.cpp
#, fuzzy
@@ -2056,7 +2144,7 @@ msgstr "Pysäytä"
#: editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr ""
+msgstr "Käynnistä muokattu skene."
#: editor/editor_node.cpp
msgid "Play Scene"
@@ -2064,15 +2152,15 @@ msgstr "Toista Scene"
#: editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "Valitse ja käynnistä skene"
#: editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "Valitse ja käynnistä skene"
#: editor/editor_node.cpp
msgid "Spins when the editor window repaints!"
-msgstr ""
+msgstr "Pyörii kun editorin ikkuna päivittyy!"
#: editor/editor_node.cpp
msgid "Update Always"
@@ -2108,11 +2196,11 @@ msgstr "Tallenna nimellä..."
#: editor/editor_node.cpp
msgid "Go to the previous edited object in history."
-msgstr ""
+msgstr "Edellinen editoitu objekti."
#: editor/editor_node.cpp
msgid "Go to the next edited object in history."
-msgstr ""
+msgstr "Seuraava editoitu objekti."
#: editor/editor_node.cpp
msgid "History of recently edited objects."
@@ -2133,20 +2221,20 @@ msgid "Import"
msgstr "Tuo"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "Tiedostojärjestelmä"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Node"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Tiedostojärjestelmä"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Tuloste"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "Älä tallenna"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
@@ -2200,7 +2288,7 @@ msgstr "Avaa editorissa"
msgid "Open Script Editor"
msgstr "Avaa editorissa"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
#, fuzzy
msgid "Open Asset Library"
msgstr "Vie kirjasto"
@@ -2217,7 +2305,7 @@ msgstr "Avaa editorissa"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
-msgstr ""
+msgstr "Luodaan mallien esikatseluita"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
@@ -2288,11 +2376,11 @@ msgstr "Itse"
#: editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr ""
+msgstr "Ruutu #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Valitse laite listasta"
#: editor/editor_run_native.cpp
msgid ""
@@ -2310,7 +2398,7 @@ msgstr "Muokattu Scene on jo olemassa."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr ""
+msgstr "Ei voitu luoda instanssia skriptistä:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
@@ -2365,6 +2453,10 @@ msgid "(Current)"
msgstr "(Nykyinen)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Noudetaan peilipalvelimia, hetkinen..."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "Poista mallin versio '%s'?"
@@ -2399,6 +2491,110 @@ msgid "Importing:"
msgstr "Tuodaan:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Yhdistä..."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Ei vastausta."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Pyyntö epäonnistui."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "Ei voitu kirjoittaa tiedostoa:\n"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Complete."
+msgstr "Lataa"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "Virhe tallennettaessa atlas-kuvaa:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "Yhdistä..."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Disconnected"
+msgstr "Katkaise yhteys"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Resolving"
+msgstr "Tallennetaan..."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Yhdistä..."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Ei voitu yhdistää"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "Yhdistä"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Pyydetään..."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "Lataa"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Yhteysvirhe"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Virhe SSL kättelyssä"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "Nykyinen versio:"
@@ -2419,24 +2615,34 @@ msgid "Select template file"
msgstr "Valitse mallin tiedosto"
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Export Template Manager"
-msgstr ""
+msgstr "Vientimallien hallinta"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Poista malli"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Valitse peilipalvelin listasta: "
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "Ei voida navigoida '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Ruudukkonäkymä esikatselukuvilla"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Listanäkymä"
#: editor/filesystem_dock.cpp
msgid ""
@@ -2445,13 +2651,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
-"\n"
-"Source: "
-msgstr "Lähde:"
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2471,12 +2670,14 @@ msgid "Unable to update dependencies:\n"
msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:"
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "No name provided"
-msgstr ""
+msgstr "Nimeä ei annettu"
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "Annettu nimi sisältää laittomia kirjaimia"
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -2490,7 +2691,7 @@ msgstr "Kelvolliset merkit:"
#: editor/filesystem_dock.cpp
msgid "A file or folder with this name already exists."
-msgstr ""
+msgstr "Tällä nimellä löytyy jo kansio tai tiedosto."
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -2524,9 +2725,8 @@ msgid "Move To.."
msgstr "Siirrä..."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "Luo kansio"
+msgstr "Luo kansio..."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2558,17 +2758,20 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
-msgstr ""
+msgstr "Merkitse kansio suosikkeihin"
#: editor/filesystem_dock.cpp
msgid "Instance the selected scene(s) as child of the selected node."
msgstr ""
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
+"Selataan tiedostoja,\n"
+"Hetkinen..."
#: editor/filesystem_dock.cpp
msgid "Move"
@@ -2598,28 +2801,34 @@ msgid "Import with Separate Animations"
msgstr "Tuo animaatiot..."
#: editor/import/resource_importer_scene.cpp
+#, fuzzy
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "Tuo erillisten materiaalien kanssa"
#: editor/import/resource_importer_scene.cpp
+#, fuzzy
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "Tuo erillisten objektien kanssa"
#: editor/import/resource_importer_scene.cpp
+#, fuzzy
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "Tuo erillisten objektien ja materiaalien kanssa"
#: editor/import/resource_importer_scene.cpp
+#, fuzzy
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "Tuo erillisten objektien ja animaatioiden kanssa"
#: editor/import/resource_importer_scene.cpp
+#, fuzzy
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "Tuo erillisten materiaalien ja animaatioiden kanssa"
#: editor/import/resource_importer_scene.cpp
+#, fuzzy
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "Tuo erillisten objektien, materiaalien ja animaatioiden kanssa"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -2641,7 +2850,7 @@ msgstr "Tuodaan Scene..."
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script.."
-msgstr ""
+msgstr "Suorita valitsemasi skripti..."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
@@ -2723,8 +2932,8 @@ msgid "Remove Poly And Point"
msgstr "Poista polygoni ja piste"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+#, fuzzy
+msgid "Create a new polygon from scratch"
msgstr "Luo uusi piste tyhjästä."
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2735,13 +2944,18 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Poista piste"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr ""
+msgstr "Toista automaattisesti"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr ""
+msgstr "Uuden animaation nimi:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
@@ -2836,7 +3050,7 @@ msgstr "Toista valittu animaatio nykyisestä kohdasta. (D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
-msgstr ""
+msgstr "Animaation sijainti (sekunneissa)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
@@ -2864,7 +3078,7 @@ msgstr "Näytä lista animaatioista soittimessa."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr ""
+msgstr "Toista automaattisesti"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Target Blend Times"
@@ -2879,6 +3093,57 @@ msgid "Copy Animation"
msgstr "Kopioi animaatio"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Kuvaus:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Liitä"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Tekstuuri"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Luo uusi animaatio"
@@ -3072,20 +3337,11 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Can't connect."
-msgstr "Yhdistä..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Can't connect to host:"
msgstr "Yhdistä Nodeen:"
@@ -3094,31 +3350,15 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Request failed, return code:"
msgstr "Pyydetty tiedostomuoto tuntematon:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3149,16 +3389,6 @@ msgstr "Tallennetaan..."
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Connecting.."
-msgstr "Yhdistä..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "Testaus"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
msgstr "Virhe tallennettaessa resurssia!"
@@ -3244,7 +3474,7 @@ msgstr "Esikatselu"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
-msgstr ""
+msgstr "Määrittele tarttuminen"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
@@ -3273,6 +3503,39 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "Luo uusi skripti"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Poista muuttuja"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Move horizontal guide"
+msgstr "Siirrä pistettä käyrällä"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "Luo uusi skripti"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Poista virheelliset avaimet"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3350,7 +3613,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Use Snap"
-msgstr ""
+msgstr "Käytä tarttumista"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3359,15 +3622,15 @@ msgstr "Animaation asetukset"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to grid"
-msgstr ""
+msgstr "Tartu ruudukkoon"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
-msgstr ""
+msgstr "Tartu käännettäessä"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap..."
-msgstr ""
+msgstr "Määrittele tarttuminen..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
@@ -3375,11 +3638,11 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr ""
+msgstr "Tartu pikseleihin"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "Älykäs tarttuminen"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3391,18 +3654,27 @@ msgid "Snap to node anchor"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Snap to node sides"
-msgstr ""
+msgstr "Tartu noden sivustoihin"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Snap to other nodes"
-msgstr ""
+msgstr "Tartu muihin nodeihin"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Snap to guides"
+msgstr "Laajenna Parentiin"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Lukitse valitut objektit paikalleen (ei voi liikutella)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Poista valittujen objektien lukitus (voi liikutella)."
@@ -3428,11 +3700,11 @@ msgstr "Näytä luut"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr ""
+msgstr "Luo IK ketju"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
-msgstr ""
+msgstr "Tyhjennä IK ketju"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3451,9 +3723,12 @@ msgid "Show helpers"
msgstr "Näytä luut"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show rulers"
-msgstr "Näytä luut"
+msgstr "Näytä viivaimet"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Näytä apuviivat"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3464,38 +3739,37 @@ msgid "Frame Selection"
msgstr "Framen valinta"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Tallenna Layout"
+msgstr "Asettelu"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
-msgstr ""
+msgstr "Lisää keyframeja"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key"
-msgstr ""
+msgstr "Lisää keyframe"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr ""
+msgstr "Lisää keyframe (olemassaolevalle raidalle)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
-msgstr ""
+msgstr "Kopioi asento"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr ""
+msgstr "Tyhjennä asento"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "Rahaa pistettä hiiren sijainnista"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "Siirrä pistettä"
+msgstr "Aseta piste hiiren kohdalle"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -3656,6 +3930,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3688,6 +3966,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Luo uusi piste tyhjästä."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Muokkaa olemassaolevaa polygonia:"
@@ -3703,58 +3985,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr "OHP: Pyyhi piste."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "Poista piste Line2D:stä"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Lisää piste Line2D:hen"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Siirrä pistettä LIne 2D:ssä"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Valitse pisteet"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Klikkaa: lisää piste"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Oikea klikkaus: Poista piste"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Lisää piste (tyhjyydessä)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Poista piste"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4164,16 +4394,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Valitse pisteet"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Klikkaa: lisää piste"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Oikea klikkaus: Poista piste"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Lisää piste (tyhjyydessä)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Poista piste"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Sulje käyrä"
@@ -4278,11 +4538,11 @@ msgstr "Tyhjennä UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap"
-msgstr ""
+msgstr "Tartu"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Enable Snap"
-msgstr ""
+msgstr "Käytä tarttumista"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid"
@@ -4316,7 +4576,6 @@ msgstr "Lataa resurssi"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4362,6 +4621,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Lajittele:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Siirrä ylös"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Siirrä alas"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Seuraava skripti"
@@ -4413,6 +4687,10 @@ msgstr "Sulje dokumentaatio"
msgid "Close All"
msgstr "Sulje kaikki"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Aja"
@@ -4424,13 +4702,11 @@ msgstr "Näytä suosikit"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Etsi..."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Etsi seuraava"
@@ -4541,33 +4817,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Leikkaa"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Kopioi"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Valitse kaikki"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Siirrä ylös"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Siirrä alas"
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4590,6 +4855,23 @@ msgid "Clone Down"
msgstr "Kloonaa alas"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Mene riville"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4637,12 +4919,10 @@ msgid "Convert To Lowercase"
msgstr "Muunna..."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Etsi edellinen"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Korvaa..."
@@ -4651,7 +4931,6 @@ msgid "Goto Function.."
msgstr "Mene funktioon..."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Mene riville..."
@@ -4816,6 +5095,16 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Scaling: "
+msgstr "Skaalaus:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Siirtymä"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Kierto %s astetta."
@@ -4901,6 +5190,10 @@ msgid "Vertices"
msgstr "Ominaisuudet:"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Kohdista näkymään"
@@ -4933,7 +5226,17 @@ msgstr "Näytä ruudukko"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Information"
-msgstr ""
+msgstr "Näytä tiedot"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr " Tiedostot"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "Skaalaa valintaa"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
@@ -5073,12 +5376,17 @@ msgid "Tool Scale"
msgstr "Skaalaus:"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Siirry koko näytön tilaan"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Muunna"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Configure Snap.."
-msgstr ""
+msgstr "Määrittele tarttuminen..."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Local Coords"
@@ -5098,7 +5406,7 @@ msgstr "2 näyttöruutua"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "2 Viewports (Alt)"
-msgstr ""
+msgstr "2 näyttöruutua (Alt)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "3 Viewports"
@@ -5106,11 +5414,11 @@ msgstr "3 näyttöruutua"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "3 Viewports (Alt)"
-msgstr ""
+msgstr "3 Näyttöruutua (Alt)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "4 Viewports"
-msgstr ""
+msgstr "4 Näyttöruutua"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
@@ -5127,19 +5435,19 @@ msgstr "Asetukset"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Settings"
-msgstr ""
+msgstr "Tarttumisen asetukset"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translate Snap:"
-msgstr ""
+msgstr "Siirrettäessä:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Snap (deg.):"
-msgstr ""
+msgstr "Käännettäessä (aste):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Snap (%):"
-msgstr ""
+msgstr "Muutettaessa kokoa (%):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Viewport Settings"
@@ -5263,7 +5571,7 @@ msgstr "Tekstuurialue"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Snap Mode:"
-msgstr ""
+msgstr "Tarttumisen tila:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "<None>"
@@ -5275,7 +5583,7 @@ msgstr ""
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Grid Snap"
-msgstr ""
+msgstr "Tartu ruudukkoon"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Auto Slice"
@@ -5355,6 +5663,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5534,7 +5846,7 @@ msgid "Runnable"
msgstr "Suoritettava"
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5811,6 +6123,12 @@ msgstr "Käynnistä uudelleen (s):"
msgid "Can't run project"
msgstr "Yhdistä..."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Näppäin... "
@@ -5844,10 +6162,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5970,13 +6284,12 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Asetukset"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6131,7 +6444,7 @@ msgstr ""
#: editor/property_editor.cpp
msgid "Pick a Viewport"
-msgstr ""
+msgstr "Valitse näyttöruutu"
#: editor/property_editor.cpp
msgid "Ease In"
@@ -6456,6 +6769,16 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Poista"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Local"
+msgstr "Skaalaus:"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6649,6 +6972,11 @@ msgid "Attach Node Script"
msgstr "Liitä Noden skripti"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Poista"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Tavu(j)a:"
@@ -6705,18 +7033,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6850,49 +7166,49 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6907,16 +7223,26 @@ msgid "GridMap Duplicate Selection"
msgstr "Monista valinta"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Grid Map"
+msgstr "Ruudukko"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Snap View"
msgstr "Huippunäkymä"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+#, fuzzy
+msgid "Previous Floor"
+msgstr "Edellinen välilehti"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6991,13 +7317,8 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Pelkkä valinta"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Pelkkä valinta"
+msgid "Clear Selection"
+msgstr "Valinta keskikohtaan"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7124,7 +7445,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7132,7 +7453,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7140,7 +7461,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7375,12 +7696,23 @@ msgid "Could not write file:\n"
msgstr "Ei voitu kirjoittaa tiedostoa:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Invalid export template:\n"
+msgstr "Hallitse vietäviä Templateja"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
msgstr "Ei voitu lukea tiedostoa:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
-msgstr ""
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
+msgstr "Ei voitu lukea tiedostoa:\n"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7473,18 +7805,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "Polku täytyy olla määritetty toimivaan Node2D solmuun toimiakseen."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7543,6 +7863,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7607,6 +7935,11 @@ msgstr "Huomio!"
msgid "Please Confirm..."
msgstr "Ole hyvä ja vahvista..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Valitse metodi"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7627,11 +7960,18 @@ msgstr ""
"Käytä containeria lapsena (VBox, HBox, jne), tai Control:ia ja aseta haluttu "
"minimikoko manuaalisesti."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
+#, fuzzy
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
"> Default Environment) could not be loaded."
msgstr ""
+"Projektin asetuksissa määriteltyä oletusympäristöä (Renderöinti -> Näkymä -"
+"> Oletusympäristö) ei voitu ladata."
#: scene/main/viewport.cpp
msgid ""
@@ -7661,6 +8001,36 @@ msgstr "Virhe fontin latauksessa."
msgid "Invalid font size."
msgstr "Virheellinen fonttikoko."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "Ei voida navigoida '"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "Lähde:"
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Poista piste Line2D:stä"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Lisää piste Line2D:hen"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Siirrä pistettä LIne 2D:ssä"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Asetukset"
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Pelkkä valinta"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Pelkkä valinta"
+
#~ msgid "Filter:"
#~ msgstr "Suodatin:"
@@ -7679,9 +8049,6 @@ msgstr "Virheellinen fonttikoko."
#~ msgid "Removed:"
#~ msgstr "Poistettu:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Virhe tallennettaessa atlas-kuvaa:"
-
#~ msgid "Error loading scene."
#~ msgstr "Virhe ladatessa Sceneä."
@@ -7984,9 +8351,6 @@ msgstr "Virheellinen fonttikoko."
#~ msgid "Import Languages:"
#~ msgstr "Tuo kielet:"
-#~ msgid "Translation"
-#~ msgstr "Siirtymä"
-
#~ msgid "Transfer to Lightmaps:"
#~ msgstr "Muunna Lightmapiksi:"
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index 9e2f80498d..ddc6039dcc 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -4,30 +4,38 @@
# This file is distributed under the same license as the Godot source code.
#
# Antoine Carrier <ac.g392@gmail.com>, 2017.
+# ARocherVj <a.rocher.vj@gmail.com>, 2017.
# Brice <bbric@free.fr>, 2016.
# Chenebel Dorian <LoubiTek54@gmail.com>, 2016-2017.
# derderder77 <derderder77380@gmail.com>, 2016.
# finkiki <specialpopol@gmx.fr>, 2016.
# Gilles Roudiere <gilles.roudiere@gmail.com>, 2017.
# Hugo Locurcio <hugo.l@openmailbox.org>, 2016-2017.
+# Kanabenki <lucien.menassol@gmail.com>, 2017.
# keltwookie <keltwookie@protonmail.com>, 2017.
+# Luc Stepniewski <lior@gradstein.info>, 2017.
# Marc <marc.gilleron@gmail.com>, 2016-2017.
# Nathan Lovato <nathan.lovato.art@gmail.com>, 2017.
+# Nicolas <flaithotw@gmail.com>, 2017.
# Nicolas Lehuen <nicolas@lehuen.com>, 2016.
+# Nobelix <noe.le.cam@laposte.net>, 2017.
# Omicron <tritonic.dev@gmail.com>, 2016.
# Onyx Steinheim <thevoxelmanonyx@gmail.com>, 2016.
+# Przemyslaw Gasinski <gasinski.przemek@protonmail.ch>, 2017.
# rafeu <duchainer@gmail.com>, 2016-2017.
# Rémi Verschelde <rverschelde@gmail.com>, 2016-2017.
# Robin Arys <robinarys@hotmail.com>, 2017.
# Roger BR <drai_kin@hotmail.com>, 2016.
# Thomas Baijot <thomasbaijot@gmail.com>, 2016.
+# Tommy Melançon-Roy <tommel1234@hotmail.com>, 2017.
+# Xananax <xananax@yelostudio.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2017-10-25 22:46+0000\n"
-"Last-Translator: Robin Arys <robinarys@hotmail.com>\n"
+"PO-Revision-Date: 2017-11-27 16:46+0000\n"
+"Last-Translator: anonymous <>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot/fr/>\n"
"Language: fr\n"
@@ -35,7 +43,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -118,6 +126,7 @@ msgid "Anim Delete Keys"
msgstr "Anim Supprimer Clés"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Dupliquer la sélection"
@@ -655,6 +664,13 @@ msgstr "Éditeur de dépendances"
msgid "Search Replacement Resource:"
msgstr "Recherche ressource de remplacement :"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Ouvrir"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Propriétaires de :"
@@ -662,8 +678,7 @@ msgstr "Propriétaires de :"
#: editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
msgstr ""
-"Supprimer les fichiers sélectionnés de ce projet ? (pas d'annulation "
-"possible)"
+"Supprimer les fichiers sélectionnés de ce projet ? (annulation impossible)"
#: editor/dependency_editor.cpp
msgid ""
@@ -673,12 +688,11 @@ msgid ""
msgstr ""
"Les fichiers qui vont être supprimés sont utilisés par d'autres ressources "
"pour leur fonctionnement.\n"
-"Les supprimer tout de même ? (pas d'annulation possible)"
+"Les supprimer tout de même ? (annulation impossible)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Cannot remove:\n"
-msgstr "Impossible à résoudre."
+msgstr "Impossible à enlever :\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -706,9 +720,7 @@ msgstr "Erreurs de chargement !"
#: editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
-"Supprimer de manière permanente %d objet(s) ? (Impossible de revenir en "
-"arrière !)"
+msgstr "Supprimer de manière permanente %d objet(s) ? (Annulation impossible!)"
#: editor/dependency_editor.cpp
msgid "Owns"
@@ -733,13 +745,21 @@ msgstr "Supprimer les fichiers sélectionnés ?"
msgid "Delete"
msgstr "Supprimer"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Modifier la clé du dictionnaire"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Modifier valeur du dictionnaire"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "La communauté Godot vous dit merci !"
#: editor/editor_about.cpp
msgid "Thanks!"
-msgstr "Merci!"
+msgstr "Merci !"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -767,32 +787,31 @@ msgstr "Auteurs"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Sponsors Platine"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Sponsors Or"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Mini Sponsors"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Donateurs Or"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Donateurs Argent"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "Cloner en dessous"
+msgstr "Donateurs Bronze"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Donateurs"
#: editor/editor_about.cpp
msgid "License"
@@ -918,9 +937,8 @@ msgid "Duplicate"
msgstr "Dupliquer"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "Réinitialiser le zoom"
+msgstr "Réinitialiser le volume"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
@@ -943,9 +961,8 @@ msgid "Duplicate Audio Bus"
msgstr "Dupliquer le transport audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "Réinitialiser le zoom"
+msgstr "Réinitialiser le volume de bus"
#: editor/editor_audio_buses.cpp
msgid "Move Audio Bus"
@@ -1154,6 +1171,11 @@ msgid "File Exists, Overwrite?"
msgstr "Le fichier existe, l'écraser ?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Créer un dossier"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Tous les types de fichiers reconnus"
@@ -1161,12 +1183,6 @@ msgstr "Tous les types de fichiers reconnus"
msgid "All Files (*)"
msgstr "Tous les fichiers (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Ouvrir"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Ouvrir un fichier"
@@ -1233,10 +1249,9 @@ msgstr "Déplacer le favori vers le haut"
msgid "Move Favorite Down"
msgstr "Déplacer le favori vers le bas"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "Impossible de créer le dossier."
+msgstr "Aller au dossier parent"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1244,12 +1259,12 @@ msgstr "Répertoires et fichiers :"
#: editor/editor_file_dialog.cpp
msgid "Preview:"
-msgstr "Aperçu:"
+msgstr "Aperçu :"
#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
#: scene/gui/file_dialog.cpp
msgid "File:"
-msgstr "Fichier:"
+msgstr "Fichier :"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Must use a valid extension."
@@ -1297,27 +1312,24 @@ msgid "Brief Description:"
msgstr "Brève description :"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Membres :"
+msgstr "Membres"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "Membres :"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "Méthodes publiques :"
+msgstr "Méthodes Publiques"
#: editor/editor_help.cpp
msgid "Public Methods:"
msgstr "Méthodes publiques :"
#: editor/editor_help.cpp
-#, fuzzy
msgid "GUI Theme Items"
-msgstr "Items de thème GUI :"
+msgstr "Items de thème GUI"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
@@ -1328,36 +1340,32 @@ msgid "Signals:"
msgstr "Signaux :"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Recensements :"
+msgstr "Énumérations"
#: editor/editor_help.cpp
msgid "Enumerations:"
-msgstr "Recensements:"
+msgstr "Recensements :"
#: editor/editor_help.cpp
msgid "enum "
msgstr "enum_ "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "Constantes :"
+msgstr "Constantes"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr "Constantes :"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "Description :"
+msgstr "Description"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Properties"
-msgstr "Propriétés :"
+msgstr "Propriétés"
#: editor/editor_help.cpp
msgid "Property Description:"
@@ -1368,11 +1376,12 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Il n'y a pour l'instant aucune description de cette propriété. Aidez-nous en "
+"en [color=$color][url=$url]ajoutant une[/url][/color]!"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "Liste des méthodes :"
+msgstr "Méthodes :"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1383,6 +1392,8 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Pas de description disponible pour cette méthode. [color=$color][url="
+"$url]Contribuez[/url][/color] pour nous aider!"
#: editor/editor_help.cpp
msgid "Search Text"
@@ -1390,7 +1401,7 @@ msgstr "Chercher du texte"
#: editor/editor_log.cpp
msgid "Output:"
-msgstr "Sortie:"
+msgstr "Sortie :"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
@@ -1424,28 +1435,24 @@ msgid "Error while saving."
msgstr "Erreur lors de l'enregistrement."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "Impossible d'opérer sur « .. »"
+msgstr "Impossible d'ouvrir '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "Erreur lors de l'enregistrement."
+msgstr "Erreur lors de l'analyse de '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Fin de fichier inattendue '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Missing '%s' or its dependencies."
-msgstr "La scène « %s » a des dépendences cassées :"
+msgstr "Fichier '%s' ou dépendances manquantes."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "Erreur lors de l'enregistrement."
+msgstr "Erreur lors du chargement de '%s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1512,18 +1519,27 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Cette ressource appartient à une scène qui a été importée, elle n'est donc "
+"pas éditable.\n"
+"Veuillez lire la documentation concernant l'import de scènes afin de mieux "
+"comprendre son déroulement."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Cette ressource appartient a une scène qui a été instanciée ou héritée.\n"
+"Ses changements ne seront pas retenus lors de la sauvegarde de la scène "
+"actuelle."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Cette ressource a été importée, aucune modification n’est possible. Modifiez "
+"ses paramètres dans le menu d'importation et, ensuite, réimportez-la."
#: editor/editor_node.cpp
msgid ""
@@ -1532,6 +1548,31 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Cette scène a été importée, les changements ne seront donc pas conservés.\n"
+"L'instancier ou en hériter permettra de faire ces changements\n"
+"Veuillez lire la documentation concernant l'importation des scènes afin de "
+"mieux comprendre ce déroulement."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Ceci est un objet distant, les changements ne seront donc pas conservés.\n"
+"Veuillez lire la documentation concernant le débogage afin de mieux "
+"comprendre ce déroulement."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Développer tout"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Réduire tout"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1656,6 +1697,10 @@ msgid "Export Mesh Library"
msgstr "Exporter une bibliothèque de maillages"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Cette opération ne peut être réalisée sans nœud racine."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Exporter un ensemble de tuiles"
@@ -1716,37 +1761,43 @@ msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Cette option est dépréciée. Les situations dans lesquelles un "
+"rafraîchissement doit être forcé sont désormais considérés comme bug. "
+"Veuillez le signaler."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
msgstr "Choisir une scène principale"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "impossible d'activer le plugin depuis :"
+msgstr ""
+"Impossible d'activer le plugin depuis : '%s' la lecture de la configuration "
+"a échoué."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
"Impossible de trouver le champ de script pour le plugin dans : 'res://addons/"
+"%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Impossible de charger le script d'ajout depuis le chemin :"
+msgstr ""
+"Impossible de charger le script de l’extension depuis le chemin : '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "Impossible de charger le script d'ajout depuis le chemin :"
+msgstr ""
+"Impossible de charger le script de l'addon depuis le chemin : '%s' Le type "
+"de base n'est pas EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "Impossible de charger le script d'ajout depuis le chemin :"
+msgstr ""
+"Impossible de charger le script de l’extension depuis le chemin : '%s' Le "
+"script n'est pas en mode outil."
#: editor/editor_node.cpp
msgid ""
@@ -1776,9 +1827,8 @@ msgid "Scene '%s' has broken dependencies:"
msgstr "La scène « %s » a des dépendences cassées :"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Clear Recent Scenes"
-msgstr "Effacer les fichiers récents"
+msgstr "Retirer les scènes récentes."
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -1798,12 +1848,20 @@ msgid "Switch Scene Tab"
msgstr "Basculer entre les onglets de scène"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr "%d fichier(s) supplémentaire(s)"
+msgid "%d more files or folders"
+msgstr "%d fichiers ou dossiers supplémentaires"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d fichier(s) ou dossier(s) supplémentaire(s)"
+msgid "%d more folders"
+msgstr "%d dossier(s) supplémentaire(s)"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d fichiers supplémentaires"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Position du dock"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1814,6 +1872,10 @@ msgid "Toggle distraction-free mode."
msgstr "Basculer vers mode sans-distraction."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Ajouter une nouvelle scène."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Scène"
@@ -1878,13 +1940,12 @@ msgid "TileSet.."
msgstr "TileSet…"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Annuler"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Refaire"
@@ -2154,9 +2215,8 @@ msgid "Object properties."
msgstr "Propriétés de l'objet."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Changes may be lost!"
-msgstr "Changer le groupe d'images"
+msgstr "Les changements risquent d’être perdus !"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2164,14 +2224,14 @@ msgid "Import"
msgstr "Importer"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "Système de fichiers"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Nœud"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Système de fichiers"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Sortie"
@@ -2227,7 +2287,7 @@ msgstr "Ouvrir éditeur 3D"
msgid "Open Script Editor"
msgstr "Ouvrir éditeur de script"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "Ouvrir bibliothèque de ressource"
@@ -2240,9 +2300,8 @@ msgid "Open the previous Editor"
msgstr "Ouvrir éditeur précédant"
#: editor/editor_plugin.cpp
-#, fuzzy
msgid "Creating Mesh Previews"
-msgstr "Création de la bibliothèque de maillages"
+msgstr "Création des prévisualisations des maillages"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
@@ -2294,9 +2353,8 @@ msgid "Frame %"
msgstr "% d'image"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "Frame fixe %"
+msgstr "Frame physique %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2391,6 +2449,10 @@ msgid "(Current)"
msgstr "(Actuel)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Récupération des miroirs, veuillez patienter…"
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "Supprimer la version '%s' du modèle ?"
@@ -2427,6 +2489,104 @@ msgid "Importing:"
msgstr "Importation :"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Aucun lien de téléchargement n'a été trouvé pour cette version. Le "
+"téléchargement direct est uniquement disponible pour les versions "
+"officielles."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Impossible à résoudre."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Connection impossible."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Pas de réponse."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Req. a Échoué."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Boucle de Redirection."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Échec:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Impossible d'écrire le fichier."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Téléchargement terminé."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Erreur lors de la requête de l’URL :"
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Connexion au miroir…"
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Déconnecté"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Résolution"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Resolve"
+msgstr "Impossible à résoudre."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Connexion en cours.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Connexion impossible"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Connecté"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Envoi d'une requête.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Téléchargement en cours"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Erreur de connexion"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Erreurs de la négociation SSL"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "Version courante :"
@@ -2450,6 +2610,14 @@ msgstr "Sélectionner le fichier de modèle"
msgid "Export Template Manager"
msgstr "Gestionnaire d'export de modèles"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Télécharger les modèles"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Sélectionner un miroir depuis la liste : "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
@@ -2457,83 +2625,69 @@ msgstr ""
"sera pas sauvé !"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "Ne peux pas acceder à '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "Impossible d'accédez à '%s' car celui-ci n'a pas été trouvé !"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Afficher les éléments sous forme de grille de vignettes"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Afficher les éléments sous forme de liste"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-msgid ""
"\n"
-"Source: "
-msgstr ""
-"\n"
-"Source : "
+"Statut : L'importation du fichier a échoué. Veuillez corriger le fichier et "
+"le réimporter manuellement."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move/rename resources root."
-msgstr "Impossible de charger ou traiter la police source."
+msgstr "Impossible de déplacer / renommer les ressources root."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move a folder into itself.\n"
-msgstr "Impossible d'importer un fichier par-dessus lui-même :"
+msgstr "Impossible de déplacer un dossier dans lui-même.\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "Erreur lors du déplacement du répertoire :\n"
+msgstr "Erreur lors du déplacement :\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "La scène « %s » a des dépendences cassées :"
+msgstr "Impossible de mettre à jour les dépendences :\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "Aucun nom fourni"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "Le nom fourni contient des caractères invalides"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "No name provided."
-msgstr "Renommer ou déplacer…"
+msgstr "Aucun nom renseigné."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "Caractères valides :"
+msgstr "Le nom contient des caractères invalides."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "A file or folder with this name already exists."
-msgstr "Le nom du groupe existe déjà !"
+msgstr "Un fichier ou un dossier avec ce nom existe déjà."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Renommer la variable"
+msgstr "Renommer le fichier :"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming folder:"
-msgstr "Renommer le nœud"
+msgstr "Renommer le dossier :"
#: editor/filesystem_dock.cpp
msgid "Expand all"
@@ -2548,18 +2702,16 @@ msgid "Copy Path"
msgstr "Copier le chemin"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Rename.."
-msgstr "Renommer"
+msgstr "Renommer.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
msgstr "Déplacer vers…"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "Créer un dossier"
+msgstr "Nouveau dossier.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2629,9 +2781,8 @@ msgid "Import as Single Scene"
msgstr "Importer comme scène unique"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Animations"
-msgstr "Importer avec matériaux séparés"
+msgstr "Importer avec les animations séparées"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
@@ -2646,19 +2797,16 @@ msgid "Import with Separate Objects+Materials"
msgstr "Importer avec objets+matériaux séparés"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Objects+Animations"
-msgstr "Importer avec objets+matériaux séparés"
+msgstr "Importer séparément Objets+Animations"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Materials+Animations"
-msgstr "Importer avec matériaux séparés"
+msgstr "Importer séparément Matériaux+Animations"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "Importer avec objets+matériaux séparés"
+msgstr "Importer séparément Objets+Matériaux+Animations"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
@@ -2746,9 +2894,8 @@ msgid "Edit Poly"
msgstr "Modifier le polygone"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#, fuzzy
msgid "Insert Point"
-msgstr "Insertion"
+msgstr "Point d'insertion"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -2761,9 +2908,8 @@ msgid "Remove Poly And Point"
msgstr "Retirer Polygone et Point"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "Créer un nouveau polygone à partir de rien."
+msgid "Create a new polygon from scratch"
+msgstr "Créer un nouveau polygone à partir de rien"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2777,6 +2923,10 @@ msgstr ""
"Ctrl+Bouton gauche : Diviser section.\n"
"Bouton droit: Effeacer point."
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Supprimer les points"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "Activer/désactiver la lecture automatique"
@@ -2922,6 +3072,57 @@ msgid "Copy Animation"
msgstr "Copier l'animation"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Sections :"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Coller"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Fonctionnalités"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Créer une nouvelle animation"
@@ -3112,18 +3313,10 @@ msgid "Can't resolve hostname:"
msgstr "Impossible de résoudre le nom de l'hôte:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "Impossible à résoudre."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Erreur de connection, veuillez essayer à nouveau."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "Connection impossible."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "Connection à l'hôte impossible:"
@@ -3132,30 +3325,14 @@ msgid "No response from host:"
msgstr "Pas de réponse de l'hôte:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Pas de réponse."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "La requête a échoué, code retourné:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Req. a Échoué."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "La requête a échoué, trop de redirections"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Boucle de Redirection."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Échec:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "Vérification du téléchargement échouée, le fichier a été altéré."
@@ -3184,14 +3361,6 @@ msgid "Resolving.."
msgstr "Résolution.."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Connexion en cours.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Envoi d'une requête.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "Erreur lors de la requête"
@@ -3304,6 +3473,34 @@ msgid "Move Action"
msgstr "Déplacer l'action"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Déplacer le guide vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Créer un nouveau guide vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Supprimer le guide vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Déplacer le guide horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "créer un nouveau guide horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Créer un nouveau guide horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Créer des nouveaux guides horizontaux et verticaux"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "Modifier la chaîne IK"
@@ -3312,14 +3509,12 @@ msgid "Edit CanvasItem"
msgstr "Modifier le CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Anchors only"
-msgstr "Ancre"
+msgstr "Uniquement les ancres"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change Anchors and Margins"
-msgstr "Modifier les ancres"
+msgstr "Modifier les Ancres et les Marges"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
@@ -3377,9 +3572,8 @@ msgid "Pan Mode"
msgstr "Mode navigation"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggles snapping"
-msgstr "Placer un point d'arrêt"
+msgstr "Active le magnétisme"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3387,21 +3581,18 @@ msgid "Use Snap"
msgstr "Aligner sur la grille"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snapping options"
-msgstr "Options d'animation"
+msgstr "Options de magnétisme"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to grid"
-msgstr "Mode d'aimantation :"
+msgstr "Accrocher à la grille"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
msgstr "Rotation alignée"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Configure Snap..."
msgstr "Configurer la grille…"
@@ -3415,30 +3606,35 @@ msgstr "Aligner au pixel près"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "Alignement intelligent"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to parent"
-msgstr "Étendre au parent"
+msgstr "Aimanter au parent"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "Accrocher à l'ancre du noeud"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "Accrocher aux flancs du noeud"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "Accrocher aux autres noeuds"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "Accrocher aux guides"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Verrouiller l'objet sélectionné (il ne pourra plus être déplacé)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Déverouiller l'objet sélectionné (il pourra être déplacé de nouveau)."
@@ -3481,14 +3677,16 @@ msgid "Show Grid"
msgstr "Afficher la grille"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show helpers"
-msgstr "Afficher les os"
+msgstr "Afficher les aides"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show rulers"
-msgstr "Afficher les os"
+msgstr "Afficher les règles"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Montrer les guides"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3499,9 +3697,8 @@ msgid "Frame Selection"
msgstr "Cadrer la sélection"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Enregistrer la disposition"
+msgstr "Disposition sur l'écran"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
@@ -3524,21 +3721,21 @@ msgid "Clear Pose"
msgstr "Vider la pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "Déplacer le point de pivot à partir de la position de la souris"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "Définir courbe hors position"
+msgstr "Placer le pivot sur la position de la souris"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Multiplier le pas de la grille par 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "Diviser le pas de la grille par 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3636,8 +3833,9 @@ msgid "Ease out"
msgstr "Ease out"
#: editor/plugins/curve_editor_plugin.cpp
+#, fuzzy
msgid "Smoothstep"
-msgstr ""
+msgstr "Pas lisse"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Point"
@@ -3683,6 +3881,10 @@ msgstr "Basculer vers tangente linéaire de courbe"
msgid "Hold Shift to edit tangents individually"
msgstr "Maintenez l'appui sur Maj pour éditer les tangentes individuellement"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "Ajouter/supprimer un point de rampe de couleur"
@@ -3716,6 +3918,10 @@ msgid "Create Occluder Polygon"
msgstr "Créer un polygone occulteur"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Créer un nouveau polygone à partir de rien."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Modifier un polygone existant :"
@@ -3731,58 +3937,6 @@ msgstr "Contrôle + Bouton gauche : séparer le segment."
msgid "RMB: Erase Point."
msgstr "Bouton droit : effacer un point."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "Supprimer point de Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Ajouter point à Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Déplacer point de Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Sélectionner des points"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Maj. + Glisser : sélectionner des points de contrôle"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Clic : ajouter un point"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Clic droit : supprimer un point"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Ajouter un point (dans un espace vide)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "Diviser le segment (dans la ligne)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Supprimer le point"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "Le maillage est vide !"
@@ -3975,17 +4129,16 @@ msgid "Bake the navigation mesh.\n"
msgstr "Créer un maillage de navigation"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Clear the navigation mesh."
-msgstr "Créer un maillage de navigation"
+msgstr "Effacer le maillage de navigation."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "Initialisation de la configuration..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "Calcul de la taille de la grille..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -3993,50 +4146,48 @@ msgid "Creating heightfield..."
msgstr "Création de l'octree de lumière"
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Marking walkable triangles..."
-msgstr "Chaînes traduisibles…"
+msgstr "Marquage des triangles parcourables..."
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "Construction d'un terrain compact..."
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "Abrasion de la zone parcourable..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
-msgstr "Avertissement"
+msgstr "Partitionnement..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating contours..."
-msgstr "Création de la texture d'octree"
+msgstr "Création des coutours..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Creating polymesh..."
-msgstr "Créer un maillage de contour…"
+msgstr "Création d'un maillage de contour…"
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Converting to native navigation mesh..."
-msgstr "Créer un maillage de navigation"
+msgstr "Conversion en maillage de navigation natif..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "Paramétrage du générateur de navigation dans la grille :"
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Parsing Geometry..."
msgstr "Analyse de la géométrie"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "C'est fait !"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4196,16 +4347,46 @@ msgid "Move Out-Control in Curve"
msgstr "Déplacer Out-Control dans courbe"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Sélectionner des points"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Maj. + Glisser : sélectionner des points de contrôle"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Clic : ajouter un point"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Clic droit : supprimer un point"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Sélectionner les points de contrôle (Maj. + glisser)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Ajouter un point (dans un espace vide)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Diviser le segment (en courbe)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Supprimer le point"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Fermer la courbe"
@@ -4214,12 +4395,10 @@ msgid "Curve Point #"
msgstr "Point de courbe #"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
msgstr "Définir la position du point de la courbe"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve In Position"
msgstr "Définir courbe en position"
@@ -4345,7 +4524,6 @@ msgstr "Charger une ressource"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4390,6 +4568,20 @@ msgid " Class Reference"
msgstr " Référence de classe"
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Trier"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Déplacer vers le haut"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Déplacer vers le bas"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Script suivant"
@@ -4441,6 +4633,10 @@ msgstr "Fermer les documentations"
msgid "Close All"
msgstr "Fermer tout"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Fermer les autres onglets"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Lancer"
@@ -4451,13 +4647,11 @@ msgstr "Basculer vers le panneau de scripts"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Trouver…"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Trouver le suivant"
@@ -4565,33 +4759,22 @@ msgstr "Minuscule"
msgid "Capitalize"
msgstr "Capitaliser"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Couper"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Copier"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Tout sélectionner"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Déplacer vers le haut"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Déplacer vers le bas"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr "Supprimer ligne"
@@ -4613,6 +4796,23 @@ msgid "Clone Down"
msgstr "Cloner en dessous"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Aller à la ligne"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "Dérouler la ligne"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "Replier toutes les lignes"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "Dérouler toutes les lignes"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "Compléter le symbole"
@@ -4658,12 +4858,10 @@ msgid "Convert To Lowercase"
msgstr "Convertir en minuscule"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "trouver précédente"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Remplacer…"
@@ -4672,7 +4870,6 @@ msgid "Goto Function.."
msgstr "Aller à la fonction…"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Aller à la ligne…"
@@ -4837,6 +5034,15 @@ msgid "View Plane Transform."
msgstr "Transformation du plan de vue."
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "Échelle : "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Traductions : "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Rotation de %s degrés."
@@ -4917,6 +5123,10 @@ msgid "Vertices"
msgstr "Vertex"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "Images par secondes"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Aligner avec la vue"
@@ -4949,6 +5159,14 @@ msgid "View Information"
msgstr "Voir information"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Voir Images par secondes"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Demi résolution"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "Écouteur audio"
@@ -5079,6 +5297,10 @@ msgid "Tool Scale"
msgstr "Outil échelle"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Activer mode vue libre"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Transformation"
@@ -5253,9 +5475,8 @@ msgid "Move (Before)"
msgstr "Déplacer le(s) nœud(s)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (After)"
-msgstr "Aller à gauche"
+msgstr "Déplacer (Après)"
#: editor/plugins/style_box_editor_plugin.cpp
msgid "StyleBox Preview:"
@@ -5332,11 +5553,11 @@ msgstr "Supprimer tout"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "Éditer le thème..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "Menu d'édition des thèmes..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5355,6 +5576,10 @@ msgid "Create Empty Editor Template"
msgstr "Créer un nouveau modèle d'éditeur"
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "Créer à partir du thème éditeur actuel"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "Case à cocher Radio1"
@@ -5529,17 +5754,16 @@ msgid "Runnable"
msgstr "Activable"
#: editor/project_export.cpp
-msgid "Delete patch '"
-msgstr "Supprimer patch"
+msgid "Delete patch '%s' from list?"
+msgstr "Supprimer le patch '%s' de la liste ?"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
msgstr "Supprimer pré-réglage '%s' ?"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted: "
-msgstr "Modèles d'exportation manquants pour cette plateforme :"
+msgstr "Modèles d'exportation manquants ou corrompus pour cette plateforme : "
#: editor/project_export.cpp
msgid "Presets"
@@ -5616,33 +5840,33 @@ msgid "Export templates for this platform are missing:"
msgstr "Modèles d'exportation manquants pour cette plateforme :"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Modèles d'exportation manquants pour cette plateforme :"
+msgstr "Modèles d'exportation manquants ou corrompus pour cette plateforme :"
#: editor/project_export.cpp
msgid "Export With Debug"
msgstr "Exporter avec debug"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "Le fichier n'existe pas."
+msgstr "Le chemin vers ce fichier n'existe pas."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Please choose a 'project.godot' file."
-msgstr "Veuillez exporter en dehors du dossier du projet !"
+msgstr "Veuillez choisir un fichier 'project.godot'."
#: editor/project_manager.cpp
msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
msgstr ""
+"Votre projet sera créé dans un dossier non-vide (vous pourriez avoir besoin "
+"de créer un nouveau dossier)."
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
msgstr ""
+"Veuillez choisir un dossier qui ne contient pas de fichier 'project.godot'."
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -5650,25 +5874,25 @@ msgstr "Projet importé"
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "Ce serait une bonne idée de donner un nom à votre projet."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
msgstr "Chemin de projet non valide (avez-vous changé quelque chose ?)."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in project path."
-msgstr "Impossible de créer le fichier project.godot dans le chemin du projet."
+msgstr ""
+"Impossible de trouver le fichier project.godot dans le chemin du projet."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't edit project.godot in project path."
-msgstr "Impossible de créer le fichier project.godot dans le chemin du projet."
+msgstr ""
+"Impossible de modifier le fichier project.godot dans le chemin du projet."
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
@@ -5679,14 +5903,13 @@ msgid "The following files failed extraction from package:"
msgstr "L'extraction des fichiers suivants a échoué depuis le paquetage :"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "Projet sans titre"
+msgstr "Renommer le projet"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in the project path."
-msgstr "Impossible de créer le fichier project.godot dans le chemin du projet."
+msgstr ""
+"Impossible de trouver le fichier project.godot dans le chemin du projet."
#: editor/project_manager.cpp
msgid "New Game Project"
@@ -5709,9 +5932,8 @@ msgid "Project Name:"
msgstr "Nom du projet :"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
-msgstr "Créer un dossier"
+msgstr "Créer dossier"
#: editor/project_manager.cpp
msgid "Project Path:"
@@ -5730,9 +5952,8 @@ msgid "Unnamed Project"
msgstr "Projet sans titre"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "Impossible de lancer le projet"
+msgstr "Impossible d'ouvrir le projet"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -5770,6 +5991,9 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"La langue à été modifiée.\n"
+"L'interface utilisateur sera mise à jour au prochain démarrage de l'éditeur "
+"ou du gestionnaire de projets."
#: editor/project_manager.cpp
msgid ""
@@ -5804,14 +6028,19 @@ msgid "Exit"
msgstr "Quitter"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "Redémarrer (s) :"
+msgstr "Redémarrer maintenant"
#: editor/project_manager.cpp
msgid "Can't run project"
msgstr "Impossible de lancer le projet"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Touche "
@@ -5845,10 +6074,6 @@ msgid "Add Input Action Event"
msgstr "Ajouter un événement d'action d'entrée"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Méta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Maj+"
@@ -5971,26 +6196,24 @@ msgid "Select a setting item first!"
msgstr "Choisissez d'abord un élément de réglage !"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr "Pas de propriété"
+msgid "No property '%s' exists."
+msgstr "Il n'y a pas de propriété '%s'."
#: editor/project_settings_editor.cpp
-msgid "Setting '"
-msgstr "Paramètre"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "Le paramètre '%s' est interne et ne peut être effacé."
#: editor/project_settings_editor.cpp
msgid "Delete Item"
msgstr "Supprimer élément"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "Connection à l'hôte impossible:"
+msgstr "Ne peut pas contenir de '/' ou ':'"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Already existing"
-msgstr "Mode persistant"
+msgstr "Existe déjà"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -6033,13 +6256,12 @@ msgid "Remove Resource Remap Option"
msgstr "Supprimer option de remap de ressource"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Changer le temps de mélange"
+msgstr "Filtre de langue modifié"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Changé le mode de filtrage des langues"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -6102,28 +6324,24 @@ msgid "Locale"
msgstr "Langue"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "Filtre d'image :"
+msgstr "Filtre de langues :"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "Afficher les os"
+msgstr "Montrer toutes les langues"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "Montrer uniquement les langues sélectionnées"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Filtrer les noeuds"
+msgstr "Mode de filtre :"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "Langue"
+msgstr "Langues :"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -6174,18 +6392,16 @@ msgid "New Script"
msgstr "Nouveau script"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "Créer les os"
+msgstr "Rendre unique"
#: editor/property_editor.cpp
msgid "Show in File System"
msgstr "Montrer dans le système de fichiers"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "Convertir vers…"
+msgstr "Convertir en %s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
@@ -6224,9 +6440,8 @@ msgid "Select Property"
msgstr "Sélectionnez une propriété"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Virtual Method"
-msgstr "Sélectionner une méthode"
+msgstr "Sélectionner une méthode virtuelle"
#: editor/property_selector.cpp
msgid "Select Method"
@@ -6460,6 +6675,14 @@ msgid "Clear a script for the selected node."
msgstr "Effacer un script pour le nœud sélectionné."
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "Distant"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "Local"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "Effacer l'héritage ? (Pas de retour en arrière !)"
@@ -6581,12 +6804,11 @@ msgstr "Chemin de base invalide"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "Un dossier du même nom existe déjà"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "Le fichier existe, l'écraser ?"
+msgstr "Le fichier existe, il sera réutilisé"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6653,6 +6875,10 @@ msgid "Attach Node Script"
msgstr "Attacher script de nœud"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Distant "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Octets :"
@@ -6675,6 +6901,7 @@ msgstr "Fonction :"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
msgstr ""
+"Chosissez un ou plusieurs éléments dans la liste pour afficher le graphique."
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6709,18 +6936,6 @@ msgid "Stack Trace (if applicable):"
msgstr "Trace de pile (si applicable) :"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Inspecteur distant"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Arbre des scènes en direct :"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Propriétés de l'objet distant : "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Profileur"
@@ -6837,9 +7052,8 @@ msgid "Change Probe Extents"
msgstr "Changer les ampleurs de la sonde"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Library"
-msgstr "MeshLibrary…"
+msgstr "Bibliothèque"
#: modules/gdnative/gd_native_library_editor.cpp
#, fuzzy
@@ -6848,60 +7062,60 @@ msgstr "État :"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Bibliothèques: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"Argument de type incorrect dans convert(), utilisez les constantes TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Pas assez d'octets pour les octets de décodage, ou format non valide."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "L'argument du pas est zéro !"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "N'est pas un script avec une instance"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "N'est pas basé sur un script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "N'est pas basé sur un fichier de ressource"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Instance invalide pour le format de dictionnaire (@path manquant)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Instance invalide pour le format de dictionnaire (impossible de charger le "
"script depuis @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
"Instance invalide pour le format de dictionnaire (script invalide dans @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
"Instance invalide pour le format de dictionnaire (sous-classes invalides)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "L'objet ne peut fournir une longueur."
@@ -6914,18 +7128,25 @@ msgid "GridMap Duplicate Selection"
msgstr "Sélection de la duplication de GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "Étage :"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Grille"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr "Vue instantanée"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Prev Level (%sDown Wheel)"
-msgstr "Niveau de prévisualisation ("
+msgid "Previous Floor"
+msgstr "Onglet précédent"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Next Level (%sUp Wheel)"
-msgstr "Niveau suivant ("
+msgid "Next Floor"
+msgstr "Étage suivant"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Disabled"
@@ -6992,12 +7213,8 @@ msgid "Erase Area"
msgstr "Effacer zone"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr "Sélection -> Dupliquer"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr "Sélection -> Effacer"
+msgid "Clear Selection"
+msgstr "Supprimer la sélection"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -7009,7 +7226,7 @@ msgstr "Choisissez distance :"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
-msgstr ""
+msgstr "Constructions"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -7126,9 +7343,9 @@ msgid "Duplicate VisualScript Nodes"
msgstr "Dupliquer noeuds VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Maintenir Meta pour déposer un accesseur. Maintenir Maj pour déposer une "
+"Maintenir %s pour déposer un accesseur. Maintenir Maj pour déposer une "
"signature générique."
#: modules/visual_script/visual_script_editor.cpp
@@ -7138,16 +7355,16 @@ msgstr ""
"signature générique."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "Maintenir Meta pour déposer une référence simple au nœud."
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "Maintenir %s pour déposer une référence simple au nœud."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Maintenir Ctrl pour déposer une référence simple au nœud."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "Maintenir Meta pour déposer un mutateur de variable."
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Maintenir %s pour déposer un mutateur de variable."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7219,7 +7436,7 @@ msgstr "Récupérer"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr ""
+msgstr "Le script a déjà une fonction '%s'"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Input Value"
@@ -7376,13 +7593,21 @@ msgid "Could not write file:\n"
msgstr "Impossible d'écrire le fichier:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "Impossible de lire le fichier:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "Impossible d'ouvrir le modèle pour exportation:\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "Modèle d'exportation non valide :\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "Impossible de lire le shell HTML :\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "Impossible de lire l'image de démarrage :\n"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7506,22 +7731,6 @@ msgstr ""
"La propriété Path doit pointer vers un nœud de type Node2D valide pour "
"fonctionner."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"La propriété Path doit pointer vers un nœud de type Viewport valide pour "
-"fonctionner. Ce Viewport doit utiliser le mode « render target »."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Le Viewport défini dans la propriété Path doit utiliser le mode « render "
-"target » pour que cette sprite fonctionne."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7592,6 +7801,14 @@ msgstr ""
"Une CollisionShape nécessite une forme pour fonctionner. Créez une ressource "
"de forme pour cette CollisionShape !"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "Tracer les maillages"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "Finalisation du tracer"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7648,6 +7865,8 @@ msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
msgstr ""
+"VehicleWheel ajoute un système de roues à un VehicleBody. Veuillez "
+"l'utiliser en tant qu'enfant d'un VehicleBody."
#: scene/gui/color_picker.cpp
msgid "Raw Mode"
@@ -7669,6 +7888,11 @@ msgstr "Alerte !"
msgid "Please Confirm..."
msgstr "Veuillez confirmer…"
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Sélectionner une méthode"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7690,6 +7914,10 @@ msgstr ""
"Utilisez un conteneur comme enfant (VBox, HBox, etc.) ou un contrôle et "
"définissez manuellement la taille minimale personnalisée."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Autre)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7726,6 +7954,71 @@ msgstr "Erreur lors du chargement de la police."
msgid "Invalid font size."
msgstr "Taille de police invalide."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "Ne peux pas acceder à '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "Source : "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Supprimer point de Line2D"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Ajouter point à Line2D"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Déplacer point de Line2D"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Diviser le segment (dans la ligne)"
+
+#~ msgid "Meta+"
+#~ msgstr "Méta+"
+
+#~ msgid "Setting '"
+#~ msgstr "Paramètre"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Inspecteur distant"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Arbre des scènes en direct :"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Propriétés de l'objet distant : "
+
+#, fuzzy
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "Niveau de prévisualisation ("
+
+#, fuzzy
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "Niveau suivant ("
+
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Sélection -> Dupliquer"
+
+#~ msgid "Selection -> Clear"
+#~ msgstr "Sélection -> Effacer"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "La propriété Path doit pointer vers un nœud de type Viewport valide pour "
+#~ "fonctionner. Ce Viewport doit utiliser le mode « render target »."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Le Viewport défini dans la propriété Path doit utiliser le mode « render "
+#~ "target » pour que cette sprite fonctionne."
+
#~ msgid "Filter:"
#~ msgstr "Filtre:"
@@ -7750,9 +8043,6 @@ msgstr "Taille de police invalide."
#~ msgid "Removed:"
#~ msgstr "Supprimé :"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Erreur de sauvegarde de l'atlas :"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Impossible d'enregistrer la sous-texture atlas :"
@@ -8143,9 +8433,6 @@ msgstr "Taille de police invalide."
#~ msgid "Cropping Images"
#~ msgstr "Rognage des images"
-#~ msgid "Blitting Images"
-#~ msgstr "Découpage des images"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "Impossible d'enregistrer l'image d'atlas :"
@@ -8536,9 +8823,6 @@ msgstr "Taille de police invalide."
#~ msgid "Save Translatable Strings"
#~ msgstr "Enregistrer les chaînes traduisibles"
-#~ msgid "Install Export Templates"
-#~ msgstr "Installer les modèles d'exportation"
-
#~ msgid "Edit Script Options"
#~ msgstr "Modifier les options du script"
diff --git a/editor/translations/he.po b/editor/translations/he.po
new file mode 100644
index 0000000000..5599828bfd
--- /dev/null
+++ b/editor/translations/he.po
@@ -0,0 +1,7620 @@
+# Hebrew translation of the Godot Engine editor
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
+# This file is distributed under the same license as the Godot source code.
+#
+# Luc Stepniewski <lior@gradstein.info>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2017-11-24 09:47+0000\n"
+"Last-Translator: Luc Stepniewski <lior@gradstein.info>\n"
+"Language-Team: Hebrew <https://hosted.weblate.org/projects/godot-engine/"
+"godot/he/>\n"
+"Language: he\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.18-dev\n"
+
+#: editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "מושבת"
+
+#: editor/animation_editor.cpp
+msgid "All Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Wrap Mode"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Continuous"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Discrete"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Trigger"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "In"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Out"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "In-Out"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Out-In"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Transitions"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Create"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Track tools"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Optimize"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Transition"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "No Matches"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replaced %d occurrence(s)."
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Match Case"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Selection Only"
+msgstr ""
+
+#: editor/code_editor.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "Find"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Next"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Not found!"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace By"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Backwards"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Skip"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Zoom In"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Zoom Out"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr ""
+
+#: editor/code_editor.cpp editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Col:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Target method not found! Specify a valid method or attach a script to target "
+"Node."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connecting Signal:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+msgid "Signals"
+msgstr ""
+
+#: editor/create_dialog.cpp
+msgid "Create New"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp
+msgid "Matches:"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Resource"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Path"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Cannot remove:\n"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Open Anyway"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Owns"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Thanks from the Godot community!"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Thanks!"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Godot Engine contributors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Project Founders"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Lead Developer"
+msgstr ""
+
+#: editor/editor_about.cpp editor/project_manager.cpp
+msgid "Project Manager"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Authors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Platinum Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Gold Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Mini Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Gold Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Silver Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Bronze Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "License"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Thirdparty License"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of thirdparty free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such thirdparty components with their "
+"respective copyright statements and license terms."
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "All Components"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Components"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Licenses"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Error opening package file, not in zip format."
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "Uncompressing Assets"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "Package Installer"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Rename Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Solo"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Mute"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Select Audio Bus Send"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Audio Bus, Drag and Drop to rearrange."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Solo"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Mute"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Bypass"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Bus options"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Master bus can't be deleted!"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Duplicate Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Bus Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save Audio Bus Layout As.."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Location for New Layout.."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Open Audio Bus Layout"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "There is no 'res://default_bus_layout.tres' file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Invalid file, not an audio bus layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Create a new Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Load"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Load an existing Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save this Bus Layout to a file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+msgid "Load Default"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Load the default Bus Layout."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Path:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
+msgid "Name"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Please select a base directory first"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Storing File:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Packing"
+msgstr ""
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+msgid "Template file not found:\n"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Select Current Folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Directories & Files:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
+#: scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid "(Re)Importing Assets"
+msgstr ""
+
+#: editor/editor_help.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Class List:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Search Classes"
+msgstr ""
+
+#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: editor/editor_help.cpp editor/property_editor.cpp
+msgid "Class:"
+msgstr ""
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Members"
+msgstr ""
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Members:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Public Methods"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr ""
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Signals:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Enumerations:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "enum "
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Constants"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Constants:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Properties"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Property Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Methods"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Method Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Search Text"
+msgstr ""
+
+#: editor/editor_log.cpp
+msgid "Output:"
+msgstr ""
+
+#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/property_editor.cpp editor/script_editor_debugger.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Clear"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while saving."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't open '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while parsing '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unexpected end of file '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Missing '%s' or its dependencies."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while loading '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a tree root."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it will not be kept when saving the current scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene was imported, so changes to it will not be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open in Help"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to '%s' before closing?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "No"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a selected node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes the following scene(s) before opening Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Clear Recent Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+msgid "Default"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle distraction-free mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Filter Files.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp
+msgid "Redo"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Help"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Online Docs"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Q&A"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Issue Tracker"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Disable Update Spinner"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Changes may be lost!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Node"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Password:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Script Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid "Select device from the list"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the export menu."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Re-Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Installed)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Missing)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Current)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove template version '%s'?"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Invalid version.txt format inside templates. Revision is not a valid "
+"identifier."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for templates:\n"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Importing:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Installed Versions:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install From File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove Template"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select template file"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
+#: editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a list"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"\n"
+"Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself.\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "A file or folder with this name already exists."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Expand all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Collapse all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Rename.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Folder.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Rename"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid " Files"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Import As:"
+msgstr ""
+
+#: editor/import_dock.cpp editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr ""
+
+#: editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Create a new polygon from scratch"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit existing polygon:\n"
+"LMB: Move Point.\n"
+"Ctrl+LMB: Split Segment.\n"
+"RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Directions"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Category:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: editor/plugins/camera_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggles snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to parent"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node sides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to other nodes"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show helpers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show rulers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag pivot from mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set pivot at mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change default type"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat0"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat1"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease in"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Hold Shift to edit tangents individually"
+msgstr ""
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid ""
+"No OccluderPolygon2D resource on this node.\n"
+"Create and assign one?"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake the navigation mesh.\n"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Partitioning..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating contours..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr ""
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Particles"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Close and save changes?\n"
+"\""
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid " Class Reference"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with external editor"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Discard"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Pick Color"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Case"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Cut"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Select All"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Delete Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Replace.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Information"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Doppler Enable"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode (Q)\n"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Drag: Rotate\n"
+"Alt+Drag: Move\n"
+"Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Select"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Move"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Rotate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (After)"
+msgstr ""
+
+#: editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Edit theme.."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme editing menu."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete patch '%s' from list?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted: "
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add.."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Patches"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Make Patch"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The path does not exist."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Your project will be created in a non empty folder (you might want to create "
+"a new folder)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a folder that does not contain a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid " "
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "It would be a good idea to name your project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Rename Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in the project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create folder"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't open project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in \"Project Settings\" under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The UI will update next time the editor or project manager starts."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Restart Now"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't run project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 6"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 7"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 8"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 9"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Can't contain '/' or ':'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Already existing"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override For.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Localization"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show all locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show only selected locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Select Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "New Script"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Show in File System"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Convert To %s"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can not perform with the root node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Copy Node Path"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Filter nodes"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach a new or existing script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear a script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connection(s) and group(s)\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connections.\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Open script"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading template '%s'"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading script from %s"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Directory of the same name exists"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, will be reused"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid Path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script valid"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9 and _"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Create new script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Load existing script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Inherits"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Class Name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Template"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Library"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Status"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Libraries: "
+msgstr ""
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Duplicate Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit X Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Y Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Z Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Exterior Connector"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Erase Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clear Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/mono/editor/mono_bottom_panel.cpp
+msgid "Builds"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Move Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Condition"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Sequence"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Switch"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Iterator"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "While"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Return"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Call"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Get"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Script already has function '%s'"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run exported HTML in the system's default browser."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overriden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller id must not be 0 or this controller will not be bound to an "
+"actual controller"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor id must not be 0 or this anchor will not be bound to an actual "
+"anchor"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVROrigin requires an ARVRCamera child node"
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overriden by "
+"the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid "Path property must point to a valid Spatial node to work."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Raw Mode"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Add current color as a preset"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Cancel"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
+msgstr ""
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Setings (Rendering -> Viewport -"
+"> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error initializing FreeType."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Unknown font format."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error loading font."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Invalid font size."
+msgstr ""
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
new file mode 100644
index 0000000000..c5177b4aa8
--- /dev/null
+++ b/editor/translations/hi.po
@@ -0,0 +1,7657 @@
+# Hindi translation of the Godot Engine editor
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
+# This file is distributed under the same license as the Godot source code.
+#
+# Abhas Kumar Sinha <abhaskumarsinha@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2017-11-25 10:21+0000\n"
+"Last-Translator: Abhas Kumar Sinha <abhaskumarsinha@gmail.com>\n"
+"Language-Team: Hindi <https://hosted.weblate.org/projects/godot-engine/godot/"
+"hi/>\n"
+"Language: hi\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.18-dev\n"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Disabled"
+msgstr "बंद कर दिया गया है"
+
+#: editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "सभी खंड"
+
+#: editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Anim Change Transition"
+msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ संकà¥à¤°à¤®à¤£ (à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨)"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Anim Change Transform"
+msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ परिणत"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ निधि"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ बà¥à¤²à¤¾à¤µà¤¾"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ टà¥à¤°à¥ˆà¤• जोड़ें"
+
+#: editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "अनà¥à¤µà¤¾à¤¦ में बदलाव करें:"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Wrap Mode"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "नोड वकà¥à¤° संपादित करें"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Edit Selection Curve"
+msgstr "परिवरà¥à¤¤à¤¨ वकà¥à¤° चयन"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Anim Delete Keys"
+msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ को हटाने के लिठकà¥à¤‚जी"
+
+#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Duplicate Selection"
+msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट चयन"
+
+#: editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Continuous"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Discrete"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Trigger"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "In"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Out"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "In-Out"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Out-In"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Transitions"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Create"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Track tools"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Optimize"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Transition"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "No Matches"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replaced %d occurrence(s)."
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Match Case"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Selection Only"
+msgstr ""
+
+#: editor/code_editor.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "Find"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Next"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Not found!"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace By"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Backwards"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Skip"
+msgstr "छोड़ें"
+
+#: editor/code_editor.cpp
+msgid "Zoom In"
+msgstr "बड़ा करो"
+
+#: editor/code_editor.cpp
+msgid "Zoom Out"
+msgstr "छोटा करो"
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "रीसेट आकार"
+
+#: editor/code_editor.cpp editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "रेखा:"
+
+#: editor/code_editor.cpp
+msgid "Col:"
+msgstr "सà¥à¤¤à¤‚भ:"
+
+#: editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "लकà¥à¤·à¥à¤¯ नोड में विधि निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ किया जाना चाहिà¤!"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid ""
+"Target method not found! Specify a valid method or attach a script to target "
+"Node."
+msgstr ""
+"लकà¥à¤·à¥à¤¯ विधि नहीं मिला! à¤à¤• वैध विधि निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करें या नोड को लकà¥à¤·à¤¿à¤¤ करने के लिठà¤à¤• "
+"सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ संलगà¥à¤¨ करें।"
+
+#: editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr "जोड़ें"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr "मिटाना"
+
+#: editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Deferred"
+msgstr "सà¥à¤¥à¤—ित"
+
+#: editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "बंद करे"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Connect"
+msgstr "जà¥à¤¡à¤¿à¤¯à¥‡"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Connect '%s' to '%s'"
+msgstr "जà¥à¤¡à¤¿à¤¯à¥‡ '%s' to '%s'"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Connecting Signal:"
+msgstr "कनेकà¥à¤Ÿ करने के लिठसंकेत:"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Create Subscription"
+msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Connect.."
+msgstr "जà¥à¤¡à¤¿à¤¯à¥‡.."
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "डिसà¥à¤•नेकà¥à¤Ÿ"
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+msgid "Signals"
+msgstr "संकेत"
+
+#: editor/create_dialog.cpp
+msgid "Create New"
+msgstr "à¤à¤• नया बनाà¤à¤‚"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr "पसंदीदा:"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "हाल ही में किया:"
+
+#: editor/create_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp editor/settings_config_dialog.cpp
+#, fuzzy
+msgid "Search:"
+msgstr "खोज कर:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp
+msgid "Matches:"
+msgstr "à¤à¤• जैसा:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "विवरण:"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "इसके लिठखोजी पà¥à¤°à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤ªà¤¨:"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Dependencies For:"
+msgstr "के लिठनिरà¥à¤­à¤°à¤¤à¤¾:"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"दृशà¥à¤¯ '%s' वरà¥à¤¤à¤®à¤¾à¤¨ में संपादित किया जा रहा है।\n"
+"परिवरà¥à¤¤à¤¨ तब तक पà¥à¤°à¤­à¤¾à¤µà¥€ नहीं होंगे जब तक कि पà¥à¤¨à¤ƒ लोड नहीं किठजाà¤à¤‚गे।"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"संसाधन '%s' उपयोग में है\n"
+"पà¥à¤¨à¤ƒ लोड होने पर परिवरà¥à¤¤à¤¨ पà¥à¤°à¤­à¤¾à¤µà¥€ होंगे।"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Dependencies"
+msgstr "निरà¥à¤­à¤°à¤¤à¤¾"
+
+#: editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "संसाधन"
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Path"
+msgstr "पथ"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "निरà¥à¤­à¤°à¤¤à¤¾:"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Fix Broken"
+msgstr "टूटी सही कर देंगे?"
+
+#: editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "निरà¥à¤­à¤°à¤¤à¤¾ संपादक"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "खोज रिपà¥à¤²à¥‡à¤¸à¤®à¥‡à¤‚ट संसाधन:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "खोलो इसे"
+
+#: editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "के सà¥à¤µà¤¾à¤®à¥€:"
+
+#: editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "परियोजना से चयनित फ़ाइलें निकालें? (कोई पूरà¥à¤µà¤µà¤¤ नहीं)"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"निकाली गई फ़ाइलों को दूसरे संसाधनों दà¥à¤µà¤¾à¤°à¤¾ उनके लिठकाम करने के लिठआवशà¥à¤¯à¤• है\n"
+"वैसे भी उनà¥à¤¹à¥‡à¤‚ निकालें? (कोई पूरà¥à¤µà¤µà¤¤ नहीं)"
+
+#: editor/dependency_editor.cpp
+msgid "Cannot remove:\n"
+msgstr "निकाला नहीं जा सकता:\n"
+
+#: editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "लोड होने मे तà¥à¤°à¥à¤Ÿà¤¿:"
+
+#: editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "लापता निरà¥à¤­à¤°à¤¤à¤¾à¤“ं के कारण दृशà¥à¤¯ लोड करने में विफल रहे:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Open Anyway"
+msgstr "कैसे भी इसे खोलें"
+
+#: editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "कौन सी कारà¥à¤°à¤µà¤¾à¤ˆ की जानी चाहिà¤?"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "निरà¥à¤­à¤°à¤¤à¤¾ ठीक करें"
+
+#: editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "लोड हो रहा है तà¥à¤°à¥à¤Ÿà¤¿à¤¯à¤¾à¤!"
+
+#: editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "%d आइटम को सà¥à¤¥à¤¾à¤¯à¥€ रूप से हटाà¤à¤‚? (नहीं पूरà¥à¤µà¤µà¤¤ करें!)"
+
+#: editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "मालिक"
+
+#: editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "सà¥à¤ªà¤·à¥à¤Ÿ सà¥à¤µà¤¾à¤®à¤¿à¤¤à¥à¤µ के बिना संसाधन:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+#, fuzzy
+msgid "Orphan Resource Explorer"
+msgstr "Orphan Resource Explorer"
+
+#: editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "चयनित फ़ाइलें हटाà¤à¤‚?"
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr "को हटा दें"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "शबà¥à¤¦à¤•ोश कà¥à¤‚जी बदलें"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "शबà¥à¤¦ बदलें मूलà¥à¤¯"
+
+#: editor/editor_about.cpp
+msgid "Thanks from the Godot community!"
+msgstr "गोडोट समà¥à¤¦à¤¾à¤¯ से आपको धनà¥à¤¯à¤µà¤¾à¤¦!"
+
+#: editor/editor_about.cpp
+msgid "Thanks!"
+msgstr "धनà¥à¤¯à¤µà¤¾à¤¦!"
+
+#: editor/editor_about.cpp
+msgid "Godot Engine contributors"
+msgstr "गॉडोट इंजन योगदानकरà¥à¤¤à¤¾"
+
+#: editor/editor_about.cpp
+msgid "Project Founders"
+msgstr "परियोजना के संसà¥à¤¥à¤¾à¤ªà¤•"
+
+#: editor/editor_about.cpp
+msgid "Lead Developer"
+msgstr "पà¥à¤°à¤®à¥à¤– डेवलपर"
+
+#: editor/editor_about.cpp editor/project_manager.cpp
+msgid "Project Manager"
+msgstr "पà¥à¤°à¥‹à¤œà¥‡à¤•à¥à¤Ÿ मैनेजर"
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr "डेवलपरà¥à¤¸"
+
+#: editor/editor_about.cpp
+msgid "Authors"
+msgstr "लेखक"
+
+#: editor/editor_about.cpp
+msgid "Platinum Sponsors"
+msgstr "पà¥à¤²à¥ˆà¤Ÿà¤¿à¤¨à¤® पà¥à¤°à¤¾à¤¯à¥‹à¤œà¤•"
+
+#: editor/editor_about.cpp
+msgid "Gold Sponsors"
+msgstr "गोलà¥à¤¡ पà¥à¤°à¤¾à¤¯à¥‹à¤œà¤•"
+
+#: editor/editor_about.cpp
+msgid "Mini Sponsors"
+msgstr "मिनी पà¥à¤°à¤¾à¤¯à¥‹à¤œà¤•"
+
+#: editor/editor_about.cpp
+msgid "Gold Donors"
+msgstr "सà¥à¤µà¤°à¥à¤£ दाताओं"
+
+#: editor/editor_about.cpp
+msgid "Silver Donors"
+msgstr "रजत दाताओं"
+
+#: editor/editor_about.cpp
+msgid "Bronze Donors"
+msgstr "कांसà¥à¤¯ दाताओं"
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr "दाताओं"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "License"
+msgstr "License"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Thirdparty License"
+msgstr "Thirdparty License"
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of thirdparty free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such thirdparty components with their "
+"respective copyright statements and license terms."
+msgstr ""
+"गोडोट इंजन तीसरे पकà¥à¤· के सà¥à¤µà¤¤à¤‚तà¥à¤° और खà¥à¤²à¥‡ सà¥à¤°à¥‹à¤¤ पà¥à¤¸à¥à¤¤à¤•ालयों पर निरà¥à¤­à¤° करता है, जो कि इसके "
+"à¤à¤®à¤†à¤ˆà¤Ÿà¥€ लाइसेंस की शरà¥à¤¤à¥‹à¤‚ के साथ संगत है। निमà¥à¤¨à¤²à¤¿à¤–ित à¤à¤¸à¥‡ सभी तृतीय पकà¥à¤· घटकों की à¤à¤• विसà¥à¤¤à¥ƒà¤¤ "
+"सूची है जो उनके संबंधित कॉपीराइट कथन और लाइसेंस शरà¥à¤¤à¥‹à¤‚ के साथ हैं।"
+
+#: editor/editor_about.cpp
+msgid "All Components"
+msgstr "सभी घटक"
+
+#: editor/editor_about.cpp
+msgid "Components"
+msgstr "अवयव"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Licenses"
+msgstr "Licenses"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Error opening package file, not in zip format."
+msgstr "पैकेज फ़ाइल खोलने में तà¥à¤°à¥à¤Ÿà¤¿, zip पà¥à¤°à¤¾à¤°à¥‚प में नहीं |"
+
+#: editor/editor_asset_installer.cpp
+msgid "Uncompressing Assets"
+msgstr "असंपीड़ित संपतà¥à¤¤à¤¿à¤¯à¤¾à¤‚"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr "पैकेज सफलतापूरà¥à¤µà¤• सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ किया गया!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr "सफलता!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "इंसà¥à¤Ÿà¥‰à¤²"
+
+#: editor/editor_asset_installer.cpp
+#, fuzzy
+msgid "Package Installer"
+msgstr "Package Installer"
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr "वकà¥à¤¤à¤¾à¤“ं"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr "पà¥à¤°à¤­à¤¾à¤µ जोड़ें"
+
+#: editor/editor_audio_buses.cpp
+msgid "Rename Audio Bus"
+msgstr "ऑडियो बस का नाम बदलें"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Solo"
+msgstr "ऑडियो बस सोलो टॉगल करें"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Mute"
+msgstr "ऑडियो बस मà¥à¤¯à¥‚ट को टॉगल करें"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr "ऑडियो बस बायपास पà¥à¤°à¤­à¤¾à¤µ टॉगल करें"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Select Audio Bus Send"
+msgstr "ऑडियो बस भेजें का चयन करें"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus Effect"
+msgstr "ऑडियो बस पà¥à¤°à¤­à¤¾à¤µ जोड़ें"
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Bus Effect"
+msgstr "बस पà¥à¤°à¤­à¤¾à¤µ हटो"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Delete Bus Effect"
+msgstr "बस पà¥à¤°à¤­à¤¾à¤µ हटाना"
+
+#: editor/editor_audio_buses.cpp
+msgid "Audio Bus, Drag and Drop to rearrange."
+msgstr "पà¥à¤¨: वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¿à¤¤ करने के लिठऑडियो बस, खींचें और डà¥à¤°à¥‰à¤ª |"
+
+#: editor/editor_audio_buses.cpp
+msgid "Solo"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Mute"
+msgstr "मूक"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bypass"
+msgstr "उपमारà¥à¤—"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bus options"
+msgstr "बस विकलà¥à¤ª"
+
+#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿"
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Volume"
+msgstr "वॉलà¥à¤¯à¥‚म रीसेट करें"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Master bus can't be deleted!"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Duplicate Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Bus Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save Audio Bus Layout As.."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Location for New Layout.."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Open Audio Bus Layout"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "There is no 'res://default_bus_layout.tres' file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Invalid file, not an audio bus layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Create a new Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Load"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Load an existing Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save this Bus Layout to a file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+msgid "Load Default"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Load the default Bus Layout."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Path:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
+msgid "Name"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Please select a base directory first"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Storing File:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Packing"
+msgstr ""
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+msgid "Template file not found:\n"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Select Current Folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Directories & Files:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
+#: scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid "(Re)Importing Assets"
+msgstr ""
+
+#: editor/editor_help.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Class List:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Search Classes"
+msgstr ""
+
+#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: editor/editor_help.cpp editor/property_editor.cpp
+msgid "Class:"
+msgstr ""
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Members"
+msgstr ""
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Members:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Public Methods"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr ""
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Signals:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Enumerations:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "enum "
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Constants"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Constants:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Properties"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Property Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Methods"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Method Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Search Text"
+msgstr ""
+
+#: editor/editor_log.cpp
+msgid "Output:"
+msgstr ""
+
+#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/property_editor.cpp editor/script_editor_debugger.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Clear"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while saving."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't open '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while parsing '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unexpected end of file '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Missing '%s' or its dependencies."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while loading '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a tree root."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it will not be kept when saving the current scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene was imported, so changes to it will not be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open in Help"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to '%s' before closing?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "No"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a selected node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes the following scene(s) before opening Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Clear Recent Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+msgid "Default"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle distraction-free mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Filter Files.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp
+msgid "Redo"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Help"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Online Docs"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Q&A"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Issue Tracker"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Disable Update Spinner"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Changes may be lost!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Node"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Password:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Script Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid "Select device from the list"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the export menu."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Re-Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Installed)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Missing)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Current)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove template version '%s'?"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Invalid version.txt format inside templates. Revision is not a valid "
+"identifier."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for templates:\n"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Importing:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Installed Versions:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install From File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove Template"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select template file"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
+#: editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a list"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"\n"
+"Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself.\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "A file or folder with this name already exists."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Expand all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Collapse all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Rename.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Folder.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Rename"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid " Files"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Import As:"
+msgstr ""
+
+#: editor/import_dock.cpp editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr ""
+
+#: editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Create a new polygon from scratch"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit existing polygon:\n"
+"LMB: Move Point.\n"
+"Ctrl+LMB: Split Segment.\n"
+"RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "विवरण:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Category:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: editor/plugins/camera_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggles snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to parent"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node sides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to other nodes"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show helpers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show rulers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag pivot from mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set pivot at mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change default type"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat0"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat1"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease in"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Hold Shift to edit tangents individually"
+msgstr ""
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid ""
+"No OccluderPolygon2D resource on this node.\n"
+"Create and assign one?"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake the navigation mesh.\n"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Partitioning..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating contours..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr ""
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Particles"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Close and save changes?\n"
+"\""
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid " Class Reference"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with external editor"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Discard"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Pick Color"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Case"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Cut"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Select All"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Delete Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Replace.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Information"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Doppler Enable"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode (Q)\n"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Drag: Rotate\n"
+"Alt+Drag: Move\n"
+"Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Select"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Move"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Rotate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (After)"
+msgstr ""
+
+#: editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Edit theme.."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme editing menu."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete patch '%s' from list?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted: "
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add.."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Patches"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Make Patch"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The path does not exist."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Your project will be created in a non empty folder (you might want to create "
+"a new folder)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a folder that does not contain a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid " "
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "It would be a good idea to name your project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Rename Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in the project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create folder"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't open project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in \"Project Settings\" under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The UI will update next time the editor or project manager starts."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Restart Now"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't run project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 6"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 7"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 8"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 9"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Can't contain '/' or ':'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Already existing"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override For.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Localization"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show all locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show only selected locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Select Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "New Script"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Show in File System"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Convert To %s"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can not perform with the root node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Copy Node Path"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Filter nodes"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach a new or existing script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear a script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connection(s) and group(s)\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connections.\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Open script"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading template '%s'"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading script from %s"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Directory of the same name exists"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, will be reused"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid Path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script valid"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9 and _"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Create new script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Load existing script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Inherits"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Class Name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Template"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Library"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Status"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Libraries: "
+msgstr ""
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Duplicate Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit X Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Y Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Z Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Exterior Connector"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Erase Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clear Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/mono/editor/mono_bottom_panel.cpp
+msgid "Builds"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Move Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Condition"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Sequence"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Switch"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Iterator"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "While"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Return"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Call"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Get"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Script already has function '%s'"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run exported HTML in the system's default browser."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overriden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller id must not be 0 or this controller will not be bound to an "
+"actual controller"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor id must not be 0 or this anchor will not be bound to an actual "
+"anchor"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVROrigin requires an ARVRCamera child node"
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overriden by "
+"the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid "Path property must point to a valid Spatial node to work."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Raw Mode"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Add current color as a preset"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Cancel"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
+msgstr ""
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Setings (Rendering -> Viewport -"
+"> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error initializing FreeType."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Unknown font format."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error loading font."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Invalid font size."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index 07457b4692..4bd241b809 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -3,136 +3,139 @@
# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
-# Varga Dániel <danikah.danikah@gmail.com>, 2016.
+# Nagy Lajos <neutron9707@gmail.com>, 2017.
+# Sandor Domokos <sandor.domokos@gmail.com>, 2017.
+# Varga Dániel <danikah.danikah@gmail.com>, 2016-2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-11-11 18:19+0000\n"
-"Last-Translator: Varga Dániel <danikah.danikah@gmail.com>\n"
+"PO-Revision-Date: 2017-11-29 08:12+0000\n"
+"Last-Translator: Nagy Lajos <neutron9707@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/"
"godot/hu/>\n"
"Language: hu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.9\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
-msgstr ""
+msgstr "Tiltva"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr ""
+msgstr "Mind kiválaszt"
#: editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr ""
+msgstr "Hozzáadás kulcs mozgatása"
#: editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr ""
+msgstr "Animáció átmenet megváltoztatása"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr ""
+msgstr "Animáció átalakító váltás"
#: editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr ""
+msgstr "Animáció érték váltás"
#: editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr ""
+msgstr "Animáció hívás váltás"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr ""
+msgstr "Animáció nyomvonal hozzáadása"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr ""
+msgstr "Animáció kulcs megkettőzése"
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr ""
+msgstr "Animáció nyomvonal felfelé mozgatása"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr ""
+msgstr "Animáció nyomvonal lefelé mozgatása"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr ""
+msgstr "Animáció nyomvonal eltávolítása"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr ""
+msgstr "Ãtmenet beállítása erre:"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr ""
+msgstr "Animáció nyomvonal átnevezése"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr ""
+msgstr "Animáció nyomvonal intelpoláció változtatása"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr ""
+msgstr "Animáció nyomvonal érték mód változtatása"
#: editor/animation_editor.cpp
msgid "Anim Track Change Wrap Mode"
-msgstr ""
+msgstr "Animáció nyomvonal takarási mód változtatása"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr ""
+msgstr "Node görbe szerkesztése"
#: editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr ""
+msgstr "Kiválasztás görbe szerkesztése"
#: editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr ""
+msgstr "Animáció kulcs törlése"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr ""
+msgstr "Kiválasztás megkettőzése"
#: editor/animation_editor.cpp
msgid "Duplicate Transposed"
-msgstr ""
+msgstr "Kiválasztás áthelyezése"
#: editor/animation_editor.cpp
msgid "Remove Selection"
-msgstr ""
+msgstr "Kiválasztás eltávolítása"
#: editor/animation_editor.cpp
msgid "Continuous"
-msgstr ""
+msgstr "Folyamatos"
#: editor/animation_editor.cpp
msgid "Discrete"
-msgstr ""
+msgstr "Diszkrét"
#: editor/animation_editor.cpp
msgid "Trigger"
-msgstr ""
+msgstr "Érzékelő"
#: editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr ""
+msgstr "Animáció kulcs hozzáadása"
#: editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr ""
+msgstr "Animáció kulcs mozgatása"
#: editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr ""
+msgstr "Kiválasztás átméretezése"
#: editor/animation_editor.cpp
msgid "Scale From Cursor"
@@ -140,48 +143,48 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Goto Next Step"
-msgstr ""
+msgstr "Ugrás a következő lépésre"
#: editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr ""
+msgstr "Ugrás az előző lépésre"
#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
#: editor/property_editor.cpp
msgid "Linear"
-msgstr ""
+msgstr "Egyenes irányú"
#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constant"
-msgstr ""
+msgstr "Ãllandó"
#: editor/animation_editor.cpp
msgid "In"
-msgstr ""
+msgstr "Belső"
#: editor/animation_editor.cpp
msgid "Out"
-msgstr ""
+msgstr "Külső"
#: editor/animation_editor.cpp
msgid "In-Out"
-msgstr ""
+msgstr "Belső-külső"
#: editor/animation_editor.cpp
msgid "Out-In"
-msgstr ""
+msgstr "Külső-belső"
#: editor/animation_editor.cpp
msgid "Transitions"
-msgstr ""
+msgstr "Ãtmenet"
#: editor/animation_editor.cpp
msgid "Optimize Animation"
-msgstr ""
+msgstr "Animáció optimalizálása"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr ""
+msgstr "Animáció megtisztítása"
#: editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
@@ -198,11 +201,11 @@ msgstr ""
#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
msgid "Create"
-msgstr ""
+msgstr "Létrehozás"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "Animáció létrehozása és beillesztése"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
@@ -226,7 +229,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr ""
+msgstr "Animáció beillesztése"
#: editor/animation_editor.cpp
msgid "Anim Scale Keys"
@@ -242,43 +245,43 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr ""
+msgstr "Hossz(ak):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr ""
+msgstr "Animáció hossza (másodpercben)."
#: editor/animation_editor.cpp
msgid "Step (s):"
-msgstr ""
+msgstr "Lépés(ek):"
#: editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
-msgstr ""
+msgstr "Kurzor léptetése (másodpercben)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr ""
+msgstr "Az animáció ismétlésének engedélyezése/tiltása."
#: editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr ""
+msgstr "Új nyomvonal hozzáadása."
#: editor/animation_editor.cpp
msgid "Move current track up."
-msgstr ""
+msgstr "Jelenlegi nyomvonal felfelé mozgatása."
#: editor/animation_editor.cpp
msgid "Move current track down."
-msgstr ""
+msgstr "Jelenlegi nyomvonal lefelé mozgatása."
#: editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr ""
+msgstr "Kiválasztott nyomvonal eltávolítása."
#: editor/animation_editor.cpp
msgid "Track tools"
-msgstr ""
+msgstr "Nyomvonal eszközök"
#: editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
@@ -290,23 +293,24 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr ""
+msgstr "Max. lineáris hiba:"
#: editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr ""
+msgstr "Max. szög hiba:"
#: editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr ""
+msgstr "Max. optimalizálható szög:"
#: editor/animation_editor.cpp
msgid "Optimize"
-msgstr ""
+msgstr "Optimalizálás"
#: editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
+"AnimationPlayer választása a Scene Tree-ból az animációk szerkesztéséhez."
#: editor/animation_editor.cpp
msgid "Key"
@@ -314,83 +318,83 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Transition"
-msgstr ""
+msgstr "Ãtmenet"
#: editor/animation_editor.cpp
msgid "Scale Ratio:"
-msgstr ""
+msgstr "Méretezési arány:"
#: editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr ""
+msgstr "Melyik Node-ban hívjon funkciókat?"
#: editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr ""
+msgstr "Érvénytelen kulcsok eltávolítása"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr ""
+msgstr "Megoldatlan és üres nyomvonalak eltávolítása"
#: editor/animation_editor.cpp
msgid "Clean-up all animations"
-msgstr ""
+msgstr "Összes animáció tisztítása"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr ""
+msgstr "Animációk tisztítása (Nem visszavonható!)"
#: editor/animation_editor.cpp
msgid "Clean-Up"
-msgstr ""
+msgstr "Tisztítás"
#: editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr ""
+msgstr "Tömb átméretezése"
#: editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr ""
+msgstr "Tömb értéktípusának megváltoztatása"
#: editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr ""
+msgstr "Tömb értékének megváltoztatása"
#: editor/code_editor.cpp
msgid "Go to Line"
-msgstr ""
+msgstr "Sorra ugrás"
#: editor/code_editor.cpp
msgid "Line Number:"
-msgstr ""
+msgstr "Sor száma:"
#: editor/code_editor.cpp
msgid "No Matches"
-msgstr ""
+msgstr "Nincs találat"
#: editor/code_editor.cpp
msgid "Replaced %d occurrence(s)."
-msgstr ""
+msgstr "Lecserélve %d előfordulás."
#: editor/code_editor.cpp
msgid "Replace"
-msgstr ""
+msgstr "Lecserélés"
#: editor/code_editor.cpp
msgid "Replace All"
-msgstr ""
+msgstr "Mind lecserélése"
#: editor/code_editor.cpp
msgid "Match Case"
-msgstr ""
+msgstr "Előfordulás"
#: editor/code_editor.cpp
msgid "Whole Words"
-msgstr ""
+msgstr "Teljes szavak"
#: editor/code_editor.cpp
msgid "Selection Only"
-msgstr ""
+msgstr "Csak a kiválsztás"
#: editor/code_editor.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -398,19 +402,19 @@ msgstr ""
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Search"
-msgstr ""
+msgstr "Keresés"
#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
-msgstr ""
+msgstr "Találat"
#: editor/code_editor.cpp
msgid "Next"
-msgstr ""
+msgstr "Következő"
#: editor/code_editor.cpp
msgid "Not found!"
-msgstr ""
+msgstr "Nincs találat!"
#: editor/code_editor.cpp
msgid "Replace By"
@@ -434,23 +438,23 @@ msgstr ""
#: editor/code_editor.cpp
msgid "Zoom In"
-msgstr ""
+msgstr "Nagyítás közelítés"
#: editor/code_editor.cpp
msgid "Zoom Out"
-msgstr ""
+msgstr "Nagyítás távolítás"
#: editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Nagyítás Visszaállítása"
#: editor/code_editor.cpp editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr ""
+msgstr "Sor:"
#: editor/code_editor.cpp
msgid "Col:"
-msgstr ""
+msgstr "Oszlop:"
#: editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
@@ -535,48 +539,48 @@ msgstr ""
#: editor/connections_dialog.cpp
msgid "Connect.."
-msgstr ""
+msgstr "Kapcsolódás..."
#: editor/connections_dialog.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Disconnect"
-msgstr ""
+msgstr "Szétkapcsol"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr ""
+msgstr "Jelzések"
#: editor/create_dialog.cpp
msgid "Create New"
-msgstr ""
+msgstr "Új létrehozása"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
msgid "Favorites:"
-msgstr ""
+msgstr "Kedvencek:"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
msgid "Recent:"
-msgstr ""
+msgstr "Legutóbbi:"
#: editor/create_dialog.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/quick_open.cpp editor/settings_config_dialog.cpp
msgid "Search:"
-msgstr ""
+msgstr "Keresés:"
#: editor/create_dialog.cpp editor/editor_help.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/quick_open.cpp
msgid "Matches:"
-msgstr ""
+msgstr "Találatok:"
#: editor/create_dialog.cpp editor/editor_help.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_editor_debugger.cpp
msgid "Description:"
-msgstr ""
+msgstr "Leírás:"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
@@ -600,7 +604,7 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Dependencies"
-msgstr ""
+msgstr "Függőségek"
#: editor/dependency_editor.cpp
msgid "Resource"
@@ -610,7 +614,7 @@ msgstr ""
#: editor/project_manager.cpp editor/project_settings_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Path"
-msgstr ""
+msgstr "Útvonal"
#: editor/dependency_editor.cpp
msgid "Dependencies:"
@@ -622,19 +626,26 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Dependency Editor"
-msgstr ""
+msgstr "Függőség szerkesztő"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Megnyit"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr ""
+msgstr "Tulajdonosai:"
#: editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
-msgstr ""
+msgstr "Eltávolítja a kiválasztott fájlokat a projektből? (nem visszavonható)"
#: editor/dependency_editor.cpp
msgid ""
@@ -645,19 +656,19 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "Nem eltávolítható:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr ""
+msgstr "Hiba betöltéskor:"
#: editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
+msgstr "A Scene-t nem sikerült betölteni a hiányzó függőségek miatt:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
-msgstr ""
+msgstr "Valahogy megnyit"
#: editor/dependency_editor.cpp
msgid "Which action should be taken?"
@@ -673,7 +684,7 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
+msgstr "Véglegesen törli a(z) %d eleme(ke)t? (Nem visszavonható!)"
#: editor/dependency_editor.cpp
msgid "Owns"
@@ -689,26 +700,34 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr ""
+msgstr "Törli a kiválasztott fájlokat?"
#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
#: editor/editor_node.cpp editor/filesystem_dock.cpp
#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
msgid "Delete"
-msgstr ""
+msgstr "Töröl"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Szótár kulcs módosítás"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Szótár érték módosítás"
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
-msgstr ""
+msgstr "Köszönet a Godot közösségétől!"
#: editor/editor_about.cpp
msgid "Thanks!"
-msgstr ""
+msgstr "Kösz!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Godot Engine közreműködők"
#: editor/editor_about.cpp
msgid "Project Founders"
@@ -773,6 +792,10 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"A Godot Engine több harmadik fél ingyenes és nyílt forráskódú könyvtáraira "
+"támaszkodik, amelyek mindegyike kompatibilis az MIT licenc feltételeivel. Az "
+"alábbiakban felsoroljuk az összes ilyen harmadik fél összetevőjét, a "
+"vonatkozó szerzői jogi nyilatkozatokkal és licencfeltételekkel együtt."
#: editor/editor_about.cpp
msgid "All Components"
@@ -1106,17 +1129,15 @@ msgid "File Exists, Overwrite?"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-msgid "All Recognized"
+msgid "Select Current Folder"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-msgid "All Files (*)"
+msgid "All Recognized"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
@@ -1185,7 +1206,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1471,10 +1492,25 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
-msgid "Copy Params"
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
msgstr ""
#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Paraméterek másolása"
+
+#: editor/editor_node.cpp
msgid "Paste Params"
msgstr ""
@@ -1484,7 +1520,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Copy Resource"
-msgstr ""
+msgstr "Forrás másolása"
#: editor/editor_node.cpp
msgid "Make Built-In"
@@ -1580,6 +1616,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1705,11 +1745,19 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1721,6 +1769,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1785,13 +1837,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2049,11 +2100,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2112,7 +2163,7 @@ msgstr ""
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2272,6 +2323,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2306,6 +2361,100 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2329,12 +2478,20 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2352,12 +2509,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2411,7 +2562,7 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Copy Path"
-msgstr ""
+msgstr "Útvonal másaolása"
#: editor/filesystem_dock.cpp
msgid "Rename.."
@@ -2615,8 +2766,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2627,6 +2777,10 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2688,7 +2842,7 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr ""
+msgstr "HIBA: Nincs másolható animáció!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
@@ -2768,6 +2922,55 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Copy Animation"
+msgstr "Animáció másolása"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Leírás:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -2961,18 +3164,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -2981,30 +3176,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3033,14 +3212,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3153,6 +3324,34 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3273,10 +3472,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3327,6 +3532,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3352,7 +3561,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
-msgstr ""
+msgstr "Póz másolása"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
@@ -3511,6 +3720,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3543,6 +3756,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3558,58 +3775,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4007,16 +4172,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4153,7 +4348,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4198,6 +4392,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4249,6 +4457,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4259,13 +4471,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4369,33 +4579,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
-msgstr ""
+msgstr "Másolás"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr ""
@@ -4417,6 +4616,22 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4462,12 +4677,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4476,7 +4689,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4641,6 +4853,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4721,6 +4941,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4753,6 +4977,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4880,6 +5112,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5154,6 +5390,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5327,7 +5567,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5587,6 +5827,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5620,10 +5866,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5745,11 +5987,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6187,7 +6429,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Copy Node Path"
-msgstr ""
+msgstr "Node útvonal másaolása"
#: editor/scene_tree_dock.cpp
msgid "Delete (No Confirm)"
@@ -6216,6 +6458,14 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6398,6 +6648,10 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6454,18 +6708,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6597,49 +6839,49 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6652,15 +6894,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6728,11 +6978,7 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
+msgid "Clear Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6854,7 +7100,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6862,7 +7108,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6870,7 +7116,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7019,7 +7265,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Copy Nodes"
-msgstr ""
+msgstr "Node-ok másolása"
#: modules/visual_script/visual_script_editor.cpp
msgid "Cut Nodes"
@@ -7096,11 +7342,19 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7192,18 +7446,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7262,6 +7504,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7315,14 +7565,18 @@ msgstr ""
#: scene/gui/dialogs.cpp
msgid "Cancel"
-msgstr ""
+msgstr "Mégse"
#: scene/gui/dialogs.cpp
msgid "Alert!"
-msgstr ""
+msgstr "Figyelem!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
+msgstr "Kérem erősítse meg..."
+
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
msgstr ""
#: scene/gui/popup.cpp
@@ -7339,6 +7593,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Másik)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7352,19 +7610,24 @@ msgid ""
"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
"texture to some node for display."
msgstr ""
+"Ez a nézet nincs beállítva renderelési célnak. Ha azt szeretné, hogy a "
+"tartalma közvetlenül a képernyőn jelenjen meg, akkor készítsen rajta egy "
+"gyermek Control-t, így megkaphatja a méretét. Ellenkező esetben készítsen "
+"egy RenderTarget-et, és rendelje hozzá a belső textúrát egy Node-hoz a "
+"megjelenítéshez."
#: scene/resources/dynamic_font.cpp
msgid "Error initializing FreeType."
-msgstr ""
+msgstr "FreeType inicializálási hiba."
#: scene/resources/dynamic_font.cpp
msgid "Unknown font format."
-msgstr ""
+msgstr "Ismeretlen betűtípus formátum."
#: scene/resources/dynamic_font.cpp
msgid "Error loading font."
-msgstr ""
+msgstr "Hiba a betűtípus betöltésekor."
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
-msgstr ""
+msgstr "Érvénytelen betűtípus méret."
diff --git a/editor/translations/id.po b/editor/translations/id.po
index 06fc7eb599..ad3ddb7862 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -6,6 +6,7 @@
# Abdul Aziz Muslim Alqudsy <abdul.aziz.muslim.alqudsy@gmail.com>, 2016.
# Andevid Dynmyn <doyan4forum@gmail.com>, 2016.
# Andinawan Asa <asaandinawan@gmail.com>, 2016.
+# Damar Inderajati <damarind@gmail.com>, 2017.
# Damar S. M <the.last.walla@gmail.com>, 2017.
# Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016.
# Sofyan Sugianto <sofyanartem@gmail.com>, 2017.
@@ -15,15 +16,15 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-09-13 10:49+0000\n"
-"Last-Translator: Sofyan Sugianto <sofyanartem@gmail.com>\n"
+"PO-Revision-Date: 2017-11-23 18:47+0000\n"
+"Last-Translator: Damar Inderajati <damarind@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
"godot/id/>\n"
"Language: id\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -50,14 +51,12 @@ msgid "Anim Change Value"
msgstr "Ubah Nilai Animasi"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Change Call"
msgstr "Ubah Panggilan Anim"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Add Track"
-msgstr "Tambah Track Anim"
+msgstr "Tambah Trek Anim"
#: editor/animation_editor.cpp
#, fuzzy
@@ -65,41 +64,36 @@ msgid "Anim Duplicate Keys"
msgstr "Duplikat Tombol Anim"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Move Anim Track Up"
-msgstr "Pindahkan Track Anim ke Atas"
+msgstr "Pindah Trek Anim ke Atas"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Move Anim Track Down"
-msgstr "Pindahkan Track Anim ke Bawah"
+msgstr "Pindahkan Trek Anim ke Bawah"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Remove Anim Track"
-msgstr "Hapus Track Anim"
+msgstr "Hapus Trek Anim"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
msgstr "Atur transisi ke:"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Track Rename"
-msgstr "Namai Kembali Track Anim"
+msgstr "Namai Kembali Trek Anim"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr ""
+msgstr "Ubah Interpolasi Trek Anim"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
msgstr "Ganti Mode Nilai Track Anim"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Track Change Wrap Mode"
-msgstr "Ganti Mode Nilai Track Anim"
+msgstr "Ubah Trek Anim ke Wrap Mode"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
@@ -114,6 +108,7 @@ msgid "Anim Delete Keys"
msgstr "Hapus Kunci Anim"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Duplikat Pilihan"
@@ -146,14 +141,12 @@ msgid "Anim Move Keys"
msgstr "Pindahkan Kunci Anim"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Scale Selection"
-msgstr "Beri Skala Seleksi"
+msgstr "Seleksi Skala"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Scale From Cursor"
-msgstr "Beri Skala dari Kursor"
+msgstr "Skala dari Kursor"
#: editor/animation_editor.cpp
msgid "Goto Next Step"
@@ -173,12 +166,10 @@ msgid "Constant"
msgstr "Konstan"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "In"
-msgstr "Kedalam"
+msgstr "Masuk"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Out"
msgstr "Keluar"
@@ -220,19 +211,16 @@ msgid "Create"
msgstr "Buat"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Create & Insert"
-msgstr "Anim Buat & Masukan"
+msgstr "Buat & Sisipkan Anim"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Insert Track & Key"
-msgstr "Masukkan Track & Tombol Anim"
+msgstr "Sisipkan Trek & Kunci"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Insert Key"
-msgstr "Anim Masukkan Tombol"
+msgstr "Sisipkan Key Anim"
#: editor/animation_editor.cpp
msgid "Change Anim Len"
@@ -247,9 +235,8 @@ msgid "Anim Create Typed Value Key"
msgstr "Buat Nilai Kunci Animasi Tertulis"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Insert"
-msgstr "Anim Masukkan"
+msgstr "Sisipkan Anim"
#: editor/animation_editor.cpp
msgid "Anim Scale Keys"
@@ -308,7 +295,6 @@ msgid "Enable editing of individual keys by clicking them."
msgstr "Aktifkan penyuntingan tombol-tombol individual dengan mengkliknya."
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim. Optimizer"
msgstr "Anim. Optimisasi"
@@ -442,7 +428,6 @@ msgid "Replace By"
msgstr "Ganti dengan"
#: editor/code_editor.cpp
-#, fuzzy
msgid "Case Sensitive"
msgstr "Case Sensitive"
@@ -488,6 +473,8 @@ msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
+"Target metode tidak ditemukan! Tentukan metode yang sah atau lampirkan skrip "
+"ke target Node."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
@@ -596,7 +583,6 @@ msgstr "Cari:"
#: editor/create_dialog.cpp editor/editor_help.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/quick_open.cpp
-#, fuzzy
msgid "Matches:"
msgstr "Kecocokan:"
@@ -661,51 +647,55 @@ msgstr "Editor Ketergantungan"
msgid "Search Replacement Resource:"
msgstr "Cari Resource Pengganti:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Buka"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Pemilik Dari:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Remove selected files from the project? (no undo)"
-msgstr "Hapus file-file yang dipilih dari proyek? (tanpa membatalkan/undo)"
+msgstr ""
+"Hapus file-file yang dipilih dari proyek? (tidak bisa dibatalkan / undo)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
-"File-file yang telah dihapus diperlukan oleh resource-resource lainnya agar "
-"mereka bekerja.\n"
-"Hapus saja mereka? (tanpa membatalkan/undo)"
+"File-file yang telah dihapus diperlukan oleh sumber lain agar mereka dapat "
+"bekerja.\n"
+"Hapus saja? (tidak bisa dibatalkan/undo)"
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "Tidak bisa dibuang:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr "Error memuat:"
+msgstr "Error saat memuat:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Scene failed to load due to missing dependencies:"
-msgstr "Scene gagal memuat disebabkan oleh ketergantungan yang hilang:"
+msgstr "Scene gagal dimuat disebabkan oleh dependensi yang hilang:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
-msgstr "Buka Saja"
+msgstr "Buka Paksa"
#: editor/dependency_editor.cpp
msgid "Which action should be taken?"
msgstr "Tindakan mana yang seharusnya diambil?"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Fix Dependencies"
-msgstr "Perbaiki Ketergantungan"
+msgstr "Perbaiki Dependensi"
#: editor/dependency_editor.cpp
msgid "Errors loading!"
@@ -724,7 +714,6 @@ msgid "Resources Without Explicit Ownership:"
msgstr "Resource-resource tanpa kepemilikan yang jelas:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
-#, fuzzy
msgid "Orphan Resource Explorer"
msgstr "Penjelajah Resource Orphan"
@@ -739,73 +728,82 @@ msgstr "Hapus file yang dipilih?"
msgid "Delete"
msgstr "Hapus"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Ubah Kunci Kamus"
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "Ubah Nilai Array"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
-msgstr ""
+msgstr "Terimakasih dari komunitas Godot!"
#: editor/editor_about.cpp
msgid "Thanks!"
-msgstr ""
+msgstr "Terimakasih!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Godot Engine kontributor"
#: editor/editor_about.cpp
msgid "Project Founders"
-msgstr ""
+msgstr "Penemu Proyek"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "Pengembang Utama"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr ""
+msgstr "Manajer Proyek"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "Pengembang"
#: editor/editor_about.cpp
msgid "Authors"
-msgstr ""
+msgstr "Pengarang"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Sponsor Platinum"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Sponsor Emas"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Sponsor Mini"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Donatur Emas"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Donatur Perak"
#: editor/editor_about.cpp
msgid "Bronze Donors"
-msgstr ""
+msgstr "Donatur Perunggu"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Donatur"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "Lisensi"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "Lisensi Pihak Ketiga"
#: editor/editor_about.cpp
msgid ""
@@ -814,6 +812,10 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"Godot Engine mengandalkan sejumlah perpustakaan bebas dan sumber terbuka "
+"pihak ketiga, semuanya cocok dengan persyaratan lisensi MIT. Berikut adalah "
+"daftar lengkap semua komponen pihak ketiga dengan pernyataan hak cipta dan "
+"lisensi masing-masing."
#: editor/editor_about.cpp
#, fuzzy
@@ -827,11 +829,11 @@ msgstr "Konstanta:"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "Lisensi"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "Gagal saat membuka paket, tidak dalam bentuk zip."
#: editor/editor_asset_installer.cpp
#, fuzzy
@@ -840,12 +842,12 @@ msgstr "Mengimpor ulang"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr ""
+msgstr "Paket Sukses Terpasang!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "Sukses!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
@@ -854,15 +856,15 @@ msgstr "Pasang"
#: editor/editor_asset_installer.cpp
msgid "Package Installer"
-msgstr ""
+msgstr "Paket Instalasi"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr ""
+msgstr "Pengeras Suara"
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
-msgstr ""
+msgstr "Tambahkan Efek"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -871,27 +873,27 @@ msgstr "Namai kembali Autoload"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
-msgstr ""
+msgstr "Alih Audio Bus Solo"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr ""
+msgstr "Alih Audio Bus Mute"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "Alih Audio Bus Bypass Efek"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
-msgstr ""
+msgstr "Pilih Pengiriman Suara Bus"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "Tambah Efek Suara Bus"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "Pindah Efek Bus"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -900,28 +902,28 @@ msgstr "Hapus yang Dipilih"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr ""
+msgstr "Suara Bus, Geser dan Taruh untuk atur ulang."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr ""
+msgstr "Tunggal"
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Bisu"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr ""
+msgstr "Jalan Lingkar"
#: editor/editor_audio_buses.cpp
msgid "Bus options"
-msgstr ""
+msgstr "Opsi Bus"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr ""
+msgstr "Gandakan"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -935,11 +937,11 @@ msgstr "Hapus yang Dipilih"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus"
-msgstr ""
+msgstr "Tambah Suara Bus"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "Master Bus tidak dapat dihapus!"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -963,49 +965,49 @@ msgstr "Pindahkan Kunci Tambah"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
-msgstr ""
+msgstr "Simpan Layout Suara Bus Ke.."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout.."
-msgstr ""
+msgstr "Lokasi untuk Layout Baru.."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "Buka Layout Suara Bus"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "Tidak ada 'res://default_bus_layout.tres' berkas."
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
-msgstr ""
+msgstr "Berkas salah, tidak layout suara bus."
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
-msgstr ""
+msgstr "Tambahkan Bus"
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr ""
+msgstr "Buat Layout Bus Baru."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Load"
-msgstr ""
+msgstr "Muat"
#: editor/editor_audio_buses.cpp
msgid "Load an existing Bus Layout."
-msgstr ""
+msgstr "Muat Layout Bus yang ada."
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr ""
+msgstr "Simpan Sebagai"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "Simpan Layout Bus ke berkas."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
#, fuzzy
@@ -1014,7 +1016,7 @@ msgstr "Bawaan"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "Muat default Layout Bus."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1156,13 +1158,18 @@ msgstr "Mengemas"
#: editor/editor_export.cpp platform/javascript/export/export.cpp
msgid "Template file not found:\n"
-msgstr ""
+msgstr "Template berkas tidak ditemukan:\n"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File Exists, Overwrite?"
msgstr "File telah ada, Overwrite?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Buat Folder"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Semua diakui"
@@ -1170,12 +1177,6 @@ msgstr "Semua diakui"
msgid "All Files (*)"
msgstr "Semua File-file (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Buka"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Buka sebuah File"
@@ -1245,7 +1246,7 @@ msgstr "Pindahkan Favorit Keatas"
msgid "Move Favorite Down"
msgstr "Pindahkan Favorit Kebawah"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Go to parent folder"
msgstr "Tidak dapat membuat folder."
@@ -1383,6 +1384,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Untuk saat ini tidak ada deskripsi properti ini. Tolong bantu kita "
+"dengan[color=$color][url=$url]kontribusi[/url][/color]!"
#: editor/editor_help.cpp
#, fuzzy
@@ -1398,6 +1401,8 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Untuk saat ini tidak ada deskripsi metode ini. Tolong bantu kita dengan "
+"[color=$color][url=$url]kontribusi[/url][/color]!"
#: editor/editor_help.cpp
msgid "Search Text"
@@ -1452,7 +1457,7 @@ msgstr "Error saat menyimpan."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "akhir dari berkas tak terduga '%s'."
#: editor/editor_node.cpp
#, fuzzy
@@ -1530,18 +1535,26 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Sumber ini termasuk pada scene yang telah terimpor, jadi tidak dapat "
+"diubah.\n"
+"Tolong baca dokumentasi yang relevan dalam impor scenes untuk pemahaman cara "
+"kerja."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Sumber ini termasuk ke scene warisan.\n"
+"Perubahan tidak akan tersimpan ke scene ini."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Sumber ini telah terimpor, jadi tidak dapat diubah. Umbah pengaturan pada "
+"panel impor dan impor kembali."
#: editor/editor_node.cpp
msgid ""
@@ -1550,6 +1563,28 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Scene ini telah terimpor, jadi pengubahan tidak tersimpan.\n"
+"Instansi atau warisan membuat perubahan diperbolehkan.\n"
+"Baca dokumentasi yang relevan untuk impor scene dan pemahaman lebih lanjut "
+"tentang workflow ini."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Ini merupakan objek remote, jadi perubahan tidak tersimpan.\n"
+"Baca dokumentasi yang relevan untuk pemahaman lebih lanjut tentang workflow "
+"ini."
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1647,7 +1682,7 @@ msgstr "Simpan sebuah File"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "Simpan perubahan '%s' sebelum tutup?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
@@ -1655,7 +1690,7 @@ msgstr "Simpan Scene Sebagai.."
#: editor/editor_node.cpp
msgid "No"
-msgstr ""
+msgstr "Tidak"
#: editor/editor_node.cpp
msgid "Yes"
@@ -1667,19 +1702,24 @@ msgstr "Scene ini belum pernah disimpan. Simpan sebelum menjalankan?"
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr ""
+msgstr "Operasi ini tidak dapat diselesaikan tanpa scene."
#: editor/editor_node.cpp
msgid "Export Mesh Library"
msgstr "Ekspor Mesh Library"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a root node."
+msgstr "Tindakan ini tidak dapat dibatalkan. Pulihkan saja?"
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Ekspor Tile Set"
#: editor/editor_node.cpp
msgid "This operation can't be done without a selected node."
-msgstr ""
+msgstr "Operasi ini tidak dapat diselesaikan tanpa node yang terpilih."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
@@ -1711,7 +1751,7 @@ msgstr "Keluar editor?"
#: editor/editor_node.cpp
msgid "Open Project Manager?"
-msgstr ""
+msgstr "Buka Project Manager?"
#: editor/editor_node.cpp
#, fuzzy
@@ -1733,6 +1773,8 @@ msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Opsi ini sudah usang. Situasi dimana penyegaran harus dipaksa dianggar "
+"sebagai bug. Tolong laporkan."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -1741,10 +1783,13 @@ msgstr "Pilih sebuah Scene Utama"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
msgstr ""
+"Tidak dapat mengaktifkan addon plugin pada : '%s' parsing dari pengaturan "
+"gagal."
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
+"Tidak dapat mencari bidang script untuk addon plugin pada: 'res://addons/%s'."
#: editor/editor_node.cpp
#, fuzzy
@@ -1755,16 +1800,21 @@ msgstr "Error memuat font."
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
msgstr ""
+"Tidak dapat memuat addon script dari jalur: '%s' tipe basis tidak "
+"EditorPlugin."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
+"Tidak dapat memuat addon script dari jalur: '%s' Script tidak pada mode tool."
#: editor/editor_node.cpp
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
+"Scene '%s' terimpor otomatis, jadi tidak dapat diubah.\n"
+"Untuk melakukan perubahan, warisan baru scene dapat dibuat."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1786,7 +1836,7 @@ msgstr "Scene '%s' memiliki dependensi yang rusak:"
#: editor/editor_node.cpp
msgid "Clear Recent Scenes"
-msgstr ""
+msgstr "Bersihkan Scenes baru-baru ini"
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -1806,12 +1856,23 @@ msgid "Switch Scene Tab"
msgstr "Pilih Tab Scene"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+#, fuzzy
+msgid "%d more files or folders"
+msgstr "%d file atau folder lagi"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "%d more folders"
msgstr "%d file lagi"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d file atau folder lagi"
+#, fuzzy
+msgid "%d more files"
+msgstr "%d file lagi"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Posisi Pengait"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1823,6 +1884,11 @@ msgid "Toggle distraction-free mode."
msgstr "Mode Tanpa Gangguan"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Add a new scene."
+msgstr "Tambah tracks baru."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Suasana"
@@ -1840,7 +1906,7 @@ msgstr "Tab sebelumnya"
#: editor/editor_node.cpp
msgid "Filter Files.."
-msgstr ""
+msgstr "Saring berkas.."
#: editor/editor_node.cpp
msgid "Operations with scene files."
@@ -1864,19 +1930,19 @@ msgstr "Simpan Scene"
#: editor/editor_node.cpp
msgid "Save all Scenes"
-msgstr ""
+msgstr "Simpan semua Scene"
#: editor/editor_node.cpp
msgid "Close Scene"
-msgstr ""
+msgstr "Tutup Scene"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Open Recent"
-msgstr ""
+msgstr "Buka baru-baru ini"
#: editor/editor_node.cpp
msgid "Convert To.."
-msgstr ""
+msgstr "Ubah ke.."
#: editor/editor_node.cpp
msgid "MeshLibrary.."
@@ -1884,50 +1950,49 @@ msgstr ""
#: editor/editor_node.cpp
msgid "TileSet.."
-msgstr ""
+msgstr "TileSet.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Batal"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
-msgstr ""
+msgstr "Ulangi"
#: editor/editor_node.cpp
msgid "Revert Scene"
-msgstr ""
+msgstr "Kembalikan Scene"
#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr ""
+msgstr "Macam-macam proyek atau alat scene-wide."
#: editor/editor_node.cpp
msgid "Project"
-msgstr ""
+msgstr "Proyek"
#: editor/editor_node.cpp
msgid "Project Settings"
-msgstr ""
+msgstr "Pengaturan Proyek"
#: editor/editor_node.cpp
msgid "Run Script"
-msgstr ""
+msgstr "Jalankan Script"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export"
-msgstr ""
+msgstr "Ekspor"
#: editor/editor_node.cpp
msgid "Tools"
-msgstr ""
+msgstr "Alat"
#: editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr ""
+msgstr "Keluar ke daftar proyek"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Debug"
@@ -1935,17 +2000,19 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr ""
+msgstr "Deploy dengan Remote Debug"
#: editor/editor_node.cpp
msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
msgstr ""
+"Ketika ekspor atau deploying, hasil executable akan mencoba terhubung ke IP "
+"komputer dengan untuk debug."
#: editor/editor_node.cpp
msgid "Small Deploy with Network FS"
-msgstr ""
+msgstr "Deploy kecil dengan jaringan FS"
#: editor/editor_node.cpp
msgid ""
@@ -1956,30 +2023,39 @@ msgid ""
"On Android, deploy will use the USB cable for faster performance. This "
"option speeds up testing for games with a large footprint."
msgstr ""
+"Ketika opsi ini aktif, ekspor atau deploy akan menghasilkan minimal "
+"executable.\n"
+"Filesystem akan tersedia dari proyek dari editor melalui jaringan.\n"
+"Pada Android, deploy akan menggunakan kabel USB untuk performa yang lebih "
+"cepat. Opsi ini mempercepat pengujian dengan jejak kaki yang besar."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
-msgstr ""
+msgstr "Collision Shapes terlihat"
#: editor/editor_node.cpp
msgid ""
"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
"running game if this option is turned on."
msgstr ""
+"Collision shapes dan raycast nodes (untuk 2D dan 3D) akan terlihat pada saat "
+"permainan berjalan jika opsi ini aktif."
#: editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr ""
+msgstr "Navigasi terlihat"
#: editor/editor_node.cpp
msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
msgstr ""
+"Navigasi meshes dan poligon akan terlihat saat game berjalan jika opsi ini "
+"aktif."
#: editor/editor_node.cpp
msgid "Sync Scene Changes"
-msgstr ""
+msgstr "Sinkronasi Perubahan Scene"
#: editor/editor_node.cpp
msgid ""
@@ -1988,10 +2064,14 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"Ketika opsi ini aktif, perubahan yang dibuat pada scene lewat editor akan di "
+"replika pada permainan yang sedang berjalan.\n"
+"Ketika penggunaan remote pada sebuah perangkat, akan lebih efisien dengan "
+"jaringan filesystem."
#: editor/editor_node.cpp
msgid "Sync Script Changes"
-msgstr ""
+msgstr "Sinkronasi Perubahan Script"
#: editor/editor_node.cpp
msgid ""
@@ -2000,6 +2080,10 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"Ketika opsi ini aktif, perubahan script yang tersimpan akan di muat kembali "
+"pada permainan yang sedang berjalan.\n"
+"Ketika penggunaan remote pada sebuah perngakat, akan lebih efisien jika "
+"jaringan filesystem."
#: editor/editor_node.cpp
#, fuzzy
@@ -2008,11 +2092,11 @@ msgstr "Edit"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr ""
+msgstr "Pengaturan Editor"
#: editor/editor_node.cpp
msgid "Editor Layout"
-msgstr ""
+msgstr "Tata Letak Editor"
#: editor/editor_node.cpp
#, fuzzy
@@ -2026,7 +2110,7 @@ msgstr "Memuat Ekspor Template-template."
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "Bantuan"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
@@ -2034,7 +2118,7 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Online Docs"
-msgstr ""
+msgstr "Online Dokumentasi"
#: editor/editor_node.cpp
msgid "Q&A"
@@ -2042,7 +2126,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "Pelacak Isu"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -2050,15 +2134,15 @@ msgstr "Komunitas"
#: editor/editor_node.cpp
msgid "About"
-msgstr ""
+msgstr "Tentang"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr ""
+msgstr "Mainkan proyek."
#: editor/editor_node.cpp
msgid "Play"
-msgstr ""
+msgstr "Mainkan"
#: editor/editor_node.cpp
msgid "Pause the scene"
@@ -2070,75 +2154,75 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Stop the scene."
-msgstr ""
+msgstr "Hentikan scene."
#: editor/editor_node.cpp
msgid "Stop"
-msgstr ""
+msgstr "Hentikan"
#: editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr ""
+msgstr "Mainkan scene redaksi."
#: editor/editor_node.cpp
msgid "Play Scene"
-msgstr ""
+msgstr "Mainkan Scene"
#: editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "Mainkan custom scene"
#: editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "Mainkan Custom Scene"
#: editor/editor_node.cpp
msgid "Spins when the editor window repaints!"
-msgstr ""
+msgstr "Putar ketika jendela editor cat ulang!"
#: editor/editor_node.cpp
msgid "Update Always"
-msgstr ""
+msgstr "Selalu Perbarui"
#: editor/editor_node.cpp
msgid "Update Changes"
-msgstr ""
+msgstr "Perbarui Perubahan"
#: editor/editor_node.cpp
msgid "Disable Update Spinner"
-msgstr ""
+msgstr "Nonaktifkan Perbaruan Spinner"
#: editor/editor_node.cpp
msgid "Inspector"
-msgstr ""
+msgstr "Inspektur"
#: editor/editor_node.cpp
msgid "Create a new resource in memory and edit it."
-msgstr ""
+msgstr "Buat sumber baru pada memori dan ubah."
#: editor/editor_node.cpp
msgid "Load an existing resource from disk and edit it."
-msgstr ""
+msgstr "Muat sumber tersedia dari disk dan ubah."
#: editor/editor_node.cpp
msgid "Save the currently edited resource."
-msgstr ""
+msgstr "Simpan sumber yang sedang diatur."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Save As.."
-msgstr ""
+msgstr "Simpan Sebagai.."
#: editor/editor_node.cpp
msgid "Go to the previous edited object in history."
-msgstr ""
+msgstr "Ke objek sebelum diubah pada histori."
#: editor/editor_node.cpp
msgid "Go to the next edited object in history."
-msgstr ""
+msgstr "Ke object terdireksi berikutnya pada histori."
#: editor/editor_node.cpp
msgid "History of recently edited objects."
-msgstr ""
+msgstr "Histori dari objek terdireksi baru-baru saja."
#: editor/editor_node.cpp
msgid "Object properties."
@@ -2146,23 +2230,23 @@ msgstr "Properti Objek."
#: editor/editor_node.cpp
msgid "Changes may be lost!"
-msgstr ""
+msgstr "Perubahan mungkin hilang!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "Impor"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "Berkas Sistem"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
#, fuzzy
msgid "Node"
msgstr "Titik"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Berkas Sistem"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Luaran"
@@ -2224,7 +2308,7 @@ msgstr "Buka Penyunting 3D"
msgid "Open Script Editor"
msgstr "Buka Penyunting Skrip"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "Buka Pustaka Aset"
@@ -2238,7 +2322,7 @@ msgstr "Buka Penyunting Sebelumnya"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
-msgstr ""
+msgstr "Buat Pratinjau Mesh"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
@@ -2246,7 +2330,7 @@ msgstr ""
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr ""
+msgstr "Plugins Terpasang:"
#: editor/editor_plugin_settings.cpp
msgid "Update"
@@ -2255,11 +2339,11 @@ msgstr "Perbarui"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Version:"
-msgstr ""
+msgstr "Versi:"
#: editor/editor_plugin_settings.cpp
msgid "Author:"
-msgstr ""
+msgstr "Pembuat:"
#: editor/editor_plugin_settings.cpp
msgid "Status:"
@@ -2267,23 +2351,23 @@ msgstr ""
#: editor/editor_profiler.cpp
msgid "Stop Profiling"
-msgstr ""
+msgstr "Hentikan Profiling"
#: editor/editor_profiler.cpp
msgid "Start Profiling"
-msgstr ""
+msgstr "Jalankan Profilling"
#: editor/editor_profiler.cpp
msgid "Measure:"
-msgstr ""
+msgstr "Ukuran:"
#: editor/editor_profiler.cpp
msgid "Frame Time (sec)"
-msgstr ""
+msgstr "Waktu Frame (sec)"
#: editor/editor_profiler.cpp
msgid "Average Time (sec)"
-msgstr ""
+msgstr "Waktu Rata-rata (sec)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -2291,27 +2375,27 @@ msgstr ""
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
-msgstr ""
+msgstr "Frame Fisika %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
-msgstr ""
+msgstr "Waktu:"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr ""
+msgstr "Termasuk"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr ""
+msgstr "Diri"
#: editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr ""
+msgstr "Bingkai #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Pilih perangkat pada daftar"
#: editor/editor_run_native.cpp
msgid ""
@@ -2384,6 +2468,11 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Retrieving mirrors, please wait.."
+msgstr "Gangguan koneks, silakan coba lagi."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2420,6 +2509,112 @@ msgid "Importing:"
msgstr "Mengimpor:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Menyambungkan.."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Tidak ada respon."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "Tidak dapat membuat folder."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "Gagal menyimpan atlas:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "Menyambungkan.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Disconnected"
+msgstr "Tidak tersambung"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Menyambungkan.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "Menyambungkan.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "Menghubungkan"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Menguji"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "Error memuat:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "Menyambungkan.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "SSL Handshake Error"
+msgstr "Muat Galat"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2446,12 +2641,21 @@ msgstr "Hapus file yang dipilih?"
msgid "Export Template Manager"
msgstr "Memuat Ekspor Template-template."
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Hapus Pilihan"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2469,13 +2673,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
-"\n"
-"Source: "
-msgstr "Resource"
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2747,8 +2944,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2759,6 +2955,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Hapus"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2904,6 +3105,56 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Deskripsi:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Tempel"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -3097,21 +3348,12 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Connection error, please try again."
msgstr "Gangguan koneks, silakan coba lagi."
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Can't connect."
-msgstr "Menyambungkan.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Can't connect to host:"
msgstr "Sambungkan Ke Node:"
@@ -3120,31 +3362,15 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Tidak ada respon."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Request failed, return code:"
msgstr "Format file yang diminta tidak diketahui:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3174,16 +3400,6 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Connecting.."
-msgstr "Menyambungkan.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "Menguji"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
msgstr "Error menyimpan resource!"
@@ -3296,6 +3512,38 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "Buat Subskribsi"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Hapus Variabel"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "Buat Subskribsi"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Hapus Tombol-tombol yang tidak sah"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3417,10 +3665,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3471,6 +3725,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3663,6 +3921,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3695,6 +3957,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3710,59 +3976,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "Pergi ke Barisan"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4161,16 +4374,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4311,7 +4554,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4356,6 +4598,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Sortir:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4407,6 +4664,10 @@ msgstr "Tutup Dokumentasi"
msgid "Close All"
msgstr "Tutup Semua"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Jalankan"
@@ -4418,13 +4679,11 @@ msgstr "Beralih Favorit"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Cari.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Pencarian Selanjutnya"
@@ -4530,33 +4789,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Potong"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Kopy"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Pilih Semua"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4579,6 +4827,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Pergi ke Baris"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4625,12 +4890,10 @@ msgid "Convert To Lowercase"
msgstr "Sambungkan Ke Node:"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4639,7 +4902,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4804,6 +5066,15 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Transisi"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4886,6 +5157,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4918,6 +5193,16 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "File:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "Beri Skala Seleksi"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -5052,6 +5337,11 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Mode Layar Penuh"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5329,6 +5619,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5506,7 +5800,7 @@ msgstr "Aktifkan"
#: editor/project_export.cpp
#, fuzzy
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr "Hapus Penampilan"
#: editor/project_export.cpp
@@ -5783,6 +6077,12 @@ msgstr ""
msgid "Can't run project"
msgstr "Menyambungkan.."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5816,10 +6116,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5944,13 +6240,12 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Mengatur.."
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6435,6 +6730,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Hapus"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6629,6 +6933,11 @@ msgid "Attach Node Script"
msgstr "Scene Baru"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Hapus"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6685,18 +6994,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6832,50 +7129,50 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"Tipe argument salah dalam menggunakan convert(), gunakan konstanta TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Tidak cukup bytes untuk menerjemahkan, atau format tidak sah."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "Argumen langkah adalah nol!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Bukan skrip dengan contoh"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Tidak berbasis pada skrip"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Tidak berbasis pada resource file"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Format kamus acuan tidak sah (@path hilang)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "Format kamus acuan tidak sah (tidak dapat memuat script pada @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Format kamus acuan tidak sah (skrip tidak sah pada @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Kamus acuan tidak sah (sub kelas tidak sah)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6890,15 +7187,24 @@ msgid "GridMap Duplicate Selection"
msgstr "Duplikat Pilihan"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Snap View"
+msgid "Floor:"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Grid Map"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Previous Floor"
+msgstr "Tab sebelumnya"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6969,13 +7275,8 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Hanya yang Dipilih"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Hanya yang Dipilih"
+msgid "Clear Selection"
+msgstr "Beri Skala Seleksi"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -7109,7 +7410,8 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+#, fuzzy
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"Tahan Meta untuk meletakkan sebuah Getter. Tahan Shift untuk meletakkan "
"generic signature."
@@ -7119,7 +7421,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7127,7 +7429,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7372,12 +7674,22 @@ msgstr "Tidak dapat membuat folder."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr "Tidak dapat membuat folder."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr "Memuat Ekspor Template-template."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
+msgstr "Tidak dapat membuat folder."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
msgstr "Tidak dapat membuat folder."
#: scene/2d/animated_sprite.cpp
@@ -7498,22 +7810,6 @@ msgid "Path property must point to a valid Node2D node to work."
msgstr ""
"Properti path harus menunjuk pada sebuah node Node2D yang sah untuk bekerja."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Properti path harus menunjuk pada node Viewport yang sah untuk bekerja. "
-"Viewport tersebut harus diatur ke mode 'render target'."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Pengaturan Vieport dalam properti path harus diatur sebagai 'render target' "
-"agar sprite bekerja."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7584,6 +7880,14 @@ msgstr ""
"Sebuah bentuk harus disediakan untuk CollisionShape untuk fungsi. Mohon "
"ciptakan sebuah resource bentuk untuk itu!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7659,6 +7963,11 @@ msgstr "Peringatan!"
msgid "Please Confirm..."
msgstr "Mohon konfirmasi..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Metode Publik:"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7676,6 +7985,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
#, fuzzy
msgid ""
@@ -7715,6 +8028,45 @@ msgstr "Error memuat font."
msgid "Invalid font size."
msgstr "Ukuran font tidak sah."
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "Resource"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Pergi ke Barisan"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Mengatur.."
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Hanya yang Dipilih"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Hanya yang Dipilih"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Properti path harus menunjuk pada node Viewport yang sah untuk bekerja. "
+#~ "Viewport tersebut harus diatur ke mode 'render target'."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Pengaturan Vieport dalam properti path harus diatur sebagai 'render "
+#~ "target' agar sprite bekerja."
+
#~ msgid "Filter:"
#~ msgstr "Filter:"
@@ -7734,9 +8086,6 @@ msgstr "Ukuran font tidak sah."
#~ msgid "Removed:"
#~ msgstr "Dihapus:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Gagal menyimpan atlas:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Tidak dapat menyimpan sub tekstur atlas:"
diff --git a/editor/translations/it.po b/editor/translations/it.po
index 45c48d6ac4..5b0d9a4154 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -4,17 +4,20 @@
# This file is distributed under the same license as the Godot source code.
#
# Dario Bonfanti <bonfi.96@hotmail.it>, 2016-2017.
+# Dario D'Ambra <legione0@gmail.com>, 2017.
# dariocavada <cavada@ectrlsolutions.com>, 2017.
+# Elia Zanaboni <elia.zanaboni@gmail.com>, 2017.
# Giovanni Solimeno (Crax97) <gsolimeno97@gmail.com>, 2017.
# Marco Melorio <m.melorio@icloud.com>, 2017.
+# Myself <whatamidoing.wt@gmail.com>, 2017.
# RealAquilus <JamesHeller@live.it>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2017-10-23 16:46+0000\n"
-"Last-Translator: Dario Bonfanti <bonfi.96@hotmail.it>\n"
+"PO-Revision-Date: 2017-11-25 22:47+0000\n"
+"Last-Translator: Myself <whatamidoing.wt@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
"Language: it\n"
@@ -22,7 +25,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -105,6 +108,7 @@ msgid "Anim Delete Keys"
msgstr "Anim Elimina Key"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Duplica Selezione"
@@ -641,6 +645,13 @@ msgstr "Editor Dipendenze"
msgid "Search Replacement Resource:"
msgstr "Cerca Risorsa di Rimpiazzo:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Apri"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Proprietari Di:"
@@ -714,6 +725,14 @@ msgstr "Eliminare i file selezionati?"
msgid "Delete"
msgstr "Elimina"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Cambia Chiave Dizionario"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Cambia Valore Dizionario"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Grazie dalla comunità di Godot!"
@@ -1132,6 +1151,11 @@ msgid "File Exists, Overwrite?"
msgstr "File Esistente, Sovrascrivere?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Crea Cartella"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Tutti i Riconosciuti"
@@ -1139,12 +1163,6 @@ msgstr "Tutti i Riconosciuti"
msgid "All Files (*)"
msgstr "Tutti i File (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Apri"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Apri un File"
@@ -1211,7 +1229,7 @@ msgstr "Sposta Preferito Su"
msgid "Move Favorite Down"
msgstr "Sposta Preferito Giù"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr "Vai nella cartella padre"
@@ -1517,6 +1535,27 @@ msgstr ""
"scene per comprendere meglio questo workflow."
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Questa risorsa appartiene a una scena che è stata importata, di conseguenza "
+"non è modificabile.\n"
+"Si consiglia di leggere la documentazione riguardante l'importazione delle "
+"scene per comprendere al meglio questa procedura."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Espandi tutto"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Comprimi tutto"
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr "Copia parametri"
@@ -1637,6 +1676,10 @@ msgid "Export Mesh Library"
msgstr "Esporta Libreria Mesh"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Questa operazione non può essere eseguita senza un nodo radice."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Esporta Tile Set"
@@ -1702,31 +1745,32 @@ msgid "Pick a Main Scene"
msgstr "Scegli una Scena Principale"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "Non riesco ad abilitare il plugin aggiunto a: '"
+msgstr ""
+"Non riesco ad abilitare il plugin aggiunto a: '%s' è fallita la lettura "
+"della configurazione."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
-"Impossibile trovare il campo per lo script aggiuntivo in: 'res://addons/"
+"Impossibile trovare il campo per lo script aggiuntivo in: 'res://addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Impossibile caricare uno script aggiuntivo dal percorso: '"
+msgstr "Impossibile caricare uno script aggiuntivo dal percorso: '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "Impossibile caricare uno script aggiuntivo dal percorso: '"
+msgstr ""
+"Impossibile caricare uno script aggiuntivo dal percorso: La tipologia di "
+"base di '%s' non è EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "Impossibile caricare uno script aggiuntivo dal percorso: '"
+msgstr ""
+"Impossibile caricare uno script aggiuntivo dal percorso: Lo script '%s' non "
+"è in tool mode."
#: editor/editor_node.cpp
msgid ""
@@ -1777,12 +1821,21 @@ msgid "Switch Scene Tab"
msgstr "Cambia Tab di Scena"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr "%d altri file o cartelle"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "%d altre cartelle"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "%d more files"
msgstr "%d altri file"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "% altri file o cartelle"
+msgid "Dock Position"
+msgstr "Posizione dock"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1793,6 +1846,10 @@ msgid "Toggle distraction-free mode."
msgstr "Abilita modalità senza distrazioni."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Aggiungi nuova scena."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Scena"
@@ -1857,13 +1914,12 @@ msgid "TileSet.."
msgstr "TileSet.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Annulla"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Redo"
@@ -2140,14 +2196,14 @@ msgid "Import"
msgstr "Importa"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "FileSystem"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Nodo"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "FileSystem"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Output"
@@ -2203,7 +2259,7 @@ msgstr "Apri Editor 3D"
msgid "Open Script Editor"
msgstr "Apri Editor Script"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "Apri Libreria degli Asset"
@@ -2367,6 +2423,10 @@ msgid "(Current)"
msgstr "(Corrente)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Recupero dei mirror, attendi..."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "Rimuovere versione '%s' del template?"
@@ -2403,6 +2463,108 @@ msgid "Importing:"
msgstr "Importo:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Non sono stati trovati link di download per questa versione. Il direct "
+"download è disponibile solamente per rilasci ufficiali."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Impossibile risolvete."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Impossibile connettersi."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Nessuna risposta."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Rich. Fall."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Ridirigi Loop."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Fallito:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Impossibile scrivere il file."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Download Completato."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Errore di connessione all'URL: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Connessione al mirror in corso.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Disconnesso"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Resolving"
+msgstr "Risolvendo.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Resolve"
+msgstr "Impossibile risolvete."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Connettendo.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "Impossibile connettersi."
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Connesso"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Richiedendo.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "Scarica"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "Connettendo.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "SSL Handshake Error"
+msgstr "Carica Errori"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "Versione Corrente:"
@@ -2426,6 +2588,15 @@ msgstr "Seleziona file template"
msgid "Export Template Manager"
msgstr "Gestore Template Esportazione"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Scarica Templates"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Select mirror from list: "
+msgstr "Seleziona il dispositivo dall'elenco"
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
@@ -2433,8 +2604,9 @@ msgstr ""
"tipi di file!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "Impossibile navigare a '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+"Impossibile navigare a '%s' perché non è stato trovato nel file system!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
@@ -2454,14 +2626,6 @@ msgstr ""
"reimportarlo manualmente."
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-"\n"
-"Sorgente: "
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr "Impossibile spostare/rinominare risorse root."
@@ -2608,31 +2772,28 @@ msgstr "Importa con Oggetti Separati"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "Importa con Oggetti Separati+Materiali"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
msgid "Import with Separate Objects+Animations"
-msgstr "Importa con Oggetti Separati"
+msgstr "Importa con Oggetti Separati+Animazioni"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Materials+Animations"
-msgstr "Importa con Materiali Separati"
+msgstr "Importa con Materiali Separati+Animazioni"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "Importa con Materiali Separati"
+msgstr "Importa con Oggetti+Materiali+Animazioni"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import as Multiple Scenes"
-msgstr "Importa Scena 3D"
+msgstr "Importa come Scene Multiple"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "Importa come Scene Multiple+Materiali"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
@@ -2665,7 +2826,7 @@ msgstr "Salvataggio.."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "Imposta come Default per '%s'"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
@@ -2711,9 +2872,8 @@ msgid "Edit Poly"
msgstr "Modifica Poly"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#, fuzzy
msgid "Insert Point"
-msgstr "Inserimento"
+msgstr "Inserisci Punto"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -2726,8 +2886,8 @@ msgid "Remove Poly And Point"
msgstr "Rimuovi Poligono e Punto"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+#, fuzzy
+msgid "Create a new polygon from scratch"
msgstr "Crea un nuovo poligono dal nulla."
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2737,6 +2897,14 @@ msgid ""
"Ctrl+LMB: Split Segment.\n"
"RMB: Erase Point."
msgstr ""
+"Modifica poligono esistente:\n"
+"LMB: muovi punto.\n"
+"Ctrl+LMB: dividi segmento.\n"
+"RMB: cancella punto."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Elimina Punti"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
@@ -2883,6 +3051,57 @@ msgid "Copy Animation"
msgstr "Copia Animazione"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Sezioni:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Incolla"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Texture"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Crea Nuova Animazione"
@@ -2919,9 +3138,8 @@ msgid "New name:"
msgstr "Nuovo nome:"
#: editor/plugins/animation_tree_editor_plugin.cpp
-#, fuzzy
msgid "Edit Filters"
-msgstr "Modifica Filtri Nodi"
+msgstr "Modifica Filtri"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
@@ -3074,18 +3292,10 @@ msgid "Can't resolve hostname:"
msgstr "Impossibile risolvere l'hostname:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "Impossibile risolvete."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Errore di connessione, si prega di riprovare."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "Impossibile connettersi."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "Impossibile connetersi all'host:"
@@ -3094,30 +3304,14 @@ msgid "No response from host:"
msgstr "Nessuna risposta dall'host:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Nessuna risposta."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "Richiesta fallita, codice di return:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Rich. Fall."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "Richiesta fallita, troppi ridirezionamenti"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Ridirigi Loop."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Fallito:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "Hash di download non buono, si presume il file sia stato manipolato."
@@ -3146,14 +3340,6 @@ msgid "Resolving.."
msgstr "Risolvendo.."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Connettendo.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Richiedendo.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "Errore nel fare richiesta"
@@ -3266,6 +3452,39 @@ msgid "Move Action"
msgstr "Azione di spostamento"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Muovi guida verticale"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "Crea nuova guida verticale"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Rimuovi guida verticale"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Move horizontal guide"
+msgstr "Sposta guida orizzontale"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "Crea nuova guida orizzontale"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Rimuovi guida orizzontale"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Crea nuove guide orizzontali e verticali"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "Modifica Catena IK"
@@ -3274,14 +3493,12 @@ msgid "Edit CanvasItem"
msgstr "Modifica CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Anchors only"
-msgstr "Ancora"
+msgstr "Solo ancore"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change Anchors and Margins"
-msgstr "Cambia Ancore"
+msgstr "Cambia Ancore e Margini"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
@@ -3351,7 +3568,7 @@ msgstr "Usa lo Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
msgid "Snapping options"
-msgstr "Opzioni Animazione"
+msgstr "Opzioni snapping"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3363,7 +3580,6 @@ msgid "Use Rotation Snap"
msgstr "Usa lo Snap di Rotazione"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Configure Snap..."
msgstr "Configura Snap..."
@@ -3373,11 +3589,12 @@ msgstr "Snap Relativo"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr "Usa Snap a Pixel"
+msgstr "Usa Pixel Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Smart snapping"
-msgstr ""
+msgstr "Snapping intelligente"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -3389,18 +3606,26 @@ msgid "Snap to node anchor"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Snap to node sides"
-msgstr ""
+msgstr "Snap ai lati del nodo"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "Snap ad altri nodi"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Snap to guides"
+msgstr "Modalità Snap:"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Blocca l'oggetto selezionato sul posto (non può essere mosso)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Sblocca l'oggetto selezionato (può essere mosso)."
@@ -3453,6 +3678,10 @@ msgid "Show rulers"
msgstr "Mostra Ossa"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Mostra guide"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr "Centra Selezione"
@@ -3461,9 +3690,8 @@ msgid "Frame Selection"
msgstr "Selezione Frame"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Salva layout"
+msgstr "Layout"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
@@ -3486,21 +3714,24 @@ msgid "Clear Pose"
msgstr "Pulisci Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "Trascina pivot dalla posizione del mouse"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "Imposta Posizione Curve Out"
+msgstr "Imposta pivot alla posizione del mouse"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Raddoppia step della griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "Dividi per 2 gli step della griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3578,12 +3809,14 @@ msgid "Update from Scene"
msgstr "Aggiorna da Scena"
#: editor/plugins/curve_editor_plugin.cpp
+#, fuzzy
msgid "Flat0"
-msgstr ""
+msgstr "Flat0"
#: editor/plugins/curve_editor_plugin.cpp
+#, fuzzy
msgid "Flat1"
-msgstr ""
+msgstr "Flat1"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3600,14 +3833,12 @@ msgid "Smoothstep"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Modify Curve Point"
-msgstr "Modifica Curva"
+msgstr "Modifica Punto Curva"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Modify Curve Tangent"
-msgstr "Modifica la Mappa Curve"
+msgstr "Modifica Tangente Curva"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3649,6 +3880,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "Aggiungi/Rimuovi Punto Rampa Colori"
@@ -3671,16 +3906,23 @@ msgid "Item List Editor"
msgstr "Editor Lista Elementi"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#, fuzzy
msgid ""
"No OccluderPolygon2D resource on this node.\n"
"Create and assign one?"
msgstr ""
+"Nessuna risorsa OccluderPolygon2D su questo nodo.\n"
+"Crearne una ed assegnarla?"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
msgstr "Crea Poligono di occlusione"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Crea un nuovo poligono dal nulla."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Modifica poligono esistente:"
@@ -3696,58 +3938,6 @@ msgstr "Ctrl+LMB: dividi Segmento."
msgid "RMB: Erase Point."
msgstr "RMB: Elimina Punto."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "Rimuovi Punto da Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Aggiungi Punto a Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Sposta Punto in Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Selezione Punti"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Trascina: Seleziona Punti di Controllo"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Click: Aggiungi Punto"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Click Destro: Elimina Punto"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Aggiungi Punto (in sapzio vuoto)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "Spezza Segmento (in linea)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Elimina Punto"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "La mesh è vuota!"
@@ -3938,15 +4128,16 @@ msgstr "Crea Mesh di Navigazione"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
#, fuzzy
msgid "Clear the navigation mesh."
-msgstr "Crea Mesh di Navigazione"
+msgstr "Elimina Mesh di Navigazione"
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "Impostando Configurazione..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "Calcolando dimensioni griglia..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -3967,9 +4158,8 @@ msgid "Eroding walkable area..."
msgstr ""
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
-msgstr "Avvertimento"
+msgstr "Partizionando..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
@@ -3984,7 +4174,7 @@ msgstr "Crea Mesh di Outline.."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Converting to native navigation mesh..."
-msgstr "Crea Mesh di Navigazione"
+msgstr "Convertendo a Mesh do Navigazione nativa..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
@@ -3997,7 +4187,7 @@ msgstr "Elaborazione Geometria"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "Fatto!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4040,9 +4230,8 @@ msgstr "Carica Maschera Emissione"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Particles"
-msgstr "Vertici"
+msgstr "Particelle"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generated Point Count:"
@@ -4159,16 +4348,46 @@ msgid "Move Out-Control in Curve"
msgstr "Sposta Out-Control sulla Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Selezione Punti"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Trascina: Seleziona Punti di Controllo"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Click: Aggiungi Punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Click Destro: Elimina Punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Seleziona Punti di Controllo (Shift+Trascina)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Aggiungi Punto (in sapzio vuoto)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Spezza Segmento (in curva)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Elimina Punto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Chiudi curva"
@@ -4177,9 +4396,8 @@ msgid "Curve Point #"
msgstr "Punto Curva #"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
-msgstr "Imposta Posizione Punti curva"
+msgstr "Imposta Posizione Punto Curva"
#: editor/plugins/path_editor_plugin.cpp
#, fuzzy
@@ -4308,7 +4526,6 @@ msgstr "Carica Risorsa"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4353,6 +4570,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Ordina:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Sposta Su"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Sposta giù"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Script successivo"
@@ -4404,6 +4636,10 @@ msgstr "Chiudi Documentazione"
msgid "Close All"
msgstr "Chiudi Tutto"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Esegui"
@@ -4415,13 +4651,11 @@ msgstr "Attiva Preferito"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Trova.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Trova Successivo"
@@ -4530,33 +4764,22 @@ msgstr "Minuscolo"
msgid "Capitalize"
msgstr "Aggiungi maiuscola iniziale"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Taglia"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Copia"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Seleziona tutti"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Sposta Su"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Sposta giù"
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4579,6 +4802,23 @@ msgid "Clone Down"
msgstr "Clona Sotto"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Vai alla Linea"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "Completa Simbolo"
@@ -4624,12 +4864,10 @@ msgid "Convert To Lowercase"
msgstr "Converti In Minuscolo"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Trova Precedente"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Rimpiazza.."
@@ -4638,7 +4876,6 @@ msgid "Goto Function.."
msgstr "Vai a Funzione.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Vai a Linea.."
@@ -4803,6 +5040,16 @@ msgid "View Plane Transform."
msgstr "Visualizza Tranform del Piano."
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Scaling: "
+msgstr "Scala:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Traduzioni:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Ruotando di %s gradi."
@@ -4883,6 +5130,10 @@ msgid "Vertices"
msgstr "Vertici"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Allinea a vista"
@@ -4915,6 +5166,16 @@ msgid "View Information"
msgstr "Visualizza Informazioni"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "Vedi Files"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "Scala Selezione"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "Audio Listener"
@@ -5046,6 +5307,11 @@ msgid "Tool Scale"
msgstr "Strumento Scala"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Abilita/Disabilita Fullscreen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Transform"
@@ -5325,6 +5591,11 @@ msgid "Create Empty Editor Template"
msgstr "Crea Template Editor Vuota"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Create From Current Editor Theme"
+msgstr "Crea Template Editor Vuota"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "CheckBox Radio1"
@@ -5502,7 +5773,8 @@ msgid "Runnable"
msgstr "Eseguibile"
#: editor/project_export.cpp
-msgid "Delete patch '"
+#, fuzzy
+msgid "Delete patch '%s' from list?"
msgstr "Elimina patch '"
#: editor/project_export.cpp
@@ -5786,6 +6058,12 @@ msgstr "Restart (s):"
msgid "Can't run project"
msgstr "Impossibile connettersi."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Tasto "
@@ -5819,10 +6097,6 @@ msgid "Add Input Action Event"
msgstr "Aggiungi Evento di Azione Input"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5946,13 +6220,12 @@ msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr "Proprietà:"
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Impostazioni"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6438,6 +6711,16 @@ msgid "Clear a script for the selected node."
msgstr "Svuota uno script per il nodo selezionato."
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Rimuovi"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Local"
+msgstr "Locale"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "Liberare ereditarietà? (No Undo!)"
@@ -6634,6 +6917,11 @@ msgid "Attach Node Script"
msgstr "Allega Script Nodo"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Rimuovi"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Bytes:"
@@ -6690,18 +6978,6 @@ msgid "Stack Trace (if applicable):"
msgstr "Stack Trace (se applicabile):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Inspector Remoto"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Scene Tree Live:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Proprietà Oggetto Remoto: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Profiler"
@@ -6835,52 +7111,52 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Argomento tipo invalido per convert(), usare le costanti TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
"Non vi sono abbastanza bytes per i bytes di decodifica, oppure formato "
"invalido."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "step argument è zero!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Non è uno script con un istanza"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Non si basa su uno script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Non si basa su un file risorsa"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Istanza invalida formato dizionario (manca @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Istanza invalida formato dizionario (impossibile caricare script in @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Istanza invalida formato dizionario (script invalido in @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Istanza invalida formato dizionario (sottoclassi invalide)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6895,16 +7171,26 @@ msgid "GridMap Duplicate Selection"
msgstr "Duplica Selezione"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Grid Map"
+msgstr "Snap Griglia"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Snap View"
msgstr "Vista dall'Alto"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+#, fuzzy
+msgid "Previous Floor"
+msgstr "Scheda precedente"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6980,13 +7266,8 @@ msgstr "Cancella TileMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Solo Selezione"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Solo Selezione"
+msgid "Clear Selection"
+msgstr "Centra Selezione"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7122,7 +7403,8 @@ msgid "Duplicate VisualScript Nodes"
msgstr "Duplica Nodo(i) Grafico"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+#, fuzzy
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"Mantieni premuto Meta per rilasciare un Getter. Mantieni premuto Shift per "
"rilasciare una firma generica."
@@ -7134,7 +7416,8 @@ msgstr ""
"per rilasciare una firma generica."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+#, fuzzy
+msgid "Hold %s to drop a simple reference to the node."
msgstr "Mantieni premuto Meta per rilasciare un riferimento semplice al nodo."
#: modules/visual_script/visual_script_editor.cpp
@@ -7142,7 +7425,8 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Mantieni premuto Ctrl per rilasciare un riferimento semplice al nodo."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+#, fuzzy
+msgid "Hold %s to drop a Variable Setter."
msgstr "Mantieni premuto Meta per rilasciare un Setter Variabile."
#: modules/visual_script/visual_script_editor.cpp
@@ -7382,12 +7666,23 @@ msgid "Could not write file:\n"
msgstr "Impossibile scrivere file:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
+msgstr "Impossibile aprire template per l'esportazione:\n"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Invalid export template:\n"
+msgstr "Installa Template di Esportazione"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
msgstr "Impossibile leggere file:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
-msgstr "Impossibile aprire template per l'esportazione:\n"
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
+msgstr "Impossibile leggere file:\n"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7511,22 +7806,6 @@ msgid "Path property must point to a valid Node2D node to work."
msgstr ""
"La proprietà path deve puntare ad un nodo Node2D valido per funzionare."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"La proprietà path deve puntare a un nodo Viewport valido per poter "
-"funzionare. Tale Viewport deve essere impostata in modalità 'render target'."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Il Viewport impostato nella proprietà path deve essere impostato come "
-"'render target' affinché questa sprite funzioni."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7596,6 +7875,15 @@ msgstr ""
"Perché CollisionShape funzioni deve essere fornita una forma. Si prega di "
"creare una risorsa forma (shape)!"
+#: scene/3d/gi_probe.cpp
+#, fuzzy
+msgid "Plotting Meshes"
+msgstr "Bliting Immagini"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7670,6 +7958,11 @@ msgstr "Attenzione!"
msgid "Please Confirm..."
msgstr "Per Favore Conferma..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Seleziona Metodo"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7690,6 +7983,10 @@ msgstr ""
"Usa un container come figlio (VBox,HBox,etc), o un Control impostando la "
"dimensione minima manualmente."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7726,6 +8023,67 @@ msgstr "Errore caricamento font."
msgid "Invalid font size."
msgstr "Dimensione font Invalida."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "Impossibile navigare a '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "Sorgente: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Rimuovi Punto da Line2D"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Aggiungi Punto a Line2D"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Sposta Punto in Line2D"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Spezza Segmento (in linea)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Impostazioni"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Inspector Remoto"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Scene Tree Live:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Proprietà Oggetto Remoto: "
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Solo Selezione"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Solo Selezione"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "La proprietà path deve puntare a un nodo Viewport valido per poter "
+#~ "funzionare. Tale Viewport deve essere impostata in modalità 'render "
+#~ "target'."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Il Viewport impostato nella proprietà path deve essere impostato come "
+#~ "'render target' affinché questa sprite funzioni."
+
#~ msgid "Filter:"
#~ msgstr "Filtro:"
@@ -7750,9 +8108,6 @@ msgstr "Dimensione font Invalida."
#~ msgid "Removed:"
#~ msgstr "Rimosso:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Errore di salvataggio dell'atlas:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Impossibile salvare la substruttura dell'atlas:"
@@ -8145,9 +8500,6 @@ msgstr "Dimensione font Invalida."
#~ msgid "Cropping Images"
#~ msgstr "Tagliando Immagini"
-#~ msgid "Blitting Images"
-#~ msgstr "Bliting Immagini"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "Impossibile salvare l'immagine di atlas:"
@@ -8527,9 +8879,6 @@ msgstr "Dimensione font Invalida."
#~ msgid "Save Translatable Strings"
#~ msgstr "Salva Stringhe Traducibili"
-#~ msgid "Install Export Templates"
-#~ msgstr "Installa Template di Esportazione"
-
#~ msgid "Edit Script Options"
#~ msgstr "Modifica le opzioni di script"
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 59d3b9499b..dd7f1d468b 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -4,6 +4,8 @@
# This file is distributed under the same license as the Godot source code.
#
# akirakido <achts.y@gmail.com>, 2016-2017.
+# D_first <dntk.daisei@gmail.com>, 2017.
+# Daisuke Saito <d.saito@coriginate.com>, 2017.
# hopping tappy (ãŸã£ã´ã•ã‚“) <hopping.tappy@gmail.com>, 2016-2017.
# Lexi Grafen <shfeedly@gmail.com>, 2017.
# Tetsuji Ochiai <ochiaixp@gmail.com>, 2017.
@@ -12,15 +14,15 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-08-28 04:47+0000\n"
-"Last-Translator: hopping tappy <hopping.tappy@gmail.com>\n"
+"PO-Revision-Date: 2017-11-26 10:47+0000\n"
+"Last-Translator: D_first <dntk.daisei@gmail.com>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot/ja/>\n"
"Language: ja\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -109,6 +111,7 @@ msgid "Anim Delete Keys"
msgstr "Anim キー削除"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "é¸æŠžç¯„å›²ã‚’è¤‡è£½"
@@ -705,6 +708,13 @@ msgstr "ä¾å­˜é–¢ä¿‚エディタ"
msgid "Search Replacement Resource:"
msgstr "ç½®æ›ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚’探ã™:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "é–‹ã"
+
#: editor/dependency_editor.cpp
#, fuzzy
msgid "Owners Of:"
@@ -791,6 +801,16 @@ msgstr "é¸æŠžã—ãŸãƒ•ァイルを消去ã—ã¾ã™ã‹?"
msgid "Delete"
msgstr "消去"
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Key"
+msgstr "アニメーションã®åå‰ã‚’変更:"
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "é…列ã®å€¤ã‚’変更"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Godotコミュニティより感è¬ã‚’!"
@@ -829,41 +849,44 @@ msgid "Authors"
msgstr "作者:"
#: editor/editor_about.cpp
+#, fuzzy
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "プラãƒãƒŠã‚¹ãƒãƒ³ã‚µãƒ¼"
#: editor/editor_about.cpp
+#, fuzzy
msgid "Gold Sponsors"
-msgstr ""
+msgstr "ゴールドスãƒãƒ³ã‚µãƒ¼"
#: editor/editor_about.cpp
+#, fuzzy
msgid "Mini Sponsors"
-msgstr ""
+msgstr "ミニスãƒãƒ³ã‚µãƒ¼"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "ゴールドドナー"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "シルãƒãƒ¼ãƒ‰ãƒŠãƒ¼"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "複製ã—ã¦ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰"
+msgstr "ブロンズドナー"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "寄付・å”賛者"
#: editor/editor_about.cpp
msgid "License"
msgstr "ライセンス"
#: editor/editor_about.cpp
+#, fuzzy
msgid "Thirdparty License"
-msgstr ""
+msgstr "サードパーティライセンス"
#: editor/editor_about.cpp
msgid ""
@@ -884,12 +907,14 @@ msgid "Components"
msgstr "コンテンツ:"
#: editor/editor_about.cpp
+#, fuzzy
msgid "Licenses"
-msgstr ""
+msgstr "ライセンス"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+#, fuzzy
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "zipå½¢å¼ã§ãªã„ãŸã‚パッケージをファイルを開ãéš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
#: editor/editor_asset_installer.cpp
#, fuzzy
@@ -950,12 +975,14 @@ msgid "Select Audio Bus Send"
msgstr ""
#: editor/editor_audio_buses.cpp
+#, fuzzy
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "オーディオãƒã‚¹ã‚¨ãƒ•ェクトã®è¿½åŠ "
#: editor/editor_audio_buses.cpp
+#, fuzzy
msgid "Move Bus Effect"
-msgstr ""
+msgstr "ãƒã‚¹ã‚¨ãƒ•ェクトã®ç§»å‹•"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -1211,8 +1238,9 @@ msgid "Updating scene.."
msgstr "シーンを更新ã—ã¦ã„ã¾ã™.."
#: editor/editor_dir_dialog.cpp
+#, fuzzy
msgid "Please select a base directory first"
-msgstr ""
+msgstr "ã¯ã˜ã‚ã«ã€ãƒ™ãƒ¼ã‚¹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é¸æŠžã—ã¦ãã ã•ã„。"
#: editor/editor_dir_dialog.cpp
#, fuzzy
@@ -1262,6 +1290,11 @@ msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚上書ãã—ã¾ã™ã‹ï¼Ÿ"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
+msgid "Select Current Folder"
+msgstr "フォルダを作æˆã™ã‚‹"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
msgid "All Recognized"
msgstr "知られã¦ã„ã‚‹ã™ã¹ã¦ã®"
@@ -1269,12 +1302,6 @@ msgstr "知られã¦ã„ã‚‹ã™ã¹ã¦ã®"
msgid "All Files (*)"
msgstr "ã™ã¹ã¦ã®ãƒ•ァイル(*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "é–‹ã"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "ファイルを開ã"
@@ -1351,7 +1378,7 @@ msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’上ã’ã‚‹"
msgid "Move Favorite Down"
msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’下ã’ã‚‹"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Go to parent folder"
msgstr "フォルダを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
@@ -1689,6 +1716,23 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "ã™ã¹ã¦å±•é–‹ã™ã‚‹"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "ã™ã¹ã¦æŠ˜ã‚ŠãŸãŸã‚€"
+
+#: editor/editor_node.cpp
#, fuzzy
msgid "Copy Params"
msgstr "パラメーターをコピーã™ã‚‹"
@@ -1828,6 +1872,11 @@ msgid "Export Mesh Library"
msgstr "メッシュライブラリã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a root node."
+msgstr "ã“ã®å‡¦ç†ã«ã¯ã‚·ãƒ¼ãƒ³ãŒå¿…è¦ã§ã™."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "タイルセットã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ"
@@ -1975,13 +2024,22 @@ msgstr "シーンタブを切り替ãˆã‚‹"
#: editor/editor_node.cpp
#, fuzzy
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr "%d 多ã„ファイルã‹ãƒ•ォルダ"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "%d more folders"
msgstr "%d 多ã„ファイル"
#: editor/editor_node.cpp
#, fuzzy
-msgid "%d more file(s) or folder(s)"
-msgstr "%d 多ã„ファイルã‹ãƒ•ォルダ"
+msgid "%d more files"
+msgstr "%d 多ã„ファイル"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr ""
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1994,6 +2052,11 @@ msgstr "最低é™ãƒ¢ãƒ¼ãƒ‰"
#: editor/editor_node.cpp
#, fuzzy
+msgid "Add a new scene."
+msgstr "æ–°ã—ã„トラックを追加。"
+
+#: editor/editor_node.cpp
+#, fuzzy
msgid "Scene"
msgstr "シーン"
@@ -2071,13 +2134,12 @@ msgid "TileSet.."
msgstr "タイルセット.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "å…ƒã«æˆ»ã™"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
#, fuzzy
msgid "Redo"
msgstr "å†å®Ÿè¡Œ"
@@ -2402,16 +2464,16 @@ msgstr "インãƒãƒ¼ãƒˆï¼ˆå–り込ã¿ï¼‰"
#: editor/editor_node.cpp
#, fuzzy
-msgid "FileSystem"
-msgstr "ファイルシステム"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
-#, fuzzy
msgid "Node"
msgstr "ノード"
#: editor/editor_node.cpp
#, fuzzy
+msgid "FileSystem"
+msgstr "ファイルシステム"
+
+#: editor/editor_node.cpp
+#, fuzzy
msgid "Output"
msgstr "出力"
@@ -2474,7 +2536,7 @@ msgstr "ディレクトリを開ã"
msgid "Open Script Editor"
msgstr "スクリプトエディタを開ã"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
#, fuzzy
msgid "Open Asset Library"
msgstr "アセット ライブラリを開ã"
@@ -2665,6 +2727,11 @@ msgstr "(ç¾åœ¨ã®ï¼‰"
#: editor/export_template_manager.cpp
#, fuzzy
+msgid "Retrieving mirrors, please wait.."
+msgstr "接続失敗 å†è©¦è¡Œã‚’"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Remove template version '%s'?"
msgstr "テンプレート ãƒãƒ¼ã‚¸ãƒ§ãƒ³'%s'を除去ã—ã¾ã™ã‹ï¼Ÿ"
@@ -2707,6 +2774,120 @@ msgid "Importing:"
msgstr "インãƒãƒ¼ãƒˆ:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't resolve."
+msgstr "解決ã§ãã¾ã›ã‚“."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "接続失敗."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "No response."
+msgstr "応答ãŒã‚りã¾ã›ã‚“."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Req. Failed."
+msgstr "リクエスト失敗."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Redirect Loop."
+msgstr "リダイレクトã®ãƒ«ãƒ¼ãƒ—."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Failed:"
+msgstr "失敗:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“ã§ã—ãŸ:\n"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Complete."
+msgstr "ダウンロード失敗"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "アトラスã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "接続中.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Disconnected"
+msgstr "切断"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Resolving"
+msgstr "解決中.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Resolve"
+msgstr "解決ã§ãã¾ã›ã‚“."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "接続中.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "接続失敗."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "接続"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "リクエスト中.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "ダウンロード"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "接続中.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "SSL Handshake Error"
+msgstr "読ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼"
+
+#: editor/export_template_manager.cpp
#, fuzzy
msgid "Current Version:"
msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³:"
@@ -2736,6 +2917,15 @@ msgstr "ã™ã¹ã¦é¸æŠž"
msgid "Export Template Manager"
msgstr "エクスãƒãƒ¼ãƒˆã€€ãƒ†ãƒ³ãƒ—レート マãƒãƒ¼ã‚¸ãƒ£ãƒ¼"
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "é¸æŠžã—ã¦ã„ã‚‹ã‚‚ã®ã‚’削除"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
#, fuzzy
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
@@ -2744,9 +2934,8 @@ msgstr ""
"ä¿å­˜ã§ãã¾ã›ã‚“!"
#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid "Cannot navigate to '"
-msgstr "~ã«ç§»å‹•ã§ãã¾ã›ã‚“"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
@@ -2764,13 +2953,6 @@ msgstr ""
#: editor/filesystem_dock.cpp
#, fuzzy
-msgid ""
-"\n"
-"Source: "
-msgstr "ソース:"
-
-#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move/rename resources root."
msgstr "ソースã®ãƒ•ォントを読ã¿è¾¼ã¿/処ç†ã§ãã¾ã›ã‚“."
@@ -3069,9 +3251,8 @@ msgid "Remove Poly And Point"
msgstr "ãƒãƒªã‚´ãƒ³ã¨ãƒã‚¤ãƒ³ãƒˆã‚’除去"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
#, fuzzy
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr "æ–°è¦ã«ãƒãƒªã‚´ãƒ³ã‚’生æˆã™ã‚‹"
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -3082,6 +3263,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去"
+
#: editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Toggle Autoplay"
@@ -3257,6 +3443,57 @@ msgid "Copy Animation"
msgstr "アニメーションを複製ã™ã‚‹"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "セクション:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "貼り付ã‘"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "テクスãƒãƒ£"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Create New Animation"
msgstr "アニメーションを新ã—ã作る"
@@ -3478,21 +3715,11 @@ msgstr "ホストåを解決ã§ãã¾ã›ã‚“:"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Can't resolve."
-msgstr "解決ã§ãã¾ã›ã‚“."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Connection error, please try again."
msgstr "接続失敗 å†è©¦è¡Œã‚’"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Can't connect."
-msgstr "接続失敗."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Can't connect to host:"
msgstr "ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ãã¾ã›ã‚“:"
@@ -3503,36 +3730,16 @@ msgstr "ホストã‹ã‚‰å¿œç­”ãŒã‚りã¾ã›ã‚“:"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "No response."
-msgstr "応答ãŒã‚りã¾ã›ã‚“."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Request failed, return code:"
msgstr "リクエスト失敗 リターン コード:"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Req. Failed."
-msgstr "リクエスト失敗."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Request failed, too many redirects"
msgstr "リクエスト失敗 リダイレクトã®å›žæ•°ãŒå¤šã™ãŽã¾ã™"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Redirect Loop."
-msgstr "リダイレクトã®ãƒ«ãƒ¼ãƒ—."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Failed:"
-msgstr "失敗:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Bad download hash, assuming file has been tampered with."
msgstr "ダウンロード内容ã®ãƒãƒƒã‚·ãƒ¥ãŒä¸æ•´åˆã€€æ”¹ã–ã‚“ã®å¯èƒ½æ€§ãŒã‚りã¾ã™."
@@ -3568,16 +3775,6 @@ msgstr "解決中.."
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Connecting.."
-msgstr "接続中.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "リクエスト中.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
msgstr "リクエスト発行エラー"
@@ -3714,6 +3911,39 @@ msgid "Move Action"
msgstr "移動動作"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "フォルダを作æˆ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "無効ãªã‚­ãƒ¼ã‚’削除"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Move horizontal guide"
+msgstr "曲線ã®ãƒã‚¤ãƒ³ãƒˆã‚’移動"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "フォルダを作æˆ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "無効ãªã‚­ãƒ¼ã‚’削除"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
msgid "Edit IK Chain"
msgstr "IK(インãƒãƒ¼ã‚¹ ã‚­ãƒãƒžãƒ†ã‚£ã‚¯ã‚¹ï¼‰ãƒã‚§ãƒ¼ãƒ³ã®ç·¨é›†"
@@ -3861,10 +4091,17 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
+msgid "Snap to guides"
+msgstr "Snapモード:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Lock the selected object in place (can't be moved)."
msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトをロックã—ã¦ç§»å‹•ä¸èƒ½ã¨ã™ã‚‹."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Unlock the selected object (can be moved)."
msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトをロック解除ã—ã¦ç§»å‹•å¯èƒ½ã¨ã™ã‚‹."
@@ -3927,6 +4164,11 @@ msgstr "ボーンを表示ã™ã‚‹"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
+msgid "Show guides"
+msgstr "ボーンを表示ã™ã‚‹"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Center Selection"
msgstr "é¸æŠžå¯¾è±¡ã‚’ä¸­å¤®ã«"
@@ -4135,6 +4377,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "色変化ã®å‚¾æ–œã«ã€ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’追加ã¾ãŸã¯é™¤åŽ»ã™ã‚‹"
@@ -4168,6 +4414,11 @@ msgid "Create Occluder Polygon"
msgstr "オクルージョンを生ã˜ã‚‹ãƒãƒªã‚´ãƒ³ã‚’生æˆ"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#, fuzzy
+msgid "Create a new polygon from scratch."
+msgstr "æ–°è¦ã«ãƒãƒªã‚´ãƒ³ã‚’生æˆã™ã‚‹"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "既存ã®ãƒãƒªã‚´ãƒ³ã‚’編集:"
@@ -4184,63 +4435,6 @@ msgstr "Ctrl+マウス左ボタン: セグメントを分割"
msgid "RMB: Erase Point."
msgstr "マウスå³ãƒœã‚¿ãƒ³:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去."
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Remove Point from Line2D"
-msgstr "Line2Dã‹ã‚‰ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Line2Dã«ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’追加"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Line2D ã®ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’移動"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’é¸æŠž"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+ドラッグ:コントロールãƒã‚¤ãƒ³ãƒˆã‚’é¸æŠž"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
-msgid "Click: Add Point"
-msgstr "クリック:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’追加"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
-msgid "Right Click: Delete Point"
-msgstr "å³ã‚¯ãƒªãƒƒã‚¯:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point (in empty space)"
-msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’追加(空白ã«ï¼‰"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "セグメント分割(線分内ã§ï¼‰"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
#, fuzzy
msgid "Mesh is empty!"
@@ -4715,17 +4909,51 @@ msgid "Move Out-Control in Curve"
msgstr "曲線ã®Out-ãƒãƒ³ãƒ‰ãƒ«ã‚’移動ã™ã‚‹"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’é¸æŠž"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+#, fuzzy
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+ドラッグ:コントロールãƒã‚¤ãƒ³ãƒˆã‚’é¸æŠž"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+#, fuzzy
+msgid "Click: Add Point"
+msgstr "クリック:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’追加"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+#, fuzzy
+msgid "Right Click: Delete Point"
+msgstr "å³ã‚¯ãƒªãƒƒã‚¯:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "コントロールãƒã‚¤ãƒ³ãƒˆã‚’é¸ã¶ (Shift+Drag)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
#, fuzzy
+msgid "Add Point (in empty space)"
+msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’追加(空白ã«ï¼‰"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+#, fuzzy
msgid "Split Segment (in curve)"
msgstr "分割ã™ã‚‹(曲線を)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "曲線を閉ã˜ã‚‹"
@@ -4885,7 +5113,6 @@ msgstr "リソースを読ã¿è¾¼ã‚€"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4933,6 +5160,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "ä¸¦ã¹æ›¿ãˆ:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "上ã«ç§»å‹•"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "下ã«ç§»å‹•"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "次ã®ã‚¹ã‚¯ãƒªãƒ—ト"
@@ -4989,6 +5231,10 @@ msgstr "é–‰ã˜ã‚‹"
msgid "Close All"
msgstr "é–‰ã˜ã‚‹"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "実行"
@@ -5000,14 +5246,12 @@ msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’切り替ãˆã‚‹"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#, fuzzy
msgid "Find.."
msgstr "検索.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#, fuzzy
msgid "Find Next"
msgstr "次を探ã™"
@@ -5121,33 +5365,22 @@ msgstr "å°æ–‡å­—"
msgid "Capitalize"
msgstr "先頭を大文字ã«"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "切りå–り"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "コピー"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "ã™ã¹ã¦é¸æŠž"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "上ã«ç§»å‹•"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "下ã«ç§»å‹•"
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -5173,6 +5406,23 @@ msgstr "複製ã—ã¦ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰"
#: editor/plugins/script_text_editor.cpp
#, fuzzy
+msgid "Fold Line"
+msgstr "行ã«ç§»å‹•"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
msgid "Complete Symbol"
msgstr "記å·ã™ã¹ã¦"
@@ -5219,12 +5469,10 @@ msgid "Convert To Lowercase"
msgstr "å°æ–‡å­—ã«å¤‰æ›"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "å‰ã‚’検索"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "ç½®ãæ›ãˆ.."
@@ -5234,7 +5482,6 @@ msgid "Goto Function.."
msgstr "関数~ã«ç§»å‹•.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#, fuzzy
msgid "Goto Line.."
msgstr "~行ã«ç§»å‹•.."
@@ -5418,6 +5665,16 @@ msgid "View Plane Transform."
msgstr "ビュー平é¢ãƒˆãƒ©ãƒ³ã‚¹ãƒ•ォーム."
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Scaling: "
+msgstr "縮尺:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "翻訳:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "%s 度回転."
@@ -5499,6 +5756,10 @@ msgid "Vertices"
msgstr "頂点"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "シーンビューã«ã‚«ãƒ¡ãƒ©ã‚’åˆã‚ã›ã‚‹ï¼ˆAlign With View)"
@@ -5536,6 +5797,16 @@ msgid "View Information"
msgstr "情報を表示"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "ビューファイル:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "縮尺(Scale)ã®é¸æŠž"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -5674,6 +5945,11 @@ msgstr "拡大縮å°ãƒ„ール"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
+msgid "Toggle Freelook"
+msgstr "フルスクリーンã®åˆ‡ã‚Šæ›¿ãˆ"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Transform"
msgstr "トランスフォーム"
@@ -5968,6 +6244,11 @@ msgstr "空ã®ã‚¨ãƒ‡ã‚£ã‚¿ãƒ†ãƒ³ãƒ—レートを生æˆ"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
+msgid "Create From Current Editor Theme"
+msgstr "空ã®ã‚¨ãƒ‡ã‚£ã‚¿ãƒ†ãƒ³ãƒ—レートを生æˆ"
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "CheckBox Radio1"
msgstr "ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã€€Radio1"
@@ -6154,7 +6435,7 @@ msgstr "実行å¯èƒ½"
#: editor/project_export.cpp
#, fuzzy
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr "パッãƒé™¤åŽ»'"
#: editor/project_export.cpp
@@ -6454,6 +6735,12 @@ msgstr "アニメーションを最åˆã‹ã‚‰å†ç”Ÿã™ã‚‹ :"
msgid "Can't run project"
msgstr "接続失敗."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Key "
@@ -6491,10 +6778,6 @@ msgid "Add Input Action Event"
msgstr "入力アクションイベントを追加"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -6627,13 +6910,12 @@ msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr "プロパティ:"
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "設定"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -7166,6 +7448,16 @@ msgstr "é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã®ã‚¹ã‚¯ãƒªãƒ—トをクリア"
#: editor/scene_tree_dock.cpp
#, fuzzy
+msgid "Remote"
+msgstr "削除"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Local"
+msgstr "ロケール"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
msgid "Clear Inheritance? (No Undo!)"
msgstr "継承をクリアã—ã¾ã™ã‹ï¼Ÿï¼ˆundoã§ãã¾ã›ã‚“!)"
@@ -7379,6 +7671,11 @@ msgid "Attach Node Script"
msgstr "ノードã«ã‚¹ã‚¯ãƒªãƒ—トを添付ã™ã‚‹"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "削除"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "ãƒã‚¤ãƒˆ:"
@@ -7437,18 +7734,6 @@ msgid "Stack Trace (if applicable):"
msgstr "スタックトレース(å¯èƒ½ãªã‚‰ï¼‰:"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "リモートインスペクター"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "リモートオブジェクトã®ãƒ—ロパティ: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "プロファイラー"
@@ -7588,55 +7873,55 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
#, fuzzy
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Convert()ã«å¯¾ã—ã¦ç„¡åйãªåž‹ã®å¼•æ•°ã§ã™ã€‚TYPE_* 定数を使ã£ã¦ãã ã•ã„。"
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
#, fuzzy
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "デコードãƒã‚¤ãƒˆã®ãƒã‚¤ãƒˆã¯å分ã§ã¯ã‚りã¾ã›ã‚“。ã¾ãŸã¯ç„¡åйãªå½¢å¼ã§ã™ã€‚"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "ステップ引数ã¯ã‚¼ãƒ­ã§ã™ï¼"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "インスタンスを使用ã—ã¦ã„ãªã„スクリプトã§ã™"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "スクリプトã«åŸºã¥ã„ã¦ã„ã¾ã›ã‚“"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "リソースファイルã«åŸºã¥ã„ã¦ã„ã¾ã›ã‚“"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary format (missing @path)"
msgstr "無効ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹è¾žæ›¸å½¢å¼ã§ã™ ( @path ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "無効ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹è¾žæ›¸å½¢å¼ã§ã™ (@path ã§ã‚¹ã‚¯ãƒªãƒ—トを読ã¿è¾¼ã‚ã¾ã›ã‚“)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "無効ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹è¾žæ›¸å½¢å¼ã§ã™ (@path ã§ç„¡åйãªã‚¹ã‚¯ãƒªãƒ—ト)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "無効ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹è¾žæ›¸ã§ã™ (無効ãªã‚µãƒ–クラス)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -7651,16 +7936,26 @@ msgid "GridMap Duplicate Selection"
msgstr "é¸æŠžç¯„å›²ã‚’è¤‡è£½"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Grid Map"
+msgstr "グリッドSnap"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Snap View"
msgstr "上é¢å›³"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+#, fuzzy
+msgid "Previous Floor"
+msgstr "以å‰ã®ã‚¿ãƒ–"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -7736,13 +8031,8 @@ msgstr "タイルマップを消去"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "é¸æŠžç¯„å›²ã®ã¿"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "é¸æŠžç¯„å›²ã®ã¿"
+msgid "Clear Selection"
+msgstr "é¸æŠžå¯¾è±¡ã‚’ä¸­å¤®ã«"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7891,7 +8181,7 @@ msgstr "グラフノードを複製"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"ãƒ¡ã‚¿ã‚­ãƒ¼ã‚’ä¿æŒã—ã¦getterã‚’è½ã¨ã™.Shiftã‚­ãƒ¼ã‚’ä¿æŒã—ã¦ã‚¸ã‚§ãƒãƒªãƒƒã‚¯ã‚’指示ã™ã‚‹."
@@ -7903,7 +8193,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr "ãƒ¡ã‚¿ã‚­ãƒ¼ã‚’ä¿æŒã—ã¦å˜ç´”å‚照(simple reference)ã‚’è½ã¨ã™."
#: modules/visual_script/visual_script_editor.cpp
@@ -7913,7 +8203,7 @@ msgstr "Ctrlã‚­ãƒ¼ã‚’ä¿æŒã—ã¦å˜ç´”å‚照(simple reference)ã‚’è½ã¨ã™."
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr "ãƒ¡ã‚¿ã‚­ãƒ¼ã‚’ä¿æŒã—ã¦å¤‰æ•°ã®setterã‚’è½ã¨ã™"
#: modules/visual_script/visual_script_editor.cpp
@@ -8187,13 +8477,24 @@ msgid "Could not write file:\n"
msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“ã§ã—ãŸ:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+#, fuzzy
+msgid "Could not open template for export:\n"
+msgstr "エクスãƒãƒ¼ãƒˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートを開ã‘ã¾ã›ã‚“:\n"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Invalid export template:\n"
+msgstr "テンプレート エクスãƒãƒ¼ãƒˆã‚’管ç†"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
msgstr "ファイルを読ã‚ã¾ã›ã‚“ã§ã—ãŸ:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
-msgstr "エクスãƒãƒ¼ãƒˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートを開ã‘ã¾ã›ã‚“:\n"
+msgid "Could not read boot splash image file:\n"
+msgstr "ファイルを読ã‚ã¾ã›ã‚“ã§ã—ãŸ:\n"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -8314,23 +8615,6 @@ msgid "Path property must point to a valid Node2D node to work."
msgstr ""
"Path プロパティã¯ã€å‹•作ã™ã‚‹ã‚ˆã†ã«æœ‰åŠ¹ãª Node2D ノードを示ã™å¿…è¦ãŒã‚りã¾ã™ã€‚"
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Path プロパティã¯ã€å‹•作ã™ã‚‹ã‚ˆã†ã«æœ‰åйãªãƒ“ューãƒãƒ¼ãƒˆ ノードをãƒã‚¤ãƒ³ãƒˆã™ã‚‹å¿…è¦"
-"ãŒã‚りã¾ã™ã€‚ã“ã®ã‚ˆã†ãªãƒ“ューãƒãƒ¼ãƒˆã¯ã€'render target' モードã«è¨­å®šã™ã‚‹å¿…è¦ãŒ"
-"ã‚りã¾ã™ã€‚"
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Path プロパティã«è¨­å®šã—ãŸãƒ“ューãƒãƒ¼ãƒˆã¯ã€ã“ã®ã‚¹ãƒ—ライトã®å‹•作ã™ã‚‹é †åºã§ "
-"'render target' ã¨ã—ã¦è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -8400,6 +8684,15 @@ msgstr ""
"関数㮠CollisionShape ã®å½¢çŠ¶ã‚’æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãれã®ãŸã‚ã®ã‚·ã‚§ã‚¤ãƒ—リ"
"ソースを作æˆã—ã¦ãã ã•ã„!"
+#: scene/3d/gi_probe.cpp
+#, fuzzy
+msgid "Plotting Meshes"
+msgstr "イメージをé…ç½®(Blit)"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -8478,6 +8771,11 @@ msgstr "警告!"
msgid "Please Confirm..."
msgstr "確èªã—ã¦ãã ã•ã„。"
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "ã™ã¹ã¦é¸æŠž"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -8499,6 +8797,11 @@ msgstr ""
"ã‚’å­ã¨ã™ã‚‹ã‹ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’カスタム最å°ã‚µã‚¤ã‚ºã«ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã§æŒ‡å®šã—ã¦ä½¿ç”¨ã—ã¦"
"ãã ã•ã„."
+#: scene/gui/tree.cpp
+#, fuzzy
+msgid "(Other)"
+msgstr "(ãã®ä»–)"
+
#: scene/main/scene_tree.cpp
#, fuzzy
msgid ""
@@ -8536,6 +8839,65 @@ msgstr "フォント読ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚"
msgid "Invalid font size."
msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚"
+#, fuzzy
+#~ msgid "Cannot navigate to '"
+#~ msgstr "~ã«ç§»å‹•ã§ãã¾ã›ã‚“"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "ソース:"
+
+#, fuzzy
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Line2Dã‹ã‚‰ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Line2Dã«ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’追加"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Line2D ã®ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’移動"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "セグメント分割(線分内ã§ï¼‰"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "設定"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "リモートインスペクター"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "リモートオブジェクトã®ãƒ—ロパティ: "
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "é¸æŠžç¯„å›²ã®ã¿"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "é¸æŠžç¯„å›²ã®ã¿"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Path プロパティã¯ã€å‹•作ã™ã‚‹ã‚ˆã†ã«æœ‰åйãªãƒ“ューãƒãƒ¼ãƒˆ ノードをãƒã‚¤ãƒ³ãƒˆã™ã‚‹å¿…"
+#~ "è¦ãŒã‚りã¾ã™ã€‚ã“ã®ã‚ˆã†ãªãƒ“ューãƒãƒ¼ãƒˆã¯ã€'render target' モードã«è¨­å®šã™ã‚‹å¿…"
+#~ "è¦ãŒã‚りã¾ã™ã€‚"
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Path プロパティã«è¨­å®šã—ãŸãƒ“ューãƒãƒ¼ãƒˆã¯ã€ã“ã®ã‚¹ãƒ—ライトã®å‹•作ã™ã‚‹é †åºã§ "
+#~ "'render target' ã¨ã—ã¦è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+
#~ msgid "Filter:"
#~ msgstr "フィルター:"
@@ -8562,10 +8924,6 @@ msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚"
#~ msgstr "å–り除ã„ãŸã®ã¯:"
#, fuzzy
-#~ msgid "Error saving atlas:"
-#~ msgstr "アトラスã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ:"
-
-#, fuzzy
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "アトラスã®è¦ç´ ã§ã‚るテクスãƒãƒ£ã®ä¿å­˜ãŒã§ãã¾ã›ã‚“:"
@@ -9044,10 +9402,6 @@ msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚"
#~ msgstr "イメージをクロッピング(トリミング)"
#, fuzzy
-#~ msgid "Blitting Images"
-#~ msgstr "イメージをé…ç½®(Blit)"
-
-#, fuzzy
#~ msgid "Couldn't save atlas image:"
#~ msgstr "アトラスイメージをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸ:"
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index 02141b6dc3..01f8f2823d 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2017-10-24 20:47+0000\n"
+"PO-Revision-Date: 2017-11-27 12:48+0000\n"
"Last-Translator: 박한얼 <volzhs@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -102,6 +102,7 @@ msgid "Anim Delete Keys"
msgstr "키 삭제"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "ì„ íƒí‚¤ 복제"
@@ -637,6 +638,13 @@ msgstr "ì¢…ì† ê´€ê³„ 편집기"
msgid "Search Replacement Resource:"
msgstr "대체 리소스 검색:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "열기"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "소유ìž:"
@@ -709,6 +717,14 @@ msgstr "ì„ íƒëœ 파ì¼ë“¤ì„ 삭제하시겠습니까?"
msgid "Delete"
msgstr "삭제"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Dictionary 키 변경"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Dictionary 값 변경"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Godot ì»¤ë®¤ë‹ˆí‹°ì— ê°ì‚¬ë“œë¦½ë‹ˆë‹¤!"
@@ -847,9 +863,8 @@ msgid "Toggle Audio Bus Mute"
msgstr "오디오 버스 뮤트 토글"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Bypass Effects"
-msgstr "오디오 버스 ì´íŽ™íŠ¸ 무시 토글"
+msgstr "오디오 버스 ë°”ì´íŒ¨ìФ ì´íŽ™íŠ¸ 토글"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
@@ -880,7 +895,6 @@ msgid "Mute"
msgstr "뮤트"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bypass"
msgstr "ë°”ì´íŒ¨ìФ"
@@ -1124,6 +1138,11 @@ msgid "File Exists, Overwrite?"
msgstr "파ì¼ì´ 존재합니다. ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "í´ë” ìƒì„±"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "ì¸ì‹ 가능한 모든 파ì¼"
@@ -1131,12 +1150,6 @@ msgstr "ì¸ì‹ 가능한 모든 파ì¼"
msgid "All Files (*)"
msgstr "모든 íŒŒì¼ (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "열기"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "íŒŒì¼ ì—´ê¸°"
@@ -1203,7 +1216,7 @@ msgstr "ì¦ê²¨ì°¾ê¸° 위로 ì´ë™"
msgid "Move Favorite Down"
msgstr "ì¦ê²¨ì°¾ê¸° 아래로 ì´ë™"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr "부모 í´ë”로 ì´ë™"
@@ -1326,7 +1339,6 @@ msgid "Property Description:"
msgstr "ì†ì„± 설명:"
#: editor/editor_help.cpp
-#, fuzzy
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -1506,6 +1518,26 @@ msgstr ""
"를 확ì¸í•´ì£¼ì‹­ì‹œì˜¤."
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"ì´ê²ƒì€ ì›ê²© 오브ì íŠ¸ì— ëŒ€í•œ 변경ì´ë©° ë³€ê²½ì‚¬í•­ì´ ì €ìž¥ë˜ì§€ 않습니다.\n"
+"ì´ ì›Œí¬í”Œë¡œì— 대해 ë” ìžì„¸ížˆ ì´í•´í•˜ê¸° 위해서 디버깅 관련 문서를 ì½ì–´ë³´ì‹œê¸° ë°”"
+"ëžë‹ˆë‹¤."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "ëª¨ë‘ í™•ìž¥"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "ëª¨ë‘ ì ‘ê¸°"
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr "ì†ì„± 복사"
@@ -1621,6 +1653,10 @@ msgid "Export Mesh Library"
msgstr "메쉬 ë¼ì´ë¸ŒëŸ¬ë¦¬ 내보내기"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "ì´ ìž‘ì—…ì€ ë£¨íŠ¸ 노드가 ì—†ì´ëŠ” 불가능합니다."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "íƒ€ì¼ ì…‹ 내보내기"
@@ -1685,28 +1721,29 @@ msgid "Pick a Main Scene"
msgstr "ë©”ì¸ ì”¬ ì„ íƒ"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "ì´ ê³³ì— ìžˆëŠ” 확장기능 플러그ì¸ì„ 활성화할 수 없습니다: '"
+msgstr "확장기능 플러그ì¸ì„ 활성화할 수 없습니다: '%s' 설정 í•´ì„ ì‹¤íŒ¨."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr "ì´ ê³³ì— ìžˆëŠ” 확장기능 플러그ì¸ì„ 활성화할 수 없습니다: '"
+msgstr "확장기능 플러그ì¸ì„ ì°¾ì„ ìˆ˜ 없습니다: 'res://addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "ì´ ê³³ì— ìžˆëŠ” 확장기능 플러그ì¸ì„ 활성화할 수 없습니다: '"
+msgstr "확장기능 스í¬ë¦½íŠ¸ë¥¼ 로드할 수 없습니다: '%s'."
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
msgstr ""
+"해당 경로ì—서 애드온 스í¬ë¦½íŠ¸ë¥¼ 로드할 수 없습니다: '%s' 기본 íƒ€ìž…ì´ "
+"EditorPluginì´ ì•„ë‹™ë‹ˆë‹¤."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
+"해당 경로ì—서 애드온 스í¬ë¦½íŠ¸ë¥¼ 로드할 수 없습니다: '%s' 스í¬ë¦½íŠ¸ê°€ tool 모드"
+"가 아닙니다."
#: editor/editor_node.cpp
msgid ""
@@ -1755,12 +1792,20 @@ msgid "Switch Scene Tab"
msgstr "씬 탭 전환"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr "%dê°œ 추가파ì¼"
+msgid "%d more files or folders"
+msgstr "%dê°œ 추가 íŒŒì¼ ë˜ëŠ” í´ë”"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%dê°œ 추가 íŒŒì¼ ë˜ëŠ” í´ë”"
+msgid "%d more folders"
+msgstr "%dê°œ 추가 í´ë”"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%dê°œ 추가 파ì¼"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Dock 위치"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1771,6 +1816,10 @@ msgid "Toggle distraction-free mode."
msgstr "집중 모드 토글."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "새 씬 추가."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "씬"
@@ -1835,13 +1884,12 @@ msgid "TileSet.."
msgstr "íƒ€ì¼ ì…‹.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "ë˜ëŒë¦¬ê¸°"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "다시 실행"
@@ -2119,14 +2167,14 @@ msgid "Import"
msgstr "가져오기"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "íŒŒì¼ ì‹œìŠ¤í…œ"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "노드"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œ"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "출력"
@@ -2182,7 +2230,7 @@ msgstr "3D ì—디터 열기"
msgid "Open Script Editor"
msgstr "스í¬ë¦½íЏ ì—디터 열기"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "ì–´ì…‹ ë¼ì´ë¸ŒëŸ¬ë¦¬ 열기"
@@ -2248,9 +2296,8 @@ msgid "Frame %"
msgstr "프레임 %"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "고정 프레임 %"
+msgstr "물리 프레임 %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2277,6 +2324,8 @@ msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the export menu."
msgstr ""
+"ì´ í”Œëž«í¼ì— 대한 실행가능한 내보내기 í”„ë¦¬ì…‹ì„ ì°¾ì„ ìˆ˜ 없습니다.\n"
+"내보내기 메뉴ì—서 실행가능한 í”„ë¦¬ì…‹ì„ ì¶”ê°€í•˜ì„¸ìš”."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -2336,15 +2385,19 @@ msgstr "다운로드"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(누ë½)"
#: editor/export_template_manager.cpp
msgid "(Current)"
msgstr "(현재)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "미러를 가져오는 중입니다, 잠시만 기다리세요.."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "'%s' 템플릿 ë²„ì „ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
@@ -2352,17 +2405,19 @@ msgstr "내보내기 템플릿 zip 파ì¼ì„ ì—´ 수 없습니다."
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "템플릿 ì•ˆì— version.txtê°€ 유효하지 ì•Šì€ í˜•ì‹ìž…니다."
#: editor/export_template_manager.cpp
msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
msgstr ""
+"í…œí”Œë¦¿ì— version.txt 형ì‹ì´ 유효하지 않습니다. ë¦¬ë¹„ì „ì€ ìœ íš¨í•œ ì‹ë³„ìžê°€ ì•„ë‹™"
+"니다."
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "í…œí”Œë¦¿ì— version.txt를 ì°¾ì„ ìˆ˜ 없습니다."
#: editor/export_template_manager.cpp
msgid "Error creating path for templates:\n"
@@ -2377,6 +2432,102 @@ msgid "Importing:"
msgstr "가져오는 중:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"ì´ ë²„ì „ì— ëŒ€í•œ 다운로드 ë§í¬ê°€ 없습니다. ê³µì‹ ë¦´ë¦¬ì¦ˆë§Œ 바로 다운로드가 가능합"
+"니다."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "í•´ê²°í•  수 ì—†ìŒ."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "ì—°ê²°í•  수 ì—†ìŒ."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "ì‘답 ì—†ìŒ."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "요청 실패."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "리다ì´ë ‰íЏ 루프."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "실패:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "파ì¼ì— 쓸 수 없습니다."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "다운로드 완료."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "url 요청 ì—러: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "ë¯¸ëŸ¬ì— ì—°ê²°ì¤‘.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "ì—°ê²° í•´ì œë¨"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "해결 중"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "í•´ê²°í•  수 ì—†ìŒ"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "연결중.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "ì—°ê²°í•  수 ì—†ìŒ"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "ì—°ê²°ë¨"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "요청중.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "다운로드 중"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "ì—°ê²° ì—러"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "SSL 핸드ì‰ì´í¬ ì—러"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "현재 버전:"
@@ -2400,35 +2551,37 @@ msgstr "템플릿 íŒŒì¼ ì„ íƒ"
msgid "Export Template Manager"
msgstr "내보내기 템플릿 매니저"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "템플릿 다운로드"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "목ë¡ì—서 미러를 ì„ íƒí•˜ì„¸ìš”: "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr "file_type_cache.cch를 열수 없어서, íŒŒì¼ íƒ€ìž… ìºì‰¬ë¥¼ 저장하지 않습니다!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr ""
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 '%s'를 ì°¾ì„ ìˆ˜ 없습니다!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "ì¸ë„¤ì¼ 그리드로 보기"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "리스트로 보기"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
"\n"
-"소스: "
+"ìƒíƒœ: íŒŒì¼ ê°€ì ¸ì˜¤ê¸° 실패. 파ì¼ì„ 수정하고 \"다시 가져오기\"를 수행하세요."
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
@@ -2448,11 +2601,11 @@ msgstr "종ì†í•­ëª©ì„ ì—…ë°ì´íЏ í•  수 없습니다:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "ì´ë¦„ì´ ì§€ì •ë˜ì§€ 않ìŒ"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "ì´ë¦„ì— ìœ íš¨í•˜ì§€ ì•Šì€ ë¬¸ìžê°€ í¬í•¨ë¨"
#: editor/filesystem_dock.cpp
msgid "No name provided."
@@ -2480,7 +2633,7 @@ msgstr "ëª¨ë‘ í™•ìž¥"
#: editor/filesystem_dock.cpp
msgid "Collapse all"
-msgstr ""
+msgstr "ëª¨ë‘ ì ‘ê¸°"
#: editor/filesystem_dock.cpp
msgid "Copy Path"
@@ -2539,6 +2692,8 @@ msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
+"íŒŒì¼ ìŠ¤ìº”ì¤‘,\n"
+"잠시만 기다려주세요.."
#: editor/filesystem_dock.cpp
msgid "Move"
@@ -2567,27 +2722,27 @@ msgstr "애니메ì´ì…˜ì„ 분리시켜 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "ë¨¸í„°ë¦¬ì–¼ì„ ë¶„ë¦¬í•´ì„œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "오브ì íŠ¸ë¥¼ 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "오브ì íŠ¸ì™€ ë¨¸í„°ë¦¬ì–¼ì„ ë¶„ë¦¬í•´ì„œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "오브ì íŠ¸ì™€ 애니메ì´ì…˜ì„ 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "머터리얼과 애니메ì´ì…˜ì„ 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "오브ì íЏ, 머터리얼, 애니메ì´ì…˜ì„ 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
@@ -2595,7 +2750,7 @@ msgstr "ì—¬ëŸ¬ê°œì˜ ì”¬ìœ¼ë¡œ 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "여러 ê°œì˜ ì”¬ê³¼ 머터리얼로 가져오기"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
@@ -2629,11 +2784,11 @@ msgstr "저장 중.."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "'%s'를 기본으로 지정"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr ""
+msgstr "'%s'ì— ëŒ€í•´ 기본값으로 지정 í•´ì œ"
#: editor/import_dock.cpp
msgid " Files"
@@ -2689,9 +2844,8 @@ msgid "Remove Poly And Point"
msgstr "í´ë¦¬ê³¤ê³¼ í¬ì¸íЏ ì‚­ì œ"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "처ìŒë¶€í„° 새로운 í´ë¦¬ê³¤ 만들기."
+msgid "Create a new polygon from scratch"
+msgstr "처ìŒë¶€í„° 새로운 í´ë¦¬ê³¤ 만들기"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2700,6 +2854,14 @@ msgid ""
"Ctrl+LMB: Split Segment.\n"
"RMB: Erase Point."
msgstr ""
+"기존 í´ë¦¬ê³¤ 편집:\n"
+"좌í´ë¦­: í¬ì¸íЏ ì´ë™.\n"
+"컨트롤+좌í´ë¦­: 세그먼트 나누기.\n"
+"ìš°í´ë¦­: í¬ì¸íЏ 지우기."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "í¬ì¸íЏ ì‚­ì œ"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
@@ -2845,6 +3007,57 @@ msgid "Copy Animation"
msgstr "애니메ì´ì…˜ 복사"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "부문:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "붙여넣기"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "기능"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "새 애니메ì´ì…˜ 만들기"
@@ -3020,7 +3233,7 @@ msgstr "í•„í„°.."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Free"
-msgstr ""
+msgstr "무료"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
@@ -3032,19 +3245,11 @@ msgstr "íŒŒì¼ ë³´ê¸°"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
+msgstr "í˜¸ìŠ¤íŠ¸ëª…ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "ì—°ê²°í•  수 ì—†ìŒ."
+msgstr "ì—°ê²° ì—러, 다시 시ë„í•´ 주세요."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
@@ -3052,79 +3257,55 @@ msgstr "í˜¸ìŠ¤íŠ¸ì— ì—°ê²°í•  수 ì—†ìŒ:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
+msgstr "호스트로부터 ì‘답 ì—†ìŒ:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "요청 실패, 리턴 코드:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
+msgstr "너무 ë§Žì€ ë¦¬ë‹¤ì´ë ‰íŠ¸ë¡œ, 요청 실패"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr ""
+msgstr "ìž˜ëª»ëœ ë‹¤ìš´ë¡œë“œ 해시, 파ì¼ì´ ë³€ê²½ëœ ê²ƒìœ¼ë¡œ 보입니다."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr ""
+msgstr "예ìƒ:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr ""
+msgstr "ë°›ìŒ:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed sha256 hash check"
-msgstr ""
+msgstr "sha256 해시 ì²´í¬ ì‹¤íŒ¨"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr ""
+msgstr "ì–´ì…‹ 다운로드 ì—러:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Fetching:"
-msgstr ""
+msgstr "가져오는 중:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Resolving.."
msgstr "해결 중.."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "연결중.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "요청중.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "요청 ì—러"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
-msgstr ""
+msgstr "대기"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Retry"
-msgstr ""
+msgstr "다시 시ë„"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download Error"
@@ -3132,23 +3313,23 @@ msgstr "다운로드 ì—러"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr ""
+msgstr "ì´ ì–´ì…‹ì˜ ë‹¤ìš´ë¡œë“œê°€ ì´ë¯¸ 진행중입니다!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
-msgstr ""
+msgstr "처ìŒ"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "prev"
-msgstr ""
+msgstr "ì´ì „"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "next"
-msgstr ""
+msgstr "다ìŒ"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "last"
-msgstr ""
+msgstr "마지막"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
@@ -3227,6 +3408,34 @@ msgid "Move Action"
msgstr "ì´ë™ ì•¡ì…˜"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "세로 ê°€ì´ë“œ ì´ë™"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "새로운 세로 ê°€ì´ë“œ 만들기"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "세로 ê°€ì´ë“œ 제거"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "가로 ê°€ì´ë“œ ì´ë™"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "새로운 가로 ê°€ì´ë“œ 만들기"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "가로 ê°€ì´ë“œ 제거"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "새 가로 세로 ê°€ì´ë“œ 만들기"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "IK ì²´ì¸ íŽ¸ì§‘"
@@ -3330,7 +3539,7 @@ msgstr "픽셀 스냅 사용"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "스마트 스냅"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to parent"
@@ -3338,21 +3547,27 @@ msgstr "ë¶€ëª¨ì— ë§žì¶¤"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "노드 ì•µì»¤ì— ìŠ¤ëƒ…"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "노드 ì˜†ì— ìŠ¤ëƒ…"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "다른 ë…¸ë“œì— ìŠ¤ëƒ…"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "ê°€ì´ë“œì— 맞춤"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "ì„ íƒëœ 오브ì íŠ¸ë¥¼ 잠급니다 (ì´ë™ë¶ˆê°€)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "ì„ íƒëœ 오브ì íŠ¸ë¥¼ 잠금 해제합니다 (ì´ë™ê°€ëŠ¥)."
@@ -3403,6 +3618,10 @@ msgid "Show rulers"
msgstr "ìž ë³´ê¸°"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "ê°€ì´ë“œ 보기"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr "ì„ íƒí•­ëª© 화면 ì¤‘ì•™ì— í‘œì‹œ"
@@ -3444,11 +3663,11 @@ msgstr "마우스 ìœ„ì¹˜ì— í”¼ë²— 설정"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "그리드 단계를 2ë°° ì¦ê°€"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "그리드 단계를 반으로 ê°ì†Œ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3587,6 +3806,10 @@ msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
msgid "Hold Shift to edit tangents individually"
+msgstr "쉬프트키를 누르고 있으면 탄젠트를 개별ì ìœ¼ë¡œ 편집 가능"
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
msgstr ""
#: editor/plugins/gradient_editor_plugin.cpp
@@ -3615,12 +3838,18 @@ msgid ""
"No OccluderPolygon2D resource on this node.\n"
"Create and assign one?"
msgstr ""
+"ì´ ë…¸ë“œì— OccluderPolygon2D 리소스가 없습니다.\n"
+"새로 만들어서 지정하시겠습니까?"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
msgstr "Occluder í´ë¦¬ê³¤ 만들기"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "처ìŒë¶€í„° 새로운 í´ë¦¬ê³¤ 만들기."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "기존 í´ë¦¬ê³¤ 편집:"
@@ -3636,58 +3865,6 @@ msgstr "컨트롤+좌í´ë¦­: 세그먼트 ë¶„í• ."
msgid "RMB: Erase Point."
msgstr "ìš°í´ë¦­: í¬ì¸íЏ ì‚­ì œ."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "Line2Dì—서 í¬ì¸íЏ ì‚­ì œ"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Line2Dì— í¬ì¸íЏ 추가"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Line2Dì˜ í¬ì¸íЏ ì´ë™"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "í¬ì¸íЏ ì„ íƒ"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "쉬푸트+드래그: 컨트롤 í¬ì¸íЏ ì„ íƒ"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "í´ë¦­: í¬ì¸íЏ 추가"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "ìš°í´ë¦­: í¬ì¸íЏ ì‚­ì œ"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "í¬ì¸íЏ 추가 (빈 공간)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "세그먼트 ë¶„í•  (ë¼ì¸)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "í¬ì¸íЏ ì‚­ì œ"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "메쉬가 비었습니다!"
@@ -3878,11 +4055,11 @@ msgstr "네비게ì´ì…˜ 메쉬 지우기."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "구성 설정 중..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "그리드 사ì´ì¦ˆ 계산 중..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating heightfield..."
@@ -3898,10 +4075,9 @@ msgstr ""
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "걷기 가능한 ì˜ì—­ 계산 중..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
msgstr "분할중..."
@@ -3919,7 +4095,7 @@ msgstr "네ì´í‹°ë¸Œ 네비게ì´ì…˜ 메쉬로 변환 중..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "네비게ì´ì…˜ 메시 ìƒì„±ê¸° 설정:"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Parsing Geometry..."
@@ -3927,7 +4103,7 @@ msgstr "지오미트리 ë¶„ì„ ì¤‘..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "완료!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4002,7 +4178,7 @@ msgstr "노드가 지오미트리를 í¬í•¨í•˜ê³  있지 않습니다 (페ì´ìФ
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr ""
+msgstr "'ParticlesMaterial' íƒ€ìž…ì˜ í”„ë¡œì„¸ì„œ ë¨¸í„°ë¦¬ì–¼ì´ í•„ìš”í•©ë‹ˆë‹¤."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
@@ -4053,9 +4229,8 @@ msgid "Emission Source: "
msgstr "ì—미션 소스: "
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generate Visibility AABB"
-msgstr "AABB ìƒì„±"
+msgstr "가시성 AABB ìƒì„±"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
@@ -4087,16 +4262,46 @@ msgid "Move Out-Control in Curve"
msgstr "ì»¤ë¸Œì˜ ì•„ì›ƒ-컨트롤 ì´ë™"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "í¬ì¸íЏ ì„ íƒ"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "쉬푸트+드래그: 컨트롤 í¬ì¸íЏ ì„ íƒ"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "í´ë¦­: í¬ì¸íЏ 추가"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "ìš°í´ë¦­: í¬ì¸íЏ ì‚­ì œ"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "컨트롤 í¬ì¸íЏ ì„ íƒ (쉬프트+드래그)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "í¬ì¸íЏ 추가 (빈 공간)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "세그먼트 분할 (커브)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "í¬ì¸íЏ ì‚­ì œ"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "커브 닫기"
@@ -4233,7 +4438,6 @@ msgstr "리소스 로드"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4277,7 +4481,21 @@ msgstr "테마 다른 ì´ë¦„으로 저장.."
#: editor/plugins/script_editor_plugin.cpp
msgid " Class Reference"
-msgstr ""
+msgstr " í´ëž˜ìФ ë ˆí¼ëŸ°ìФ"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "ì •ë ¬"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "위로 ì´ë™"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "아래로 ì´ë™"
#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
@@ -4331,6 +4549,10 @@ msgstr "문서 닫기"
msgid "Close All"
msgstr "ëª¨ë‘ ë‹«ê¸°"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "다른 탭 닫기"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "실행"
@@ -4341,13 +4563,11 @@ msgstr "스í¬ë¦½íЏ íŒ¨ë„ í† ê¸€"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "찾기.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "ë‹¤ìŒ ì°¾ê¸°"
@@ -4431,7 +4651,7 @@ msgstr "내장 스í¬ë¦½íŠ¸ëŠ” 종ì†ëœ ì”¬ì´ ì—´ë¦° ìƒíƒœì—서만 편집ì´
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
-msgstr ""
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 가져온 리소스만 드ëží•  수 있습니다."
#: editor/plugins/script_text_editor.cpp
msgid "Pick Color"
@@ -4443,43 +4663,32 @@ msgstr "ëŒ€ì†Œë¬¸ìž ë³€í™˜"
#: editor/plugins/script_text_editor.cpp
msgid "Uppercase"
-msgstr ""
+msgstr "대문ìžë¡œ 변경"
#: editor/plugins/script_text_editor.cpp
msgid "Lowercase"
-msgstr ""
+msgstr "소문ìžë¡œ 변경"
#: editor/plugins/script_text_editor.cpp
msgid "Capitalize"
-msgstr ""
+msgstr "대문ìžë¡œ 시작"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "잘ë¼ë‚´ê¸°"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "복사하기"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "ì „ì²´ì„ íƒ"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "위로 ì´ë™"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "아래로 ì´ë™"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr "ë¼ì¸ ì‚­ì œ"
@@ -4501,6 +4710,22 @@ msgid "Clone Down"
msgstr "아래로 복제"
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "ë¼ì¸ ì ‘ìŒ"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "ë¼ì¸ 펼치기"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "모든 ë¼ì¸ 접기"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "모든 ë¼ì¸ 펼치기"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "ìžë™ 완성"
@@ -4510,11 +4735,11 @@ msgstr "후행 공백 ë¬¸ìž ì œê±°"
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent To Spaces"
-msgstr ""
+msgstr "들여쓰기를 스페ì´ìŠ¤ë¡œ 변환"
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent To Tabs"
-msgstr ""
+msgstr "들여쓰기를 탭으로 변환"
#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
@@ -4546,12 +4771,10 @@ msgid "Convert To Lowercase"
msgstr "소문ìžë¡œ 변환"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "ì´ì „ 찾기"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "변경.."
@@ -4560,7 +4783,6 @@ msgid "Goto Function.."
msgstr "함수로 ì´ë™.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "ë¼ì¸ìœ¼ë¡œ ì´ë™.."
@@ -4570,7 +4792,7 @@ msgstr "ë„ì›€ë§ ë³´ê¸°"
#: editor/plugins/shader_editor_plugin.cpp
msgid "Shader"
-msgstr ""
+msgstr "ì…°ì´ë”"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Constant"
@@ -4725,6 +4947,14 @@ msgid "View Plane Transform."
msgstr "ë·° í‰ë©´ 변형."
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "í¬ê¸°: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "위치 ì´ë™: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "%së„로 회전."
@@ -4782,7 +5012,7 @@ msgstr "애니메ì´ì…˜ 키가 삽입ë˜ì—ˆìŠµë‹ˆë‹¤."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn"
-msgstr ""
+msgstr "그려진 오브ì íЏ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Material Changes"
@@ -4798,13 +5028,17 @@ msgstr "서피스 변경"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Draw Calls"
-msgstr ""
+msgstr "드로우 콜"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Vertices"
msgstr "버틱스"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "초당 프레임"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "ë·°ì— ì •ë ¬"
@@ -4834,7 +5068,15 @@ msgstr "기즈모 보기"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Information"
-msgstr ""
+msgstr "정보 보기"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "FPS 보기"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "절반 í•´ìƒë„"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
@@ -4846,11 +5088,11 @@ msgstr "ë„플러 활성화"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
-msgstr ""
+msgstr "ìžìœ ì‹œì  왼쪽"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Right"
-msgstr ""
+msgstr "ìžìœ ì‹œì  오른쪽"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Forward"
@@ -4862,7 +5104,7 @@ msgstr "ìžìœ ì‹œì  뒤로 ì´ë™"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Up"
-msgstr ""
+msgstr "ìžìœ ì‹œì  위로"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Down"
@@ -4870,7 +5112,7 @@ msgstr "ìžìœ ì‹œì  아래로 ì´ë™"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Speed Modifier"
-msgstr ""
+msgstr "ìžìœ ì‹œì  ì†ë„ 변화"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "preview"
@@ -4967,6 +5209,10 @@ msgid "Tool Scale"
msgstr "í¬ê¸°ì¡°ì ˆ 툴"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "ìžìœ ì‹œì  토글"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "변환"
@@ -5218,11 +5464,11 @@ msgstr "ëª¨ë‘ ì‚­ì œ"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "테마 편집.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "테마 편집 메뉴."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5241,6 +5487,10 @@ msgid "Create Empty Editor Template"
msgstr "빈 ì—디터 템플릿 만들기"
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "현재 ì—디터 테마로부터 만들기"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "CheckBox Radio1"
@@ -5322,16 +5572,14 @@ msgid "Paint TileMap"
msgstr "타ì¼ë§µ 칠하기"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Line Draw"
-msgstr "ì§ì„ í˜•"
+msgstr "ì§ì„  그리기"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rectangle Paint"
-msgstr ""
+msgstr "사ê°ì˜ì—­ 칠하기"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Bucket Fill"
msgstr "채우기"
@@ -5360,9 +5608,8 @@ msgid "Mirror Y"
msgstr "Y축 뒤집기"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Paint Tile"
-msgstr "타ì¼ë§µ 칠하기"
+msgstr "íƒ€ì¼ ì¹ í•˜ê¸°"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -5413,28 +5660,24 @@ msgid "Error"
msgstr "ì—러"
#: editor/project_export.cpp
-#, fuzzy
msgid "Runnable"
-msgstr "활성화"
+msgstr "실행가능"
#: editor/project_export.cpp
-#, fuzzy
-msgid "Delete patch '"
-msgstr "입력 삭제"
+msgid "Delete patch '%s' from list?"
+msgstr "'%s'를 패치 목ë¡ì—서 삭제하시겠습니까?"
#: editor/project_export.cpp
-#, fuzzy
msgid "Delete preset '%s'?"
-msgstr "ì„ íƒëœ 파ì¼ë“¤ì„ 삭제하시겠습니까?"
+msgstr "'%s' í”„ë¦¬ì…‹ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted: "
-msgstr ""
+msgstr "ì´ í”Œëž«í¼ì— 대한 내보내기 í…œí”Œë¦¿ì´ ì—†ê±°ë‚˜ ì†ìƒë¨: "
#: editor/project_export.cpp
-#, fuzzy
msgid "Presets"
-msgstr "프리셋.."
+msgstr "프리셋"
#: editor/project_export.cpp editor/project_settings_editor.cpp
msgid "Add.."
@@ -5445,64 +5688,54 @@ msgid "Resources"
msgstr "리소스"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export all resources in the project"
-msgstr "프로ì íŠ¸ì˜ ëª¨ë“  리소스 내보내기."
+msgstr "프로ì íŠ¸ì˜ ëª¨ë“  리소스 내보내기"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export selected scenes (and dependencies)"
-msgstr "ì„ íƒëœ 리소스 내보내기 (종ì†ëœ 리소스 í¬í•¨)."
+msgstr "ì„ íƒëœ 리소스 내보내기 (종ì†ëœ 리소스 í¬í•¨)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export selected resources (and dependencies)"
-msgstr "ì„ íƒëœ 리소스 내보내기 (종ì†ëœ 리소스 í¬í•¨)."
+msgstr "ì„ íƒëœ 리소스 내보내기 (종ì†ëœ 리소스 í¬í•¨)"
#: editor/project_export.cpp
msgid "Export Mode:"
msgstr "내보내기 모드:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Resources to export:"
msgstr "내보낼 리소스:"
#: editor/project_export.cpp
-#, fuzzy
msgid ""
"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
-msgstr "내보내기 시, í¬í•¨ì‹œí‚¬ íŒŒì¼ (콤마로 구분, 예: *.json, *.txt):"
+msgstr "리소스가 아닌 íŒŒì¼ ë‚´ë³´ë‚´ê¸° í•„í„° (콤마로 구분, 예: *.json, *.txt)"
#: editor/project_export.cpp
-#, fuzzy
msgid ""
"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
-msgstr "내보내기 시, 제외시킬 íŒŒì¼ (콤마로 구분, 예: *.json, *.txt):"
+msgstr "프로ì íЏì—서 제외시킬 íŒŒì¼ í•„í„° (콤마로 구분, 예: *.json, *.txt)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Patches"
-msgstr "ì¼ì¹˜:"
+msgstr "패치"
#: editor/project_export.cpp
-#, fuzzy
msgid "Make Patch"
-msgstr "ëŒ€ìƒ ê²½ë¡œ:"
+msgstr "패치 만들기"
#: editor/project_export.cpp
-#, fuzzy
msgid "Features"
-msgstr "í…스ì³"
+msgstr "기능"
#: editor/project_export.cpp
msgid "Custom (comma-separated):"
msgstr ""
#: editor/project_export.cpp
-#, fuzzy
msgid "Feature List:"
-msgstr "함수 목ë¡:"
+msgstr "기능 목ë¡:"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -5517,19 +5750,16 @@ msgid "Export templates for this platform are missing/corrupted:"
msgstr ""
#: editor/project_export.cpp
-#, fuzzy
msgid "Export With Debug"
-msgstr "íƒ€ì¼ ì…‹ 내보내기"
+msgstr "디버그와 함께 내보내기"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "파ì¼ì´ 존재하지 않습니다."
+msgstr "경로가 존재하지 않습니다."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Please choose a 'project.godot' file."
-msgstr "프로ì íЏ í´ë” ë°”ê¹¥ì— ë‚´ë³´ë‚´ê¸°ë¥¼ 하세요!"
+msgstr "'project.godot' 파ì¼ì„ ì„ íƒí•˜ì„¸ìš”."
#: editor/project_manager.cpp
msgid ""
@@ -5558,33 +5788,28 @@ msgid "Invalid project path (changed anything?)."
msgstr "유효하지 ì•Šì€ í”„ë¡œì íЏ 경로 (뭔가 변경하신 ê±°ë¼ë„?)."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in project path."
-msgstr "프로ì íЏ ê²½ë¡œì— engine.cfg를 ìƒì„±í•  수 없습니다."
+msgstr "프로ì íЏ ê²½ë¡œì— project.godot 파ì¼ì„ ì°¾ì„ ìˆ˜ 없습니다."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't edit project.godot in project path."
-msgstr "프로ì íЏ ê²½ë¡œì— engine.cfg를 ìƒì„±í•  수 없습니다."
+msgstr "프로ì íЏ ê²½ë¡œì— project.godot 파ì¼ì„ 편집할 수 없습니다."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't create project.godot in project path."
-msgstr "프로ì íЏ ê²½ë¡œì— engine.cfg를 ìƒì„±í•  수 없습니다."
+msgstr "프로ì íЏ ê²½ë¡œì— project.godot 파ì¼ì„ ìƒì„±í•  수 없습니다."
#: editor/project_manager.cpp
msgid "The following files failed extraction from package:"
msgstr "다ìŒì˜ 파ì¼ë“¤ì„ 패키지로부터 ì¶”ì¶œí•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "ì´ë¦„없는 프로ì íЏ"
+msgstr "프로ì íЏ ì´ë¦„ 변경"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in the project path."
-msgstr "프로ì íЏ ê²½ë¡œì— engine.cfg를 ìƒì„±í•  수 없습니다."
+msgstr "프로ì íЏ ê²½ë¡œì— project.godot 파ì¼ì„ ì°¾ì„ ìˆ˜ 없습니다."
#: editor/project_manager.cpp
msgid "New Game Project"
@@ -5607,7 +5832,6 @@ msgid "Project Name:"
msgstr "프로ì íЏ 명:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
msgstr "í´ë” ìƒì„±"
@@ -5628,23 +5852,22 @@ msgid "Unnamed Project"
msgstr "ì´ë¦„없는 프로ì íЏ"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "연결하기.."
+msgstr "프로ì íŠ¸ë¥¼ ì—´ 수 ì—†ìŒ"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
msgstr "ë‘ê°œ ì´ìƒì˜ 프로ì íŠ¸ë¥¼ 열려는 ê²ƒì´ í™•ì‹¤í•©ë‹ˆê¹Œ?"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"Can't run project: no main scene defined.\n"
"Please edit the project and set the main scene in \"Project Settings\" under "
"the \"Application\" category."
msgstr ""
-"ë©”ì¸ ì”¬ì´ ì§€ì •ë˜ì§€ 않았습니다. ì„ íƒí•˜ì‹œê² ìŠµë‹ˆê¹Œ?\n"
-"ë‚˜ì¤‘ì— \"프로ì íЏ 설정\"ì˜ 'Application' 항목ì—서 변경할 수 있습니다."
+"프로ì íŠ¸ë¥¼ 실행할 수 없습니다: ë©”ì¸ì”¬ì´ 지정ë˜ì§€ 않았습니다.\n"
+"프로ì íЏ ì„¤ì •ì„ ìˆ˜ì •í•˜ì—¬ \"Application\" ì¹´í…Œê³ ë¦¬ì— \"Project Settings\"ì—서 "
+"ë©”ì¸ì”¬ì„ 설정하세요."
#: editor/project_manager.cpp
msgid ""
@@ -5690,23 +5913,26 @@ msgid "New Project"
msgstr "새 프로ì íЏ"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Templates"
-msgstr "ì•„ì´í…œ ì‚­ì œ"
+msgstr "템플릿"
#: editor/project_manager.cpp
msgid "Exit"
msgstr "종료"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "재시작 (초):"
+msgstr "지금 재시작"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't run project"
-msgstr "연결하기.."
+msgstr "프로ì íŠ¸ë¥¼ 실행할 수 ì—†ìŒ"
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -5741,10 +5967,6 @@ msgid "Add Input Action Event"
msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ 추가"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "메타+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "쉬프트+"
@@ -5806,18 +6028,16 @@ msgid "Change"
msgstr "변경"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Joypad Axis Index:"
-msgstr "ì¡°ì´ìŠ¤í‹± ì¶• ì¸ë±ìФ:"
+msgstr "ì¡°ì´íŒ¨ë“œ ì¶• ì¸ë±ìФ:"
#: editor/project_settings_editor.cpp
msgid "Axis"
msgstr "ì¶•"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Joypad Button Index:"
-msgstr "ì¡°ì´ìŠ¤í‹± 버튼 ì¸ë±ìФ:"
+msgstr "ì¡°ì´íŒ¨ë“œ 버튼 ì¸ë±ìФ:"
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
@@ -5828,9 +6048,8 @@ msgid "Erase Input Action Event"
msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ ì‚­ì œ"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add Event"
-msgstr "빈 프레임 추가"
+msgstr "ì´ë²¤íЏ 추가"
#: editor/project_settings_editor.cpp
msgid "Device"
@@ -5869,29 +6088,24 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "No property '"
-msgstr "ì†ì„±:"
+msgid "No property '%s' exists."
+msgstr "'%s' ì†ì„±ì´ 존재하지 않습니다."
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "설정"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Delete Item"
-msgstr "입력 삭제"
+msgstr "ì•„ì´í…œ ì‚­ì œ"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "í˜¸ìŠ¤íŠ¸ì— ì—°ê²°í•  수 ì—†ìŒ:"
+msgstr "'/' ë˜ëŠ” ':' 문ìžë¥¼ í¬í•¨í•  수 ì—†ìŒ"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Already existing"
-msgstr "ì§€ì† ì „í™˜"
+msgstr "ì´ë¯¸ 존재함"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -5934,18 +6148,16 @@ msgid "Remove Resource Remap Option"
msgstr "리소스 리맵핑 옵션 제거"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "연결 시간 변경"
+msgstr "ë¡œì¼€ì¼ í•„í„° 변경ë¨"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Project Settings (project.godot)"
-msgstr "프로ì íЏ 설정 (engine.cfg)"
+msgstr "프로ì íЏ 설정 (project.godot)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -6004,37 +6216,32 @@ msgid "Locale"
msgstr "지역"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "ì´ë¯¸ì§€ í•„í„°:"
+msgstr "ë¡œì¼€ì¼ í•„í„°"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "뼈대 보기"
+msgstr "모든 ë¡œì¼€ì¼ ë³´ê¸°"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "í•„í„°"
+msgstr "필터 모드:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "지역"
+msgstr "로케ì¼:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
msgstr "ìžë™ 로드"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Viewport"
-msgstr "1ê°œ ë·°í¬íЏ"
+msgstr "ë·°í¬íЏ ì„ íƒ"
#: editor/property_editor.cpp
msgid "Ease In"
@@ -6069,7 +6276,6 @@ msgid "Assign"
msgstr "할당"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Select Node"
msgstr "노드 ì„ íƒ"
@@ -6078,31 +6284,26 @@ msgid "New Script"
msgstr "새 스í¬ë¦½íЏ"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "Bones 만들기"
+msgstr "고유하게 만들기"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Show in File System"
-msgstr "íŒŒì¼ ì‹œìŠ¤í…œ"
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 보기"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "변환.."
+msgstr "%s로 변환"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
msgstr "íŒŒì¼ ë¡œë“œ ì—러: 리소스가 아닙니다!"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Selected node is not a Viewport!"
-msgstr "가져올 노드들 ì„ íƒ"
+msgstr "ì„ íƒëœ 노드는 Viewportê°€ 아닙니다!"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Node"
msgstr "노드 ì„ íƒ"
@@ -6131,9 +6332,8 @@ msgid "Select Property"
msgstr "ì†ì„± ì„ íƒ"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Virtual Method"
-msgstr "메소드 ì„ íƒ"
+msgstr "ê°€ìƒ ë©”ì†Œë“œ ì„ íƒ"
#: editor/property_selector.cpp
msgid "Select Method"
@@ -6286,9 +6486,8 @@ msgid "Error duplicating scene to save it."
msgstr "저장하기 위해 ì”¬ì„ ë³µì œí•˜ëŠ” ì¤‘ì— ì—러가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Sub-Resources:"
-msgstr "리소스:"
+msgstr "서브-리소스:"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
@@ -6331,9 +6530,8 @@ msgid "Save Branch as Scene"
msgstr "ì„ íƒ ë…¸ë“œë¥¼ 다른 씬으로 저장"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Copy Node Path"
-msgstr "경로 복사"
+msgstr "노드 경로 복사"
#: editor/scene_tree_dock.cpp
msgid "Delete (No Confirm)"
@@ -6351,9 +6549,8 @@ msgstr ""
"씬 파ì¼ì„ 노드로 추가합니다. 루트 노드가 ì—†ì„ ê²½ìš°, ìƒì†ì”¬ìœ¼ë¡œ 만들어집니다."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Filter nodes"
-msgstr "í•„í„°"
+msgstr "노드 필터"
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script for the selected node."
@@ -6364,6 +6561,14 @@ msgid "Clear a script for the selected node."
msgstr "ì„ íƒëœ ë…¸ë“œì˜ ìŠ¤í¬ë¦½íŠ¸ë¥¼ 제거합니다."
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "ì›ê²©"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "로컬"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "ìƒì†ì„ 없애시겠습니까? (ë˜ëŒë¦¬ê¸° 불가!)"
@@ -6406,9 +6611,8 @@ msgid "Instance:"
msgstr "ì¸ìŠ¤í„´ìŠ¤:"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Open script"
-msgstr "ë‹¤ìŒ ìŠ¤í¬ë¦½íЏ"
+msgstr "스í¬ë¦½íЏ 열기"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -6423,9 +6627,8 @@ msgid ""
msgstr ""
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Toggle Visibility"
-msgstr "Spatial ë³´ì´ê¸° 토글"
+msgstr "ë³´ì´ê¸° 토글"
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
@@ -6448,14 +6651,12 @@ msgid "Select a Node"
msgstr "노드 ì„ íƒ"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading template '%s'"
-msgstr "ì´ë¯¸ì§€ 로드 ì—러:"
+msgstr "'%s' 템플릿 로드 ì—러"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error - Could not create script in filesystem."
-msgstr "íŒŒì¼ ì‹œìŠ¤í…œì— ìŠ¤í¬ë¦½íŠ¸ë¥¼ ìƒì„±í•  수 없습니다."
+msgstr "ì—러 - íŒŒì¼ ì‹œìŠ¤í…œì— ìŠ¤í¬ë¦½íŠ¸ë¥¼ ìƒì„±í•  수 없습니다."
#: editor/script_create_dialog.cpp
msgid "Error loading script from %s"
@@ -6482,9 +6683,8 @@ msgid "Directory of the same name exists"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "파ì¼ì´ 존재합니다. ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ?"
+msgstr "파ì¼ì´ 존재하여, 재사용합니다"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6495,23 +6695,20 @@ msgid "Wrong extension chosen"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid Path"
-msgstr "유효하지 ì•Šì€ ê²½ë¡œ."
+msgstr "유효하지 ì•Šì€ ê²½ë¡œ"
#: editor/script_create_dialog.cpp
msgid "Invalid class name"
msgstr "유요하지 ì•Šì€ í´ëž˜ìŠ¤ëª…"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid inherited parent name or path"
-msgstr "유요하지 ì•Šì€ ì¸ë±ìФ ì†ì„±ëª…."
+msgstr "유요하지 ì•Šì€ ìƒì†ëœ 부모 ì´ë¦„ ë˜ëŠ” 경로"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script valid"
-msgstr "스í¬ë¦½íЏ"
+msgstr "유효한 스í¬ë¦½íЏ"
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9 and _"
@@ -6522,36 +6719,30 @@ msgid "Built-in script (into scene file)"
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Create new script file"
-msgstr "새 스í¬ë¦½íЏ 만들기"
+msgstr "새 스í¬ë¦½íЏ íŒŒì¼ ë§Œë“¤ê¸°"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Load existing script file"
-msgstr "기존 스í¬ë¦½íЏ 로드하기"
+msgstr "기존 스í¬ë¦½íЏ íŒŒì¼ ë¡œë“œí•˜ê¸°"
#: editor/script_create_dialog.cpp
msgid "Language"
msgstr "언어"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Inherits"
-msgstr "ìƒì†:"
+msgstr "ìƒì†"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Class Name"
-msgstr "í´ëž˜ìŠ¤ëª…:"
+msgstr "í´ëž˜ìŠ¤ëª…"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Template"
-msgstr "ì•„ì´í…œ ì‚­ì œ"
+msgstr "템플릿"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Built-in Script"
msgstr "내장 스í¬ë¦½íЏ"
@@ -6560,6 +6751,10 @@ msgid "Attach Node Script"
msgstr "노드 스í¬ë¦½íЏ ë¶™ì´ê¸°"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "ì›ê²© "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "ë°”ì´íЏ:"
@@ -6616,18 +6811,6 @@ msgid "Stack Trace (if applicable):"
msgstr "ìŠ¤íƒ ì¶”ì  (해당ë˜ëŠ” 경우):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "ì›ê²© ì¸ìŠ¤íŽ™í„°"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "실시간 씬 트리:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "ì›ê²© 오브ì íЏ ì†ì„±: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "프로파ì¼ëŸ¬"
@@ -6744,14 +6927,12 @@ msgid "Change Probe Extents"
msgstr "프로브 범위 변경"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Library"
-msgstr "메쉬 ë¼ì´ë¸ŒëŸ¬ë¦¬.."
+msgstr "ë¼ì´ë¸ŒëŸ¬ë¦¬"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Status"
-msgstr "ìƒíƒœ:"
+msgstr "ìƒíƒœ"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
@@ -6761,82 +6942,86 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"convert()하기 위한 ì¸ìž íƒ€ìž…ì´ ìœ íš¨í•˜ì§€ 않습니다, TYPE_* ìƒìˆ˜ë¥¼ 사용하세요."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "디코딩할 ë°”ì´íŠ¸ê°€ 모ìžë¼ê±°ë‚˜, 유효하지 ì•Šì€ í˜•ì‹ìž…니다."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "ìŠ¤í… ì¸ìžê°€ 제로입니다!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "스í¬ë¦½íŠ¸ì˜ ì¸ìŠ¤í„´ìŠ¤ê°€ 아님"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "스í¬ë¦½íŠ¸ì— ê¸°ë°˜í•˜ì§€ 않ìŒ"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "리소스 파ì¼ì— 기반하지 않ìŒ"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "유효하지 ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—†ìŒ)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"유효하지 ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—서 스í¬ë¦½íŠ¸ë¥¼ 로드할 수 ì—†ìŒ)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
"유효하지 ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@pathì˜ ìŠ¤í¬ë¦½íŠ¸ê°€ 유효하지 않ìŒ)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "유효하지 ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary (서브í´ëž˜ìŠ¤ê°€ 유효하지 않ìŒ)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Delete Selection"
-msgstr "ì„ íƒ í•­ëª© ì‚­ì œ"
+msgstr "그리드맵 ì„ íƒ ì‚­ì œ"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Duplicate Selection"
-msgstr "ì„ íƒí‚¤ 복제"
+msgstr "그리드맵 ì„ íƒ ë³µì œ"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "그리드맵"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Snap View"
-msgstr "ìƒë‹¨ ë·°"
+msgstr "스냅 뷰"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+msgid "Previous Floor"
+msgstr "ì´ì „ 층"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Clip Disabled"
-msgstr "사용 안함"
+msgstr "í´ë¦½ 사용 안함"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
@@ -6859,19 +7044,16 @@ msgid "Edit Z Axis"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Cursor Rotate X"
-msgstr "컨트롤: 회전"
+msgstr "커서 X 회전"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Cursor Rotate Y"
-msgstr "컨트롤: 회전"
+msgstr "커서 Y 회전"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Cursor Rotate Z"
-msgstr "컨트롤: 회전"
+msgstr "커서 Z 회전"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate X"
@@ -6890,39 +7072,28 @@ msgid "Cursor Clear Rotation"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Create Area"
-msgstr "새로 만들기"
+msgstr "Area 만들기"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Create Exterior Connector"
-msgstr "새 프로ì íЏ 만들기"
+msgstr "외부 커넥터 만들기"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Erase Area"
-msgstr "타ì¼ë§µ 지우기"
+msgstr "Area 지우기"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "ì„ íƒì˜ì—­ë§Œ"
+msgid "Clear Selection"
+msgstr "ì„ íƒ ì—†ì• ê¸°"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "ì„ íƒì˜ì—­ë§Œ"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Settings"
-msgstr "스냅 설정"
+msgstr "그리드맵 설정"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Pick Distance:"
-msgstr "ì¸ìŠ¤í„´ìŠ¤:"
+msgstr "거리 ì„ íƒ:"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
@@ -6959,29 +7130,24 @@ msgid "Stack overflow with stack depth: "
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Signal Arguments"
-msgstr "ì‹œê·¸ë„ ì¸ìž 편집:"
+msgstr "ì‹œê·¸ë„ ì¸ìž 변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument Type"
-msgstr "배열 값 타입 변경"
+msgstr "ì¸ìˆ˜ 타입 변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument name"
-msgstr "ìž…ë ¥ ì´ë¦„ 변경"
+msgstr "ì¸ìˆ˜ ì´ë¦„ 변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Set Variable Default Value"
-msgstr "기본값 변경"
+msgstr "변수 기본값 설정"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Set Variable Type"
-msgstr "변수 편집:"
+msgstr "변수 타입 설정"
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
@@ -7032,17 +7198,15 @@ msgid "Add Node"
msgstr "노드 추가"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Nodes"
-msgstr "유효하지 ì•Šì€ í‚¤ ì‚­ì œ"
+msgstr "비주얼 스í¬ë¦½íЏ 노드 제거"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Duplicate VisualScript Nodes"
-msgstr "그래프 노드 복제"
+msgstr "비주얼 스í¬ë¦½íЏ 노드 복제"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7050,7 +7214,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7058,7 +7222,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7082,24 +7246,20 @@ msgid "Add Setter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Base Type"
-msgstr "타입 변경"
+msgstr "기본 타입 변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Move Node(s)"
-msgstr "노드 삭제"
+msgstr "노드 ì´ë™"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Node"
-msgstr "ì…°ì´ë” 그래프 노드 ì‚­ì œ"
+msgstr "비주얼 스í¬ë¦½íЏ 노드 제거"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Nodes"
-msgstr "연결할 노드:"
+msgstr "노드 연결"
#: modules/visual_script/visual_script_editor.cpp
msgid "Condition"
@@ -7138,42 +7298,36 @@ msgid "Script already has function '%s'"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Input Value"
-msgstr "ìž…ë ¥ ì´ë¦„ 변경"
+msgstr "입력 값 변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Can't copy the function node."
-msgstr "'..'ì— ìˆ˜í–‰í•  수 ì—†ìŒ"
+msgstr "함수 노드를 복사할 수 없습니다."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Clipboard is empty!"
-msgstr "리소스 í´ë¦½ë³´ë“œê°€ 비었습니다!"
+msgstr "í´ë¦½ë³´ë“œê°€ 비었습니다!"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Paste VisualScript Nodes"
-msgstr "노드 붙여넣기"
+msgstr "비주얼 스í¬ë¦½íЏ 노드 붙여넣기"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
msgstr "함수 제거"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable"
-msgstr "변수 편집:"
+msgstr "변수 편집"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
msgstr "변수 제거"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal"
-msgstr "ì‹œê·¸ë„ íŽ¸ì§‘:"
+msgstr "ì‹œê·¸ë„ íŽ¸ì§‘"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
@@ -7282,28 +7436,34 @@ msgid ""
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Run in Browser"
-msgstr "찾아보기"
+msgstr "브ë¼ìš°ì €ì—서 실행"
#: platform/javascript/export/export.cpp
msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not write file:\n"
-msgstr "타ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ:"
+msgstr "파ì¼ì— 쓸 수 ì—†ìŒ:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr "내보내기 í…œí”Œë¦¿ì„ ì—´ 수 없습니다:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "유효하지 ì•Šì€ ë‚´ë³´ë‚´ê¸° 템플릿:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not read custom HTML shell:\n"
msgstr "타ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
-msgstr "í´ë”를 만들 수 없습니다."
+msgid "Could not read boot splash image file:\n"
+msgstr "타ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ:"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7412,22 +7572,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "Path ì†ì„±ì€ 유효한 Node2D 노드를 가리켜야 합니다."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Path ì†ì„±ì€ 유효한 Viewport 노드를 가리켜야 합니다. 가리킨 Viewport는 ë˜í•œ "
-"'render target' 모드로 설정ë˜ì–´ì•¼ 합니다."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"ì´ Spriteê°€ ë™ìž‘하기 위해서는 Path ì†ì„±ì— ì§€ì •ëœ Viewportê°€ 'render target'으"
-"로 설정ë˜ì–´ì•¼ 합니다."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7496,6 +7640,15 @@ msgstr ""
"CollisionShapeì´ ê¸°ëŠ¥ì„ í•˜ê¸° 위해서는 ëª¨ì–‘ì´ ì œê³µë˜ì–´ì•¼ 합니다. 모양 리소스"
"를 만드세요!"
+#: scene/3d/gi_probe.cpp
+#, fuzzy
+msgid "Plotting Meshes"
+msgstr "ì´ë¯¸ì§€ 병합 중"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7566,6 +7719,11 @@ msgstr "경고!"
msgid "Please Confirm..."
msgstr "확ì¸í•´ì£¼ì„¸ìš”..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "메소드 ì„ íƒ"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7582,6 +7740,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7616,6 +7778,63 @@ msgstr "í°íЏ 로딩 ì—러."
msgid "Invalid font size."
msgstr "유요하지 ì•Šì€ í°íЏ 사ì´ì¦ˆ."
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "소스: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Line2Dì—서 í¬ì¸íЏ ì‚­ì œ"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Line2Dì— í¬ì¸íЏ 추가"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Line2Dì˜ í¬ì¸íЏ ì´ë™"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "세그먼트 ë¶„í•  (ë¼ì¸)"
+
+#~ msgid "Meta+"
+#~ msgstr "메타+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "설정"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "ì›ê²© ì¸ìŠ¤íŽ™í„°"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "실시간 씬 트리:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "ì›ê²© 오브ì íЏ ì†ì„±: "
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "ì„ íƒì˜ì—­ë§Œ"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "ì„ íƒì˜ì—­ë§Œ"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Path ì†ì„±ì€ 유효한 Viewport 노드를 가리켜야 합니다. 가리킨 Viewport는 ë˜"
+#~ "한 'render target' 모드로 설정ë˜ì–´ì•¼ 합니다."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "ì´ Spriteê°€ ë™ìž‘하기 위해서는 Path ì†ì„±ì— ì§€ì •ëœ Viewportê°€ 'render "
+#~ "target'으로 설정ë˜ì–´ì•¼ 합니다."
+
#~ msgid "Filter:"
#~ msgstr "í•„í„°:"
@@ -7637,9 +7856,6 @@ msgstr "유요하지 ì•Šì€ í°íЏ 사ì´ì¦ˆ."
#~ msgid "Removed:"
#~ msgstr "제거ë¨:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "ì•„í‹€ë¼ìФ 저장 중 ì—러:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "ì•„í‹€ë¼ìФ 서브 í…스ì³ë¥¼ 저장할 수 없습니다:"
@@ -8019,9 +8235,6 @@ msgstr "유요하지 ì•Šì€ í°íЏ 사ì´ì¦ˆ."
#~ msgid "Cropping Images"
#~ msgstr "ì´ë¯¸ì§€ ìžë¥´ëŠ” 중"
-#~ msgid "Blitting Images"
-#~ msgstr "ì´ë¯¸ì§€ 병합 중"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "ì•„í‹€ë¼ìФ ì´ë¯¸ì§€ë¥¼ 저장할 수 ì—†ìŒ:"
@@ -8382,9 +8595,6 @@ msgstr "유요하지 ì•Šì€ í°íЏ 사ì´ì¦ˆ."
#~ msgid "Save Translatable Strings"
#~ msgstr "번역가능한 문ìžì—´ 저장"
-#~ msgid "Install Export Templates"
-#~ msgstr "내보내기 템플릿 설치"
-
#~ msgid "Edit Script Options"
#~ msgstr "스í¬ë¦½íЏ 옵션 편집"
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index b85e8e01aa..af752e728f 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -4,12 +4,13 @@
# This file is distributed under the same license as the Godot source code.
#
# Ignas Kiela <ignaskiela@super.lt>, 2017.
+# Kornelijus <kornelijus.github@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-10-23 18:47+0000\n"
-"Last-Translator: Ignas Kiela <ignaskiela@super.lt>\n"
+"PO-Revision-Date: 2017-11-27 00:48+0000\n"
+"Last-Translator: Kornelijus <kornelijus.github@gmail.com>\n"
"Language-Team: Lithuanian <https://hosted.weblate.org/projects/godot-engine/"
"godot/lt/>\n"
"Language: lt\n"
@@ -17,15 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n%10>=2 && (n%100<10 || n"
"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
-msgstr ""
+msgstr "Išjungta"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr ""
+msgstr "Visas Pasirinkimas"
#: editor/animation_editor.cpp
msgid "Move Add Key"
@@ -33,23 +34,23 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr ""
+msgstr "Animacija: Pakeisti PerÄ—jimÄ…"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr ""
+msgstr "Animacija: Pakeisti TransformacijÄ…"
#: editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr ""
+msgstr "Animacija: Pakeisti Reikšmę"
#: editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr ""
+msgstr "Animacija: Pakeisti Iškvietimą"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr ""
+msgstr "Animacija: Pridėti Takelį"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
@@ -57,15 +58,15 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr ""
+msgstr "Animacija: Perkelti Takelį Aukštyn"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr ""
+msgstr "Animacija: Perkelti Takelį Žemyn"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr ""
+msgstr "Animacija: Panaikinti Takelį"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
@@ -73,7 +74,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr ""
+msgstr "Animacija: Pervadinti Takelį"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
@@ -100,6 +101,7 @@ msgid "Anim Delete Keys"
msgstr ""
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr ""
@@ -117,7 +119,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Discrete"
-msgstr ""
+msgstr "Diskretus"
#: editor/animation_editor.cpp
msgid "Trigger"
@@ -234,8 +236,9 @@ msgid "Anim Scale Keys"
msgstr ""
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Add Call Track"
-msgstr ""
+msgstr "Animacija: Pridėti Takelio Iškvietimą"
#: editor/animation_editor.cpp
msgid "Animation zoom."
@@ -243,7 +246,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "Ilgis:"
+msgstr "Ilgis (sek.):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
@@ -308,6 +311,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
+"Norint redaguoti animacijas pasirinkite AnimationPlayer Nodą iš Scenos."
#: editor/animation_editor.cpp
msgid "Key"
@@ -435,62 +439,64 @@ msgstr ""
#: editor/code_editor.cpp
msgid "Zoom In"
-msgstr ""
+msgstr "Priartinti"
#: editor/code_editor.cpp
msgid "Zoom Out"
-msgstr ""
+msgstr "Nutolinti"
#: editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Atstatyti PriartinimÄ…"
#: editor/code_editor.cpp editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr ""
+msgstr "Linija:"
#: editor/code_editor.cpp
msgid "Col:"
-msgstr ""
+msgstr "Stulpelis:"
#: editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
-msgstr ""
+msgstr "Metodas pasirinktame Node turi būti nurodytas!"
#: editor/connections_dialog.cpp
msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
+"Pasirinktas metodas nerastas! Nurodykite galiojantį metodą arba prijunkite "
+"skriptÄ… prie pasirinkto Nodo."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr ""
+msgstr "Prijunkite prie Nodo:"
#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Add"
-msgstr ""
+msgstr "PridÄ—ti"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
#: editor/project_settings_editor.cpp
msgid "Remove"
-msgstr ""
+msgstr "Panaikinti"
#: editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr ""
+msgstr "Pridėkite Papildomą Iškvietimo Argumentą:"
#: editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr ""
+msgstr "Papildomi Iškvietimo Argumentai:"
#: editor/connections_dialog.cpp
msgid "Path to Node:"
-msgstr ""
+msgstr "Kelias iki Nodo:"
#: editor/connections_dialog.cpp
msgid "Make Function"
@@ -516,7 +522,7 @@ msgstr ""
#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Close"
-msgstr ""
+msgstr "Uždaryti"
#: editor/connections_dialog.cpp
msgid "Connect"
@@ -524,7 +530,7 @@ msgstr ""
#: editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr ""
+msgstr "Prijungti '%s' prie '%s'"
#: editor/connections_dialog.cpp
msgid "Connecting Signal:"
@@ -541,24 +547,24 @@ msgstr ""
#: editor/connections_dialog.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Disconnect"
-msgstr ""
+msgstr "Atsijungti"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr ""
+msgstr "Signalai"
#: editor/create_dialog.cpp
msgid "Create New"
-msgstr ""
+msgstr "Sukurti NaujÄ…"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
msgid "Favorites:"
-msgstr ""
+msgstr "MÄ—gstamiausi:"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
msgid "Recent:"
-msgstr ""
+msgstr "Naujausi:"
#: editor/create_dialog.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -577,7 +583,7 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_editor_debugger.cpp
msgid "Description:"
-msgstr ""
+msgstr "Aprašymas:"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
@@ -629,6 +635,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Atidaryti"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -699,6 +712,14 @@ msgstr ""
msgid "Delete"
msgstr ""
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -863,7 +884,7 @@ msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Nutildyti"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
@@ -876,15 +897,15 @@ msgstr ""
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr ""
+msgstr "Duplikuoti"
#: editor/editor_audio_buses.cpp
msgid "Reset Volume"
-msgstr ""
+msgstr "Atstatyti GarsÄ…"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
-msgstr ""
+msgstr "Ištrinti Efektą"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus"
@@ -1107,17 +1128,15 @@ msgid "File Exists, Overwrite?"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-msgid "All Recognized"
+msgid "Select Current Folder"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-msgid "All Files (*)"
+msgid "All Recognized"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
@@ -1186,7 +1205,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1472,6 +1491,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1581,6 +1615,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1706,11 +1744,19 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1722,6 +1768,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1786,13 +1836,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2050,11 +2099,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2103,19 +2152,19 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Open 2D Editor"
-msgstr ""
+msgstr "Atidaryti 2D Editorių"
#: editor/editor_node.cpp
msgid "Open 3D Editor"
-msgstr ""
+msgstr "Atidaryti 3D Editorių"
#: editor/editor_node.cpp
msgid "Open Script Editor"
-msgstr ""
+msgstr "Atidaryti Skriptų Editorių"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr ""
+msgstr "Atidaryti Resursų Biblioteką"
#: editor/editor_node.cpp
msgid "Open the next Editor"
@@ -2123,7 +2172,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Open the previous Editor"
-msgstr ""
+msgstr "Atidaryti praeitą Editorių"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -2131,36 +2180,36 @@ msgstr ""
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
-msgstr ""
+msgstr "Miniatūra.."
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr ""
+msgstr "Įdiegti Priedai:"
#: editor/editor_plugin_settings.cpp
msgid "Update"
-msgstr ""
+msgstr "Atnaujinti"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Version:"
-msgstr ""
+msgstr "Versija:"
#: editor/editor_plugin_settings.cpp
msgid "Author:"
-msgstr ""
+msgstr "Autorius:"
#: editor/editor_plugin_settings.cpp
msgid "Status:"
-msgstr ""
+msgstr "Statusas:"
#: editor/editor_profiler.cpp
msgid "Stop Profiling"
-msgstr ""
+msgstr "Baigti ProfiliavimÄ…"
#: editor/editor_profiler.cpp
msgid "Start Profiling"
-msgstr ""
+msgstr "PradÄ—ti ProfiliavimÄ…"
#: editor/editor_profiler.cpp
msgid "Measure:"
@@ -2168,23 +2217,23 @@ msgstr ""
#: editor/editor_profiler.cpp
msgid "Frame Time (sec)"
-msgstr ""
+msgstr "Kadro TrukmÄ— (sekundÄ—mis)"
#: editor/editor_profiler.cpp
msgid "Average Time (sec)"
-msgstr ""
+msgstr "Vidutiniška Trukmė (sekunėmis)"
#: editor/editor_profiler.cpp
msgid "Frame %"
-msgstr ""
+msgstr "Kadro %"
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
-msgstr ""
+msgstr "Fizikos Kadro %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
-msgstr ""
+msgstr "TrukmÄ—:"
#: editor/editor_profiler.cpp
msgid "Inclusive"
@@ -2230,7 +2279,7 @@ msgstr ""
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
-msgstr ""
+msgstr "Galbūt jūs pamiršote '_run' metodą?"
#: editor/editor_settings.cpp
msgid "Default (Same as Editor)"
@@ -2238,43 +2287,47 @@ msgstr ""
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr ""
+msgstr "Pasirinkite Nodus, kuriuos norite importuoti"
#: editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr ""
+msgstr "Kelias iki Scenos:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr ""
+msgstr "Importuoti iš Nodo:"
#: editor/export_template_manager.cpp
msgid "Re-Download"
-msgstr ""
+msgstr "Atsiųsti iš naujo"
#: editor/export_template_manager.cpp
msgid "Uninstall"
-msgstr ""
+msgstr "Išinstaliuoti"
#: editor/export_template_manager.cpp
msgid "(Installed)"
-msgstr ""
+msgstr "(Įdiegta)"
#: editor/export_template_manager.cpp
msgid "Download"
-msgstr ""
+msgstr "Atsiųsti"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(Nerasta)"
#: editor/export_template_manager.cpp
msgid "(Current)"
+msgstr "(Esama)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
msgstr ""
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "Panaikinti šablono versiją '%s'?"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
@@ -2292,11 +2345,11 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "Å ablonuose nerasta version.txt failo."
#: editor/export_template_manager.cpp
msgid "Error creating path for templates:\n"
-msgstr ""
+msgstr "Klaida kuriant kelią šablonams:\n"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -2307,6 +2360,100 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2330,12 +2477,20 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2353,12 +2508,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2616,8 +2765,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2628,6 +2776,10 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2772,6 +2924,55 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Aprašymas:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2801,20 +3002,21 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Animation"
-msgstr ""
+msgstr "Animacija"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "New name:"
-msgstr ""
+msgstr "Naujas pavadinimas:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Filters"
-msgstr ""
+msgstr "Redaguoti Filtrus"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Scale:"
-msgstr ""
+msgstr "SkalÄ—:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade In (s):"
@@ -2846,12 +3048,12 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Start!"
-msgstr ""
+msgstr "PradÄ—ti!"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Amount:"
-msgstr ""
+msgstr "Kiekis:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend:"
@@ -2899,55 +3101,56 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation Node"
-msgstr ""
+msgstr "Animacijos Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
-msgstr ""
+msgstr "OneShot Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix Node"
-msgstr ""
+msgstr "Mix Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend2 Node"
-msgstr ""
+msgstr "Blend2 Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend3 Node"
-msgstr ""
+msgstr "Blend3 Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend4 Node"
-msgstr ""
+msgstr "Blend4 Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr ""
+msgstr "TimeScale Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeSeek Node"
-msgstr ""
+msgstr "TimeSeek Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "Transition Nodas"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
-msgstr ""
+msgstr "Importuoti Animacijas.."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr ""
+msgstr "Redaguoti Nodų Filtrus"
#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
msgid "Filters.."
-msgstr ""
+msgstr "Filtrai.."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Free"
-msgstr ""
+msgstr "Nemokama"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
@@ -2962,18 +3165,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -2982,40 +3177,24 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr ""
+msgstr "TikÄ—tasi:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr ""
+msgstr "Gauta:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed sha256 hash check"
@@ -3023,7 +3202,7 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr ""
+msgstr "Resurso Atsisiuntimo Klaida:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Fetching:"
@@ -3034,14 +3213,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3051,11 +3222,11 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Retry"
-msgstr ""
+msgstr "Bandyti iš naujo"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download Error"
-msgstr ""
+msgstr "Atsisiuntimo Klaida"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
@@ -3063,7 +3234,7 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
-msgstr ""
+msgstr "pirmas"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "prev"
@@ -3075,16 +3246,16 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "last"
-msgstr ""
+msgstr "paskutinis"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
-msgstr ""
+msgstr "Visi"
#: editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_settings_editor.cpp
msgid "Plugins"
-msgstr ""
+msgstr "Priedai"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Sort:"
@@ -3097,7 +3268,7 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_settings_editor.cpp
msgid "Category:"
-msgstr ""
+msgstr "Kategorija:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Site:"
@@ -3154,6 +3325,34 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3274,10 +3473,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3328,6 +3533,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3512,6 +3721,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3544,6 +3757,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3559,58 +3776,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4008,16 +4173,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4091,7 +4286,7 @@ msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Scale Polygon"
-msgstr ""
+msgstr "Keisti Poligono SkalÄ™"
#: editor/plugins/polygon_2d_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
@@ -4099,7 +4294,7 @@ msgstr ""
#: editor/project_settings_editor.cpp editor/property_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit"
-msgstr ""
+msgstr "Redaguoti"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon->UV"
@@ -4154,7 +4349,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4199,6 +4393,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4250,6 +4458,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4260,13 +4472,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4370,33 +4580,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr ""
@@ -4418,6 +4617,22 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4463,12 +4678,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4477,7 +4690,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4642,6 +4854,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4722,6 +4942,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4754,6 +4978,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4881,6 +5113,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5155,6 +5391,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5328,7 +5568,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5588,6 +5828,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5621,10 +5867,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5746,11 +5988,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6217,6 +6459,14 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6399,6 +6649,10 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6455,18 +6709,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6598,49 +6840,49 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6653,15 +6895,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6729,12 +6979,8 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+msgid "Clear Selection"
+msgstr "Panaikinti pasirinkimÄ…"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6855,7 +7101,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6863,7 +7109,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6871,7 +7117,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7097,11 +7343,19 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7193,18 +7447,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7263,9 +7505,19 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
+"NavigationMesh resursas turi būti nustatytas ar sukurtas, kad šis Nodas "
+"veiktų."
#: scene/3d/navigation_mesh.cpp
msgid ""
@@ -7316,14 +7568,18 @@ msgstr ""
#: scene/gui/dialogs.cpp
msgid "Cancel"
-msgstr ""
+msgstr "Atšaukti"
#: scene/gui/dialogs.cpp
msgid "Alert!"
-msgstr ""
+msgstr "Įspėjimas!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
+msgstr "Prašome Patvirtinti..."
+
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
msgstr ""
#: scene/gui/popup.cpp
@@ -7340,6 +7596,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Kita)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7356,16 +7616,16 @@ msgstr ""
#: scene/resources/dynamic_font.cpp
msgid "Error initializing FreeType."
-msgstr ""
+msgstr "Klaida inicijuojant FreeType."
#: scene/resources/dynamic_font.cpp
msgid "Unknown font format."
-msgstr ""
+msgstr "Nežinomas šrifto formatas."
#: scene/resources/dynamic_font.cpp
msgid "Error loading font."
-msgstr ""
+msgstr "Įvyko klaida kraunant šriftą."
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
-msgstr ""
+msgstr "Netinkamas šrifto dydis."
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index b4c3df0fb9..ff238a5a85 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -3,29 +3,33 @@
# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
+# Allan Nordhøy <epost@anotheragency.no>, 2017.
# Anonymous <GentleSaucepan@protonmail.com>, 2017.
+# flesk <eivindkn@gmail.com>, 2017.
# Jørgen Aarmo Lund <jorgen.aarmo@gmail.com>, 2016.
+# Norwegian Disaster <stian.furu.overbye@gmail.com>, 2017.
+# passeride <lukas@passeride.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-04-08 17:45+0000\n"
-"Last-Translator: Anonymous <GentleSaucepan@protonmail.com>\n"
+"PO-Revision-Date: 2017-11-29 08:12+0000\n"
+"Last-Translator: flesk <eivindkn@gmail.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-"
"engine/godot/nb/>\n"
"Language: nb\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.13-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
-msgstr "Avslått"
+msgstr "Deaktivert"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr ""
+msgstr "Hele utvalget"
#: editor/animation_editor.cpp
msgid "Move Add Key"
@@ -37,7 +41,7 @@ msgstr "Anim Forandre Overgang"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr ""
+msgstr "Anim Endre Transformering"
#: editor/animation_editor.cpp
msgid "Anim Change Value"
@@ -45,7 +49,7 @@ msgstr "Anim Forandre Verdi"
#: editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr "Anim Forandre Anrop"
+msgstr "Anim Forandre Kall"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
@@ -61,11 +65,11 @@ msgstr "Flytt Anim Spor Opp"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr "Flytt Anim Spor Ned"
+msgstr "Flytt Anim-Spor Ned"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr "Fjern Anim Spor"
+msgstr "Fjern Anim-Spor"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
@@ -73,11 +77,11 @@ msgstr "Sett Overganger til:"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr "Anim Spor Endre navn"
+msgstr "Anim-Spor Endre Navn"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr ""
+msgstr "Anim Track Endre Interpolasjon"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
@@ -85,11 +89,11 @@ msgstr "Anim Spor Forandre Verdi Modus"
#: editor/animation_editor.cpp
msgid "Anim Track Change Wrap Mode"
-msgstr ""
+msgstr "Anim Spor Endre Løkke Modus"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr "Forandre Node Kurve"
+msgstr "Forandre Nodekurve"
#: editor/animation_editor.cpp
msgid "Edit Selection Curve"
@@ -100,6 +104,7 @@ msgid "Anim Delete Keys"
msgstr "Anim Fjern Nøkler"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Dupliser Utvalg"
@@ -133,11 +138,11 @@ msgstr "Anim Flytt Nøkler"
#: editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr ""
+msgstr "Skaler Utvalg"
#: editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr ""
+msgstr "Skaler Fra Peker"
#: editor/animation_editor.cpp
msgid "Goto Next Step"
@@ -145,52 +150,52 @@ msgstr "GÃ¥ til Neste Steg"
#: editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr ""
+msgstr "GÃ¥til Forrige Steg"
#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
#: editor/property_editor.cpp
msgid "Linear"
-msgstr ""
+msgstr "Lineær"
#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constant"
-msgstr ""
+msgstr "Konstant"
#: editor/animation_editor.cpp
msgid "In"
-msgstr ""
+msgstr "Inn"
#: editor/animation_editor.cpp
msgid "Out"
-msgstr ""
+msgstr "Ut"
#: editor/animation_editor.cpp
msgid "In-Out"
-msgstr ""
+msgstr "Inn-Ut"
#: editor/animation_editor.cpp
msgid "Out-In"
-msgstr ""
+msgstr "Ut-Inn"
#: editor/animation_editor.cpp
msgid "Transitions"
-msgstr ""
+msgstr "Overganger"
#: editor/animation_editor.cpp
msgid "Optimize Animation"
-msgstr ""
+msgstr "Optimaliser Animasjon"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr ""
+msgstr "Rengjør Animasjon"
#: editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr ""
+msgstr "Lag NYTT spor for %s og sett inn nøkkel?"
#: editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "Lag %d NYE spor og sett inn nøkler?"
#: editor/animation_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
@@ -199,199 +204,201 @@ msgstr ""
#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
msgid "Create"
-msgstr ""
+msgstr "Lag"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "Anim Lag og Sett Inn"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr ""
+msgstr "Anim Sett inn Spor og Nøkkel"
#: editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr ""
+msgstr "Anim Sett Inn Nøkkel"
#: editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr ""
+msgstr "Endre Anim Lengde"
#: editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr ""
+msgstr "Endre Anim-Løkke"
#: editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
-msgstr ""
+msgstr "Anim Lag Typet Verdi Nøkkel"
#: editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr ""
+msgstr "Anim Sett inn"
#: editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr ""
+msgstr "Anim Skalér Nøkler"
#: editor/animation_editor.cpp
msgid "Anim Add Call Track"
-msgstr ""
+msgstr "Anim Legg Til Call Track"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Animation zoom."
-msgstr ""
+msgstr "Animasjons-zoom."
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr ""
+msgstr "Lengde (s):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr ""
+msgstr "Animasjon lengde (i sekunder)."
#: editor/animation_editor.cpp
msgid "Step (s):"
-msgstr ""
+msgstr "Steg:"
#: editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
-msgstr ""
+msgstr "Pekersteghopp (i sekunder)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr ""
+msgstr "Aktiver/Deaktiver løkke i animasjon."
#: editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr ""
+msgstr "Legg til nye spor."
#: editor/animation_editor.cpp
msgid "Move current track up."
-msgstr ""
+msgstr "Flytt gjeldende spor opp."
#: editor/animation_editor.cpp
msgid "Move current track down."
-msgstr ""
+msgstr "Flytt gjeldende spor ned."
#: editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr ""
+msgstr "Fjern valgt spor."
#: editor/animation_editor.cpp
msgid "Track tools"
-msgstr ""
+msgstr "Sporverktøy"
#: editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr ""
+msgstr "Aktiver endring av individuelle nøkler ved å klikke på dem."
#: editor/animation_editor.cpp
msgid "Anim. Optimizer"
-msgstr ""
+msgstr "Anim. Optimaliserer"
#: editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr ""
+msgstr "Maks. Linær Feilmelding:"
#: editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr ""
+msgstr "Max. Vinklet Feilmelding:"
#: editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr ""
+msgstr "Max Optimaliserbar Vinkel:"
#: editor/animation_editor.cpp
msgid "Optimize"
-msgstr ""
+msgstr "Optimaliser"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
-msgstr ""
+msgstr "Marker en AnimationPlayer fra scenetreet for å endre animasjoner."
#: editor/animation_editor.cpp
msgid "Key"
-msgstr ""
+msgstr "Nøkkel"
#: editor/animation_editor.cpp
msgid "Transition"
-msgstr ""
+msgstr "Overgang"
#: editor/animation_editor.cpp
msgid "Scale Ratio:"
-msgstr ""
+msgstr "Skaler Størrelsesforhold:"
#: editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr ""
+msgstr "Kall Funksjoner i Hvilken Node?"
#: editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr ""
+msgstr "Fjern ugyldige nøkler"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr ""
+msgstr "Fjern uløste og tomme spor"
#: editor/animation_editor.cpp
msgid "Clean-up all animations"
-msgstr ""
+msgstr "Rengjør alle animasjoner"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr ""
+msgstr "Rengjør Animasjon(er) (IKKE REVERSERBART!)"
#: editor/animation_editor.cpp
msgid "Clean-Up"
-msgstr ""
+msgstr "Rengjøring"
#: editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr ""
+msgstr "Endre størrelsen på Array"
#: editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr ""
+msgstr "Endre Array verditype"
#: editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr ""
+msgstr "Endre Array-verdi"
#: editor/code_editor.cpp
msgid "Go to Line"
-msgstr ""
+msgstr "GÃ¥ til Linje"
#: editor/code_editor.cpp
msgid "Line Number:"
-msgstr ""
+msgstr "Linjenummer:"
#: editor/code_editor.cpp
msgid "No Matches"
-msgstr ""
+msgstr "Ingen Treff"
#: editor/code_editor.cpp
msgid "Replaced %d occurrence(s)."
-msgstr ""
+msgstr "Erstattet %d forekomst(er)."
#: editor/code_editor.cpp
msgid "Replace"
-msgstr ""
+msgstr "Erstatt"
#: editor/code_editor.cpp
msgid "Replace All"
-msgstr ""
+msgstr "Erstatt Alle"
#: editor/code_editor.cpp
msgid "Match Case"
-msgstr ""
+msgstr "Match Tilfelle"
#: editor/code_editor.cpp
msgid "Whole Words"
-msgstr ""
+msgstr "Hele Ord"
#: editor/code_editor.cpp
msgid "Selection Only"
-msgstr ""
+msgstr "Kun Valgte"
#: editor/code_editor.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -399,110 +406,112 @@ msgstr ""
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Search"
-msgstr ""
+msgstr "Søk"
#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
-msgstr ""
+msgstr "Finn"
#: editor/code_editor.cpp
msgid "Next"
-msgstr ""
+msgstr "Neste"
#: editor/code_editor.cpp
msgid "Not found!"
-msgstr ""
+msgstr "Ikke funnet!"
#: editor/code_editor.cpp
msgid "Replace By"
-msgstr ""
+msgstr "Erstatt Med"
#: editor/code_editor.cpp
msgid "Case Sensitive"
-msgstr ""
+msgstr "Forskjell på små og store bokstaver"
#: editor/code_editor.cpp
msgid "Backwards"
-msgstr ""
+msgstr "Baklengs"
#: editor/code_editor.cpp
msgid "Prompt On Replace"
-msgstr ""
+msgstr "Spør Ved Erstatning"
#: editor/code_editor.cpp
msgid "Skip"
-msgstr ""
+msgstr "Hopp Over"
#: editor/code_editor.cpp
msgid "Zoom In"
-msgstr ""
+msgstr "Zoom Inn"
#: editor/code_editor.cpp
msgid "Zoom Out"
-msgstr ""
+msgstr "Zoom Ut"
#: editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Nullstill Zoom"
#: editor/code_editor.cpp editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr ""
+msgstr "Linje:"
#: editor/code_editor.cpp
msgid "Col:"
-msgstr ""
+msgstr "Kol:"
#: editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
-msgstr ""
+msgstr "Metode i mål-Node må spesifiseres!"
#: editor/connections_dialog.cpp
msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
+"MÃ¥l-metode ikke funnet! Spesifiser en gyldig metode eller fest et skript til "
+"mål-Noden."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr ""
+msgstr "Koble Til Node:"
#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Add"
-msgstr ""
+msgstr "Legg Til"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
#: editor/project_settings_editor.cpp
msgid "Remove"
-msgstr ""
+msgstr "Fjern"
#: editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr ""
+msgstr "Legg til ekstra Call Argument:"
#: editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr ""
+msgstr "Ekstra Call Argumenter:"
#: editor/connections_dialog.cpp
msgid "Path to Node:"
-msgstr ""
+msgstr "Sti til Node:"
#: editor/connections_dialog.cpp
msgid "Make Function"
-msgstr ""
+msgstr "Lag funksjon"
#: editor/connections_dialog.cpp
msgid "Deferred"
-msgstr ""
+msgstr "Utsatt"
#: editor/connections_dialog.cpp
msgid "Oneshot"
-msgstr ""
+msgstr "Engangs"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/export_template_manager.cpp
@@ -520,122 +529,135 @@ msgstr "Lukk"
#: editor/connections_dialog.cpp
msgid "Connect"
-msgstr ""
+msgstr "Koble Til"
#: editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr ""
+msgstr "Koble '%s' til '%s'"
#: editor/connections_dialog.cpp
+#, fuzzy
msgid "Connecting Signal:"
-msgstr ""
+msgstr "Kobler Til Signal:"
#: editor/connections_dialog.cpp
msgid "Create Subscription"
-msgstr ""
+msgstr "Lag Abonnement"
#: editor/connections_dialog.cpp
msgid "Connect.."
-msgstr ""
+msgstr "Koble Til.."
#: editor/connections_dialog.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Disconnect"
-msgstr ""
+msgstr "Koble Fra"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr ""
+msgstr "Signaler"
#: editor/create_dialog.cpp
msgid "Create New"
-msgstr ""
+msgstr "Lag Ny"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
msgid "Favorites:"
-msgstr ""
+msgstr "Favoritter:"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
msgid "Recent:"
-msgstr ""
+msgstr "Nylige:"
#: editor/create_dialog.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/quick_open.cpp editor/settings_config_dialog.cpp
msgid "Search:"
-msgstr ""
+msgstr "Søk:"
#: editor/create_dialog.cpp editor/editor_help.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/quick_open.cpp
msgid "Matches:"
-msgstr ""
+msgstr "Treff:"
#: editor/create_dialog.cpp editor/editor_help.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_editor_debugger.cpp
msgid "Description:"
-msgstr ""
+msgstr "Beskrivelse:"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
-msgstr ""
+msgstr "Søk Erstatning For:"
#: editor/dependency_editor.cpp
msgid "Dependencies For:"
-msgstr ""
+msgstr "Avhengigheter For:"
#: editor/dependency_editor.cpp
msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will not take effect unless reloaded."
msgstr ""
+"Scene '%s' redigeres.\n"
+"Forandringer vil ikke tre i kraft, med mindre du laster inn på nytt."
#: editor/dependency_editor.cpp
msgid ""
"Resource '%s' is in use.\n"
"Changes will take effect when reloaded."
msgstr ""
+"Ressurs '%s' er i bruk.\n"
+"Endringer vil tre i kraft når den lastes inn på nytt."
#: editor/dependency_editor.cpp
msgid "Dependencies"
-msgstr ""
+msgstr "Avhengigheter"
#: editor/dependency_editor.cpp
msgid "Resource"
-msgstr ""
+msgstr "Ressurs"
#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
#: editor/project_manager.cpp editor/project_settings_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Path"
-msgstr ""
+msgstr "Sti"
#: editor/dependency_editor.cpp
msgid "Dependencies:"
-msgstr ""
+msgstr "Avhengigheter:"
#: editor/dependency_editor.cpp
msgid "Fix Broken"
-msgstr ""
+msgstr "Reparer Ødelagt"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid "Dependency Editor"
-msgstr ""
+msgstr "Avhengighetsredigeringsverktøy"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr ""
+msgstr "Søk Erstatningsressurs:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Ã…pne"
#: editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr ""
+msgstr "Eiere Av:"
#: editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
-msgstr ""
+msgstr "Fjerne valgte filer fra prosjektet? (kan ikke angres)"
#: editor/dependency_editor.cpp
msgid ""
@@ -643,129 +665,140 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
+"Filene som fjernes kreves for at andre ressurser skal virke.\n"
+"Fjern dem likevel? (kan ikke angres)"
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "Kan ikke fjerne:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr ""
+msgstr "Feil ved innlasting:"
#: editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
+msgstr "Scenen kunne ikke lastes, på grunn av manglende avhengigheter:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
-msgstr ""
+msgstr "Ã…pne Likevel"
#: editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr ""
+msgstr "Hvilken handling skal utføres?"
#: editor/dependency_editor.cpp
msgid "Fix Dependencies"
-msgstr ""
+msgstr "Fiks Avhengigheter"
#: editor/dependency_editor.cpp
msgid "Errors loading!"
-msgstr ""
+msgstr "Feil ved lasting!"
#: editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
+msgstr "Slett %d ting for godt? (kan ikke angres)"
#: editor/dependency_editor.cpp
msgid "Owns"
-msgstr ""
+msgstr "Eier"
#: editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr ""
+msgstr "Ressurser uten eksplisitt eierskap:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr ""
+msgstr "Foreldreløs ressursutforsker"
#: editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr ""
+msgstr "Slett valgte filer?"
#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
#: editor/editor_node.cpp editor/filesystem_dock.cpp
#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
msgid "Delete"
-msgstr ""
+msgstr "Slett"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Endre Ordboksnøkkel"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Endre Ordboksverdi"
#: editor/editor_about.cpp
+#, fuzzy
msgid "Thanks from the Godot community!"
-msgstr ""
+msgstr "Takk fra Godot-samfunnet!"
#: editor/editor_about.cpp
msgid "Thanks!"
-msgstr ""
+msgstr "Takk!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Godot Engines bidragsytere"
#: editor/editor_about.cpp
msgid "Project Founders"
-msgstr ""
+msgstr "Prosjektgrunnleggere"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "Utviklingsleder"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr ""
+msgstr "Prosjektleder"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "Utviklere"
#: editor/editor_about.cpp
msgid "Authors"
-msgstr ""
+msgstr "Forfattere"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Platinasponsorer"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Gullsponsorer"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Minisponsorer"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Gulldonorer"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Sølvdonorer"
#: editor/editor_about.cpp
msgid "Bronze Donors"
-msgstr ""
+msgstr "Bronsedonorer"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Donorer"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "Lisens"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "Tredjepartslisens"
#: editor/editor_about.cpp
msgid ""
@@ -774,253 +807,255 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"Godot Engine avhenger av en rekke tredjeparts fri og åpen kildekode-"
+"biblioteker, alle kompatible med begrepene i MIT-lisensen. Følgende er en "
+"utfyllende liste over alle slike tredjepartskomponenter med sine respektive "
+"opphavsrettserklæringer og lisensbegreper."
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "Kontinuerlig"
+msgstr "Alle Komponenter"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "Kontinuerlig"
+msgstr "Komponenter"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "Lisenser"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "Feil ved åpning av pakkefil, ikke i zip format."
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
-msgstr ""
+msgstr "Dekomprimerer Ressurser"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr ""
+msgstr "Vellykket Installering av Pakke!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "Suksess!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Install"
-msgstr ""
+msgstr "Installer"
#: editor/editor_asset_installer.cpp
msgid "Package Installer"
-msgstr ""
+msgstr "Pakkeinstallasjon"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr ""
+msgstr "Høyttalere"
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
-msgstr ""
+msgstr "Legg Til Effekt"
#: editor/editor_audio_buses.cpp
msgid "Rename Audio Bus"
-msgstr ""
+msgstr "Gi nytt navn til Audio Bus"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
-msgstr ""
+msgstr "Veksle Audio Bus Solo"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr ""
+msgstr "Veksle Audio Bus Mute"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "Veksle Audio Bus Bypass Effekter"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
-msgstr ""
+msgstr "Velg Audio Bus Send"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "Legg til Audio Bus Effekt"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "Flytt Bus Effekt"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "Slett Valgte"
+msgstr "Slett Bus Effekt"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr ""
+msgstr "Audio Bus, Dra og Slipp for å omorganisere."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr ""
+msgstr "Solo"
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Mute"
#: editor/editor_audio_buses.cpp
+#, fuzzy
msgid "Bypass"
-msgstr ""
+msgstr "Omgå"
#: editor/editor_audio_buses.cpp
msgid "Bus options"
-msgstr ""
+msgstr "Bus valg"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr ""
+msgstr "Duplisér"
#: editor/editor_audio_buses.cpp
msgid "Reset Volume"
-msgstr ""
+msgstr "Nullstill Volum"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "Slett Valgte"
+msgstr "Fjern Effekt"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus"
-msgstr ""
+msgstr "Legg til Audio Bus"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "Master bus kan ikke slettes!"
#: editor/editor_audio_buses.cpp
msgid "Delete Audio Bus"
-msgstr ""
+msgstr "Slett Audio Bus"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Duplicate Audio Bus"
-msgstr "Dupliser Utvalg"
+msgstr "Duplisér Audio Bus"
#: editor/editor_audio_buses.cpp
msgid "Reset Bus Volume"
-msgstr ""
+msgstr "Nullstill Bus Volum"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Move Audio Bus"
-msgstr "Flytt Legg til Nøkkel"
+msgstr "Flytt Audio Bus"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
-msgstr ""
+msgstr "Lagre Audio Bus Oppsett som..."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout.."
-msgstr ""
+msgstr "Plassering for nytt oppsett.."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "Ã…pne Audio Bus oppsett"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "Det er ingen 'res://default_bus_layout.tres' fil."
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
-msgstr ""
+msgstr "Ugyldig fil, ikke et audio bus oppsett."
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
-msgstr ""
+msgstr "Legg til Bus"
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr ""
+msgstr "Opprett et nytt Bus oppsett."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Load"
-msgstr ""
+msgstr "Last"
#: editor/editor_audio_buses.cpp
msgid "Load an existing Bus Layout."
-msgstr ""
+msgstr "Last et eksisterende Bus oppsett."
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr ""
+msgstr "Lagre som"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "Lagre dette Bus oppsettet til en fil."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
msgid "Load Default"
-msgstr ""
+msgstr "Last Standard"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "Last standard Bus oppsettet."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
-msgstr ""
+msgstr "Ugyldig navn."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
-msgstr ""
+msgstr "Gyldige karakterer:"
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing engine class name."
msgstr ""
+"Ugyldig navn. Kan ikke kollidere med et eksisterende engine class navn."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing buit-in type name."
msgstr ""
+"Ugyldig navn. Kan ikke kollidere med et eksisterende innebygd type navn."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
+"Ugyldig navn. Kan ikke kollidere med et eksisterende global constant navn."
#: editor/editor_autoload_settings.cpp
msgid "Invalid Path."
-msgstr ""
+msgstr "Ugyldig Filsti."
#: editor/editor_autoload_settings.cpp
msgid "File does not exist."
-msgstr ""
+msgstr "Fil eksisterer ikke."
#: editor/editor_autoload_settings.cpp
msgid "Not in resource path."
-msgstr ""
+msgstr "Ikke i resource path."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr ""
+msgstr "Legg til AutoLoad"
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "Autoload '%s' eksisterer allerede!"
#: editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "Gi nytt navn til Autoload"
#: editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
-msgstr ""
+msgstr "Veksle AutoLoad Globals"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr ""
+msgstr "Flytt Autoload"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
@@ -1113,6 +1148,11 @@ msgid "File Exists, Overwrite?"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Kutt Noder"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr ""
@@ -1120,12 +1160,6 @@ msgstr ""
msgid "All Files (*)"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr ""
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr ""
@@ -1192,7 +1226,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1255,9 +1289,8 @@ msgid "Brief Description:"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Medlemmer:"
+msgstr "Medlemmer"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
@@ -1481,6 +1514,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1590,6 +1638,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1715,11 +1767,19 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1731,6 +1791,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1795,13 +1859,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -1912,7 +1975,7 @@ msgstr ""
#: editor/editor_node.cpp
#, fuzzy
msgid "Editor"
-msgstr "Rediger"
+msgstr "Redigeringsverktøy"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
@@ -2060,11 +2123,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2123,7 +2186,7 @@ msgstr ""
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2283,6 +2346,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2317,6 +2384,100 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Frakoblet"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Tilkoblet"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Tilkoblingsfeil"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2340,12 +2501,20 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2363,12 +2532,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2626,8 +2789,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2638,6 +2800,10 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Slett punkter"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2782,6 +2948,55 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Beskrivelse:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2818,9 +3033,8 @@ msgid "New name:"
msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
-#, fuzzy
msgid "Edit Filters"
-msgstr "Rediger Variabel:"
+msgstr "Rediger Filtre"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
@@ -2961,9 +3175,8 @@ msgid "Free"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Contents:"
-msgstr "Kontinuerlig"
+msgstr "Innhold:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "View Files"
@@ -2974,18 +3187,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -2994,30 +3199,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3046,14 +3235,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3166,6 +3347,34 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Fjern horisontal veileder"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3286,10 +3495,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3340,6 +3555,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3528,6 +3747,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3560,6 +3783,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3575,58 +3802,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4024,16 +4199,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4174,7 +4379,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4219,6 +4423,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4270,6 +4488,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4280,13 +4502,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4390,33 +4610,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4439,6 +4648,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Slett Valgte"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4484,12 +4710,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4498,7 +4722,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4663,6 +4886,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4744,6 +4975,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4776,6 +5011,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4904,6 +5147,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5180,6 +5427,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5354,7 +5605,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5614,6 +5865,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5647,10 +5904,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5772,11 +6025,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6249,6 +6502,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Fjern Funksjon"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6432,6 +6694,11 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Fjern Funksjon"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6488,18 +6755,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6631,49 +6886,49 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
-msgstr "Ugyldig argument til convert(), bruk TYPE_*-konstantene."
+msgstr "Ugyldig typeargument til convert(), bruk TYPE_*-konstantene."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Ikke basert på et skript"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Ikke basert på en ressursfil"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6688,15 +6943,23 @@ msgid "GridMap Duplicate Selection"
msgstr "Dupliser Utvalg"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6765,13 +7028,9 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Forandre Utvalgskurve"
+msgid "Clear Selection"
+msgstr "Fjern Utvalg"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6852,8 +7111,9 @@ msgid "Name is not a valid identifier:"
msgstr "Navn er ikke en gyldig identifikator:"
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
msgid "Name already in use by another func/var/signal:"
-msgstr "Navn er allerede brykt av en annen funksjon/var/signal:"
+msgstr "Navn er allerede i bruk av en annen func/var/signal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Function"
@@ -6896,7 +7156,8 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+#, fuzzy
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"Hold Meta for å slippe en Getter. Hold Skift for å slippe en generisk "
"signatur."
@@ -6906,7 +7167,8 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+#, fuzzy
+msgid "Hold %s to drop a simple reference to the node."
msgstr "Hold Meta for å slippe en enkel referanse til noden."
#: modules/visual_script/visual_script_editor.cpp
@@ -6914,8 +7176,9 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Hold Ctrl for å slippe en simpel referanse til noden."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr ""
+#, fuzzy
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Hold Meta for å slippe en enkel referanse til noden."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -6984,8 +7247,9 @@ msgid "Call"
msgstr "Ring"
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
msgid "Get"
-msgstr "FÃ¥"
+msgstr "Hent"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
@@ -7053,7 +7317,7 @@ msgstr "Velg eller lag en funksjon for å redigere graf"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr "Forandre Signal Argumenter:"
+msgstr "Forandre Signalargumenter:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
@@ -7147,11 +7411,19 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7243,18 +7515,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7313,6 +7573,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7376,6 +7644,11 @@ msgstr ""
msgid "Please Confirm..."
msgstr ""
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Kutt Noder"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7390,6 +7663,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7418,4 +7695,8 @@ msgstr ""
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
-msgstr ""
+msgstr "Ugyldig fontstørrelse."
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Forandre Utvalgskurve"
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index a9ed678eac..3f6243e5bd 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -4,21 +4,27 @@
# This file is distributed under the same license as the Godot source code.
#
# Aram Nap <xyphex.aram@gmail.com>, 2017.
+# Arjan219 <arjannugteren1@gmail.com>, 2017.
+# Cornee Traas <corneetraas@hotmail.com>, 2017.
+# Daeran Wereld <daeran@gmail.com>, 2017.
+# Pieter-Jan Briers <pieterjan.briers@gmail.com>, 2017.
# Robin Arys <robinarys@hotmail.com>, 2017.
# Senno Kaasjager <senno.kaasjager@gmail.com>, 2017.
+# Uxilo <jmolendijk93@gmail.com>, 2017.
+# Wout Standaert <wout@blobkat.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-10-25 23:45+0000\n"
-"Last-Translator: Robin Arys <robinarys@hotmail.com>\n"
+"PO-Revision-Date: 2017-11-24 20:45+0000\n"
+"Last-Translator: Daeran Wereld <daeran@gmail.com>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/"
"nl/>\n"
"Language: nl\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -85,9 +91,8 @@ msgid "Anim Track Change Value Mode"
msgstr "Anim Track Wijzig Waarde Modus"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Track Change Wrap Mode"
-msgstr "Animatiespoor Wijzig Wikkelmodus"
+msgstr "Anim Track Wijzig Wikkel Modus"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
@@ -102,6 +107,7 @@ msgid "Anim Delete Keys"
msgstr "Anim Verwijder Keys"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Dupliceer Selectie"
@@ -373,7 +379,6 @@ msgid "No Matches"
msgstr "Geen Matches"
#: editor/code_editor.cpp
-#, fuzzy
msgid "Replaced %d occurrence(s)."
msgstr "%d voorgekomen waarde(s) vervangen."
@@ -640,6 +645,13 @@ msgstr "Afhankelijkheden Editor"
msgid "Search Replacement Resource:"
msgstr "Zoek Vervangende Resource:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Openen"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Eigenaren Van:"
@@ -715,6 +727,14 @@ msgstr "Verwijder geselecteerde bestanden?"
msgid "Delete"
msgstr "Verwijder"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Wijzig Array Sleutel"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Wijzig Array Waarde"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Bedankt van de Godot gemeenschap!"
@@ -1131,6 +1151,11 @@ msgid "File Exists, Overwrite?"
msgstr "Bestand Bestaat, Overschrijven?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Map Maken"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Alles Herkend"
@@ -1138,12 +1163,6 @@ msgstr "Alles Herkend"
msgid "All Files (*)"
msgstr "Alle Bestanden (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Openen"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Open een Bestand"
@@ -1210,7 +1229,7 @@ msgstr "Verplaats Favoriet Naar Boven"
msgid "Move Favorite Down"
msgstr "Verplaats Favoriet Naar Beneden"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr "Ga naar bovenliggende folder"
@@ -1232,7 +1251,6 @@ msgid "Must use a valid extension."
msgstr "Een geldige extensie moet gebruikt worden."
#: editor/editor_file_system.cpp
-#, fuzzy
msgid "ScanSources"
msgstr "Scan Bronnen"
@@ -1476,7 +1494,6 @@ msgid "Restored default layout to base settings."
msgstr "Standaard layout hersteld naar basisinstellingen."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"This resource belongs to a scene that was imported, so it's not editable.\n"
"Please read the documentation relevant to importing scenes to better "
@@ -1518,6 +1535,27 @@ msgstr ""
"begrijpen."
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Dit bestand hoort bij een scene die geïmporteerd werd, dus het is niet "
+"bewerkbaar.\n"
+"Lees de documentatie over scenes importeren om deze workflow beter te "
+"begrijpen."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Klap alles uit"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Klap alles in"
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr "Kopieer Parameters"
@@ -1636,6 +1674,10 @@ msgid "Export Mesh Library"
msgstr "Exporteer Mesh Library"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Deze bewerking is niet mogelijk zonder een hoofdknoop."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Exporteer Tile Set"
@@ -1704,30 +1746,30 @@ msgid "Pick a Main Scene"
msgstr "Kies een Hoofdscene"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "Onmogelijk om de plugin op: '"
+msgstr ""
+"Inschakelen plug-in is gefaald op: '%s' inlezen van configuratiebestand "
+"mislukt."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr "Onmogelijk om scriptveld te vinden voor de plugin op: 'res://addons/"
+msgstr ""
+"Onmogelijk om scriptveld te vinden voor de plugin op: 'res://addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Volgend script kon niet geladen worden: '"
+msgstr "Volgend script kon niet geladen worden: '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "Volgend script kon niet geladen worden: '"
+msgstr ""
+"Volgend script kon niet geladen worden: '%' Basistype is niet EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "Volgend script kon niet geladen worden: '"
+msgstr ""
+"Volgend script kon niet geladen worden: '%s' Script is niet in tool modus."
#: editor/editor_node.cpp
msgid ""
@@ -1777,12 +1819,20 @@ msgid "Switch Scene Tab"
msgstr "Scenetab Wisselen"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr "nog %d bestand(en) of map(pen)"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "nog %d map(pen)"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
msgstr "nog %d bestand(en)"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "nog %d bestand(en) of folder(s)"
+msgid "Dock Position"
+msgstr "Dock Positie"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1793,6 +1843,10 @@ msgid "Toggle distraction-free mode."
msgstr "Afleidingsvrije modus veranderen."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Nieuwe scene toevoegen."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Scène"
@@ -1857,13 +1911,12 @@ msgid "TileSet.."
msgstr "TileSet..."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Ongedaan Maken"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Opnieuw"
@@ -1928,6 +1981,12 @@ msgid ""
"On Android, deploy will use the USB cable for faster performance. This "
"option speeds up testing for games with a large footprint."
msgstr ""
+"Wanneer deze optie is ingeschakeld, zal export of deploy een minimaal "
+"uitvoerbaar bestand creëren.\n"
+"Het bestandssysteem wordt beschikbaar gesteld aan het project door de editor "
+"over het netwerk.\n"
+"Op Android zal deploy de USB verbinding gebruiken voor hogere prestaties. "
+"Deze optie versnelt het testen van spellen met veel data."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
@@ -1938,6 +1997,8 @@ msgid ""
"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
"running game if this option is turned on."
msgstr ""
+"Botsingsdetectievormen en raycast knopen (voor 2D en 3D) zullen zichtbaar "
+"zijn in het draaiend spel wanneer deze optie aan staat."
#: editor/editor_node.cpp
msgid "Visible Navigation"
@@ -1948,10 +2009,12 @@ msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
msgstr ""
+"Navigatie meshes en polygonen zijn zichtbaar in het draaiend spel wanneer "
+"deze optie aanstaat."
#: editor/editor_node.cpp
msgid "Sync Scene Changes"
-msgstr ""
+msgstr "Synchroniseer Scene Veranderingen"
#: editor/editor_node.cpp
msgid ""
@@ -1960,10 +2023,14 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"Wanneer deze optie aanstaat, wordt elke verandering gemaakt in de editor "
+"toegepast op het draaiend spel.\n"
+"Wanneer dit op afstand wordt gebruikt op een andere machine, is dit "
+"efficiënter met het netwerk bestandssysteem."
#: editor/editor_node.cpp
msgid "Sync Script Changes"
-msgstr ""
+msgstr "Synchroniseer Script Veranderingen"
#: editor/editor_node.cpp
msgid ""
@@ -1972,47 +2039,51 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
+"Wanneer deze optie aanstaat wordt ieder script dat wordt opgeslagen "
+"toegepast op het draaiend spel.\n"
+"Wanneer dit op afstand wordt gebruikt op een andere machine, is dit "
+"efficiënter met het netwerk bestandssysteem."
#: editor/editor_node.cpp
#, fuzzy
msgid "Editor"
-msgstr "Bewerken"
+msgstr "Editor"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr ""
+msgstr "Editor Instellingen"
#: editor/editor_node.cpp
msgid "Editor Layout"
-msgstr ""
+msgstr "Editor Layout"
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
-msgstr ""
+msgstr "Schakel Volledig Scherm"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Manage Export Templates"
-msgstr ""
+msgstr "Beheer Export Templates"
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "Help"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
-msgstr ""
+msgstr "Klassen"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Online Docs"
-msgstr ""
+msgstr "Online Documentatie"
#: editor/editor_node.cpp
msgid "Q&A"
-msgstr ""
+msgstr "Vraag en Antwoord"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "Issue Tracker"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -2020,103 +2091,103 @@ msgstr "Gemeenschap"
#: editor/editor_node.cpp
msgid "About"
-msgstr ""
+msgstr "Over"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr ""
+msgstr "Speel het project."
#: editor/editor_node.cpp
msgid "Play"
-msgstr ""
+msgstr "Speel"
#: editor/editor_node.cpp
msgid "Pause the scene"
-msgstr ""
+msgstr "Pauzeer de scene"
#: editor/editor_node.cpp
msgid "Pause Scene"
-msgstr ""
+msgstr "Pauzeer Scene"
#: editor/editor_node.cpp
msgid "Stop the scene."
-msgstr ""
+msgstr "Stop de scene."
#: editor/editor_node.cpp
msgid "Stop"
-msgstr ""
+msgstr "Stop"
#: editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr ""
+msgstr "Speel de bewerkte scene."
#: editor/editor_node.cpp
msgid "Play Scene"
-msgstr ""
+msgstr "Speel Scene"
#: editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "Speel aangepaste scene"
#: editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "Speel Aangepaste Scene"
#: editor/editor_node.cpp
msgid "Spins when the editor window repaints!"
-msgstr ""
+msgstr "Draait wanneer het editor venster opnieuw ververst wordt!"
#: editor/editor_node.cpp
msgid "Update Always"
-msgstr ""
+msgstr "Altijd Updaten"
#: editor/editor_node.cpp
msgid "Update Changes"
-msgstr ""
+msgstr "Update Veranderingen"
#: editor/editor_node.cpp
msgid "Disable Update Spinner"
-msgstr ""
+msgstr "Schakel Update Draaier Uit"
#: editor/editor_node.cpp
msgid "Inspector"
-msgstr ""
+msgstr "Inspecteur"
#: editor/editor_node.cpp
msgid "Create a new resource in memory and edit it."
-msgstr ""
+msgstr "Maak een nieuwe bron in het geheugen en bewerk het."
#: editor/editor_node.cpp
msgid "Load an existing resource from disk and edit it."
-msgstr ""
+msgstr "Laad een bestaande bron van de schijf en bewerk het."
#: editor/editor_node.cpp
msgid "Save the currently edited resource."
-msgstr ""
+msgstr "De bewerkte bron opslaan."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Save As.."
-msgstr ""
+msgstr "Opslaan Als.."
#: editor/editor_node.cpp
msgid "Go to the previous edited object in history."
-msgstr ""
+msgstr "Ga naar het vorige bewerkte object in de geschiedenis."
#: editor/editor_node.cpp
msgid "Go to the next edited object in history."
-msgstr ""
+msgstr "Ga naar de volgende bewerkte object in geschiedenis."
#: editor/editor_node.cpp
msgid "History of recently edited objects."
-msgstr ""
+msgstr "Geschiedenis van recent bewerkte objecten."
#: editor/editor_node.cpp
msgid "Object properties."
-msgstr ""
+msgstr "Objecteigenschappen."
#: editor/editor_node.cpp
msgid "Changes may be lost!"
-msgstr ""
+msgstr "Wijzigingen kunnen verloren gaan!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2124,101 +2195,100 @@ msgid "Import"
msgstr "Importeren"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr ""
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
-msgstr ""
+msgstr "Knooppunt"
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Bestandssysteem"
#: editor/editor_node.cpp
msgid "Output"
-msgstr ""
+msgstr "Output"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "Niet Opslaan"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr ""
+msgstr "Sjablonen importeren Vanuit ZIP-Bestand"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export Project"
-msgstr ""
+msgstr "Project Exporteren"
#: editor/editor_node.cpp
msgid "Export Library"
-msgstr ""
+msgstr "Bibliotheek Exporteren"
#: editor/editor_node.cpp
msgid "Merge With Existing"
-msgstr ""
+msgstr "Samenvoegen Met Bestaande"
#: editor/editor_node.cpp
msgid "Password:"
-msgstr ""
+msgstr "Wachtwoord:"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
-msgstr ""
+msgstr "Voer Een Script Uit"
#: editor/editor_node.cpp
-#, fuzzy
msgid "New Inherited"
-msgstr "Geërfd door:"
+msgstr "Nieuw afgeleid type"
#: editor/editor_node.cpp
msgid "Load Errors"
-msgstr ""
+msgstr "Laadfouten"
#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Select"
-msgstr ""
+msgstr "Selecteer"
#: editor/editor_node.cpp
#, fuzzy
msgid "Open 2D Editor"
-msgstr "Open een Map"
+msgstr "Open 2D Editor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 3D Editor"
-msgstr "Open een Map"
+msgstr "Open 3D Editor"
#: editor/editor_node.cpp
#, fuzzy
msgid "Open Script Editor"
-msgstr "Afhankelijkheden Editor"
+msgstr "Open Script Editor"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr ""
+msgstr "Open Asset Bibliotheek"
#: editor/editor_node.cpp
#, fuzzy
msgid "Open the next Editor"
-msgstr "Afhankelijkheden Editor"
+msgstr "Open de volgende Editor"
#: editor/editor_node.cpp
msgid "Open the previous Editor"
-msgstr ""
+msgstr "Open de vorige Editor"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
-msgstr ""
+msgstr "Creëren van Mesh Previews"
#: editor/editor_plugin.cpp
+#, fuzzy
msgid "Thumbnail.."
-msgstr ""
+msgstr "Thumbnail.."
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr ""
+msgstr "Geïnstalleerde Plug-ins:"
#: editor/editor_plugin_settings.cpp
msgid "Update"
-msgstr ""
+msgstr "Update"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -2227,181 +2297,284 @@ msgstr "Versie:"
#: editor/editor_plugin_settings.cpp
msgid "Author:"
-msgstr ""
+msgstr "Auteur:"
#: editor/editor_plugin_settings.cpp
msgid "Status:"
-msgstr ""
+msgstr "Staat:"
#: editor/editor_profiler.cpp
msgid "Stop Profiling"
-msgstr ""
+msgstr "Stop Profilering"
#: editor/editor_profiler.cpp
msgid "Start Profiling"
-msgstr ""
+msgstr "Start Profilering"
#: editor/editor_profiler.cpp
msgid "Measure:"
-msgstr ""
+msgstr "Meting:"
#: editor/editor_profiler.cpp
msgid "Frame Time (sec)"
-msgstr ""
+msgstr "Frame Tijd (sec)"
#: editor/editor_profiler.cpp
msgid "Average Time (sec)"
-msgstr ""
+msgstr "Gemiddelde Tijd (sec)"
#: editor/editor_profiler.cpp
msgid "Frame %"
-msgstr ""
+msgstr "Frame %"
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
-msgstr ""
+msgstr "Physics Frame %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
-msgstr ""
+msgstr "Tijd:"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr ""
+msgstr "Inclusief"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr ""
+msgstr "Zelf"
#: editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr ""
+msgstr "Frame #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Selecteer apparaat uit de lijst"
#: editor/editor_run_native.cpp
msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the export menu."
msgstr ""
+"Geen uitvoerbare export preset gevonden voor dit platform.\n"
+"Voeg een uitvoerbare preset toe in her export menu."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr ""
+msgstr "Schrijf je logica in de _run() methode."
#: editor/editor_run_script.cpp
msgid "There is an edited scene already."
-msgstr ""
+msgstr "Er is al een bewerkte scene."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr ""
+msgstr "Script kon niet geinstantieerd worden:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
-msgstr ""
+msgstr "Ben je het 'tool' sleutelwoord vergeten?"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
-msgstr ""
+msgstr "Script kon niet uitgevoerd worden:"
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
-msgstr ""
+msgstr "Ben je de '_run' methode vergeten?"
#: editor/editor_settings.cpp
+#, fuzzy
msgid "Default (Same as Editor)"
-msgstr ""
+msgstr "Standaard (Dezelfde als Editor)"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr ""
+msgstr "Selecteer Node(s) om te Importeren"
#: editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr ""
+msgstr "Scene Pad:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr ""
+msgstr "Importeer Vanuit Node:"
#: editor/export_template_manager.cpp
msgid "Re-Download"
-msgstr ""
+msgstr "Opnieuw Downloaden"
#: editor/export_template_manager.cpp
msgid "Uninstall"
-msgstr ""
+msgstr "Verwijderen"
#: editor/export_template_manager.cpp
msgid "(Installed)"
-msgstr ""
+msgstr "(Geïnstalleerd)"
#: editor/export_template_manager.cpp
msgid "Download"
-msgstr ""
+msgstr "Download"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(Missend)"
#: editor/export_template_manager.cpp
msgid "(Current)"
-msgstr ""
+msgstr "(Huidig)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Mirrors ophalen, even wachten a.u.b.."
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "Verwijder sjabloon versie '%s'?"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
-msgstr ""
+msgstr "Kan exportsjablonen niet openen."
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "Ongeldig version.txt formaat in sjablonen."
#: editor/export_template_manager.cpp
msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
msgstr ""
+"Ongeldig version.txt formaat in sjablonen. Revisie is geen geldig "
+"identificatienummer."
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "Geen version.txt gevonden in sjablonen."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for templates:\n"
-msgstr "Error bij het opslaan van atlas:"
+msgstr "Fout bij het maken van een pad voor sjablonen:\n"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
-msgstr ""
+msgstr "Export Sjablonen Uitpakken"
#: editor/export_template_manager.cpp
msgid "Importing:"
msgstr "Aan Het Importeren:"
#: editor/export_template_manager.cpp
-msgid "Current Version:"
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
msgstr ""
+"Geen download links gevonden voor deze versie. Directe download is alleen "
+"beschikbaar voor officiele uitgaven."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Kan niet oplossen."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Kan niet verbinden."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Geen antwoord."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Aanv. Mislukt."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Redirectlus."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Mislukt:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Kan niet naar bestand schrijven."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Download Voltooid."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Fout met het opvragen van url: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Verbinden met Mirror.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Verbinding Verbroken"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Oplossen"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Kan niet oplossen"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Verbinden.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Kan niet verbinden"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Verbonden"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Opvragen..."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Bezig met downloaden"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Verbindingsfout"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "SSL Handshake Foutmelding"
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr "Huidige Versie:"
#: editor/export_template_manager.cpp
msgid "Installed Versions:"
-msgstr ""
+msgstr "Geïnstalleerde Versies:"
#: editor/export_template_manager.cpp
msgid "Install From File"
-msgstr ""
+msgstr "Installeer Vanuit Bestand"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove Template"
-msgstr "Verwijder Selectie"
+msgstr "Verwijder Sjabloon"
#: editor/export_template_manager.cpp
#, fuzzy
@@ -2410,168 +2583,178 @@ msgstr "Verwijder geselecteerde bestanden?"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
-msgstr ""
+msgstr "Export Sjabloon Manager"
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Download Sjablonen"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Selecteer mirror uit lijst: "
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
+"Kan niet schrijven in file_type_cache.cch, de bestandstype cache wordt niet "
+"bewaard!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
+"Kan niet naar '%s' navigeren omdat het niet in het bestandssysteem gevonden "
+"is!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Toon items in een rooster van miniaturen"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Bekijk objecten als een lijst"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
"\n"
-"Source: "
-msgstr "Resource"
+"Status: Importeren van bestand mislukt. Repareer het bestand en importeer "
+"handmatig opnieuw."
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
-msgstr ""
+msgstr "Kan de hoofdmap voor resources niet verplaatsen of hernoemen."
#: editor/filesystem_dock.cpp
msgid "Cannot move a folder into itself.\n"
-msgstr ""
+msgstr "Het is niet mogelijk om een map in zichzelf te stoppen.\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "Error bij het laden van:"
+msgstr "Fout bij het verplaatsen:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "Scene faalde om te laden door ontbrekende afhankelijkheden:"
+msgstr "Kon afhankelijkheden niet verversen:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "Geen naam opgegeven"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "De opgegeven naam bevat ongeldige tekens"
#: editor/filesystem_dock.cpp
msgid "No name provided."
-msgstr ""
+msgstr "Geen naam opgegeven."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "Geldige karakters:"
+msgstr "Naam bevat ongeldige tekens."
#: editor/filesystem_dock.cpp
msgid "A file or folder with this name already exists."
-msgstr ""
+msgstr "Er bestaat al een bestand of map met deze naam."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Hernoem Variabele"
+msgstr "Hernoem bestand:"
#: editor/filesystem_dock.cpp
msgid "Renaming folder:"
-msgstr ""
+msgstr "Hernoemen folder:"
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "Expand all"
-msgstr ""
+msgstr "Klap alles uit"
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "Collapse all"
-msgstr ""
+msgstr "Klap alles in"
#: editor/filesystem_dock.cpp
msgid "Copy Path"
-msgstr ""
+msgstr "Kopieer Pad"
#: editor/filesystem_dock.cpp
msgid "Rename.."
-msgstr ""
+msgstr "Hernoemen.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
-msgstr ""
+msgstr "Verplaats Naar.."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "Map Maken"
+msgstr "Nieuwe Map.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
-msgstr ""
+msgstr "Weergeven in Bestandsbeheer"
#: editor/filesystem_dock.cpp
msgid "Instance"
-msgstr ""
+msgstr "Instantie"
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "Edit Dependencies.."
-msgstr ""
+msgstr "Afhankelijkheden aanpassen."
#: editor/filesystem_dock.cpp
msgid "View Owners.."
-msgstr ""
+msgstr "Bekijk eigenaren.."
#: editor/filesystem_dock.cpp
msgid "Previous Directory"
-msgstr ""
+msgstr "Vorige Map"
#: editor/filesystem_dock.cpp
msgid "Next Directory"
-msgstr ""
+msgstr "Volgende Map"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr ""
+msgstr "Bestandssysteem Opnieuw Scannen"
#: editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
-msgstr ""
+msgstr "Schakel folder status als Favoriet"
#: editor/filesystem_dock.cpp
msgid "Instance the selected scene(s) as child of the selected node."
msgstr ""
+"Maak een nieuwe kopie van de geselecteerde scene(s) als kind van de "
+"geselecteerde knoop."
#: editor/filesystem_dock.cpp
msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
+"Bestanden Scannen,\n"
+"Wacht Alstublieft.."
#: editor/filesystem_dock.cpp
msgid "Move"
-msgstr ""
+msgstr "Verplaatsen"
#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Rename"
-msgstr ""
+msgstr "Hernoemen"
#: editor/groups_editor.cpp
msgid "Add to Group"
-msgstr ""
+msgstr "Toevoegen aan Groep"
#: editor/groups_editor.cpp
msgid "Remove from Group"
-msgstr ""
+msgstr "Verwijderen uit Groep"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -2580,48 +2763,48 @@ msgstr "Scene aan het Updaten"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr ""
+msgstr "Importeren met Gescheiden Animaties"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "Importeren met Gescheiden Materialen"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "Importeren met Gescheiden Objecten"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "Importeren met Gescheiden Objecten+Materialen"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "Importeren met Gescheiden Objecten+Animaties"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "Importeren met Gescheiden Materialen+Animaties"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "Importeren met Gescheiden Objecten+Materialen+Animaties"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
-msgstr ""
+msgstr "Importeren als Meerdere Scenes"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "Importeren als Meerdere Scenes+Materialen"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import Scene"
-msgstr ""
+msgstr "Importeer Scene"
#: editor/import/resource_importer_scene.cpp
msgid "Importing Scene.."
-msgstr ""
+msgstr "Scene Importeren.."
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script.."
@@ -2629,41 +2812,39 @@ msgstr ""
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
-msgstr ""
+msgstr "Kon post-import script niet laden:"
#: editor/import/resource_importer_scene.cpp
msgid "Invalid/broken script for post-import (check console):"
-msgstr ""
+msgstr "Ongeldig/gebroken post-import script (zie console):"
#: editor/import/resource_importer_scene.cpp
msgid "Error running post-import script:"
-msgstr ""
+msgstr "Fout bij uitvoeren post-import script:"
#: editor/import/resource_importer_scene.cpp
msgid "Saving.."
-msgstr ""
+msgstr "Opslaan.."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "Stel in als Standaard voor '%s'"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr ""
+msgstr "Wis Standaard voor '%s'"
#: editor/import_dock.cpp
-#, fuzzy
msgid " Files"
-msgstr "Bestand:"
+msgstr " Bestanden"
#: editor/import_dock.cpp
-#, fuzzy
msgid "Import As:"
-msgstr "Aan Het Importeren:"
+msgstr "Importereen Als:"
#: editor/import_dock.cpp editor/property_editor.cpp
msgid "Preset.."
-msgstr ""
+msgstr "Voorinstelling.."
#: editor/import_dock.cpp
#, fuzzy
@@ -2672,45 +2853,44 @@ msgstr "Aan Het Herimporteren"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
-msgstr ""
+msgstr "MultiNode Set"
#: editor/node_dock.cpp
msgid "Groups"
-msgstr ""
+msgstr "Groepen"
#: editor/node_dock.cpp
msgid "Select a Node to edit Signals and Groups."
-msgstr ""
+msgstr "Selecteer een Node om Signalen en Groepen aan te passen."
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Poly"
-msgstr ""
+msgstr "Creëer Poly"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly"
-msgstr ""
+msgstr "Bewerk Poly"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Insert Point"
-msgstr ""
+msgstr "Punt Toevoegen"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr ""
+msgstr "Bewerk Poly (Verwijder punt)"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Remove Poly And Point"
-msgstr ""
+msgstr "Verwijder Poly en punt"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr ""
+msgid "Create a new polygon from scratch"
+msgstr "Begin een nieuwe polygoon"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2719,50 +2899,57 @@ msgid ""
"Ctrl+LMB: Split Segment.\n"
"RMB: Erase Point."
msgstr ""
+"Bewerk bestaande polygoon:\n"
+"LMK: Verplaats punt.\n"
+"Ctrl+LMK: Splits segment.\n"
+"RMK: Wis punt."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Verwijder punten"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr ""
+msgstr "Schakel Automatisch Afspelen"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr ""
+msgstr "Nieuwe Animatie Naam:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
-msgstr ""
+msgstr "Nieuwe Anim"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr ""
+msgstr "Verander Animatie Naam:"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Delete Animation?"
-msgstr "Optimaliseer Animatie"
+msgstr "Animatie verwijderen?"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr ""
+msgstr "Verwijder Animatie"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr ""
+msgstr "FOUTMELDING: Invalide animatie naam!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr ""
+msgstr "FOUTMELDING: Animatie naam bestaat al!"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr ""
+msgstr "Animatie Hernoemen"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr ""
+msgstr "Voeg Animatie Toe"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
@@ -2774,55 +2961,55 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr ""
+msgstr "Laad Animatie"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr ""
+msgstr "Dupliceer Animatie"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr ""
+msgstr "FOUTMELDING: Geen animatie om te kopiëren!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
-msgstr ""
+msgstr "FOUTMELDING: Geen animatie resource op klembord!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
-msgstr ""
+msgstr "Geplakte Animatie"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr ""
+msgstr "Plak Animatie"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr ""
+msgstr "FOUTMELDING: Geen animatie om aan te passen!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
-msgstr ""
+msgstr "Speel geselecteerde animatie achterwaarts vanaf huidige positie. (A)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
-msgstr ""
+msgstr "Speel geselecteerde animatie achterwaarts vanaf het einde. (Shift+A)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Stop animation playback. (S)"
-msgstr ""
+msgstr "Stop animatie opname. (S)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
-msgstr ""
+msgstr "Speel geselecteerde animatie vanaf het begin. (Shift+D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
-msgstr ""
+msgstr "Speel geselecteerde animatie vanaf huidige positie. (D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
-msgstr ""
+msgstr "Animatie positie (in seconden)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
@@ -2830,27 +3017,28 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create new animation in player."
-msgstr ""
+msgstr "Maak een nieuwe animatie in speler."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load animation from disk."
-msgstr ""
+msgstr "Laad animatie vanuit schijf."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load an animation from disk."
-msgstr ""
+msgstr "Laad een animatie vanuit schijf."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save the current animation"
-msgstr ""
+msgstr "Sla de huidige animatie op"
#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
msgid "Display list of animations in player."
-msgstr ""
+msgstr "Geef lijst van animaties weer in speler."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr ""
+msgstr "Automatisch afspelen bij laden"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Target Blend Times"
@@ -2858,26 +3046,76 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr ""
+msgstr "Animatie Tools"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Copy Animation"
+msgstr "Kopieer Animatie"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
+msgid "Enable Onion Skinning"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Animation Name:"
+#, fuzzy
+msgid "Directions"
+msgstr "Beschrijving"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Plakken"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Maak Nieuwe Animatie Aan"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Animatie Naam:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Error!"
-msgstr ""
+msgstr "Foutmelding!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
@@ -2894,29 +3132,28 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Animation"
-msgstr ""
+msgstr "Animatie"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "New name:"
-msgstr ""
+msgstr "Nieuwe naam:"
#: editor/plugins/animation_tree_editor_plugin.cpp
-#, fuzzy
msgid "Edit Filters"
-msgstr "Bestand:"
+msgstr "Filters Bewerken"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Scale:"
-msgstr ""
+msgstr "Schaal:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade In (s):"
-msgstr ""
+msgstr "Fade-In (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade Out (s):"
-msgstr ""
+msgstr "Fade-Out (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend"
@@ -2940,12 +3177,12 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Start!"
-msgstr ""
+msgstr "Starten!"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Amount:"
-msgstr ""
+msgstr "Hoeveelheid:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend:"
@@ -2965,7 +3202,7 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Current:"
-msgstr ""
+msgstr "Huidig:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Add Input"
@@ -2985,15 +3222,15 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is valid."
-msgstr ""
+msgstr "Animatie boom is geldig."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is invalid."
-msgstr ""
+msgstr "Animatie boom is ongeldig."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation Node"
-msgstr ""
+msgstr "Animatie Node"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
@@ -3029,11 +3266,11 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
-msgstr ""
+msgstr "Importeer Animaties.."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr ""
+msgstr "Wijzig Node Filters"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Filters.."
@@ -3053,21 +3290,13 @@ msgstr "Bekijk Bestanden"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
+msgstr "Kan hostname niet herleiden:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Verbindingsfout, probeer het nog eens."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "Kan niet verbinden."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "Kan niet verbinden met host:"
@@ -3076,32 +3305,16 @@ msgid "No response from host:"
msgstr "Geen antwoord van host:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Geen antwoord."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "Aanvraag mislukt, retourcode:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Aanv. Mislukt."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "Aanvraag mislukt, te veel redirects"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Redirectlus."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Mislukt:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr ""
+msgstr "Slechte download hash, ervan uitgaand dat met het bestand is geknoeid."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
@@ -3117,7 +3330,7 @@ msgstr "Sha256 hash controle mislukt"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr "Asset download fout:"
+msgstr "Asset Download Foutmelding:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Fetching:"
@@ -3128,14 +3341,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Verbinden.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Opvragen..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "Fout bij opvragen"
@@ -3149,27 +3354,27 @@ msgstr "Probeer opnieuw"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download Error"
-msgstr ""
+msgstr "Download Fout"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr ""
+msgstr "Download voor dit onderdeel is al bezig!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
-msgstr ""
+msgstr "eerste"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "prev"
-msgstr ""
+msgstr "vorige"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "next"
-msgstr ""
+msgstr "volgende"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "last"
-msgstr ""
+msgstr "laatste"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
@@ -3216,7 +3421,7 @@ msgstr "Assets ZIP Bestand"
#: editor/plugins/camera_editor_plugin.cpp
msgid "Preview"
-msgstr ""
+msgstr "Voorbeeld"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
@@ -3249,24 +3454,52 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Maak nieuwe verticale gids"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Verwijder de verticale gids"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Verplaats de horizontale gids"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Maak nieuwe horizontale gids"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Verwijder de horizontale gids"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Maak nieuwe horizontale en verticale gidsen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit CanvasItem"
-msgstr ""
+msgstr "CanvasItem Bewerken"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Anchors only"
-msgstr ""
+msgstr "Alleen Ankers"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors and Margins"
-msgstr ""
+msgstr "Wijzig Ankers en Marges"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
-msgstr ""
+msgstr "Wijzig Ankers"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
@@ -3274,7 +3507,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Select Mode"
-msgstr ""
+msgstr "Selecteer Modus"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3282,7 +3515,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+Drag: Move"
-msgstr ""
+msgstr "Alt + Slepen : Verplaatsen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
@@ -3290,15 +3523,15 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+RMB: Depth list selection"
-msgstr ""
+msgstr "Alt + RMB: Diepte lijst selectie"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Mode"
-msgstr ""
+msgstr "Verplaatsingsmodus"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate Mode"
-msgstr ""
+msgstr "Rotatiemodus"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3306,6 +3539,8 @@ msgid ""
"Show a list of all objects at the position clicked\n"
"(same as Alt+RMB in select mode)."
msgstr ""
+"Toon een lijst van alle objecten op de geklikte positie\n"
+"(Hetzelfde als Alt+RMB in de selectiemodus)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
@@ -3331,11 +3566,11 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to grid"
-msgstr ""
+msgstr "Uitlijnen op raster"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
-msgstr ""
+msgstr "Gebruik Rotatie Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap..."
@@ -3351,7 +3586,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "Slim Uitlijnen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to parent"
@@ -3370,12 +3605,19 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "Op hulplijnen uitlijnen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
+"Vergrendel het geselecteerde object in plaats (kan niet verplaatst worden)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
-msgstr ""
+msgstr "Ontgrendel het geselecteerde object (kan verplaatst worden)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
@@ -3408,20 +3650,24 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View"
-msgstr ""
+msgstr "Weergeven"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Show Grid"
-msgstr ""
+msgstr "Raster Weergeven"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show helpers"
-msgstr ""
+msgstr "Toon helpers"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show rulers"
-msgstr ""
+msgstr "Toon linialen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Toon hulplijnen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3483,7 +3729,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Create Node"
-msgstr ""
+msgstr "Creëer Node"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -3507,7 +3753,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change default type"
-msgstr ""
+msgstr "Wijzig standaard type"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -3517,7 +3763,7 @@ msgstr ""
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Poly3D"
-msgstr ""
+msgstr "Maak Poly3D"
#: editor/plugins/collision_shape_2d_editor_plugin.cpp
msgid "Set Handle"
@@ -3525,17 +3771,17 @@ msgstr ""
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove item %d?"
-msgstr ""
+msgstr "Item %d verwijderen?"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Add Item"
-msgstr ""
+msgstr "Item Toevoegen"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove Selected Item"
-msgstr ""
+msgstr "Verwijder Geselecteerde Item"
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import from Scene"
@@ -3579,14 +3825,12 @@ msgid "Load Curve Preset"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Add point"
-msgstr "Signaal Toevoegen"
+msgstr "Punt toevoegen"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove point"
-msgstr "Verwijder Signaal"
+msgstr "Punt verwijderen"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3614,6 +3858,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3646,6 +3894,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3661,59 +3913,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "Ga naar Regel"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4112,16 +4311,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4262,7 +4491,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4307,6 +4535,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Sorteren:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4358,6 +4601,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4369,13 +4616,11 @@ msgstr "Toggle Favoriet"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4481,33 +4726,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Knippen"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Kopiëren"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Alles Selecteren"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4530,6 +4764,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Ga naar Regel"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4576,12 +4827,10 @@ msgid "Convert To Lowercase"
msgstr "Verbind Aan Node:"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4590,7 +4839,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4755,6 +5003,15 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Transitie"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4837,6 +5094,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4869,6 +5130,16 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "Bekijk Bestanden"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "Schaal Selectie"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -5002,6 +5273,11 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Toggle Favoriet"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5279,6 +5555,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5456,7 +5736,7 @@ msgstr "Inschakelen"
#: editor/project_export.cpp
#, fuzzy
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr "Verwijder"
#: editor/project_export.cpp
@@ -5725,6 +6005,12 @@ msgstr ""
msgid "Can't run project"
msgstr "Verbind.."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5758,10 +6044,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5884,13 +6166,12 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Aan Het Opzetten.."
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6365,6 +6646,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Verwijderen"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6557,6 +6847,11 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Verwijderen"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6613,18 +6908,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6756,50 +7039,50 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Ongeldige type argument voor convert(), gebruik TYPE_* constanten."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Niet genoeg bytes om bytes te decoderen, of ongeldig formaat."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "step argument is nul!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Niet een script met een instantie"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Niet gebaseerd op een script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Niet gebaseerd op een resource bestand"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Ongeldige dictionary formaat van instantie (mist @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Ongeldige dictionary formaat van instantie (kan script niet laden uit @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Ongeldige dictionary formaat van instantie (ongeldige script op @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Ongeldige dictionary van instantie (ongeldige subklassen)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6814,15 +7097,24 @@ msgid "GridMap Duplicate Selection"
msgstr "Dupliceer Selectie"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Snap View"
+msgid "Floor:"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Grid Map"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Previous Floor"
+msgstr "Vorig tabblad"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6893,13 +7185,8 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Alleen Selectie"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Alleen Selectie"
+msgid "Clear Selection"
+msgstr "Schaal Selectie"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -7033,7 +7320,8 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+#, fuzzy
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"Houdt Meta ingedrukt om een Getter te plaatsen. Houdt Shift ingedrukt om een "
"generiek signatuur te plaatsen."
@@ -7045,7 +7333,8 @@ msgstr ""
"generiek signatuur te plaatsen."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+#, fuzzy
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
"Houdt Meta ingedrukt om een simpele referentie naar de node te plaatsen."
@@ -7055,7 +7344,8 @@ msgstr ""
"Houdt Ctrl ingedrukt om een simpele referentie naar de node te plaatsen."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+#, fuzzy
+msgid "Hold %s to drop a Variable Setter."
msgstr "Houdt Meta ingedrukt om een Variable Setter te plaatsen."
#: modules/visual_script/visual_script_editor.cpp
@@ -7294,12 +7584,22 @@ msgstr "Map kon niet gemaakt worden."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr "Map kon niet gemaakt worden."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr "Ongeldige index eigenschap naam."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
+msgstr "Map kon niet gemaakt worden."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
msgstr "Map kon niet gemaakt worden."
#: scene/2d/animated_sprite.cpp
@@ -7419,22 +7719,6 @@ msgid "Path property must point to a valid Node2D node to work."
msgstr ""
"Path eigenschap moet verwijzen naar een geldige Node2D node om te werken."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Path eigenschap moet verwijzen naar een geldige Viewport node om te werken. "
-"Zo een Viewport moet in 'render target' modus gezet worden."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"De Viewport gegeven in de pad eigenschap moet als 'render target' ingesteld "
-"zijn om deze sprite te laten werken."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7503,6 +7787,14 @@ msgstr ""
"Een vorm moet gegeven worden om CollisionShape te laten werken. Maak "
"alsjeblieft een vorm resource voor deze!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7575,6 +7867,11 @@ msgstr "Alarm!"
msgid "Please Confirm..."
msgstr "Bevestig Alsjeblieft..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Selecteer Modus"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7592,11 +7889,17 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Andere)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
"> Default Environment) could not be loaded."
msgstr ""
+"Standaard Omgeving gespecificeerd in Project Instellingen (Rendering -> "
+"Viewport -> Standaard Omgeving) kan niet worden geladen."
#: scene/main/viewport.cpp
msgid ""
@@ -7620,12 +7923,51 @@ msgstr "Onbekende lettertype formaat."
#: scene/resources/dynamic_font.cpp
msgid "Error loading font."
-msgstr "Error bij het laden van lettertype."
+msgstr "Fout bij het laden van lettertype."
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
msgstr "Ongeldige lettertype grootte."
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "Resource"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Ga naar Regel"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Aan Het Opzetten.."
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Alleen Selectie"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Alleen Selectie"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Path eigenschap moet verwijzen naar een geldige Viewport node om te "
+#~ "werken. Zo een Viewport moet in 'render target' modus gezet worden."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "De Viewport gegeven in de pad eigenschap moet als 'render target' "
+#~ "ingesteld zijn om deze sprite te laten werken."
+
#~ msgid "Filter:"
#~ msgstr "Filter:"
@@ -7647,9 +7989,6 @@ msgstr "Ongeldige lettertype grootte."
#~ msgid "Removed:"
#~ msgstr "Verwijderd:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Error bij het opslaan van atlas:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Kon atlas subtexture niet opslaan:"
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 1d14c94e1f..e4a19998a7 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -4,7 +4,9 @@
# This file is distributed under the same license as the Godot source code.
#
# 8-bit Pixel <dawdejw@gmail.com>, 2016.
+# Adam Wolanski <adam.wolanski94@gmail.com>, 2017.
# Adrian Węcławski <weclawskiadrian@gmail.com>, 2016.
+# aelspire <aelspire@gmail.com>, 2017.
# Daniel Lewan <vision360.daniel@gmail.com>, 2016-2017.
# Kajetan Kuszczyński <kajetanek99@gmail.com>, 2016.
# Kamil Lewan <lewan.kamil@gmail.com>, 2016.
@@ -12,14 +14,17 @@
# Maksymilian Świąć <maksymilian.swiac@gmail.com>, 2017.
# Mietek Szcześniak <ravaging@go2.pl>, 2016.
# Rafal Brozio <rafal.brozio@gmail.com>, 2016.
+# Rafał Ziemniak <synaptykq@gmail.com>, 2017.
# Sebastian Krzyszkowiak <dos@dosowisko.net>, 2017.
+# Sebastian Pasich <sebastian.pasich@gmail.com>, 2017.
# siatek papieros <sbigneu@gmail.com>, 2016.
+# Zatherz <zatherz@linux.pl>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-10-23 16:47+0000\n"
-"Last-Translator: Sebastian Krzyszkowiak <dos@dosowisko.net>\n"
+"PO-Revision-Date: 2017-11-26 22:48+0000\n"
+"Last-Translator: Sebastian Pasich <sebastian.pasich@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot/pl/>\n"
"Language: pl\n"
@@ -27,7 +32,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -39,12 +44,11 @@ msgstr "Wszystkie zaznaczenia"
#: editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr ""
+msgstr "Przemieszczono/Dodano klucz"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Change Transition"
-msgstr "Animacja przejścia"
+msgstr "Zmiana przejścia animacji"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
@@ -67,12 +71,10 @@ msgid "Anim Duplicate Keys"
msgstr "Duplikuj klucze"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Move Anim Track Up"
msgstr "Przesuń ścieżkę animacji w górę"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Move Anim Track Down"
msgstr "Przesuń ścieżkę animacji w dół"
@@ -102,7 +104,6 @@ msgid "Anim Track Change Wrap Mode"
msgstr "Zmień tryb wartości animacji"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Edit Node Curve"
msgstr "Edytuj krzywe"
@@ -115,6 +116,7 @@ msgid "Anim Delete Keys"
msgstr "Usuń klucze animacji"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Duplikuj zaznaczone"
@@ -131,7 +133,6 @@ msgid "Continuous"
msgstr "Ciągłe"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Discrete"
msgstr "Oddzielne"
@@ -144,9 +145,8 @@ msgid "Anim Add Key"
msgstr "Dodaj klucz animacji"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Move Keys"
-msgstr "Przemieść klucze"
+msgstr "PrzemieÅ› klatki kluczowe"
#: editor/animation_editor.cpp
msgid "Scale Selection"
@@ -219,16 +219,14 @@ msgid "Create"
msgstr "Utwórz"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Create & Insert"
msgstr "Utwórz i wstaw"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr ""
+msgstr "Wstaw ścieżkę i klatkę kluczową"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Insert Key"
msgstr "Wstaw klatkÄ™ kluczowÄ…"
@@ -249,7 +247,6 @@ msgid "Anim Insert"
msgstr "Wstaw animacjÄ™"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Anim Scale Keys"
msgstr "Przeskaluj klatki kluczowe"
@@ -274,7 +271,6 @@ msgid "Step (s):"
msgstr "Krok:"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Cursor step snap (in seconds)."
msgstr "Krok kursora (w sekundach)."
@@ -351,7 +347,6 @@ msgid "Remove invalid keys"
msgstr "Usuń wadliwe klatki kluczowe"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Remove unresolved and empty tracks"
msgstr "Usuń nierozwiązane i puste ścieżki"
@@ -392,9 +387,8 @@ msgid "No Matches"
msgstr "Nie znaleziono"
#: editor/code_editor.cpp
-#, fuzzy
msgid "Replaced %d occurrence(s)."
-msgstr "Zastąpiono %d wystąpień."
+msgstr "Ilość zastąpionych wystąpień: %d"
#: editor/code_editor.cpp
msgid "Replace"
@@ -489,7 +483,6 @@ msgstr ""
"wybranego węzła."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Connect To Node:"
msgstr "Podłącz do węzła:"
@@ -523,9 +516,8 @@ msgid "Make Function"
msgstr "Utwórz funkcję"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Deferred"
-msgstr "Odroczone"
+msgstr "Opóźniony"
#: editor/connections_dialog.cpp
msgid "Oneshot"
@@ -558,13 +550,12 @@ msgid "Connecting Signal:"
msgstr "Połączony sygnał:"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Create Subscription"
msgstr "Utwórz subskrypcję"
#: editor/connections_dialog.cpp
msgid "Connect.."
-msgstr "Połącz.."
+msgstr "Połącz..."
#: editor/connections_dialog.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
@@ -616,7 +607,6 @@ msgid "Dependencies For:"
msgstr "Zależności:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will not take effect unless reloaded."
@@ -662,6 +652,13 @@ msgstr "Edytor zależnośći"
msgid "Search Replacement Resource:"
msgstr "Szukaj zastępczego zasobu:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Otwórz"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Właściciele:"
@@ -681,7 +678,7 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "Nie można usunąć:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -734,6 +731,16 @@ msgstr "Usunąć zaznaczone pliki?"
msgid "Delete"
msgstr "Usuń"
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Key"
+msgstr "Zmień Klawisz Tablicy"
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "Zmień Wartość Tablicy"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Podziękowania od społeczności Godota!"
@@ -744,16 +751,15 @@ msgstr "Dzięki!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Współtwórcy Godot Engine"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Project Founders"
-msgstr "Menedżer projektów"
+msgstr "Założyciele projektu"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "Deweloper naczelny"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
@@ -761,49 +767,47 @@ msgstr "Menedżer projektów"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "Deweloperzy"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Authors"
-msgstr "Autor:"
+msgstr "Autorzy"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Platynowi sponsorzy"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Złoci sponsorzy"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Mini-sponsorzy"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Złoci dawcy"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Srebrni dawcy"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "Duplikuj liniÄ™"
+msgstr "BrÄ…zowi dawcy"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Dawcy"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "Licencja"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "Licencja zewnętrzna"
#: editor/editor_about.cpp
msgid ""
@@ -812,29 +816,30 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"Godot Engine opiera się na wielu niezależnych i otwartych bibliotekach stron "
+"trzecich, wszystkie zgodne z warunkami licencji MIT. Poniżej znajduje się "
+"kompletna lista wszystkich takich komponentów stron trzecich wraz z ich "
+"oświadczeniami o prawach autorskich i postanowieniami licencyjnymi."
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "Stałe:"
+msgstr "Wszystkie komponenty"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "Stałe:"
+msgstr "Komponenty"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "Licencje"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "Błąd otwierania pliku pakietu (nie jest w formacie zip)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Uncompressing Assets"
-msgstr "Nieskompresowany"
+msgstr "Dekompresja zasobów"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
@@ -843,45 +848,41 @@ msgstr "Pakiet zastał zainstalowany poprawnie!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "Sukces!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Install"
-msgstr "Instaluj"
+msgstr "Zainstaluj"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Installer"
-msgstr "Pakiet zastał zainstalowany poprawnie!"
+msgstr "Instalator pakietu"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr ""
+msgstr "Głośniki"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Effect"
-msgstr "Dodaj pusty"
+msgstr "Dodaj efekt"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "Otwórz układ magistrali audio"
+msgstr "Zmień nazwę magistrali audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Solo"
-msgstr "Otwórz układ magistrali audio"
+msgstr "Przełącz tryb solo magistrali audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Mute"
-msgstr "Otwórz układ magistrali audio"
+msgstr "Przełącz wyciszenie magistrali audio"
#: editor/editor_audio_buses.cpp
+#, fuzzy
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "Przełącz pominięcie efektu magistrali audio"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
@@ -889,37 +890,35 @@ msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "Dodaj efekt do magistrali audio"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "Przemieść efekt magistrali"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "Usuń zaznaczone"
+msgstr "Usuń efekt magistrali"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr ""
+msgstr "Magistrala audio, przeciągnij i upuść by przemieścić."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr ""
+msgstr "Solo"
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Wyciszenie"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr ""
+msgstr "Omiń"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus options"
-msgstr "Opcje debugowania"
+msgstr "Opcje magistrali"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
@@ -927,43 +926,36 @@ msgid "Duplicate"
msgstr "Duplikuj"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "Wyzeruj przybliżenie"
+msgstr "Zresetuj głośność"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "Usuń zaznaczone"
+msgstr "Usuń efekt"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Audio Bus"
-msgstr "Dodaj magistralÄ™"
+msgstr "Dodaj magistralÄ™ audio"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "Nie można usunąć głównej magistrali!"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Audio Bus"
-msgstr "Usuń układ"
+msgstr "Usuń magistralę audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Duplicate Audio Bus"
-msgstr "Duplikuj animacje"
+msgstr "Duplikuj magistralÄ™ audio"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "Wyzeruj przybliżenie"
+msgstr "Zresetuj głośność magistrali"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Move Audio Bus"
-msgstr "Otwórz układ magistrali audio"
+msgstr "Przemieść magistralę audio"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
@@ -979,23 +971,19 @@ msgstr "Otwórz układ magistrali audio"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "Plik 'res://default_bus_layout.tres' nie istnieje."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Invalid file, not an audio bus layout."
-msgstr ""
-"Błędne rozszerzenie pliku.\n"
-"Proszę użyć .fnt."
+msgstr "Plik niepoprawny, nie jest układem magistral audio."
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
msgstr "Dodaj magistralÄ™"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Create a new Bus Layout."
-msgstr "Utwórz nowy zasób"
+msgstr "Utwórz nowy układ magistral."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
@@ -1003,9 +991,8 @@ msgid "Load"
msgstr "Wczytaj"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Load an existing Bus Layout."
-msgstr "Wczytaj istniejący zasób i edytuj go."
+msgstr "Załaduj istniejący układ magistral."
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -1013,18 +1000,16 @@ msgid "Save As"
msgstr "Zapisz jako"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Save this Bus Layout to a file."
msgstr "Zapisz układ magistrali audio jako..."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
-#, fuzzy
msgid "Load Default"
-msgstr "Domyślny"
+msgstr "Wczytaj domyślny"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "Załaduj domyślny układ magistral."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1056,7 +1041,6 @@ msgid "File does not exist."
msgstr "Plik nie istnieje."
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Not in resource path."
msgstr "Nie znaleziono w ścieżce zasobów."
@@ -1073,8 +1057,9 @@ msgid "Rename Autoload"
msgstr "Zmień nazwę Autoload"
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Toggle AutoLoad Globals"
-msgstr ""
+msgstr "Przełącz zmienne globalne w AutoLoad"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
@@ -1126,9 +1111,8 @@ msgid "Updating scene.."
msgstr "Aktualizacja sceny .."
#: editor/editor_dir_dialog.cpp
-#, fuzzy
msgid "Please select a base directory first"
-msgstr "Proszę najpierw zapisać scenę."
+msgstr "Najpierw wybierz katalog podstawowy"
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
@@ -1172,6 +1156,11 @@ msgid "File Exists, Overwrite?"
msgstr "Plik istnieje, nadpisać?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Utwórz katalog"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Wszystkie rozpoznane"
@@ -1179,12 +1168,6 @@ msgstr "Wszystkie rozpoznane"
msgid "All Files (*)"
msgstr "Wszystkie pliki (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Otwórz"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Otwórz plik"
@@ -1251,10 +1234,9 @@ msgstr "Przesuń Ulubiony w górę"
msgid "Move Favorite Down"
msgstr "Przesuń Ulubiony w dół"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "Nie można utworzyć katalogu."
+msgstr "Przejdź folder wyżej"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1278,9 +1260,8 @@ msgid "ScanSources"
msgstr "Przeszukaj źródła"
#: editor/editor_file_system.cpp
-#, fuzzy
msgid "(Re)Importing Assets"
-msgstr "Prze-Importowanie"
+msgstr "(Ponowne) importowanie zasobów"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -1316,27 +1297,24 @@ msgid "Brief Description:"
msgstr "Krótki opis:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Członkowie:"
+msgstr "Członkowie"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "Członkowie:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "Metody publiczne:"
+msgstr "Metody publiczne"
#: editor/editor_help.cpp
msgid "Public Methods:"
msgstr "Metody publiczne:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "GUI Theme Items"
-msgstr "Elementy motywu GUI:"
+msgstr "Elementy motywu interfejsu:"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
@@ -1347,53 +1325,48 @@ msgid "Signals:"
msgstr "Sygnały:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Animacje"
+msgstr "Wyliczenia"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations:"
-msgstr "Animacje"
+msgstr "Wyliczenia:"
#: editor/editor_help.cpp
msgid "enum "
-msgstr ""
+msgstr "enum "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "Stałe:"
+msgstr "Stałe"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr "Stałe:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "Opis:"
+msgstr "Opis"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Properties"
-msgstr "Właściwości:"
+msgstr "Właściwości"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Property Description:"
-msgstr "Krótki opis:"
+msgstr "Opis właściwości:"
#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Obecnie nie ma opisu dla tej właściwości. Pomóż nam, [color=$color][url="
+"$url]wysyłając ją[/url][/color]!"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "Lista metod:"
+msgstr "Metody"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1404,15 +1377,16 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Obecnie nie ma opisu dla tej metody. Pomóż nam, [color=$color][url="
+"$url]wysyłając ją[/url][/color]!"
#: editor/editor_help.cpp
msgid "Search Text"
msgstr "Wyszukaj w tekście"
#: editor/editor_log.cpp
-#, fuzzy
msgid "Output:"
-msgstr " Konsola:"
+msgstr "Wyjście:"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
@@ -1446,28 +1420,24 @@ msgid "Error while saving."
msgstr "Błąd podczas zapisywania."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "Nie można operować na '..'"
+msgstr "Nie można otworzyć '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "Błąd podczas zapisywania."
+msgstr "Błąd analizy '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Niespodziewane zakończenie pliku '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Missing '%s' or its dependencies."
-msgstr "Scena '%s' ma niespełnione zależności:"
+msgstr "Brak '%s' lub ich zależności."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "Błąd podczas zapisywania."
+msgstr "Błąd ładowania '%s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1482,7 +1452,6 @@ msgid "Creating Thumbnail"
msgstr "Tworzenie Miniatury"
#: editor/editor_node.cpp
-#, fuzzy
msgid "This operation can't be done without a tree root."
msgstr "Ta operacja nie może zostać wykonana bez sceny."
@@ -1535,18 +1504,27 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Ten zasób należy do sceny która została zaimportowana, więc nie jest "
+"edytowalny.\n"
+"Proszę zapoznać się z dokumentacją na temat importowania scen, by lepiej "
+"zrozumieć ten proces."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Ten zasób należy do sceny, która została zainstancjonowana lub "
+"odziedziczona.\n"
+"Zmiany do niego nie zostanÄ… zachowane w momencie zapisania obecnej sceny."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Ten zasób został zaimportowany, więc nie jest edytowalny. Zmień jego "
+"ustawienia w panelu importów, po czym zaimportuj go ponownie."
#: editor/editor_node.cpp
msgid ""
@@ -1555,6 +1533,30 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Ta scena została zaimportowana, więc zmiany do niej nie będą zachowane.\n"
+"Instancjacja lub dziedziczenie jest pozwoli na prowadzenie zmian.\n"
+"Proszę zapoznać się z dokumentacją dotyczącą importowania scen, by lepiej "
+"zrozumieć ten proces."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"To jest zdalny obiekt więc zmiany nie zostaną zachowane.\n"
+"Przeczytaj dokumentację dotyczącą debugowania by lepiej zrozumieć ten sposób "
+"pracy."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Rozwiń foldery"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Zwiń foldery"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1590,7 +1592,6 @@ msgid "There is no defined scene to run."
msgstr "Nie ma zdefiniowanej sceny do uruchomienia."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"No main scene has ever been defined, select one?\n"
"You can change it later in \"Project Settings\" under the 'application' "
@@ -1644,13 +1645,12 @@ msgid "Quick Open Script.."
msgstr "Szybkie otwieranie skryptu.."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Close"
-msgstr "Zapisz plik"
+msgstr "Zapisz i zamknij"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "Zapisać zmiany w '%s' przed zamknięciem?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
@@ -1677,13 +1677,16 @@ msgid "Export Mesh Library"
msgstr "Eksportuj bibliotekę Meshów"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Ta operacja nie może zostać wykonana bez sceny."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Eksportuj TileSet"
#: editor/editor_node.cpp
-#, fuzzy
msgid "This operation can't be done without a selected node."
-msgstr "Ta operacja nie może zostać wykonana bez sceny."
+msgstr "Ta operacja nie może zostać wykonana bez zaznaczonego węzła."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
@@ -1714,28 +1717,29 @@ msgid "Exit the editor?"
msgstr "Zamknąć edytor?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Project Manager?"
-msgstr "Menedżer projektów"
+msgstr "Otworzyć menadżera projektów?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Quit"
-msgstr "Zapisz plik"
+msgstr "Zapisz i wyjdź"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "Czy zapisać zmiany w aktualnej scenie/scenach przed wyjściem?"
#: editor/editor_node.cpp
msgid "Save changes the following scene(s) before opening Project Manager?"
msgstr ""
+"Zapisać zmiany w następujących scenach przed otwarciem menedżera projektów?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Ta opcja jest przestarzała. Sytuacje, w których odświeżanie musi być "
+"wymuszone są teraz uznawane za błąd. Prosimy o zgłoszenia."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -1744,27 +1748,31 @@ msgstr "Wybierz główną scenę"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
msgstr ""
+"Nie można włączyć dodatku: '%s' - parsowanie konfiguracji nie powiodło się."
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr ""
+msgstr "Nie można odnaleźć pola 'skrypt' w dodatku: 'res://addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Błąd przy ładowaniu sceny z %s"
+msgstr "Nie można załadować skryptu dodatku z ścieżki: '%s'."
#: editor/editor_node.cpp
+#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
msgstr ""
+"Nie można wczytać skryptu dodatku ze ścieżki: '%s' Skrypt nie dziedziczy po "
+"klasie EditorPlugin."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
+"Nie można załadować skryptu dodatku z ścieżki: '%s' Skrypt nie jest w trybie "
+"narzędzia (tool)."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
@@ -1775,7 +1783,6 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Ugh"
msgstr "Błąd"
@@ -1793,9 +1800,8 @@ msgid "Scene '%s' has broken dependencies:"
msgstr "Scena '%s' ma niespełnione zależności:"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Clear Recent Scenes"
-msgstr "Wyczyść Kości"
+msgstr "Wyczyść listę ostatnio otwieranych scen"
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -1815,21 +1821,32 @@ msgid "Switch Scene Tab"
msgstr "Przełącz Zakładkę Sceny"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr "Pozostało %d plików lub katalogów"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "Pozostało %d katalogów"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
msgstr "Pozostało %d plików"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "Pozostało %d plików lub folderów"
+msgid "Dock Position"
+msgstr "Pozycja doku"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
msgstr "Tryb bez rozproszeń"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Toggle distraction-free mode."
-msgstr "Tryb bez rozproszeń"
+msgstr "Tryb bez rozproszeń."
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Dodaj nowÄ… scenÄ™."
#: editor/editor_node.cpp
msgid "Scene"
@@ -1862,7 +1879,7 @@ msgstr "Nowa scena"
#: editor/editor_node.cpp
msgid "New Inherited Scene.."
-msgstr "Nowa dziedziczÄ…ca scena.."
+msgstr "Nowa scena dziedziczÄ…ca..."
#: editor/editor_node.cpp
msgid "Open Scene.."
@@ -1897,13 +1914,12 @@ msgid "TileSet.."
msgstr "TileSet..."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Cofnij"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Ponów"
@@ -1912,11 +1928,11 @@ msgid "Revert Scene"
msgstr "Resetuj scenÄ™"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Miscellaneous project or scene-wide tools."
-msgstr ""
+msgstr "Różne projekty lub narzędzia dla scen."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Project"
msgstr "Projekt"
@@ -1942,7 +1958,7 @@ msgstr "Wyjdź do Listy Projektów"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Debug"
-msgstr "Debug"
+msgstr "Debuguj"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
@@ -1953,8 +1969,8 @@ msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
msgstr ""
-"Podczas eksportu lub uruchomienia aplikacja wynikowa spróbuje połączyć się z "
-"adresem IP tego komputera w celu debugowania."
+"Podczas eksportu lub uruchomienia, aplikacja wynikowa spróbuje połączyć się "
+"z adresem IP tego komputera w celu debugowania."
#: editor/editor_node.cpp
msgid "Small Deploy with Network FS"
@@ -2041,12 +2057,10 @@ msgid "Editor Layout"
msgstr "Układ edytora"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Toggle Fullscreen"
msgstr "Pełny ekran"
#: editor/editor_node.cpp editor/project_export.cpp
-#, fuzzy
msgid "Manage Export Templates"
msgstr "ZarzÄ…dzanie szablonami eksportu"
@@ -2064,11 +2078,11 @@ msgstr "Dokumentacja online"
#: editor/editor_node.cpp
msgid "Q&A"
-msgstr ""
+msgstr "Q&A"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "Lista problemów"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -2131,7 +2145,6 @@ msgid "Update Changes"
msgstr "Odśwież Zmiany"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Disable Update Spinner"
msgstr "Wyłącz wiatraczek aktualizacji"
@@ -2172,9 +2185,8 @@ msgid "Object properties."
msgstr "Właściwości obiektu."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Changes may be lost!"
-msgstr "Zmień grupę obrazków"
+msgstr "Zmiany mogą zostać utracone!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2182,20 +2194,20 @@ msgid "Import"
msgstr "Importuj"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "System plików"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Węzeł"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "System plików"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Konsola"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "Nie zapisuj"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
@@ -2222,9 +2234,8 @@ msgid "Open & Run a Script"
msgstr "Otwórz i Uruchom Skrypt"
#: editor/editor_node.cpp
-#, fuzzy
msgid "New Inherited"
-msgstr "Nowa dziedziczÄ…ca scena.."
+msgstr "Nowa dziedziczÄ…ca scena"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -2235,39 +2246,32 @@ msgid "Select"
msgstr "Zaznacz"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 2D Editor"
-msgstr "Otwórz w edytorze"
+msgstr "Otwórz edytor 2D"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 3D Editor"
-msgstr "Otwórz w edytorze"
+msgstr "Otwórz edytor 3D"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Script Editor"
-msgstr "Otwórz w edytorze"
+msgstr "Otwórz edytor skryptów"
-#: editor/editor_node.cpp
-#, fuzzy
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr "Wyeksportuj biblioteke"
+msgstr "Otwórz bibliotekę zasobów"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the next Editor"
-msgstr "Otwórz w edytorze"
+msgstr "Otwórz następny edytor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the previous Editor"
-msgstr "Otwórz w edytorze"
+msgstr "Otwórz poprzedni edytor"
#: editor/editor_plugin.cpp
-#, fuzzy
msgid "Creating Mesh Previews"
-msgstr "Tworzenie Mesh Library"
+msgstr "Tworzenie podglÄ…du Mesh"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
@@ -2332,7 +2336,6 @@ msgid "Inclusive"
msgstr "Włącznie"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Self"
msgstr "Ten obiekt"
@@ -2342,13 +2345,16 @@ msgstr "Klatka #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Wybierz urzÄ…dzenie z listy"
#: editor/editor_run_native.cpp
+#, fuzzy
msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the export menu."
msgstr ""
+"Nie znaleziono uruchamianej konfiguracji eksportu dla tej platformy.\n"
+"Dodaj konfiguracjÄ™ z menu eksportu."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -2391,19 +2397,16 @@ msgid "Import From Node:"
msgstr "Zaimportuj z węzła:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Re-Download"
-msgstr "Przeładuj"
+msgstr "Pobierz ponownie"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall"
-msgstr "Instaluj"
+msgstr "Odinstaluj"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "(Installed)"
-msgstr "Instaluj"
+msgstr "(Zainstalowano)"
#: editor/export_template_manager.cpp
msgid "Download"
@@ -2414,9 +2417,12 @@ msgid "(Missing)"
msgstr "(Nie znaleziono)"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "(Current)"
-msgstr "Bieżący:"
+msgstr "(Bieżący)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Pobieranie informacji o serwerach lustrzanych, proszę czekać.."
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
@@ -2439,14 +2445,12 @@ msgstr ""
"prawidłowym identyfikatorem."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside templates."
msgstr "Nie znaleziono pliku version.txt w szablonach."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for templates:\n"
-msgstr "Błąd podczas zapisywania atlasu:"
+msgstr "Błąd tworzenia ścieżki dla szablonów:\n"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -2457,9 +2461,106 @@ msgid "Importing:"
msgstr "Importowanie:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Nie znaleziono plików do pobrania dla tej wersji. Pobieranie jest dostępne "
+"tylko dla oficjalnych wydań."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Nie można rozwiązać."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Nie można połączyć."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Brak odpowiedzi."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Żądanie nie powiodło się."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Pętla przekierowań."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Nie powiodło się:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Nie można zapisać pliku."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Pobieranie zakończone."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "Błąd podczas wczytywania adresu url: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "ÅÄ…czenie z serwerem lustrzanym.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Rozłączono"
+
+#: editor/export_template_manager.cpp
#, fuzzy
+msgid "Resolving"
+msgstr "RozwiÄ…zywanie"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Nie można rozwiązać"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "ÅÄ…czenie.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Nie można połączyć"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Podłączony"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Żądanie danych..."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Pobieranie"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Błąd połączenia"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Błąd podczas wymiany (handshake) SSL"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
-msgstr "Aktualna scena"
+msgstr "Aktualna wersja:"
#: editor/export_template_manager.cpp
msgid "Installed Versions:"
@@ -2470,19 +2571,25 @@ msgid "Install From File"
msgstr "Zainstaluj z pliku"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove Template"
-msgstr "Usuń element"
+msgstr "Usuń szablon"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Select template file"
-msgstr "Usunąć zaznaczone pliki?"
+msgstr "Wybierz plik szablonu"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
msgstr "Menedżer szablonów eksportu"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Pobierz szablony eksportu"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Wybierz serwer z listy: "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
@@ -2490,82 +2597,69 @@ msgstr ""
"typu plików nie będzie zapisana!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "Nie można przejść do '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "Nie można przejść do '%s' - nie znaleziono w tym systemie plików!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Wyświetlanie elementów jako siatkę miniatur"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Wyświetlanie elementów jako listę"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
"\n"
-"Source: "
-msgstr "Źródło:"
+"Status: Importowanie pliku nie powiodło się. Proszę naprawić plik i ponownie "
+"zaimportować ręcznie."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move/rename resources root."
-msgstr "Nie można wczytać/przetworzyć źródłowego fontu."
+msgstr "Nie można przenieść/zmienić nazwy źródłowego zasobu."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move a folder into itself.\n"
-msgstr "Nie można zaimportować pliku wewnątrz siebie samego:"
+msgstr "Nie można przenieść katalogu do siebie samego.\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "Błąd importowania:"
+msgstr "Błąd przenoszenia:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "Scena '%s' ma niespełnione zależności:"
+msgstr "Nie można zaktualizować zależności:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "Nie podano nazwy"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "Podana nazwa zawiera niedozwolone znaki"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "No name provided."
-msgstr "Zmień nazwę lub Przenieś..."
+msgstr "Nie podano nazwy."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "Dopuszczalne znaki:"
+msgstr "Nazwa zawiera niedozwolone znaki."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "A file or folder with this name already exists."
-msgstr "Nazwa grupy już istnieje!"
+msgstr "Plik lub katalog o tej nazwie już istnieje."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Zmień nawę zmiennej"
+msgstr "Zmiana nazwy pliku:"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming folder:"
-msgstr "Zmień nazwę węzła"
+msgstr "Zmiana nazwy folderu:"
#: editor/filesystem_dock.cpp
msgid "Expand all"
@@ -2580,18 +2674,16 @@ msgid "Copy Path"
msgstr "Skopiuj Ścieżkę"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Rename.."
-msgstr "Zmień nazwę"
+msgstr "Zmień nazwę..."
#: editor/filesystem_dock.cpp
msgid "Move To.."
msgstr "PrzenieÅ› Do..."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "Utwórz katalog"
+msgstr "Utwórz katalog..."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2634,6 +2726,8 @@ msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
+"Skanowanie plików,\n"
+"Proszę czekać..."
#: editor/filesystem_dock.cpp
msgid "Move"
@@ -2653,47 +2747,45 @@ msgid "Remove from Group"
msgstr "Usuń z Grupy"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import as Single Scene"
-msgstr "Importowanie Sceny.."
+msgstr "Importuj jako pojedynczą scenę"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Animations"
-msgstr "Zaimportuj animacje.."
+msgstr "Importuj z oddzielnymi animacjami"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "Import z oddzielnymi materiałami"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "Import z oddzielnymi obiektami"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "Zaimportuj osobno Obiekty+Materiały"
#: editor/import/resource_importer_scene.cpp
+#, fuzzy
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "Import z oddzielnymi obiektami i animacjami"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "Importuj wraz z Oddzielnymi Materiałami i Animacjami"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "Importuj wraz z Oddzielnymi Obiektami, Materiałami i Animacjami"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import as Multiple Scenes"
-msgstr "Zaimportuj Scene 3D"
+msgstr "Importuj jako wiele scen"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "Importuj jako wiele scen + materiały"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
@@ -2728,21 +2820,19 @@ msgstr "Zapisywanie.."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "Ustaw jako domyślne dla '%s'"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr ""
+msgstr "Usuń domyślne dla '%s'"
#: editor/import_dock.cpp
-#, fuzzy
msgid " Files"
-msgstr "Plik"
+msgstr " Pliki"
#: editor/import_dock.cpp
-#, fuzzy
msgid "Import As:"
-msgstr "Importuj"
+msgstr "Importuj jako:"
#: editor/import_dock.cpp editor/property_editor.cpp
msgid "Preset.."
@@ -2754,7 +2844,7 @@ msgstr "Importuj ponownie"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
-msgstr ""
+msgstr "Zestaw wielowęzłowy"
#: editor/node_dock.cpp
msgid "Groups"
@@ -2773,27 +2863,25 @@ msgstr "Utwórz Polygon"
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly"
-msgstr ""
+msgstr "Edytuj wielokÄ…t"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#, fuzzy
msgid "Insert Point"
-msgstr "Wstawianie"
+msgstr "Wstaw punkt"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr ""
+msgstr "Edytuj wielokąt (usuń punkty)"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Remove Poly And Point"
-msgstr ""
+msgstr "Usuń wielokąt i punkt"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "Utwórz nowy wielokąt."
+msgid "Create a new polygon from scratch"
+msgstr "Utwórz nowy wielokąt"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2802,6 +2890,14 @@ msgid ""
"Ctrl+LMB: Split Segment.\n"
"RMB: Erase Point."
msgstr ""
+"Edytować istniejący wielokąt:\n"
+"LMB: PrzenieÅ› punkt.\n"
+"Ctrl + LPM: Podziału segmentu.\n"
+"RMB: Usuwanie punktu."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Usuwanie punktów"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
@@ -2820,9 +2916,8 @@ msgid "Change Animation Name:"
msgstr "Zmień nazwę animacji:"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Delete Animation?"
-msgstr "Duplikuj animacje"
+msgstr "Usunąć animacje?"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
@@ -2853,7 +2948,7 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
-msgstr ""
+msgstr "Zmień czas mieszania"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
@@ -2909,7 +3004,7 @@ msgstr "Pozycja animacji (sekundy)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
-msgstr ""
+msgstr "Skaluj odtwarzanie animacji globalnie dla węzłu."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create new animation in player."
@@ -2948,6 +3043,57 @@ msgid "Copy Animation"
msgstr "Skopiuj animacje"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Kategorie:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Wklej"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Funkcje"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Utwórz nową animację"
@@ -2995,15 +3141,15 @@ msgstr "Skala:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade In (s):"
-msgstr ""
+msgstr "Pojawianie siÄ™ (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade Out (s):"
-msgstr ""
+msgstr "Zanikanie (s):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend"
-msgstr ""
+msgstr "Mieszanie"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix"
@@ -3032,15 +3178,15 @@ msgstr "Ilośc:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend:"
-msgstr ""
+msgstr "Mieszanie:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend 0:"
-msgstr ""
+msgstr "Mieszanie 0:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend 1:"
-msgstr ""
+msgstr "Mieszanie 1:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "X-Fade Time (s):"
@@ -3064,7 +3210,7 @@ msgstr ""
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Delete Input"
-msgstr ""
+msgstr "Usuń Wejście"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is valid."
@@ -3080,7 +3226,7 @@ msgstr "Węzeł animacji"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
-msgstr ""
+msgstr "Jednorazowy Węzeł"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix Node"
@@ -3124,145 +3270,108 @@ msgstr "Filtry.."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Free"
-msgstr ""
+msgstr "Darmowy"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Contents:"
-msgstr "Stałe:"
+msgstr "Zawartość:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "View Files"
-msgstr "Plik"
+msgstr "Pokaż pliki"
#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "Can't resolve hostname:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
+msgstr "Nie udało się odnaleźć hosta:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Can't connect."
-msgstr "Połącz.."
+msgstr "Błąd połączenia. Spróbuj ponownie."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Can't connect to host:"
-msgstr "Podłącz do węzła:"
+msgstr "Nie można połączyć do hosta:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
-msgstr ""
+msgstr "Brak odpowiedzi hosta:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Request failed, return code:"
-msgstr "Nieznany format pliku:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
+msgstr "Żądanie nie powiodło się, zwracany kod:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
+msgstr "Żądanie nieudane, zbyt dużo przekierowań"
#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "Bad download hash, assuming file has been tampered with."
-msgstr ""
+msgstr "Zły hash pobranego pliku. Zakładamy, że ktoś przy nim majstrował."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr ""
+msgstr "Oczekiwano:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr ""
+msgstr "Otrzymano:"
#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "Failed sha256 hash check"
-msgstr ""
+msgstr "Nie udało się przeprowadzić testu integralności sha256"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr ""
+msgstr "Błąd Podczas Pobierania Zasobu:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Fetching:"
-msgstr ""
+msgstr "Pobieranie:"
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Resolving.."
-msgstr "Zapisywanie.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Connecting.."
-msgstr "Połącz.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "Testowanie"
+msgstr "RozwiÄ…zywanie..."
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Error making request"
-msgstr "Błąd podczas zapisu zasobu!"
+msgstr "Wystąpił błąd podczas tworzenia żądania"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
-msgstr ""
+msgstr "Bezczynny"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Retry"
-msgstr ""
+msgstr "Ponów Próbę"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Download Error"
-msgstr "Pobierz"
+msgstr "Błąd pobierania"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr ""
+msgstr "Pobieranie tego zasobu jest już w toku!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
-msgstr ""
+msgstr "pierwszy"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "prev"
-msgstr ""
+msgstr "poprzedni"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "next"
-msgstr ""
+msgstr "następny"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "last"
-msgstr ""
+msgstr "ostatni"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
@@ -3303,7 +3412,6 @@ msgid "Testing"
msgstr "Testowanie"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Assets ZIP File"
msgstr "Plik ZIP assetów"
@@ -3342,6 +3450,34 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Utwórz nową prowadnicę pionową"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Usuń prowadnicę pionową"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Przesuń prowadnicę poziomą"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Utwórz nową prowadnicę poziomą"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Usuń prowadnicę poziomą"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "Edytuj łańcuch IK"
@@ -3351,12 +3487,11 @@ msgstr "Edytuj CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Anchors only"
-msgstr ""
+msgstr "Tylko zakotwiczenia"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change Anchors and Margins"
-msgstr "Zmień zakotwiczenie"
+msgstr "Zmień kotwice i marginesy"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
@@ -3364,7 +3499,7 @@ msgstr "Zmień zakotwiczenie"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
-msgstr "Wklej PozÄ™"
+msgstr "Wklej pozÄ™"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Select Mode"
@@ -3379,7 +3514,6 @@ msgid "Alt+Drag: Move"
msgstr "Alt+Przeciągnij: Przesuń"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
msgstr ""
"Wciśnij 'v' by Zmienić Pivot, 'Shift+v' by Przesunąć Pivot (podczas "
@@ -3415,9 +3549,8 @@ msgid "Pan Mode"
msgstr "Tryb przesuwania"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggles snapping"
-msgstr "Przełącz pułapkę"
+msgstr "PrzyciÄ…ganie"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3425,23 +3558,20 @@ msgid "Use Snap"
msgstr "Użyj przyciągania"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snapping options"
-msgstr "Opcje animacji"
+msgstr "Opcje przyciÄ…gania"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to grid"
-msgstr "Tryb przyciÄ…gania:"
+msgstr "PrzyciÄ…gaj do siatki"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
msgstr "Użyj kroków obrotu"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Configure Snap..."
-msgstr "Konfiguruj krokowanie.."
+msgstr "Konfiguruj przyciÄ…ganie.."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
@@ -3472,10 +3602,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "PrzyciÄ…gaj do prowadnic"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Zablokuj wybrany obiekt w miejscu (nie można go przesuwać)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Odblokuj wybrany obiekt (można go przesuwać)."
@@ -3496,9 +3632,8 @@ msgid "Clear Bones"
msgstr "Wyczyść Kości"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show Bones"
-msgstr "Utwórz Kości"
+msgstr "Pokaż kości"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
@@ -3519,14 +3654,16 @@ msgid "Show Grid"
msgstr "Pokaż siatkę"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show helpers"
-msgstr "Utwórz Kości"
+msgstr "Pokaż linie pomocnicze"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show rulers"
-msgstr "Utwórz Kości"
+msgstr "Pokaż linijki"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Pokaż prowadnice"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3537,9 +3674,8 @@ msgid "Frame Selection"
msgstr "Powiększ do zaznaczenia"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Zapisz układ"
+msgstr "Układ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
@@ -3566,9 +3702,8 @@ msgid "Drag pivot from mouse position"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "Ustaw pozycje punktu krzywej"
+msgstr "Ustaw pivot w pozycji myszy"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -3579,9 +3714,8 @@ msgid "Divide grid step by 2"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add %s"
-msgstr "Dodaj wszystko"
+msgstr "Dodaj %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Adding %s..."
@@ -3604,7 +3738,6 @@ msgstr "OK :("
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
-#, fuzzy
msgid "No parent to instance a child at."
msgstr "Brak elementu nadrzędnego do stworzenia instancji."
@@ -3614,9 +3747,8 @@ msgid "This operation requires a single selected node."
msgstr "Ta operacja wymaga pojedynczego wybranego węzła."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change default type"
-msgstr "Zmień Wartość Domyślną"
+msgstr "Zmienić domyślny typ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -3665,9 +3797,8 @@ msgid "Flat1"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
-msgstr "Usuń zaznaczenie"
+msgstr "Ease in"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Ease out"
@@ -3678,9 +3809,8 @@ msgid "Smoothstep"
msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Modify Curve Point"
-msgstr "Zamknij krzywÄ…"
+msgstr "Zmodyfikuj punkt krzywej"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3688,19 +3818,16 @@ msgid "Modify Curve Tangent"
msgstr "Zamknij krzywÄ…"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Load Curve Preset"
-msgstr "Wczytaj Zasób"
+msgstr "Wczytaj predefiniowanÄ… krzywÄ…"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Add point"
-msgstr "Dodaj Wejście"
+msgstr "Dodaj punkt"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove point"
-msgstr "Usuń punkt ścieżki"
+msgstr "Usuń punkt"
#: editor/plugins/curve_editor_plugin.cpp
#, fuzzy
@@ -3713,14 +3840,12 @@ msgid "Right linear"
msgstr "Widok z prawej"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Load preset"
-msgstr "Wczytaj Zasób"
+msgstr "Wczytaj ustawienia predefiniowane"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove Curve Point"
-msgstr "Usuń punkt ścieżki"
+msgstr "Usuń punkt krzywej"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
@@ -3730,6 +3855,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "Dodaj/Usuń punkty w Color Ramp"
@@ -3762,6 +3891,10 @@ msgid "Create Occluder Polygon"
msgstr "Stwórz Occluder Polygon"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Utwórz nowy wielokąt."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Edytuj istniejÄ…cy polygon:"
@@ -3777,62 +3910,6 @@ msgstr "Ctrl + LPM: Podziału segmentu."
msgid "RMB: Erase Point."
msgstr "RMB: Wymaż Punkt."
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Remove Point from Line2D"
-msgstr "Usuń punkt ścieżki"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "Idź do lini"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Move Point in Line2D"
-msgstr "Przesuń Punkt"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Zaznacz Punkty"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Drag: Zaznacz Punkty Kontrolne"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Klik: Dodaj Punkt"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Prawy Klik: Usuń Punkt"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Dodaj Punkt (w pustym miejscu)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Split Segment (in line)"
-msgstr "Podziel Segment (na krzywej)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Usuń Punkt"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "Siatka jest pusta!"
@@ -3918,8 +3995,9 @@ msgid "No mesh source specified (and MultiMesh contains no Mesh)."
msgstr ""
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Mesh source is invalid (invalid path)."
-msgstr ""
+msgstr "Źródło siatki jest niepoprawne(nieprawidłowa ścieżka)"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (not a MeshInstance)."
@@ -3930,16 +4008,19 @@ msgid "Mesh source is invalid (contains no Mesh resource)."
msgstr ""
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "No surface source specified."
-msgstr ""
+msgstr "Nie ustawiono źródła płaszczyzny"
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Surface source is invalid (invalid path)."
-msgstr ""
+msgstr "Płaszczyzna jest niepoprawna(nieprawidłowa ścieżka)"
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Surface source is invalid (no geometry)."
-msgstr ""
+msgstr "Płaszczyzna jest niepoprawna (brak geometrii)"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no faces)."
@@ -3950,16 +4031,19 @@ msgid "Parent has no solid faces to populate."
msgstr ""
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Couldn't map area."
-msgstr ""
+msgstr "Nie można zmapować powierzchni"
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Select a Source Mesh:"
-msgstr ""
+msgstr "Wybierz źródło siatki"
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Select a Target Surface:"
-msgstr ""
+msgstr "Wybierz docelową przestrzeń"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate Surface"
@@ -3970,12 +4054,13 @@ msgid "Populate MultiMesh"
msgstr ""
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Target Surface:"
-msgstr ""
+msgstr "Docelowa przestrzeń"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Source Mesh:"
-msgstr ""
+msgstr "Źródłowa siatka:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "X-Axis"
@@ -4026,8 +4111,9 @@ msgid "Setting up Configuration..."
msgstr ""
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Calculating grid size..."
-msgstr ""
+msgstr "Obliczanie wielkości siatki..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating heightfield..."
@@ -4036,7 +4122,7 @@ msgstr ""
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Marking walkable triangles..."
-msgstr "Zachowywanie lokalnych zmian.."
+msgstr "Zaznaczanie możliwych do przejścia trójkątów ..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
@@ -4049,7 +4135,7 @@ msgstr ""
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Partitioning..."
-msgstr "Ostrzeżenie"
+msgstr "Rozdzielenie"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating contours..."
@@ -4068,13 +4154,12 @@ msgid "Navigation Mesh Generator Setup:"
msgstr ""
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Parsing Geometry..."
-msgstr "Parsowanie Geometrii"
+msgstr "Parsowanie Geometrii..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "Skończone!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4086,9 +4171,8 @@ msgstr "Usuń maskę emisji"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generating AABB"
-msgstr "Generuj AABB"
+msgstr "Generowanie AABB"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
@@ -4099,16 +4183,18 @@ msgid "Error loading image:"
msgstr "Błąd wczytywania obrazu:"
#: editor/plugins/particles_2d_editor_plugin.cpp
+#, fuzzy
msgid "No pixels with transparency > 128 in image.."
-msgstr ""
+msgstr "Brak pikseli z przeźroczystością > 128 w obrazie.."
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Set Emission Mask"
msgstr "Ustaw maskÄ™ emisji"
#: editor/plugins/particles_2d_editor_plugin.cpp
+#, fuzzy
msgid "Generate Visibility Rect"
-msgstr ""
+msgstr "Wygeneruj widzialność prostokąta"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Load Emission Mask"
@@ -4116,9 +4202,8 @@ msgstr "Wczytaj maskÄ™ emisji"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Particles"
-msgstr "Wierzchołek"
+msgstr "CzÄ…steczki"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generated Point Count:"
@@ -4126,24 +4211,20 @@ msgstr "Wygeneruj chmurę punktów:"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generation Time (sec):"
-msgstr "Åšredni Czas (sek)"
+msgstr "Czas generowania (sek):"
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Emission Mask"
-msgstr "Ustaw maskÄ™ emisji"
+msgstr "Maska emisji"
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Capture from Pixel"
-msgstr "Utwórz ze sceny"
+msgstr "Przechwytywanie z piksela"
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Emission Colors"
-msgstr "Punkty emisji:"
+msgstr "Kolor emisji"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Node does not contain geometry."
@@ -4190,9 +4271,8 @@ msgid "Emission Points:"
msgstr "Punkty emisji:"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Surface Points"
-msgstr "Powierzchnia %d"
+msgstr "Punkty powierzchni"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points+Normal (Directed)"
@@ -4207,9 +4287,8 @@ msgid "Emission Source: "
msgstr "Źródła emisji: "
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generate Visibility AABB"
-msgstr "Generuj AABB"
+msgstr "Generuj AABB widoczności"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
@@ -4243,16 +4322,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Zaznacz Punkty"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Drag: Zaznacz Punkty Kontrolne"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Klik: Dodaj Punkt"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Prawy Klik: Usuń Punkt"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Zaznacz Punkty Kontrolne (Shift+Drag)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Dodaj Punkt (w pustym miejscu)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Podziel Segment (na krzywej)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Usuń Punkt"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Zamknij krzywÄ…"
@@ -4261,14 +4370,13 @@ msgid "Curve Point #"
msgstr "Punkt Krzywej #"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
msgstr "Ustaw pozycje punktu krzywej"
#: editor/plugins/path_editor_plugin.cpp
#, fuzzy
msgid "Set Curve In Position"
-msgstr "Ustaw pozycje punktu krzywej"
+msgstr "Ustaw pozycje krzywej"
#: editor/plugins/path_editor_plugin.cpp
#, fuzzy
@@ -4364,7 +4472,7 @@ msgstr "Włączyć przyciąganie"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid"
-msgstr "Kratownica"
+msgstr "Siatka"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
@@ -4394,22 +4502,22 @@ msgstr "Wczytaj Zasób"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
msgstr "Wklej"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Clear Recent Files"
-msgstr "Wyczyść Kości"
+msgstr "Wyczyść ostatnie pliki"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
"Close and save changes?\n"
"\""
msgstr ""
+"Zamknąć i zapisać zmiany?\n"
+"\""
#: editor/plugins/script_editor_plugin.cpp
msgid "Error while saving theme"
@@ -4440,6 +4548,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Sortuj:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Przesuń w górę"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Przesuń w dół"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Następny skrypt"
@@ -4488,28 +4611,28 @@ msgid "Close Docs"
msgstr "Zamknij pliki pomocy"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close All"
-msgstr "Zamknij"
+msgstr "Zamknij wszystkie"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Zamknij inne karty"
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Uruchom"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Scripts Panel"
-msgstr "Ustaw jako ulubione"
+msgstr "Przełącz panel skryptów"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Znajdź.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Znajdź następny"
@@ -4600,13 +4723,13 @@ msgstr ""
"należą"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
msgid "Only resources from filesystem can be dropped."
-msgstr ""
+msgstr "Jedynie zasoby z systemu plików mogą tu zostać opuszczone."
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Pick Color"
-msgstr "Kolor"
+msgstr "Wybierz Kolor"
#: editor/plugins/script_text_editor.cpp
#, fuzzy
@@ -4615,43 +4738,32 @@ msgstr "Konwersja obrazków"
#: editor/plugins/script_text_editor.cpp
msgid "Uppercase"
-msgstr ""
+msgstr "Wielkie Litery"
#: editor/plugins/script_text_editor.cpp
msgid "Lowercase"
-msgstr ""
+msgstr "Małe Litery"
#: editor/plugins/script_text_editor.cpp
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Wytnij"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Kopiuj"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Zaznacz wszystko"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Przesuń w górę"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Przesuń w dół"
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4674,6 +4786,23 @@ msgid "Clone Down"
msgstr "Duplikuj liniÄ™"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Idź do lini"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "Uzupełnij symbol"
@@ -4682,12 +4811,14 @@ msgid "Trim Trailing Whitespace"
msgstr "Przytnij końcowe spacje"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
msgid "Convert Indent To Spaces"
-msgstr ""
+msgstr "Zamień akapity na spację"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
msgid "Convert Indent To Tabs"
-msgstr ""
+msgstr "Zamień akapity na tabulatory"
#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
@@ -4721,12 +4852,10 @@ msgid "Convert To Lowercase"
msgstr "Konwertuje na.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Znajdź poprzedni"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Zamień.."
@@ -4735,7 +4864,6 @@ msgid "Goto Function.."
msgstr "Przejdź do funkcji.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Przejdź do linii.."
@@ -4780,12 +4908,13 @@ msgid "Toggle Rot Only"
msgstr "Przełącz tylko rotacje"
#: editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
msgid "Change Scalar Function"
-msgstr ""
+msgstr "Zamień funkcję skalarną"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Function"
-msgstr ""
+msgstr "Zmień funkcję wektorową"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Uniform"
@@ -4832,16 +4961,19 @@ msgid "Modify Curve Map"
msgstr ""
#: editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
msgid "Change Input Name"
-msgstr ""
+msgstr "Zmień nazwę wejścia"
#: editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
msgid "Connect Graph Nodes"
-msgstr ""
+msgstr "Połącz graficznie węzły"
#: editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
msgid "Disconnect Graph Nodes"
-msgstr ""
+msgstr "Odłącz graficznie węzły"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Remove Shader Graph Node"
@@ -4852,8 +4984,9 @@ msgid "Move Shader Graph Node"
msgstr ""
#: editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
msgid "Duplicate Graph Node(s)"
-msgstr ""
+msgstr "Duplikuj graficzne węzły/węzeł"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Delete Shader Graph Node(s)"
@@ -4864,8 +4997,9 @@ msgid "Error: Cyclic Connection Link"
msgstr ""
#: editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
msgid "Error: Missing Input Connections"
-msgstr ""
+msgstr "Błąd: Brakujące połączenia wejścia"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add Shader Graph Node"
@@ -4873,7 +5007,7 @@ msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal"
-msgstr "Ortogonalny"
+msgstr "Ortogonalna"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective"
@@ -4881,25 +5015,35 @@ msgstr "Perspektywa"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
-msgstr ""
+msgstr "Transformacja Zaniechana."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "X-Axis Transform."
-msgstr ""
+msgstr "Transformacja osi X."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Y-Axis Transform."
-msgstr ""
+msgstr "Transformacja osi Y."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Z-Axis Transform."
-msgstr ""
+msgstr "Transformacja osi Z."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Scaling: "
+msgstr "Skala:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Tłumaczenia:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Obracanie o %s stopni."
@@ -4984,6 +5128,10 @@ msgid "Vertices"
msgstr "Wierzchołek"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "Klatki na sekundÄ™"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Wyrównaj z widokiem"
@@ -4996,8 +5144,9 @@ msgid "Display Wireframe"
msgstr "Widok siatki"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Display Overdraw"
-msgstr ""
+msgstr "Wyświetl Przerysowanie"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -5015,12 +5164,24 @@ msgid "View Gizmos"
msgstr "Uchwyty"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "View Information"
-msgstr ""
+msgstr "Informacje"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "Pokaż Klatki na Sekundę"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "Skaluj zaznaczone"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Audio Listener"
-msgstr ""
+msgstr "Nasłuchiwacz dźwięku"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -5156,6 +5317,11 @@ msgid "Tool Scale"
msgstr "Skala:"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Pełny ekran"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Przekształcanie"
@@ -5241,12 +5407,13 @@ msgid "View Z-Far:"
msgstr "Widok Z-Daleko:"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Transform Change"
-msgstr ""
+msgstr "Zmiana Pozycji"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translate:"
-msgstr ""
+msgstr "Przesuń:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate (deg.):"
@@ -5257,16 +5424,17 @@ msgid "Scale (ratio):"
msgstr "Skala (proporcja):"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Transform Type"
-msgstr ""
+msgstr "Typ Przesunięcia"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Pre"
-msgstr ""
+msgstr "Przed"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Post"
-msgstr ""
+msgstr "Po"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "ERROR: Couldn't load frame resource!"
@@ -5376,8 +5544,9 @@ msgid "Separation:"
msgstr "Separacja:"
#: editor/plugins/texture_region_editor_plugin.cpp
+#, fuzzy
msgid "Texture Region"
-msgstr ""
+msgstr "Obszar Tekstury"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Texture Region Editor"
@@ -5411,12 +5580,14 @@ msgid "Remove All"
msgstr "Usuń"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Edit theme.."
-msgstr ""
+msgstr "Zmień wygląd programu.."
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Theme editing menu."
-msgstr ""
+msgstr "Menu zmiany wyglÄ…du programu."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5435,12 +5606,18 @@ msgid "Create Empty Editor Template"
msgstr "Utworzyć pusty szablon edytora"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Create From Current Editor Theme"
+msgstr "Utworzyć pusty szablon edytora"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "CheckBox Radio1"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "CheckBox Radio2"
-msgstr "CheckBox Radio2"
+msgstr "Pole Jednokrotnego Wyboru2"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Item"
@@ -5453,7 +5630,7 @@ msgstr "Sprawdź element"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Checked Item"
-msgstr ""
+msgstr "Zaznaczony element"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Has"
@@ -5468,20 +5645,24 @@ msgid "Options"
msgstr "Opcje"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Have,Many,Several,Options!"
-msgstr ""
+msgstr "Ma,Wiele,Różnych,Opcji!"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Tab 1"
-msgstr ""
+msgstr "Tabulator 1"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Tab 2"
-msgstr ""
+msgstr "Tabulator 2"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Tab 3"
-msgstr ""
+msgstr "Tabulator 3"
#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
@@ -5489,8 +5670,9 @@ msgid "Type:"
msgstr "Typ:"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Data Type:"
-msgstr ""
+msgstr "Rodzaj Daty:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Icon"
@@ -5509,7 +5691,6 @@ msgid "Color"
msgstr "Kolor"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Erase Selection"
msgstr "Usuń zaznaczenie"
@@ -5518,18 +5699,16 @@ msgid "Paint TileMap"
msgstr "Maluj TileMap"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Line Draw"
-msgstr "Liniowe"
+msgstr "Rysuj LiniÄ™"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rectangle Paint"
msgstr ""
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Bucket Fill"
-msgstr "Wiadro"
+msgstr "Wypełnienie"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase TileMap"
@@ -5556,9 +5735,8 @@ msgid "Mirror Y"
msgstr "Odbij Y"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Paint Tile"
-msgstr "Maluj TileMap"
+msgstr "Maluj Tile"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -5609,24 +5787,20 @@ msgid "Error"
msgstr "Błąd"
#: editor/project_export.cpp
-#, fuzzy
msgid "Runnable"
-msgstr "Włącz"
+msgstr "Uruchamiany"
#: editor/project_export.cpp
-#, fuzzy
-msgid "Delete patch '"
-msgstr "Usuń layout"
+msgid "Delete patch '%s' from list?"
+msgstr "Usunąć ścieżkę '%s' z listy?"
#: editor/project_export.cpp
-#, fuzzy
msgid "Delete preset '%s'?"
-msgstr "Usunąć zaznaczone pliki?"
+msgstr "Usunąć predefiniowane '%s'?"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted: "
-msgstr "Brakuje eksportu szablonów dla tej platformy:"
+msgstr "Brakuje/Uszkodzone szablony eksportu dla tej platformy: "
#: editor/project_export.cpp
msgid "Presets"
@@ -5641,25 +5815,22 @@ msgid "Resources"
msgstr "Zasoby"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export all resources in the project"
-msgstr "Eksportuj wszystkie zasoby w projekcie."
+msgstr "Eksportuj wszystkie zasoby w projekcie"
#: editor/project_export.cpp
msgid "Export selected scenes (and dependencies)"
msgstr "Eksportuj wybrane sceny (i zależności)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export selected resources (and dependencies)"
-msgstr "Eksportuj wszystkie zasoby w projekcie."
+msgstr "Eksportuj wybrane zasoby (oraz zależności)"
#: editor/project_export.cpp
msgid "Export Mode:"
msgstr "Tryb eksportu:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Resources to export:"
msgstr "Zasoby do eksportu:"
@@ -5678,28 +5849,24 @@ msgstr ""
"json, *.txt)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Patches"
-msgstr "PasujÄ…ce:"
+msgstr "Åatki"
#: editor/project_export.cpp
-#, fuzzy
msgid "Make Patch"
-msgstr "Ścieżka docelowa:"
+msgstr "Utwórz ścieżkę"
#: editor/project_export.cpp
-#, fuzzy
msgid "Features"
-msgstr "Tekstura"
+msgstr "Funkcje"
#: editor/project_export.cpp
msgid "Custom (comma-separated):"
msgstr ""
#: editor/project_export.cpp
-#, fuzzy
msgid "Feature List:"
-msgstr "Lista metod:"
+msgstr "Lista funkcji:"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -5710,34 +5877,32 @@ msgid "Export templates for this platform are missing:"
msgstr "Brakuje eksportu szablonów dla tej platformy:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Brakuje eksportu szablonów dla tej platformy:"
+msgstr "Brakuje szablonów eksportu dla tej platformy lub są uszkodzone:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export With Debug"
-msgstr "Eksportuj TileSet"
+msgstr "Eksport z debugowaniem"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "Plik nie istnieje."
+msgstr "Ścieżka nie istnieje."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Please choose a 'project.godot' file."
-msgstr "Eksportuj poza folderem projektu!"
+msgstr "Proszę wybrać plik 'project.godot'."
#: editor/project_manager.cpp
msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
msgstr ""
+"Twój projekt zostanie utworzony w niepustym folderze (możesz chcieć stworzyć "
+"nowy folder)."
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
-msgstr ""
+msgstr "Proszę wybrać folder nie zawierający pliku 'project.godot'."
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -5745,44 +5910,39 @@ msgstr "Zaimportowano projekt"
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "Dobrym pomysłem byłoby nazwanie swojego projektu."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
msgstr "Niepoprawna ścieżka projektu (zmienić cokolwiek?)."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in project path."
msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't edit project.godot in project path."
-msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu."
+msgstr "Nie można było edytować engine.cfg w ścieżce projektu."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't create project.godot in project path."
-msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu."
+msgstr "Nie można utworzyć project.godot w ścieżka projektu."
#: editor/project_manager.cpp
msgid "The following files failed extraction from package:"
msgstr "Nie powiodło się wypakowanie z pakietu następujących plików:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "Projekt bez nazwy"
+msgstr "Zmień nazwę projektu"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in the project path."
-msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu."
+msgstr "Nie znaleziono project.godot w ścieżce projektu."
#: editor/project_manager.cpp
msgid "New Game Project"
@@ -5805,7 +5965,6 @@ msgid "Project Name:"
msgstr "Nazwa projektu:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
msgstr "Utwórz katalog"
@@ -5819,23 +5978,21 @@ msgstr "Szukaj"
#: editor/project_manager.cpp
msgid "That's a BINGO!"
-msgstr "To BINGO!"
+msgstr "BINGO!"
#: editor/project_manager.cpp
msgid "Unnamed Project"
msgstr "Projekt bez nazwy"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "Połącz.."
+msgstr "Nie można otworzyć projektu"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
msgstr "Czy jesteś pewny że chcesz otworzyć więcej niż jeden projekt?"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"Can't run project: no main scene defined.\n"
"Please edit the project and set the main scene in \"Project Settings\" under "
@@ -5845,10 +6002,13 @@ msgstr ""
"Można to później zmienić w \"Ustawienia projektu\" w kategorii \"aplikacja\"."
#: editor/project_manager.cpp
+#, fuzzy
msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
+"Nie można uruchomić projektu: Zasoby muszą zostać zaimportowane\n"
+"Zmień projekt by był gotowy wstępny import."
#: editor/project_manager.cpp
msgid "Are you sure to run more than one project?"
@@ -5863,6 +6023,8 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Język został zmieniony.\n"
+"Interfejs zaktualizuje się gdy edytor lub menedżer projektu uruchomi się."
#: editor/project_manager.cpp
msgid ""
@@ -5889,7 +6051,6 @@ msgid "New Project"
msgstr "Nowy projekt"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Templates"
msgstr "Szablony"
@@ -5898,14 +6059,18 @@ msgid "Exit"
msgstr "Wyjdź"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "Restart(y):"
+msgstr "Uruchom ponownie"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't run project"
-msgstr "Połącz.."
+msgstr "Nie można uruchomić projektu"
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -5924,8 +6089,9 @@ msgid "Mouse Button"
msgstr "Przycisk myszy"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid "Invalid action (anything goes but '/' or ':')."
-msgstr ""
+msgstr "Nieprawidłowa akcja (wszystko oprócz '/' or ':')."
#: editor/project_settings_editor.cpp
msgid "Action '%s' already exists!"
@@ -5940,10 +6106,6 @@ msgid "Add Input Action Event"
msgstr "Dodaj zdarzenie akcji wejścia"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -6005,18 +6167,16 @@ msgid "Change"
msgstr "Zmień"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Joypad Axis Index:"
-msgstr "OÅ› joysticka"
+msgstr "Indeks osi joysticka:"
#: editor/project_settings_editor.cpp
msgid "Axis"
msgstr "OÅ›"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Joypad Button Index:"
-msgstr "Przycisk joysticka"
+msgstr "Indeks przycisku joysticka:"
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
@@ -6029,7 +6189,7 @@ msgstr "Wyczyść zdarzenie akcji wejścia"
#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Add Event"
-msgstr "Dodaj pusty"
+msgstr "Dodaj zdarzenie"
#: editor/project_settings_editor.cpp
msgid "Device"
@@ -6061,36 +6221,33 @@ msgstr "Kółko myszy w dół."
#: editor/project_settings_editor.cpp
msgid "Add Global Property"
-msgstr ""
+msgstr "Dodaj globalną właściwość"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid "Select a setting item first!"
-msgstr ""
+msgstr "Najpierw wybierz element ustawień!"
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "No property '"
-msgstr "Właściwość:"
+msgid "No property '%s' exists."
+msgstr "Właściwość '%s' nie istnieje."
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Ustawienia"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "Wbudowana opcja '%s' nie może zostać usunięta."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Delete Item"
-msgstr "Usuń"
+msgstr "Usuń element"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "Podłącz do węzła:"
+msgstr "Nie może zawierać '/ 'lub':'"
#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Already existing"
-msgstr "Akcja %s już istnieje!"
+msgstr "Już istnieje"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -6133,18 +6290,16 @@ msgid "Remove Resource Remap Option"
msgstr "Usuń opcję mapowania zasobu"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Zmień rozmiar kamery"
+msgstr "Zmień filtr ustawień lokalizacji"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Project Settings (project.godot)"
-msgstr "Ustawienia projektu (engine.cfg)"
+msgstr "Ustawienia projektu (project.godot)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -6203,14 +6358,12 @@ msgid "Locale"
msgstr "Lokalizacja"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "Lokalizacja"
+msgstr "Filtr ustawień lokalizacji"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "Utwórz Kości"
+msgstr "Pokaż wszystkie lokalizacje"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
@@ -6219,15 +6372,13 @@ msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Filter mode:"
-msgstr "Filtry"
+msgstr "Tryb filtrowania:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "Lokalizacja"
+msgstr "Lokalizacje:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "AutoLoad"
msgstr "Autoładowanie"
@@ -6268,7 +6419,6 @@ msgid "Assign"
msgstr "Przypisz"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Select Node"
msgstr "Wybierz węzeł"
@@ -6279,29 +6429,25 @@ msgstr "Nowy skrypt"
#: editor/property_editor.cpp
#, fuzzy
msgid "Make Unique"
-msgstr "Utwórz Kości"
+msgstr "Utwórz unikatowy zasób"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Show in File System"
-msgstr "System plików"
+msgstr "Pokaż w systemie plików"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "Konwertuje na.."
+msgstr "Konwersja do %s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
msgstr "Błąd wczytania pliku: Brak zasobu!"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Selected node is not a Viewport!"
-msgstr "Wybierz węzły do importu"
+msgstr "Wybrany węzeł to nie Viewport!"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Node"
msgstr "Wybierz węzeł"
@@ -6326,19 +6472,16 @@ msgid "Sections:"
msgstr "Kategorie:"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Property"
-msgstr "Zaznacz Punkty"
+msgstr "Wybierz właściwość"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Virtual Method"
-msgstr "Tryb zaznaczenia"
+msgstr "Wybierz metoda wirtualnÄ…"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Method"
-msgstr "Tryb zaznaczenia"
+msgstr "Wybierz metodÄ™"
#: editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
@@ -6409,8 +6552,9 @@ msgid ""
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
msgid "Instance Scene(s)"
-msgstr ""
+msgstr "Instancja Scen(y)"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on the tree root."
@@ -6435,7 +6579,7 @@ msgstr "Usuń węzeł(y)?"
#: editor/scene_tree_dock.cpp
msgid "Can not perform with the root node."
-msgstr ""
+msgstr "Nie można tego wykonać z głównym węzłem."
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
@@ -6454,7 +6598,6 @@ msgid "Load As Placeholder"
msgstr "Wczytaj jako zastępczy"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Discard Instancing"
msgstr "Odrzuć instancjonowanie"
@@ -6464,7 +6607,7 @@ msgstr "To ma sens!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr ""
+msgstr "Nie można operować węzłami z innej sceny!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
@@ -6487,7 +6630,6 @@ msgid "Error saving scene."
msgstr "Błąd podczas zapisywania sceny."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Error duplicating scene to save it."
msgstr "Błąd duplikowania sceny przy zapisywaniu."
@@ -6509,7 +6651,6 @@ msgid "Delete Node(s)"
msgstr "Usuń węzeł (węzły)"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Add Child Node"
msgstr "Dodaj węzeł"
@@ -6522,7 +6663,6 @@ msgid "Change Type"
msgstr "Zmień typ"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Attach Script"
msgstr "Dodaj skrypt"
@@ -6539,7 +6679,6 @@ msgid "Save Branch as Scene"
msgstr "Zapisz gałąź jako scenę"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Copy Node Path"
msgstr "Skopiuj Ścieżkę"
@@ -6565,14 +6704,22 @@ msgid "Filter nodes"
msgstr "Filtry"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Attach a new or existing script for the selected node."
-msgstr "Utwórz nowy skrypt dla zaznaczonego węzła."
+msgstr "Dołącz nowy lub istniejący skrypt do zaznaczonego węzła."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Clear a script for the selected node."
-msgstr "Utwórz nowy skrypt dla zaznaczonego węzła."
+msgstr "Wyczyść skrypt dla zaznaczonego węzła."
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Zdalny"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Local"
+msgstr "Lokalny"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
@@ -6617,26 +6764,29 @@ msgid "Instance:"
msgstr "Instancja:"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Open script"
-msgstr "Następny skrypt"
+msgstr "Otwórz skrypt"
#: editor/scene_tree_editor.cpp
msgid ""
"Node is locked.\n"
"Click to unlock"
msgstr ""
+"Węzeł jest zablokowany.\n"
+"Kliknij by odblokować"
#: editor/scene_tree_editor.cpp
+#, fuzzy
msgid ""
"Children are not selectable.\n"
"Click to make selectable"
msgstr ""
+"Pochodna nie jest możliwa do zaznaczenia.\n"
+"Kliknij by ją móc zaznaczyć"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Toggle Visibility"
-msgstr "Przełącz widoczność Spatial"
+msgstr "Przełącz widoczność"
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
@@ -6659,19 +6809,16 @@ msgid "Select a Node"
msgstr "Wybierz węzeł"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading template '%s'"
-msgstr "Błąd wczytywania obrazu:"
+msgstr "Błąd podczas ładowania szablonu '%s'"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error - Could not create script in filesystem."
-msgstr "Nie można było utworzyć skryptu w systemie plików."
+msgstr "Błąd - Nie można było utworzyć skryptu w systemie plików."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading script from %s"
-msgstr "Błąd przy ładowaniu sceny z %s"
+msgstr "Błąd ładowania skryptu z %s"
#: editor/script_create_dialog.cpp
msgid "N/A"
@@ -6691,12 +6838,11 @@ msgstr "Niepoprawna ścieżka bazowa"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "Katalog o tej nazwie już istnieje"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "Plik istnieje, nadpisać?"
+msgstr "Plik istnieje, zostanie nadpisany"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6704,12 +6850,11 @@ msgstr "Niepoprawne rozszerzenie"
#: editor/script_create_dialog.cpp
msgid "Wrong extension chosen"
-msgstr ""
+msgstr "Wybrano błędne rozszeczenie"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid Path"
-msgstr "Niewłaściwa ścieżka."
+msgstr "Nieprawidłowa ścieżka"
#: editor/script_create_dialog.cpp
msgid "Invalid class name"
@@ -6721,56 +6866,52 @@ msgid "Invalid inherited parent name or path"
msgstr "Nieprawidłowa nazwa klasy bazowej"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script valid"
-msgstr "Skrypt"
+msgstr "Skrypt prawidłowy"
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9 and _"
-msgstr ""
+msgstr "Dostępne znaki: a-z, A-Z, 0-9 i _"
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)"
-msgstr ""
+msgstr "Wbudowany skrypt (w plik sceny)"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Create new script file"
-msgstr "Utwórz Skrypt"
+msgstr "Utwórz nowy plik skryptu"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Load existing script file"
-msgstr "Następny skrypt"
+msgstr "Wczytaj istniejÄ…cy plik skryptu"
#: editor/script_create_dialog.cpp
msgid "Language"
msgstr "Język"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Inherits"
-msgstr "Dziedziczy:"
+msgstr "Dziedziczy"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Class Name"
-msgstr "Nazwa klasy:"
+msgstr "Nazwa klasy"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Template"
msgstr "Szablon"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Built-in Script"
msgstr "Wbudowany skrypt"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Attach Node Script"
-msgstr "Utwórz skrypt dla węzła"
+msgstr "Dołącz skrypt dla węzła"
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Zdalny "
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -6794,7 +6935,7 @@ msgstr "Funkcja:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "Wybierz jeden lub więcej elementów z listy by wyświetlić graf."
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6829,18 +6970,6 @@ msgid "Stack Trace (if applicable):"
msgstr "Śledzenie stosu (jeśli dotyczy):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Zdalny inspektor"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Właściwości zdalnego obiektu: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Profiler"
@@ -6938,7 +7067,7 @@ msgstr "Zmień średnicę Capsule Shape"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Height"
-msgstr "Zmień wysokośc Capsule Shape"
+msgstr "Zmień wysokość kształtu kapsuły"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Ray Shape Length"
@@ -6958,80 +7087,85 @@ msgid "Change Probe Extents"
msgstr "Zmień rozmiar Box Shape"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Library"
-msgstr "MeshLibrary..."
+msgstr "Biblioteka"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Status"
-msgstr "Status:"
+msgstr "Status"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Biblioteki: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Niepoprawny typ argumentu funkcji convert(), użyj stałych TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
"Niewystarczająca ilość bajtów dla bajtów dekodujących, albo zły format."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "argument kroku wynosi zero!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "To nie jest skrypt z instancjÄ…"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Nie bazuje na skrypcie"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Nie bazuje na pliku zasobów"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Niepoprawna instancja formatu słownika (brak @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Niepoprawna instancja formatu słownika (nie można wczytać skryptu w @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Niepoprawna instancja formatu słownika (niepoprawny skrypt w @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Niepoprawna instancja słownika (niepoprawne podklasy)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "GridMap Delete Selection"
-msgstr "Usuń zaznaczone"
+msgstr "GridMap Usuń zaznaczenie"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Duplicate Selection"
-msgstr "Duplikuj zaznaczone"
+msgstr "GridMap duplikuj zaznaczenie"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Grid Map"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7039,17 +7173,18 @@ msgid "Snap View"
msgstr "Widok z góry"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+#, fuzzy
+msgid "Previous Floor"
+msgstr "Poprzedni poziom"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Clip Disabled"
-msgstr "Wyłączone"
+msgstr "Wyłączone przycinanie"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
@@ -7065,26 +7200,26 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit Y Axis"
-msgstr ""
+msgstr "Edytuj oÅ› Y"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit Z Axis"
-msgstr ""
+msgstr "Edytuj oÅ› Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Cursor Rotate X"
-msgstr "Ctrl: Obróć"
+msgstr "Kursor Obróć X"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Cursor Rotate Y"
-msgstr "Ctrl: Obróć"
+msgstr "Kursor Obróć Y"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Cursor Rotate Z"
-msgstr "Ctrl: Obróć"
+msgstr "Kursor Obróć Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate X"
@@ -7105,7 +7240,7 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Create Area"
-msgstr "Utwórz nowy"
+msgstr "Tworzenie obszaru"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7115,27 +7250,20 @@ msgstr "Utwórz nowy projekt"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Erase Area"
-msgstr "Wyczyść TileMap"
+msgstr "Usuń obszar"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Tylko zaznaczenie"
+msgid "Clear Selection"
+msgstr "Wyczyść zaznaczenie"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Tylko zaznaczenie"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Settings"
-msgstr "Ustawienia przyciÄ…gania"
+msgstr "Ustawienia GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Pick Distance:"
-msgstr "Instancja:"
+msgstr "Wybierz odległość:"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
@@ -7174,29 +7302,24 @@ msgid "Stack overflow with stack depth: "
msgstr "Przepełnienie stosu z głębokością stosu: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Signal Arguments"
-msgstr "Edytuj argumenty sygnału:"
+msgstr "Edytuj argumenty sygnału"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument Type"
-msgstr "Zmień Typ Tablicy"
+msgstr "Zmień typ argumentu"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument name"
-msgstr "Zmień nazwę animacji:"
+msgstr "Zmień nazwę argumentu"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Set Variable Default Value"
-msgstr "Zmień Wartość Domyślną"
+msgstr "Zmień wartość domyślną zmiennej"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Set Variable Type"
-msgstr "Edytuj zmiennÄ…:"
+msgstr "Ustaw typ zmiennej"
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
@@ -7239,26 +7362,23 @@ msgid "Add Signal"
msgstr "Dodaj sygnał"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Expression"
-msgstr "Zmień typ"
+msgstr "Zmień wyrażenie"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
msgstr "Dodaj węzeł"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Nodes"
-msgstr "Usuń wadliwe klatki kluczowe"
+msgstr "Usuwanie węzłów VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Duplicate VisualScript Nodes"
-msgstr "Duplikuj węzeł(y)"
+msgstr "Duplikuj węzły VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7266,7 +7386,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7274,7 +7394,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7306,31 +7426,27 @@ msgstr "Zmień typ"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Move Node(s)"
-msgstr "Usuń węzeł(y)"
+msgstr "Przenieś węzły"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Node"
-msgstr "Usuń węzeł Shader Graph"
+msgstr "Usuń węzeł VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Nodes"
-msgstr "Podłącz do węzła:"
+msgstr "Podłącz węzły"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Condition"
-msgstr "Skopiuj animacje"
+msgstr "Warunek"
#: modules/visual_script/visual_script_editor.cpp
msgid "Sequence"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Wysokość"
+msgstr "Przełącznik"
#: modules/visual_script/visual_script_editor.cpp
msgid "Iterator"
@@ -7341,9 +7457,8 @@ msgid "While"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Return"
-msgstr "Zwraca:"
+msgstr "Zwraca"
#: modules/visual_script/visual_script_editor.cpp
msgid "Call"
@@ -7352,7 +7467,7 @@ msgstr "Wywołanie"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Get"
-msgstr "Ustaw"
+msgstr "Pobierz"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
@@ -7361,40 +7476,36 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Change Input Value"
-msgstr "Zmień Wartość Domyślną"
+msgstr "Zmień wartość wejściową"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Can't copy the function node."
-msgstr "Nie można operować na '..'"
+msgstr "Nie można skopiować funkcji węzła."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Clipboard is empty!"
-msgstr "Schowka zasobów jest pusty!"
+msgstr "Schowek jest pusty!"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Paste VisualScript Nodes"
-msgstr "Wklej PozÄ™"
+msgstr "Wklej węzeł VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
msgstr "Usuń funkcję"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable"
-msgstr "Edytuj zmiennÄ…:"
+msgstr "Edytuj zmiennÄ…"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
msgstr "Usuń zmienną"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal"
-msgstr "Edytuj sygnał:"
+msgstr "Edytuj sygnał"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
@@ -7433,24 +7544,20 @@ msgid "Delete Selected"
msgstr "Usuń zaznaczone"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Find Node Type"
msgstr "Znajdź typ węzła"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Copy Nodes"
-msgstr "Skopiuj PozÄ™"
+msgstr "Skopiuj Węzeł"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Cut Nodes"
-msgstr "Utwórz węzeł"
+msgstr "Wytnij Węzły"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Paste Nodes"
-msgstr "Wklej PozÄ™"
+msgstr "Wklej węzły"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -7508,28 +7615,34 @@ msgid ""
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Run in Browser"
-msgstr "Szukaj"
+msgstr "Uruchom w przeglÄ…darce"
#: platform/javascript/export/export.cpp
msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not write file:\n"
-msgstr "Nie można utworzyć katalogu."
+msgstr "Nie można zapisać pliku:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr "Nie można otworzyć szablonu dla eksportu:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "Szablon eksportu nieprawidłowy:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
-msgstr "Nie można utworzyć katalogu."
+msgid "Could not read custom HTML shell:\n"
+msgstr "Nie można odczytać niestandardowe powłoki HTML:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
-msgstr "Nie można utworzyć katalogu."
+msgid "Could not read boot splash image file:\n"
+msgstr "Nie można odczytać pliku obrazu splash:\n"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7544,9 +7657,9 @@ msgid ""
"Only one visible CanvasModulate is allowed per scene (or set of instanced "
"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
-"Tylko jeden CanvasModulate jest dozwolony na scenie (lub zestawie "
-"zinstancjonowanych scen) Tylko pierwszy CanvasModulate zadziała, przy czym "
-"pozostałe będą zignorowane."
+"Tylko jeden widoczny węzeł CanvasModulate jest dozwolony na scenie (lub "
+"zestawie zinstancjonowanych scen). Tylko pierwszy CanvasModulate zadziała, "
+"przy czym pozostałe zostaną zignorowane."
#: scene/2d/collision_polygon_2d.cpp
msgid ""
@@ -7591,7 +7704,8 @@ msgstr ""
msgid ""
"An occluder polygon must be set (or drawn) for this occluder to take effect."
msgstr ""
-"Occluder polygon musi być ustawiony (lub narysowany) aby Occluder zadziałał."
+"Wielokąt zasłaniający musi być ustawiony (lub narysowany) aby Occluder "
+"zadziałał."
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
@@ -7641,23 +7755,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "Żeby zadziałało, pole Path musi wskazywać na istniejący węzeł Node2D."
-#: scene/2d/sprite.cpp
-#, fuzzy
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Aby zadziałało, pole Path musi wskazywać na obiekt Viewport, który ma "
-"zaznaczonÄ… opcjÄ™ trybu Render Target."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Pole trybu Render Target musi być ustawione w Viewport wskazywanym przez "
-"pole Path, aby ten Sprite mógł zadziałać."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7726,6 +7823,14 @@ msgstr ""
"Kształt musi być określony dla CollisionShape, aby spełniał swoje zadanie. "
"Utwórz zasób typu CollisionShape w odpowiednim polu obiektu!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7753,10 +7858,8 @@ msgid ""
msgstr ""
#: scene/3d/remote_transform.cpp
-#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
-msgstr ""
-"Żeby zadziałało, pole Path musi wskazywać na istniejący węzeł Particles2D."
+msgstr "Pole Path musi wskazywać na węzeł Spatial."
#: scene/3d/scenario_fx.cpp
msgid ""
@@ -7780,9 +7883,8 @@ msgid ""
msgstr ""
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Raw Mode"
-msgstr "Tryb przesuwania"
+msgstr "Trybie RAW"
#: scene/gui/color_picker.cpp
msgid "Add current color as a preset"
@@ -7800,6 +7902,11 @@ msgstr "Alarm!"
msgid "Please Confirm..."
msgstr "Proszę potwierdzić..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Wybierz metodÄ™"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7821,6 +7928,10 @@ msgstr ""
"Użyj kontenera jako dziecko (VBox,HBox,etc), lub węzła klasy Control i ustaw "
"ręcznie minimalny rozmiar."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7855,6 +7966,67 @@ msgstr "Błąd ładowania fonta."
msgid "Invalid font size."
msgstr "Niepoprawny rozmiar fonta."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "Nie można przejść do '"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "Źródło:"
+
+#, fuzzy
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Usuń punkt ścieżki"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Idź do lini"
+
+#, fuzzy
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Przesuń Punkt"
+
+#, fuzzy
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Podziel Segment (na krzywej)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Ustawienia"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Zdalny inspektor"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Właściwości zdalnego obiektu: "
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Tylko zaznaczenie"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Tylko zaznaczenie"
+
+#, fuzzy
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Aby zadziałało, pole Path musi wskazywać na obiekt Viewport, który ma "
+#~ "zaznaczonÄ… opcjÄ™ trybu Render Target."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Pole trybu Render Target musi być ustawione w Viewport wskazywanym przez "
+#~ "pole Path, aby ten Sprite mógł zadziałać."
+
#~ msgid "Filter:"
#~ msgstr "Filtr:"
@@ -7877,9 +8049,6 @@ msgstr "Niepoprawny rozmiar fonta."
#~ msgid "Removed:"
#~ msgstr "Usunięte:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Błąd podczas zapisywania atlasu:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Nie udało się zapisać tekstury atlasu:"
@@ -8559,9 +8728,6 @@ msgstr "Niepoprawny rozmiar fonta."
#~ msgid "Replaced %d Ocurrence(s)."
#~ msgstr "Zastąpiono %d wystąpień."
-#~ msgid "Install Export Templates"
-#~ msgstr "Zainstaluj Szablony Eksportu"
-
#~ msgid "Error exporting project!"
#~ msgstr "Błąd przy eksporcie projektu!"
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index 6f42056ecf..6e5ceeadc1 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -3,48 +3,53 @@
# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
+# Calum Knott <calum@calumk.com>, 2017.
# Zion Nimchuk <zionnimchuk@gmail.com>, 2016-2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-03-24 19:48+0000\n"
-"Last-Translator: Zion Nimchuk <zionnimchuk@gmail.com>\n"
+"PO-Revision-Date: 2017-11-23 14:48+0000\n"
+"Last-Translator: Calum Knott <calum@calumk.com>\n"
"Language-Team: Pirate <https://hosted.weblate.org/projects/godot-engine/"
"godot/pr/>\n"
"Language: pr\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.12\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
-msgstr ""
+msgstr "Cursed"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr ""
+msgstr "All yer Booty"
#: editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr ""
+msgstr "Move yer Add Key"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Change Transition"
-msgstr ""
+msgstr "Change yer Anim Transition"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Change Transform"
-msgstr ""
+msgstr "Change yer Anim Transform"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Change Value"
-msgstr ""
+msgstr "Change yer Anim Value"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Change Call"
-msgstr ""
+msgstr "Change yer Anim Call"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
@@ -99,6 +104,7 @@ msgid "Anim Delete Keys"
msgstr ""
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr ""
@@ -628,6 +634,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr ""
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -698,6 +711,14 @@ msgstr ""
msgid "Delete"
msgstr ""
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -1109,6 +1130,11 @@ msgid "File Exists, Overwrite?"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Slit th' Node"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr ""
@@ -1116,12 +1142,6 @@ msgstr ""
msgid "All Files (*)"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr ""
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr ""
@@ -1188,7 +1208,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1479,6 +1499,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1588,6 +1623,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1713,11 +1752,19 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1729,6 +1776,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1793,13 +1844,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2058,11 +2108,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2121,7 +2171,7 @@ msgstr ""
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2281,6 +2331,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2316,6 +2370,102 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "Slit th' Node"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "Slit th' Node"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2340,12 +2490,21 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Discharge ye' Variable"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2363,12 +2522,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2627,8 +2780,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2639,6 +2791,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Yar, Blow th' Selected Down!"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2783,6 +2940,55 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Yer functions:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2974,18 +3180,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -2994,30 +3192,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3046,14 +3228,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3166,6 +3340,36 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Discharge ye' Variable"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Discharge ye' Variable"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3287,10 +3491,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3341,6 +3551,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3529,6 +3743,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3561,6 +3779,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3576,58 +3798,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4025,16 +4195,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4175,7 +4375,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4220,6 +4419,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4271,6 +4484,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4281,13 +4498,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4391,33 +4606,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4440,6 +4644,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Yar, Blow th' Selected Down!"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4485,12 +4706,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4499,7 +4718,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4664,6 +4882,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4745,6 +4971,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4777,6 +5007,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4905,6 +5143,11 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Toggle ye Breakpoint"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5182,6 +5425,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5355,7 +5602,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5617,6 +5864,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5650,10 +5903,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5776,11 +6025,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6253,6 +6502,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Discharge ye' Signal"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6439,6 +6697,11 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Discharge ye' Signal"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6495,18 +6758,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6638,54 +6889,54 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"Shiver me timbers! ye type argument t' convert() be wrong! use yer TYPE_* "
"constants!"
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Nah enough bytes fer decodin' bytes, or ye got th' wrong ship."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "Blimey! Ye step argument be marooned!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Arr! Yer script is marooned!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Ye be loaded to the gunwalls? It's anchorage be not on a script!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Yer anchorage not be on a resource file, ye bilge rat!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Ye got th' wrong dictionary getup! (ye be missin' yer @path!)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "Ye got th' wrong dictionary getup! (yer script aint' at ye @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
"Ye got th' wrong dictionary getup! (ye be drinkin'? Ye got yerself a bad "
"script at @path!)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
"Ye got th' wrong dictionary getup! (yer subclasses be walkin' the plank!)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6699,15 +6950,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6775,12 +7034,9 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+#, fuzzy
+msgid "Clear Selection"
+msgstr "Yar, Blow th' Selected Down!"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6913,7 +7169,8 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+#, fuzzy
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
"Smash yer Meta key t' sink yer Getter. Smash yer Shift t' sink a generic "
"signature."
@@ -6925,7 +7182,8 @@ msgstr ""
"signature."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+#, fuzzy
+msgid "Hold %s to drop a simple reference to the node."
msgstr "Smash yer Meta key t' sink a naked reference t' th' node."
#: modules/visual_script/visual_script_editor.cpp
@@ -6933,7 +7191,8 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Smash yer Ctrl key t' sink a naked reference t' th' node."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+#, fuzzy
+msgid "Hold %s to drop a Variable Setter."
msgstr "Smash yer Meta key t' sink a Variable Setter."
#: modules/visual_script/visual_script_editor.cpp
@@ -7168,11 +7427,20 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+#, fuzzy
+msgid "Invalid export template:\n"
+msgstr "Yer index property name be thrown overboard!"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7264,18 +7532,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7334,6 +7590,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7397,6 +7661,11 @@ msgstr ""
msgid "Please Confirm..."
msgstr ""
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Slit th' Node"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7411,6 +7680,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7427,19 +7700,19 @@ msgstr ""
#: scene/resources/dynamic_font.cpp
msgid "Error initializing FreeType."
-msgstr ""
+msgstr "Cant Load the FreeType Captain."
#: scene/resources/dynamic_font.cpp
msgid "Unknown font format."
-msgstr ""
+msgstr "Unknown Calligraphy format."
#: scene/resources/dynamic_font.cpp
msgid "Error loading font."
-msgstr ""
+msgstr "Error loading yer Calligraphy Pen."
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
-msgstr ""
+msgstr "Yer Calligraphy be wrongly sized."
#~ msgid "just pressed"
#~ msgstr "just smashed"
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index 490ad2accc..eed8439995 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -5,20 +5,27 @@
#
# Allyson Souza <allyson_as@outlook.com>, 2017.
# António Sarmento <antonio.luis.sarmento@gmail.com>, 2016.
+# AWK <arthurwk1800@gmail.com>, 2017.
+# Francesco Perrotti-Garcia <fpg1503@gmail.com>, 2017.
# George Marques <george@gmarqu.es>, 2016.
# Guilherme Felipe C G Silva <guilhermefelipecgs@gmail.com>, 2017.
# Joaquim Ferreira <joaquimferreira1996@bol.com.br>, 2016.
# jonathan railarem <railarem@gmail.com>, 2017.
+# Luiz G. Correia <luizgabriell2.0@gmail.com>, 2017.
# Mailson Silva Marins <mailsons335@gmail.com>, 2016.
+# MalcomRF <malcomkbk@gmail.com>, 2017.
# Marcus Correia <marknokalt@live.com>, 2017.
-# Michael Alexsander Silva Dias <michael.a.s.dias@gmail.com>, 2017.
+# Michael Alexsander Silva Dias <michaelalexsander@protonmail.com>, 2017.
+# Renato Rotenberg <renato.rotenberg@gmail.com>, 2017.
+# Rodolfo R Gomes <rodolforg@gmail.com>, 2017.
+# Tiago Almeida <thyagoeap@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: 2016-05-30\n"
-"PO-Revision-Date: 2017-10-22 02:54+0000\n"
-"Last-Translator: Marcus Correia <marknokalt@live.com>\n"
+"PO-Revision-Date: 2017-11-25 01:23+0000\n"
+"Last-Translator: anonymous <>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
"Language: pt_BR\n"
@@ -26,7 +33,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -109,6 +116,7 @@ msgid "Anim Delete Keys"
msgstr "Excluir Chaves da Anim"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Duplicar Seleção"
@@ -644,6 +652,13 @@ msgstr "Editor de Dependências"
msgid "Search Replacement Resource:"
msgstr "Buscar Recurso para Substituição:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Abrir"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Donos De:"
@@ -717,6 +732,14 @@ msgstr "Excluir os arquivos selecionados?"
msgid "Delete"
msgstr "Excluir"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Alterar Chave do Dicionário"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Alterar Valor do Dicionário"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "Agradecimentos da comunidade Godot!"
@@ -1132,6 +1155,11 @@ msgid "File Exists, Overwrite?"
msgstr "O arquivo existe. Sobrescrever?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Criar Pasta"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Todas Reconhecidas"
@@ -1139,12 +1167,6 @@ msgstr "Todas Reconhecidas"
msgid "All Files (*)"
msgstr "Todos os Arquivos (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Abrir"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Abrir um Arquivo"
@@ -1211,7 +1233,7 @@ msgstr "Mover Favorito Acima"
msgid "Move Favorite Down"
msgstr "Mover Favorito Abaixo"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr "Ir para pasta pai"
@@ -1514,6 +1536,26 @@ msgstr ""
"melhor esse procedimento."
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Este é um objeto remoto, mudanças não serão mantidas.\n"
+"Por favor, leia a documentação referente a depuração para entender melhor "
+"esse procedimento."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Expandir tudo"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Recolher tudo"
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr "Copiar Parâmetros"
@@ -1629,7 +1671,11 @@ msgstr "Essa operação não pode ser realizada sem uma cena."
#: editor/editor_node.cpp
msgid "Export Mesh Library"
-msgstr "Exportar MeshLibrary"
+msgstr "Exportar Biblioteca de Meshes"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Esta operação não pode ser feita sem um nó raiz."
#: editor/editor_node.cpp
msgid "Export Tile Set"
@@ -1698,31 +1744,33 @@ msgid "Pick a Main Scene"
msgstr "Escolha uma Cena Principal"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "Não foi possível ativar o plugin em: '"
+msgstr ""
+"Não foi possível ativar o plugin em: '%s' processamento da configuração "
+"falhou."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
msgstr ""
"Não foi possível encontrar o campo de script para o plugin em: 'res://addons/"
+"%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Não foi possível carregar o script de extensão no caminho: '"
+msgstr "Não foi possível carregar o script complementar do caminho: '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "Não foi possível carregar o script de extensão no caminho: '"
+msgstr ""
+"Não foi possível carregar o script complementar do caminho: '%s' Tipo base "
+"não é EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "Não foi possível carregar o script de extensão no caminho: '"
+msgstr ""
+"Não foi possível carregar o script complementar do caminho: '%s' Script não "
+"está em modo ferramenta."
#: editor/editor_node.cpp
msgid ""
@@ -1771,12 +1819,20 @@ msgid "Switch Scene Tab"
msgstr "Trocar Guia de Cena"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr "Mais %d arquivo(s)"
+msgid "%d more files or folders"
+msgstr "%d mais arquivo(s) ou pasta(s)"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "%d mais pastas"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d mais arquivo(s)"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "Mais %d arquivo(s) ou pasta(s)"
+msgid "Dock Position"
+msgstr "Pos. do Painel"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1787,6 +1843,10 @@ msgid "Toggle distraction-free mode."
msgstr "Alternar modo sem-distrações."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Adicionar nova cena."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Cena"
@@ -1851,13 +1911,12 @@ msgid "TileSet.."
msgstr "TileSet..."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Desfazer"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Refazer"
@@ -2014,7 +2073,7 @@ msgstr "Classes"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Online Docs"
-msgstr "Docs Online"
+msgstr "Documentação Online"
#: editor/editor_node.cpp
msgid "Q&A"
@@ -2134,14 +2193,14 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "Arquivos"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Nó"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Arquivos"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Saída"
@@ -2197,7 +2256,7 @@ msgstr "Abrir Editor 3D"
msgid "Open Script Editor"
msgstr "Abrir Editor de Scripts"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "Abrir Biblioteca de Assets"
@@ -2211,7 +2270,7 @@ msgstr "Abrir o Editor anterior"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
-msgstr "Criando Previsualizações de Malha"
+msgstr "Criando Previsualizações da Mesh"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
@@ -2263,9 +2322,8 @@ msgid "Frame %"
msgstr "% de Quadro"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "% de Quadro Fixo"
+msgstr "Quadro Físico %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2361,6 +2419,10 @@ msgid "(Current)"
msgstr "(Atual)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Reconectando, por favor aguarde."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "Remover versão '%s' do modelo?"
@@ -2397,6 +2459,102 @@ msgid "Importing:"
msgstr "Importando:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Nenhum link de download encontrado para esta versão. Downloads diretos são "
+"disponível apenas para lançamentos oficiais."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Não foi possível resolver."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Não foi possível conectar."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Sem resposta."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Sol. Falhou."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Redirecionar Loop."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Falhou:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Não foi possível escrever o arquivo."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Download completo."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Erro ao solicitar url: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Conectando..."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Resolvendo"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Não foi possível resolver"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Conectando.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Não foi possível conectar"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Conectado"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Solicitando.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Baixando"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Erro de conexão"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Erro SSL Handshake"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "Versão Atual:"
@@ -2418,17 +2576,25 @@ msgstr "Selecione o arquivo de modelo"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
-msgstr "Gerenciador de Modelos de Exportação"
+msgstr "Gerenciador de exportação de modelo"
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Baixar modelos"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Selecione uma fonte da lista: "
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
-"Não pode abrir file_type_cache.cch para escrita, cache de tipos de arquivo "
+"Falha ao abrir file_type_cache.cch para escrita, cache de tipos de arquivo "
"não salvo!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "Não é possível navegar para '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "Impossível encontrar '%s', não existe no diretório!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
@@ -2444,16 +2610,8 @@ msgid ""
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
"\n"
-"Estado: Falha na importação do arquivo. Por favor, conserte o arquivo e re-"
-"importe manualmente."
-
-#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-"\n"
-"Origem: "
+"Estado: Falha na importação do arquivo. Por favor, conserte o arquivo e "
+"reimporte manualmente."
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
@@ -2529,7 +2687,7 @@ msgstr "Mostrar no Gerenciador de Arquivos"
#: editor/filesystem_dock.cpp
msgid "Instance"
-msgstr "Instanciar"
+msgstr "Instância"
#: editor/filesystem_dock.cpp
msgid "Edit Dependencies.."
@@ -2557,14 +2715,14 @@ msgstr "Alternar status da pasta como Favorito"
#: editor/filesystem_dock.cpp
msgid "Instance the selected scene(s) as child of the selected node."
-msgstr "Instancia a(s) cena(s) selecionada como filho do nó selecionado."
+msgstr "Instanciar a(s) cena(s) selecionada como filho do nó selecionado."
#: editor/filesystem_dock.cpp
msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
-"Analisando arquivos,\n"
+"Escaneando arquivos,\n"
"Por favor aguarde..."
#: editor/filesystem_dock.cpp
@@ -2586,48 +2744,48 @@ msgstr "Remover do Grupo"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
-msgstr "Importar como Cena Única"
+msgstr "Importar como cena única"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr "Importar com Animações Separadas"
+msgstr "Importar com animações separadas"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr "Importar com Materiais Separados"
+msgstr "Importar com materiais separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr "Importar com Objetos Separados"
+msgstr "Importar com objetos separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr "Importar com Objetos+Materiais serparados"
+msgstr "Importar com Objetos+Materiais separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr "Importar com Objetos+Animações Separados"
+msgstr "Importar com Objetos+Animações separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr "Importar com Materiais+Animações Separados"
+msgstr "Importar com Materiais+Animações separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "Importar com Objetos+Materiais+Animações Separados"
+msgstr "Importar com Objetos+Materiais+Animações separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
-msgstr "Importar como Múltiplas Cenas"
+msgstr "Importar como múltiplas cenas"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr "Impotr como Múltiplas Cenas+Materiais"
+msgstr "Importar como múltiplas Cenas+Materiais"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import Scene"
-msgstr "Importar Cena"
+msgstr "Importar cena"
#: editor/import/resource_importer_scene.cpp
msgid "Importing Scene.."
@@ -2639,7 +2797,7 @@ msgstr "Rodando Script Personalizado..."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
-msgstr "Não se pôde carregar script pós-importação:"
+msgstr "O script de pós-importação não pôde ser carregado:"
#: editor/import/resource_importer_scene.cpp
msgid "Invalid/broken script for post-import (check console):"
@@ -2655,11 +2813,11 @@ msgstr "Salvando..."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr "Definir como padrão para '%'"
+msgstr "Definir como Padrão para '%s'"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr "Limpar padrão para '%'"
+msgstr "Limpar Padrão para '%s'"
#: editor/import_dock.cpp
msgid " Files"
@@ -2667,7 +2825,7 @@ msgstr " Arquivos"
#: editor/import_dock.cpp
msgid "Import As:"
-msgstr "Importar Como:"
+msgstr "Importar como:"
#: editor/import_dock.cpp editor/property_editor.cpp
msgid "Preset.."
@@ -2692,7 +2850,7 @@ msgstr "Selecione um Nó para editar Sinais e Grupos."
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Poly"
-msgstr "Criar polígono"
+msgstr "Criar Polígono"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -2715,9 +2873,8 @@ msgid "Remove Poly And Point"
msgstr "Remover Polígono e Ponto"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "Criar um novo polígono do zero."
+msgid "Create a new polygon from scratch"
+msgstr "Criar um novo polígono do zero"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2731,6 +2888,10 @@ msgstr ""
"Ctrl+LMB: Soltar Segmento.\n"
"RMB: Apagar Ponto."
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Excluir Pontos"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "Alternar Inicio automático"
@@ -2878,6 +3039,57 @@ msgid "Copy Animation"
msgstr "Copiar Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Seções:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Colar"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Funcionalidades"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Criar Nova Animação"
@@ -3068,18 +3280,10 @@ msgid "Can't resolve hostname:"
msgstr "Não foi possível resolver o hostname:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "Não foi possível resolver."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Erro na conexão, por favor tente novamente."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "Não foi possível conectar."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "Não foi possível conectar ao host:"
@@ -3088,30 +3292,14 @@ msgid "No response from host:"
msgstr "Sem resposta do host:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Sem resposta."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "Solicitação falhou, código de retorno:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Sol. Falhou."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "Solicitação falhou, redirecionamentos demais"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Loop de Redirecionamento."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Falhou:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "Hash de download ruim, assumindo que o arquivo foi adulterado."
@@ -3137,15 +3325,7 @@ msgstr "Procurando:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Resolving.."
-msgstr "Resolvendo.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Conectando.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Solicitando.."
+msgstr "Resolvendo..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
@@ -3260,6 +3440,34 @@ msgid "Move Action"
msgstr "Ação de Mover"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Mover guia vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Criar novo guia vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Remover guia vertical"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Mover guia horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Criar novo guia horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Remover guia horizontal"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Criar novos guias horizontais e verticais"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "Editar Cadeia de IK"
@@ -3377,17 +3585,23 @@ msgstr "Encaixar na âncora do nó"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr "Encaixar nos lados do lá"
+msgstr "Encaixar nos lados do nó"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
msgstr "Encaixar em outros nós"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "Encaixar nas guias"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Travar o objeto selecionado no local (não pode ser movido)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Destravar o objeto selecionado (pode ser movido)."
@@ -3438,6 +3652,10 @@ msgid "Show rulers"
msgstr "Mostrar réguas"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Mostrar guias"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr "Centralizar Seleção"
@@ -3624,6 +3842,10 @@ msgstr "Alternar Curva Targente Linear"
msgid "Hold Shift to edit tangents individually"
msgstr "Segure Shift para editar tangentes individualmente"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "Cozinhar Sonda GI"
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "Adicionar/Remover Ponto na Curva de Cor"
@@ -3658,6 +3880,10 @@ msgid "Create Occluder Polygon"
msgstr "Criar Polígono de Oclusão"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Criar um novo polígono do zero."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Editar polígono existente:"
@@ -3673,58 +3899,6 @@ msgstr "Ctrl+LMB: Dividir Segmento."
msgid "RMB: Erase Point."
msgstr "RMB: Apagar Ponto."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "Remover Ponto de Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Adicionar Ponto ao Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Mover Ponto em Line2D"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Selecionar Pontos"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Arrastar: Selecionar Pontos de Controle"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Clique: Adicionar Ponto"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Clique Direito: Excluir Ponto"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Adicionar Ponto (em espaço vazio)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "Dividir Segmento (em linha)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Excluir Ponto"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "Mesh está vazia!"
@@ -3755,11 +3929,11 @@ msgstr "Criar Mesh de Navegação"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
-msgstr "Falta uma MeshInstance na Mesh!"
+msgstr "Falta uma Mesh na MeshInstance!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh has not surface to create outlines from!"
-msgstr "Mesh não tem superfície para criar contornos!"
+msgstr "Mesh não tem superfície para criar contornos dela!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Could not create outline!"
@@ -3791,7 +3965,7 @@ msgstr "Criar Colisão Convexa Irmã"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh.."
-msgstr "Criar Mesh de Contorno..."
+msgstr "Criar Mesh de Contorno.."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh"
@@ -3908,11 +4082,11 @@ msgstr "Precalcular!"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
msgid "Bake the navigation mesh.\n"
-msgstr "Preparar a malha de navegação.\n"
+msgstr "Preparar a mesh de navegação.\n"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
-msgstr "Apagar a malha de navegação."
+msgstr "Apagar a mesh de navegação."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
@@ -3939,7 +4113,6 @@ msgid "Eroding walkable area..."
msgstr "Erodindo área caminhável..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
msgstr "Particionando..."
@@ -3953,11 +4126,11 @@ msgstr "Criando polimalha..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Converting to native navigation mesh..."
-msgstr "Convertando para malha de navegação nativa..."
+msgstr "Convertando para mesh de navegação nativa..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr "Configuração do Gerador de Malha de Navegação:"
+msgstr "Configuração do Gerador de Mesh de Navegação:"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Parsing Geometry..."
@@ -4125,16 +4298,46 @@ msgid "Move Out-Control in Curve"
msgstr "Mover Controle de Saída na Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Selecionar Pontos"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Arrastar: Selecionar Pontos de Controle"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Clique: Adicionar Ponto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Clique Direito: Excluir Ponto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Selecionar Pontos de Controle (Shift+Arrastar)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Adicionar Ponto (em espaço vazio)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Dividir Segmentos (na curva)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Excluir Ponto"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Fechar Curva"
@@ -4271,7 +4474,6 @@ msgstr "Carregar Recurso"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4318,6 +4520,20 @@ msgid " Class Reference"
msgstr " Referência de Classes"
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Ordenar"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Mover para Cima"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Mover para Baixo"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Próximo Script"
@@ -4369,6 +4585,10 @@ msgstr "Fechar Docs"
msgid "Close All"
msgstr "Fechar Tudo"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Fechas as outras abas"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Rodar"
@@ -4379,13 +4599,11 @@ msgstr "Alternar Painel de Scripts"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Localizar..."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Localizar próximo"
@@ -4493,33 +4711,22 @@ msgstr "Minúscula"
msgid "Capitalize"
msgstr "Capitalizar"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Recortar"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Copiar"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Selecionar Tudo"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Mover para Cima"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Mover para Baixo"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr "Excluir Linha"
@@ -4541,6 +4748,22 @@ msgid "Clone Down"
msgstr "Clonar Abaixo"
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "Esconder Linha"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "Mostrar Linha"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "Esconder Todas as Linhas"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "Mostrar Todas as Linhas"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "Completar Símbolo"
@@ -4586,12 +4809,10 @@ msgid "Convert To Lowercase"
msgstr "Converter Para Minúsculo"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Encontrar Anterior"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Substituir..."
@@ -4600,7 +4821,6 @@ msgid "Goto Function.."
msgstr "Ir para Função..."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Ir para linha..."
@@ -4765,6 +4985,14 @@ msgid "View Plane Transform."
msgstr "Visualizar Transformação do Plano."
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "Escala: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Transladando: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Rotacionando %s degraus."
@@ -4845,6 +5073,10 @@ msgid "Vertices"
msgstr "Vértices"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "Alinhar com Visão"
@@ -4877,6 +5109,14 @@ msgid "View Information"
msgstr "VIsualizar Informação"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Ver FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Metade da Resolução"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "Ouvinte de Ãudio"
@@ -5007,6 +5247,10 @@ msgid "Tool Scale"
msgstr "Ferramenta Escalar"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Alternar Visão Livre"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Transformação"
@@ -5258,11 +5502,11 @@ msgstr "Remover Tudo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "Editar tema.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "Menu de edição de tema."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5281,6 +5525,10 @@ msgid "Create Empty Editor Template"
msgstr "Criar Modelo de Editor Vazio"
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "Criar a Partir do Tema Atual do Editor"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "Rádio Checkbox 1"
@@ -5454,8 +5702,8 @@ msgid "Runnable"
msgstr "Executável"
#: editor/project_export.cpp
-msgid "Delete patch '"
-msgstr "Deletar alteração '"
+msgid "Delete patch '%s' from list?"
+msgstr "Excluir alteração '%s' da lista?"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
@@ -5691,6 +5939,9 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Linguagem alterada.\n"
+"A interface será atualizada na próxima vez que o editor ou o gerenciador de "
+"projetos iniciar."
#: editor/project_manager.cpp
msgid ""
@@ -5725,14 +5976,19 @@ msgid "Exit"
msgstr "Sair"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "Reinício (s):"
+msgstr "Reiniciar Agora"
#: editor/project_manager.cpp
msgid "Can't run project"
msgstr "Não é possível executar o projeto"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "Chave "
@@ -5766,10 +6022,6 @@ msgid "Add Input Action Event"
msgstr "Adicionar Evento Ação de Entrada"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5891,12 +6143,12 @@ msgid "Select a setting item first!"
msgstr "Selecione um item de configuração primeiro!"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr "Não existe a propriedade '"
+msgid "No property '%s' exists."
+msgstr "Nenhuma propriedade '%s' existe."
#: editor/project_settings_editor.cpp
-msgid "Setting '"
-msgstr "Configuração '"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "Configuração '%s' é interna e não pode ser excluída."
#: editor/project_settings_editor.cpp
msgid "Delete Item"
@@ -5951,13 +6203,12 @@ msgid "Remove Resource Remap Option"
msgstr "Remover Opção de Remapeamento de Recurso"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Mudar Tempo de Mistura"
+msgstr "FIltro de Idiomas Alterado"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Modo do Filtro de Idiomas Alterado"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -6020,28 +6271,24 @@ msgid "Locale"
msgstr "Localidade"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "Filtrar Imagens:"
+msgstr "Filtro de Idiomas"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "Mostrar Ossos"
+msgstr "Mostrar todos os idiomas"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "Mostrar apenas os idiomas selecionados"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Filtrar nós"
+msgstr "Modo de filtragem:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "Localidade"
+msgstr "Idiomas:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -6373,6 +6620,14 @@ msgid "Clear a script for the selected node."
msgstr "Remove um script do nó selecionado."
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "Remoto"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "Local"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "Limpar Herança? (Irreversível!)"
@@ -6397,7 +6652,7 @@ msgid ""
"Node has connection(s) and group(s)\n"
"Click to show signals dock."
msgstr ""
-"O nó tem conexões e grupos\n"
+"O nó tem conexão(ões) e grupo(s)\n"
"Clique para mostrar o painel de sinais."
#: editor/scene_tree_editor.cpp
@@ -6413,7 +6668,7 @@ msgid ""
"Node is in group(s).\n"
"Click to show groups dock."
msgstr ""
-"O nó tem grupos.\n"
+"O nó está em grupo(s).\n"
"Clique para mostrar o painel de grupos."
#: editor/scene_tree_editor.cpp
@@ -6442,11 +6697,11 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Toggle Visibility"
-msgstr "Alternar Visiblidade"
+msgstr "Alternar Visibilidade"
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
-msgstr "Nome de nó Inválido, os seguintes caracteres não são permitidos:"
+msgstr "Nome de nó inválido, os seguintes caracteres não são permitidos:"
#: editor/scene_tree_editor.cpp
msgid "Rename Node"
@@ -6565,6 +6820,10 @@ msgid "Attach Node Script"
msgstr "Adicionar Script ao Nó"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Remoto "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Bytes:"
@@ -6621,18 +6880,6 @@ msgid "Stack Trace (if applicable):"
msgstr "Pilha de Rastreamento (se aplicável):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Inspetor Remoto"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Ãrvore de Cena ao vivo:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Propriedades do Objeto Remoto: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Profiler"
@@ -6764,51 +7011,51 @@ msgstr "Bibliotecas: "
msgid "GDNative"
msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Argumento de tipo inválido para convert(), use constantes TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Não há bytes suficientes para decodificar, ou o formato é inválido."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "o argumento step é zero!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Não é um script com uma instância"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Não é baseado em um script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Não é baseado em um arquivo de recurso"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Formato de dicionário de instância inválido (faltando @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Formato de dicionário de instância inválido (não foi possível carregar o "
"script em @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Formato de dicionário de instância inválido (script inválido em @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Dicionário de instância inválido (subclasses inválidas)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "Objeto não pôde fornecer um comprimento."
@@ -6821,16 +7068,24 @@ msgid "GridMap Duplicate Selection"
msgstr "Duplicar Seleção do GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "Chão:"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Mapa de Grade"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr "Ancorar Vista"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr "Nível anterior ("
+msgid "Previous Floor"
+msgstr "Chão Anterior"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
-msgstr "Nível seguinte ("
+msgid "Next Floor"
+msgstr "Próximo Chão"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Disabled"
@@ -6897,12 +7152,8 @@ msgid "Erase Area"
msgstr "Apagar Ãrea"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr "Seleção -> Duplicar"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr "Seleção -> Limpar"
+msgid "Clear Selection"
+msgstr "Limpar Seleção"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -7029,9 +7280,9 @@ msgid "Duplicate VisualScript Nodes"
msgstr "Duplicar Nós VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Segure Meta para aplicar um Getter. Segure Shift para aplicar uma assinatura "
+"Segure %s para aplicar um Getter. Segure Shift para aplicar uma assinatura "
"genérica."
#: modules/visual_script/visual_script_editor.cpp
@@ -7041,16 +7292,16 @@ msgstr ""
"genérica."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "Segure Meta para aplicar uma referência simples ao nó."
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "Segure %s para aplicar uma referência simples ao nó."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Segure Ctrl para aplicar uma referência ao nó."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "Segure Meta para aplicar um Setter de Variável."
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Segure %s para aplicar um Setter de Variável."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7279,13 +7530,21 @@ msgid "Could not write file:\n"
msgstr "Não foi possível escrever o arquivo:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "Não foi possível ler o arquivo:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "Não foi possível abrir o modelo para exportar:\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "Template de Exportação Inválido:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "Não foi possível ler o shell HTML personalizado:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "Não foi possível ler o arquivo de imagem boot splash:\n"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7406,22 +7665,6 @@ msgstr ""
"A propriedade \"Caminho\" deve apontar para um nó Node2D válido para "
"funcionar."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"A propriedade \"Caminho\" deve apontar a um nó Viewport para funcionar. Tal "
-"Viewport deve estar no modo \"Destino de Render\"."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"O nó Viewport definido na propriedade \"Caminho\" deve ser marcado como "
-"\"destino de render\" para que este sprite funcione."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7443,8 +7686,8 @@ msgid ""
"The controller id must not be 0 or this controller will not be bound to an "
"actual controller"
msgstr ""
-"A id do controlador não deve ser 0 ou este controlador não será atribúido a "
-"um controlador real"
+"A id do controle não deve ser 0 ou este controle não será atribuído a um "
+"controle real"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRAnchor must have an ARVROrigin node as its parent"
@@ -7455,7 +7698,7 @@ msgid ""
"The anchor id must not be 0 or this anchor will not be bound to an actual "
"anchor"
msgstr ""
-"A id da âncore não deve ser 0 ou essa âncora não será atribuída a uma âncore "
+"A id da âncora não deve ser 0 ou essa âncora não será atribuída a uma âncora "
"geral"
#: scene/3d/arvr_nodes.cpp
@@ -7474,7 +7717,7 @@ msgstr ""
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
-msgstr "Um nó CollisionPolygon vazio não é efetivo na colisão."
+msgstr "Um nó CollisionPolygon vazio não tem efeito ao colidir."
#: scene/3d/collision_shape.cpp
msgid ""
@@ -7491,9 +7734,17 @@ msgid ""
"A shape must be provided for CollisionShape to function. Please create a "
"shape resource for it!"
msgstr ""
-"Uma forma deve ser fornecida para que o nó CollisionShape fucione. Por "
+"Uma forma deve ser fornecida para que o nó CollisionShape funcione. Por "
"favor, crie um recurso de forma a ele!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "Planejando Malhas"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "Terminando de Plotar"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7521,7 +7772,7 @@ msgid ""
"Change the size in children collision shapes instead."
msgstr ""
"Mudanças de tamanho no RigidBody (nos modos Character e Rigid) serão "
-"sobrescitas pelo motor de física ao executar.\n"
+"sobrescritas pelo motor de física ao executar.\n"
"Ao invés disso, mude o tamanho nas formas de colisão filhas."
#: scene/3d/remote_transform.cpp
@@ -7541,7 +7792,7 @@ msgid ""
"order for AnimatedSprite3D to display frames."
msgstr ""
"Um recurso do tipo SpriteFrames deve ser criado ou definido na propriedade "
-"\"Frames\" para que o nó AnimatedSprite mostre quadros."
+"\"Frames\" para que o nó AnimatedSprite3D mostre quadros."
#: scene/3d/vehicle_body.cpp
msgid ""
@@ -7571,6 +7822,11 @@ msgstr "Alerta!"
msgid "Please Confirm..."
msgstr "Confirme Por Favor..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Selecionar Mtéodo"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7578,8 +7834,8 @@ msgid ""
"hide upon running."
msgstr ""
"Popups são ocultos por padrão a menos que você chame alguma das funções "
-"popup*(). Torná-los visíveis para editar não causa problema, mas eles "
-"ocultarão ao rodar a cena."
+"popup*(). Torná-los visíveis para editar não causa problema, mas eles serão "
+"ocultados ao rodar a cena."
#: scene/gui/scroll_container.cpp
msgid ""
@@ -7591,6 +7847,10 @@ msgstr ""
"Use um container como filho (VBox, HBox, etc) ou um Control e defina o "
"tamanho mínimo manualmente."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Outro)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7627,6 +7887,69 @@ msgstr "Erro ao carregar fonte."
msgid "Invalid font size."
msgstr "Tamanho de fonte inválido."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "Não é possível navegar para '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "Origem: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Remover Ponto de Line2D"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Adicionar Ponto ao Line2D"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Mover Ponto em Line2D"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Dividir Segmento (em linha)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#~ msgid "Setting '"
+#~ msgstr "Configuração '"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Inspetor Remoto"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Ãrvore de Cena ao vivo:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Propriedades do Objeto Remoto: "
+
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "Nível anterior ("
+
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "Nível seguinte ("
+
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Seleção -> Duplicar"
+
+#~ msgid "Selection -> Clear"
+#~ msgstr "Seleção -> Limpar"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "A propriedade \"Caminho\" deve apontar a um nó Viewport para funcionar. "
+#~ "Tal Viewport deve estar no modo \"Destino de Render\"."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "O nó Viewport definido na propriedade \"Caminho\" deve ser marcado como "
+#~ "\"destino de render\" para que este sprite funcione."
+
#~ msgid "Filter:"
#~ msgstr "Filtro:"
@@ -7651,9 +7974,6 @@ msgstr "Tamanho de fonte inválido."
#~ msgid "Removed:"
#~ msgstr "Removido:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Erro ao salvar atlas:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Não foi possível salvar Subtextura do Atlas:"
@@ -8042,9 +8362,6 @@ msgstr "Tamanho de fonte inválido."
#~ msgid "Cropping Images"
#~ msgstr "Aparando Imagens"
-#~ msgid "Blitting Images"
-#~ msgstr "Fazendo Blitting das Imagens"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "Não se pôde salva imagem de atlas:"
@@ -8386,9 +8703,6 @@ msgstr "Tamanho de fonte inválido."
#~ msgid "Save Translatable Strings"
#~ msgstr "Salvar Strings Traduzíveis"
-#~ msgid "Install Export Templates"
-#~ msgstr "Instalar Models de Exportação"
-
#~ msgid "Edit Script Options"
#~ msgstr "Editar Opções de Script"
diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po
index 4b4a98857c..9e89358ac8 100644
--- a/editor/translations/pt_PT.po
+++ b/editor/translations/pt_PT.po
@@ -4,111 +4,115 @@
# This file is distributed under the same license as the Godot source code.
#
# António Sarmento <antonio.luis.sarmento@gmail.com>, 2016.
+# Carlos Vieira <carlos.vieira@gmail.com>, 2017.
# João Graça <jgraca95@gmail.com>, 2017.
+# Miguel Gomes <miggas09@gmail.com>, 2017.
+# Pedro Gomes <pedrogomes1698@gmail.com>, 2017.
# Rueben Stevens <supercell03@gmail.com>, 2017.
+# SARDON <fabio3_Santos@hotmail.com>, 2017.
+# Vinicius Gonçalves <viniciusgoncalves21@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-10-25 01:48+0000\n"
-"Last-Translator: Rueben Stevens <supercell03@gmail.com>\n"
+"PO-Revision-Date: 2017-11-25 18:50+0000\n"
+"Last-Translator: Carlos Vieira <carlos.vieira@gmail.com>\n"
"Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_PT/>\n"
"Language: pt_PT\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
-msgstr "desativado"
+msgstr "Desativado"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr "Toda a selecção"
+msgstr "Toda Selecção"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Move Add Key"
-msgstr "Mover Chave Adcionada"
+msgstr "Mover Adicionar Chave"
#: editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr ""
+msgstr "Anim Mudar Transição"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr ""
+msgstr "Anim Mudar o Transform"
#: editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr ""
+msgstr "Anim Mudar Valor"
#: editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr ""
+msgstr "Anim Mudar Chamada"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr ""
+msgstr "Anim Adicionar Pista"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr ""
+msgstr "Anim Duplicar Chaves"
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr ""
+msgstr "Mover Anim Subir Pista"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr ""
+msgstr "Mover Anim Descer Pista"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr "Remover a banda de animação"
+msgstr "Remover Anim Pista"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr "Definir transições para:"
+msgstr "Definir Transições para:"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr "Renomear Banda de Anim"
+msgstr "Anim Renomear Pista"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr ""
+msgstr "Anim Pista Mudar Interpolação"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr ""
+msgstr "Anim Pista Mudar Modo do Valor"
#: editor/animation_editor.cpp
msgid "Anim Track Change Wrap Mode"
-msgstr ""
+msgstr "Anim Pista Mudar Modo de Embrulho"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Edit Node Curve"
-msgstr "Editar Curva de Node"
+msgstr "Editar Curva do Node"
#: editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr "Editar Curva de Selecção"
+msgstr "Editar Curva da Seleção"
#: editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr ""
+msgstr "Anim Eliminar Chaves"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr "Duplicar Selecção"
+msgstr "Duplicar Seleção"
#: editor/animation_editor.cpp
msgid "Duplicate Transposed"
-msgstr ""
+msgstr "Duplicar Transposto"
#: editor/animation_editor.cpp
msgid "Remove Selection"
@@ -128,11 +132,11 @@ msgstr "Gatilho"
#: editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr ""
+msgstr "Anim Adicionar Chave"
#: editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr ""
+msgstr "Anim Mover Chaves"
#: editor/animation_editor.cpp
msgid "Scale Selection"
@@ -140,15 +144,15 @@ msgstr "Escalar Selecção"
#: editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr "Alterar escala a partir do cursor"
+msgstr "Escalar Partir do Cursor"
#: editor/animation_editor.cpp
msgid "Goto Next Step"
-msgstr "Ir para o próximo passo"
+msgstr "Ir Próximo Passo"
#: editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr "Ir para passo anterior"
+msgstr "Ir Passo Anterior"
#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
#: editor/property_editor.cpp
@@ -161,19 +165,19 @@ msgstr "Constante"
#: editor/animation_editor.cpp
msgid "In"
-msgstr ""
+msgstr "Dentro"
#: editor/animation_editor.cpp
msgid "Out"
-msgstr ""
+msgstr "Fora"
#: editor/animation_editor.cpp
msgid "In-Out"
-msgstr ""
+msgstr "Dentro-Fora"
#: editor/animation_editor.cpp
msgid "Out-In"
-msgstr ""
+msgstr "Fora-Dentro"
#: editor/animation_editor.cpp
msgid "Transitions"
@@ -189,11 +193,11 @@ msgstr "Limpar Animação"
#: editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr ""
+msgstr "Criar NOVA pista para %s e inserir chave?"
#: editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "Criar %d NOVAS pistas e inserir chaves?"
#: editor/animation_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
@@ -206,47 +210,47 @@ msgstr "Criar"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "Anim Criar & Inserir"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr ""
+msgstr "Anim Inserir Pista & Chave"
#: editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr ""
+msgstr "Anim Inserir Chave"
#: editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr ""
+msgstr "Mudar Duração da Anim"
#: editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr ""
+msgstr "Mudar Laço da Anim"
#: editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
-msgstr ""
+msgstr "Anim Criar Valor Chave Escrito"
#: editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr ""
+msgstr "Anim Inserir"
#: editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr ""
+msgstr "Anim Escalar Chaves"
#: editor/animation_editor.cpp
msgid "Anim Add Call Track"
-msgstr ""
+msgstr "Anim Adicionar Chamada de Pista"
#: editor/animation_editor.cpp
msgid "Animation zoom."
-msgstr ""
+msgstr "Zoom da Animação."
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "Comprimento (s):"
+msgstr "Duração (s):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
@@ -258,143 +262,143 @@ msgstr "Passos (s):"
#: editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
-msgstr ""
+msgstr "Passo Rápido do Cursor (em segundos)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr "Habilitar/Desabilitar repetição na animação."
+msgstr "Ativar/Desativar repetição na animação."
#: editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr "Adicionar novas bandas."
+msgstr "Adicionar novas pistas."
#: editor/animation_editor.cpp
msgid "Move current track up."
-msgstr ""
+msgstr "Mover pista atual para cima."
#: editor/animation_editor.cpp
msgid "Move current track down."
-msgstr ""
+msgstr "Mover pista atual para baixo."
#: editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr "Remover a banda seleccionada."
+msgstr "Remover pista selecionada."
#: editor/animation_editor.cpp
msgid "Track tools"
-msgstr ""
+msgstr "Ferramentas da Pista"
#: editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr "Habilitar a edição de chaves individuais ao clicar nelas."
+msgstr "Ativar edição de chaves individuais ao clicar nelas."
#: editor/animation_editor.cpp
msgid "Anim. Optimizer"
-msgstr ""
+msgstr "Optimizador da Animação"
#: editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr ""
+msgstr "Máximo de Erros Lineares:"
#: editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr ""
+msgstr "Máximo de Erros Angulares:"
#: editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr ""
+msgstr "Angulo Máximo Otimizável:"
#: editor/animation_editor.cpp
msgid "Optimize"
-msgstr ""
+msgstr "Otimizar"
#: editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
-msgstr ""
+msgstr "Selecionar um AnimationPlayer da Scene Tree para editar animações."
#: editor/animation_editor.cpp
msgid "Key"
-msgstr ""
+msgstr "Chave"
#: editor/animation_editor.cpp
msgid "Transition"
-msgstr ""
+msgstr "Transição"
#: editor/animation_editor.cpp
msgid "Scale Ratio:"
-msgstr ""
+msgstr "Taxa de Escala:"
#: editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr ""
+msgstr "Chamar Funções em Qual Node?"
#: editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr ""
+msgstr "Remover chaves invalidas"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr ""
+msgstr "Remover pistas vazias ou não resolvidas"
#: editor/animation_editor.cpp
msgid "Clean-up all animations"
-msgstr ""
+msgstr "Limpar todas as animações"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr ""
+msgstr "Limpar animação(ções) (DEFINITIVO!)"
#: editor/animation_editor.cpp
msgid "Clean-Up"
-msgstr ""
+msgstr "Limpar"
#: editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr ""
+msgstr "Redimensionar Array"
#: editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr ""
+msgstr "Alterar tipo de valor do Array"
#: editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr ""
+msgstr "Alterar valor do Array"
#: editor/code_editor.cpp
msgid "Go to Line"
-msgstr ""
+msgstr "Vai para linha"
#: editor/code_editor.cpp
msgid "Line Number:"
-msgstr ""
+msgstr "Numero da linha:"
#: editor/code_editor.cpp
msgid "No Matches"
-msgstr ""
+msgstr "Sem combinações"
#: editor/code_editor.cpp
msgid "Replaced %d occurrence(s)."
-msgstr ""
+msgstr "Substituído %d ocorrência(s)."
#: editor/code_editor.cpp
msgid "Replace"
-msgstr ""
+msgstr "Substituir"
#: editor/code_editor.cpp
msgid "Replace All"
-msgstr ""
+msgstr "Substituir todos"
#: editor/code_editor.cpp
msgid "Match Case"
-msgstr ""
+msgstr "Caso de Compatibilidade"
#: editor/code_editor.cpp
msgid "Whole Words"
-msgstr ""
+msgstr "Palavras inteiras"
#: editor/code_editor.cpp
msgid "Selection Only"
-msgstr ""
+msgstr "Apenas seleção"
#: editor/code_editor.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -402,110 +406,114 @@ msgstr ""
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Search"
-msgstr ""
+msgstr "Procurar"
#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
-msgstr ""
+msgstr "Encontrar"
#: editor/code_editor.cpp
msgid "Next"
-msgstr ""
+msgstr "Proximo"
#: editor/code_editor.cpp
msgid "Not found!"
-msgstr ""
+msgstr "Não encontrado!"
#: editor/code_editor.cpp
msgid "Replace By"
-msgstr ""
+msgstr "Substituir por"
#: editor/code_editor.cpp
+#, fuzzy
msgid "Case Sensitive"
-msgstr ""
+msgstr "Case Sensitive"
#: editor/code_editor.cpp
msgid "Backwards"
-msgstr ""
+msgstr "Para trás"
#: editor/code_editor.cpp
msgid "Prompt On Replace"
-msgstr ""
+msgstr "Solicitar em substituir"
#: editor/code_editor.cpp
msgid "Skip"
-msgstr ""
+msgstr "Passar"
#: editor/code_editor.cpp
msgid "Zoom In"
-msgstr ""
+msgstr "Zoom In"
#: editor/code_editor.cpp
msgid "Zoom Out"
-msgstr ""
+msgstr "Zoom out"
#: editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Reset zoom"
#: editor/code_editor.cpp editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr ""
+msgstr "Linha:"
#: editor/code_editor.cpp
msgid "Col:"
-msgstr ""
+msgstr "Coluna:"
#: editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
-msgstr ""
+msgstr "Método no Node alvo deve ser especificado!"
#: editor/connections_dialog.cpp
msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
+"Método alvo não encontrado! Especifique um método válido ou anexe um script "
+"ao Node de destino."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr ""
+msgstr "Conectar ao Node:"
#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Add"
-msgstr ""
+msgstr "Adicionar"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
#: editor/project_settings_editor.cpp
msgid "Remove"
-msgstr ""
+msgstr "Remover"
#: editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr ""
+msgstr "Adicionar Argumento de chamada extra:"
#: editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr ""
+msgstr "Argumentos de chamada extra:"
#: editor/connections_dialog.cpp
msgid "Path to Node:"
-msgstr ""
+msgstr "Caminho para Node:"
#: editor/connections_dialog.cpp
msgid "Make Function"
-msgstr ""
+msgstr "Fazer função"
#: editor/connections_dialog.cpp
msgid "Deferred"
-msgstr ""
+msgstr "Deferido"
#: editor/connections_dialog.cpp
+#, fuzzy
msgid "Oneshot"
-msgstr ""
+msgstr "Oneshot"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/export_template_manager.cpp
@@ -523,122 +531,134 @@ msgstr "Fechar"
#: editor/connections_dialog.cpp
msgid "Connect"
-msgstr ""
+msgstr "Ligar"
#: editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr ""
+msgstr "Ligar '%s' a '%s'"
#: editor/connections_dialog.cpp
msgid "Connecting Signal:"
-msgstr ""
+msgstr "Ligar sinal:"
#: editor/connections_dialog.cpp
msgid "Create Subscription"
-msgstr ""
+msgstr "Criar subscrição"
#: editor/connections_dialog.cpp
msgid "Connect.."
-msgstr ""
+msgstr "Ligar..."
#: editor/connections_dialog.cpp
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Disconnect"
-msgstr ""
+msgstr "Desligar"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr ""
+msgstr "Sinais"
#: editor/create_dialog.cpp
msgid "Create New"
-msgstr ""
+msgstr "Criar Novo"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
msgid "Favorites:"
-msgstr ""
+msgstr "Favoritos:"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
msgid "Recent:"
-msgstr ""
+msgstr "Recente:"
#: editor/create_dialog.cpp editor/editor_node.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/quick_open.cpp editor/settings_config_dialog.cpp
msgid "Search:"
-msgstr ""
+msgstr "Procurar:"
#: editor/create_dialog.cpp editor/editor_help.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
#: editor/quick_open.cpp
+#, fuzzy
msgid "Matches:"
-msgstr ""
+msgstr "Matches:"
#: editor/create_dialog.cpp editor/editor_help.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
#: editor/script_editor_debugger.cpp
msgid "Description:"
-msgstr ""
+msgstr "Descrição:"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
-msgstr ""
+msgstr "Procurar substituição para:"
#: editor/dependency_editor.cpp
msgid "Dependencies For:"
-msgstr ""
+msgstr "Dependências para:"
#: editor/dependency_editor.cpp
msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will not take effect unless reloaded."
msgstr ""
+"A Cena '%s' esta a ser editada.\n"
+"As alterações não terão efeito ate recarregar."
#: editor/dependency_editor.cpp
msgid ""
"Resource '%s' is in use.\n"
"Changes will take effect when reloaded."
msgstr ""
+"Recurso '%s' em uso.\n"
+"Alterações terão efeito apos reenicio."
#: editor/dependency_editor.cpp
msgid "Dependencies"
-msgstr ""
+msgstr "Dependências"
#: editor/dependency_editor.cpp
msgid "Resource"
-msgstr ""
+msgstr "Recurso"
#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
#: editor/project_manager.cpp editor/project_settings_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Path"
-msgstr ""
+msgstr "Caminho"
#: editor/dependency_editor.cpp
msgid "Dependencies:"
-msgstr ""
+msgstr "Dependências:"
#: editor/dependency_editor.cpp
msgid "Fix Broken"
-msgstr ""
+msgstr "Reparar"
#: editor/dependency_editor.cpp
msgid "Dependency Editor"
-msgstr ""
+msgstr "Editor de dependência"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr ""
+msgstr "Procurar recurso de substituição:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Aberto"
#: editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr ""
+msgstr "Proprietários de:"
#: editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
-msgstr ""
+msgstr "Remover arquivos selecionados do projeto? (sem desfazer)"
#: editor/dependency_editor.cpp
msgid ""
@@ -646,129 +666,141 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
+"Os arquivos a serem removidos são necessários para que outros recursos "
+"funcionem.\n"
+"Remover mesmo assim? (sem anular)"
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "Não é possível remover:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr ""
+msgstr "Erro ao carregar:"
#: editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
+msgstr "Cena falha ao carregar devido a dependências que estão em falta:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
-msgstr ""
+msgstr "Abrir De Qualquer Maneira"
#: editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr ""
+msgstr "Qual ação deve ser tomada?"
#: editor/dependency_editor.cpp
msgid "Fix Dependencies"
-msgstr ""
+msgstr "Corrigir as dependências"
#: editor/dependency_editor.cpp
msgid "Errors loading!"
-msgstr ""
+msgstr "Erros ao carregar!"
#: editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
+msgstr "Eliminar permanentemente o item (ns) %d? (Sem desfazer!)"
#: editor/dependency_editor.cpp
msgid "Owns"
-msgstr ""
+msgstr "Possui"
#: editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr ""
+msgstr "Recursos sem posse explícita:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr ""
+msgstr "Explorador de Recursos Órfãos"
#: editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr ""
+msgstr "Apagar arquivos selecionados?"
#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
#: editor/editor_node.cpp editor/filesystem_dock.cpp
#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
msgid "Delete"
-msgstr ""
+msgstr "Eliminar"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Alterar chave de dicionário"
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "Alterar o valor do dicionário"
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
-msgstr ""
+msgstr "Agradecimentos da Comunidade Godot!"
#: editor/editor_about.cpp
msgid "Thanks!"
-msgstr ""
+msgstr "Obrigado!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Contribuidores da engine Godot"
#: editor/editor_about.cpp
msgid "Project Founders"
-msgstr ""
+msgstr "Fundadores do projeto"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr ""
+msgstr "Desenvolvedor-chefe"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr ""
+msgstr "Gestor de Projecto"
#: editor/editor_about.cpp
msgid "Developers"
-msgstr ""
+msgstr "Desenvolvedores"
#: editor/editor_about.cpp
msgid "Authors"
-msgstr ""
+msgstr "Autores"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Patrocinadores Platinum"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Patrocinadores Gold"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Patrocinadores Mini"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Doadores Gold"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Doadores Silver"
#: editor/editor_about.cpp
msgid "Bronze Donors"
-msgstr ""
+msgstr "Doadores Bronze"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Doadores"
#: editor/editor_about.cpp
msgid "License"
-msgstr ""
+msgstr "Licença"
#: editor/editor_about.cpp
msgid "Thirdparty License"
-msgstr ""
+msgstr "Licença de Terceiros"
#: editor/editor_about.cpp
msgid ""
@@ -777,57 +809,61 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"O Godot Engine conta com várias bibliotecas de bibliotecas abertas e "
+"gratuitas de terceiros, todas compatíveis com os termos de sua licença MIT. "
+"A lista seguinte, é uma lista exaustiva de todos esses componentes de "
+"terceiros com suas respectivas declarações de direitos autorais e termos de "
+"licença."
#: editor/editor_about.cpp
msgid "All Components"
-msgstr ""
+msgstr "Todos os Componentes"
#: editor/editor_about.cpp
msgid "Components"
-msgstr ""
+msgstr "Componentes"
#: editor/editor_about.cpp
msgid "Licenses"
-msgstr ""
+msgstr "Licenças"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "Error ao abrir ficheiro comprimido, não está no formato zip."
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
-msgstr ""
+msgstr "Descompactando Activos"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr ""
+msgstr "Pacote Instalado com Sucesso!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "Sucesso!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Install"
-msgstr ""
+msgstr "Instalar"
#: editor/editor_asset_installer.cpp
msgid "Package Installer"
-msgstr ""
+msgstr "Instalador de Pacotes"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
-msgstr ""
+msgstr "Altifalantes"
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
-msgstr ""
+msgstr "Adicionar Efeito"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "Alterar nome da Função"
+msgstr "Alterar Barramento de Ãudio"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
@@ -847,16 +883,15 @@ msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "Adicionar Efeito de Barramento de Ãudio"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "Mover Efeito de Barramento"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "Apagar Seleccionados"
+msgstr "Apagar Efeito de Barramento"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
@@ -864,155 +899,160 @@ msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr ""
+msgstr "Solo"
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Mudo"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr ""
+msgstr "Ignorar"
#: editor/editor_audio_buses.cpp
msgid "Bus options"
-msgstr ""
+msgstr "Opções de barramento"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr ""
+msgstr "Duplicado"
#: editor/editor_audio_buses.cpp
msgid "Reset Volume"
-msgstr ""
+msgstr "Restabelecer Volume"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "Apagar Seleccionados"
+msgstr "Apagar Efeito"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus"
-msgstr ""
+msgstr "Adicionar Barramento de Ãudio"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "O barramento principal não pode ser removido!"
#: editor/editor_audio_buses.cpp
msgid "Delete Audio Bus"
-msgstr ""
+msgstr "Apagar Barramento de Ãudio"
#: editor/editor_audio_buses.cpp
msgid "Duplicate Audio Bus"
-msgstr ""
+msgstr "Barramento de Ãudio Duplicado"
#: editor/editor_audio_buses.cpp
msgid "Reset Bus Volume"
-msgstr ""
+msgstr "Restabelecer Volume do Barramento"
#: editor/editor_audio_buses.cpp
msgid "Move Audio Bus"
-msgstr ""
+msgstr "Mover Barramento de Ãudio"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
-msgstr ""
+msgstr "Guardar Modelo de Barramento de Ãudio Como.."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout.."
-msgstr ""
+msgstr "Localização para o Novo Modelo.."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "Abrir Modelo de Barramento de Ãudio"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "O ficheiro 'res://default_bus_layout.tres' não existe."
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
-msgstr ""
+msgstr "Ficheiro inválido, não é um modelo válido de barramento de áudio."
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
-msgstr ""
+msgstr "Adicionar Barramento"
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr ""
+msgstr "Criar um novo Modelo de Barramento."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Load"
-msgstr ""
+msgstr "Carregar"
#: editor/editor_audio_buses.cpp
msgid "Load an existing Bus Layout."
-msgstr ""
+msgstr "Carregar um Modelo de Barramento existente."
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr ""
+msgstr "Guardar Como"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "Guardar este Modelo de Barramento para um ficheiro."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
msgid "Load Default"
-msgstr ""
+msgstr "Carregar Padrão"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "Carregar o Modelo padrão de Barramento."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
-msgstr ""
+msgstr "Nome inválido."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
-msgstr ""
+msgstr "Caracteres válidos:"
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing engine class name."
msgstr ""
+"Nome inválido. Não pode coincidir com um nome de uma classe do motor, já "
+"existente."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing buit-in type name."
msgstr ""
+"Nome inválido. Não pode coincidir com um nome de um tipo incorporado, já "
+"existente."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
+"Nome inválido. Não pode coincidir com um nome de uma constante global, já "
+"existente."
#: editor/editor_autoload_settings.cpp
msgid "Invalid Path."
-msgstr ""
+msgstr "Caminho Inválido."
#: editor/editor_autoload_settings.cpp
msgid "File does not exist."
-msgstr ""
+msgstr "O ficheiro não existe."
#: editor/editor_autoload_settings.cpp
msgid "Not in resource path."
-msgstr ""
+msgstr "Não está no caminho do recurso."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr ""
+msgstr "Adicionar Carregamento Automático"
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "Carregamento Automático '%s' já existe!"
#: editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "Renomear Carregamento Automático"
#: editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
@@ -1020,153 +1060,153 @@ msgstr ""
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr ""
+msgstr "Mover Carregamento Automático"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
-msgstr ""
+msgstr "Remover Carregamento Automático"
#: editor/editor_autoload_settings.cpp
msgid "Enable"
-msgstr ""
+msgstr "Habilitar"
#: editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
-msgstr ""
+msgstr "Reorganizar Carregamentos Automáticos"
#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
#: scene/gui/file_dialog.cpp
msgid "Path:"
-msgstr ""
+msgstr "Caminho:"
#: editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr ""
+msgstr "Nome do Nó:"
#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
msgid "Name"
-msgstr ""
+msgstr "Nome"
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Singleton"
-msgstr ""
+msgstr "Filho Único"
#: editor/editor_autoload_settings.cpp
msgid "List:"
-msgstr ""
+msgstr "Lista:"
#: editor/editor_data.cpp
msgid "Updating Scene"
-msgstr ""
+msgstr "Actualizando a Cena"
#: editor/editor_data.cpp
msgid "Storing local changes.."
-msgstr ""
+msgstr "Armazenando alterações locais.."
#: editor/editor_data.cpp
msgid "Updating scene.."
-msgstr ""
+msgstr "Actualizando a cena.."
#: editor/editor_dir_dialog.cpp
msgid "Please select a base directory first"
-msgstr ""
+msgstr "Por favor, seleccione a directoria base primeiro"
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
-msgstr ""
+msgstr "Escolha uma Directoria"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
msgid "Create Folder"
-msgstr ""
+msgstr "Criar Pasta/Directoria"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
#: scene/gui/file_dialog.cpp
msgid "Name:"
-msgstr ""
+msgstr "Nome:"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
msgid "Could not create folder."
-msgstr ""
+msgstr "Não foi possível criar pasta."
#: editor/editor_dir_dialog.cpp
msgid "Choose"
-msgstr ""
+msgstr "Escolha"
#: editor/editor_export.cpp
msgid "Storing File:"
-msgstr ""
+msgstr "Arquivo de Armazenamento:"
#: editor/editor_export.cpp
msgid "Packing"
-msgstr ""
+msgstr "Empacotamento"
#: editor/editor_export.cpp platform/javascript/export/export.cpp
msgid "Template file not found:\n"
-msgstr ""
+msgstr "Ficheiro modelo não encontrado:\n"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File Exists, Overwrite?"
-msgstr ""
+msgstr "O ficheiro existe, sobrescrever?"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Criar Pasta/Directoria"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
-msgstr ""
+msgstr "Todos Reconhecidos"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Files (*)"
-msgstr ""
-
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr ""
+msgstr "Todos os Ficheiros (*)"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
-msgstr ""
+msgstr "Abrir um Ficheiro"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open File(s)"
-msgstr ""
+msgstr "Abrir Ficheiro(s)"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a Directory"
-msgstr ""
+msgstr "Abrir uma Directoria"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File or Directory"
-msgstr ""
+msgstr "Abrir um Ficheiro ou Directoria"
#: editor/editor_file_dialog.cpp editor/editor_node.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp
msgid "Save"
-msgstr ""
+msgstr "Guardar"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Save a File"
-msgstr ""
+msgstr "Guardar um Ficheiro"
#: editor/editor_file_dialog.cpp
msgid "Go Back"
-msgstr ""
+msgstr "Voltar"
#: editor/editor_file_dialog.cpp
msgid "Go Forward"
-msgstr ""
+msgstr "Avançar"
#: editor/editor_file_dialog.cpp
msgid "Go Up"
-msgstr ""
+msgstr "Subir"
#: editor/editor_file_dialog.cpp
msgid "Refresh"
-msgstr ""
+msgstr "Actualizar"
#: editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
@@ -1186,32 +1226,32 @@ msgstr ""
#: editor/editor_file_dialog.cpp
msgid "Move Favorite Up"
-msgstr ""
+msgstr "Mover Favorito para Cima"
#: editor/editor_file_dialog.cpp
msgid "Move Favorite Down"
-msgstr ""
+msgstr "Mover Favorito para Baixo"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr ""
+msgstr "Ir para a pasta acima"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
-msgstr ""
+msgstr "Directorias e Ficheiros:"
#: editor/editor_file_dialog.cpp
msgid "Preview:"
-msgstr ""
+msgstr "Visualização prévia:"
#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
#: scene/gui/file_dialog.cpp
msgid "File:"
-msgstr ""
+msgstr "Ficheiro:"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Must use a valid extension."
-msgstr ""
+msgstr "Deve usar uma extensão válida."
#: editor/editor_file_system.cpp
msgid "ScanSources"
@@ -1219,45 +1259,44 @@ msgstr ""
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
-msgstr ""
+msgstr "Importar Activos"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
-msgstr ""
+msgstr "Procurar em Ajuda"
#: editor/editor_help.cpp
msgid "Class List:"
-msgstr ""
+msgstr "Lista de Classes:"
#: editor/editor_help.cpp
msgid "Search Classes"
-msgstr ""
+msgstr "Procurar Classes"
#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Top"
-msgstr ""
+msgstr "Topo"
#: editor/editor_help.cpp editor/property_editor.cpp
msgid "Class:"
-msgstr ""
+msgstr "Classe:"
#: editor/editor_help.cpp editor/scene_tree_editor.cpp
msgid "Inherits:"
-msgstr ""
+msgstr "Herdar:"
#: editor/editor_help.cpp
msgid "Inherited by:"
-msgstr ""
+msgstr "Herdado por:"
#: editor/editor_help.cpp
msgid "Brief Description:"
-msgstr ""
+msgstr "Breve Descrição:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Membros:"
+msgstr "Membros"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
@@ -1265,11 +1304,11 @@ msgstr "Membros:"
#: editor/editor_help.cpp
msgid "Public Methods"
-msgstr ""
+msgstr "Métodos Públicos"
#: editor/editor_help.cpp
msgid "Public Methods:"
-msgstr ""
+msgstr "Métodos Públicos:"
#: editor/editor_help.cpp
msgid "GUI Theme Items"
@@ -1284,174 +1323,179 @@ msgid "Signals:"
msgstr "Sinais:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Funções:"
+msgstr "Enumerações"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations:"
-msgstr "Funções:"
+msgstr "Enumerações:"
#: editor/editor_help.cpp
msgid "enum "
-msgstr ""
+msgstr "enum "
#: editor/editor_help.cpp
msgid "Constants"
-msgstr ""
+msgstr "Constantes"
#: editor/editor_help.cpp
msgid "Constants:"
-msgstr ""
+msgstr "Constantes:"
#: editor/editor_help.cpp
msgid "Description"
-msgstr ""
+msgstr "Descrição"
#: editor/editor_help.cpp
msgid "Properties"
-msgstr ""
+msgstr "Propriedades"
#: editor/editor_help.cpp
msgid "Property Description:"
-msgstr ""
+msgstr "Descrição da Propriedade:"
#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Actualmente não existe descrição para esta propriedade. Por favor ajude-nos "
+"[color=$color][url=$url]contribuindo com uma[/url][/color]!"
#: editor/editor_help.cpp
msgid "Methods"
-msgstr ""
+msgstr "Métodos"
#: editor/editor_help.cpp
msgid "Method Description:"
-msgstr ""
+msgstr "Descrição do Método:"
#: editor/editor_help.cpp
msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Actualmente não existe descrição para este método. Por favor ajude-nos "
+"[color=$color][url=$url]contribuindo com uma[/url][/color]!"
#: editor/editor_help.cpp
msgid "Search Text"
-msgstr ""
+msgstr "Texto de Pesquisa"
#: editor/editor_log.cpp
msgid "Output:"
-msgstr ""
+msgstr "Saída:"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Clear"
-msgstr ""
+msgstr "Limpar"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Error saving resource!"
-msgstr ""
+msgstr "Erro ao guardar recurso!"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Save Resource As.."
-msgstr ""
+msgstr "Guardar Recurso Como.."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "I see.."
-msgstr ""
+msgstr "Eu vejo.."
#: editor/editor_node.cpp
msgid "Can't open file for writing:"
-msgstr ""
+msgstr "Não é possível abrir o ficheiro para escrita:"
#: editor/editor_node.cpp
msgid "Requested file format unknown:"
-msgstr ""
+msgstr "Formato do ficheiro solicitado desconhecido:"
#: editor/editor_node.cpp
msgid "Error while saving."
-msgstr ""
+msgstr "Erro ao guardar."
#: editor/editor_node.cpp
msgid "Can't open '%s'."
-msgstr ""
+msgstr "Não foi possível abrir '%s'."
#: editor/editor_node.cpp
+#, fuzzy
msgid "Error while parsing '%s'."
-msgstr ""
+msgstr "Erro ao analisar '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "Fim de ficheiro '%s' inesperado."
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
-msgstr ""
+msgstr "Falta '%s' ou as suas dependências."
#: editor/editor_node.cpp
msgid "Error while loading '%s'."
-msgstr ""
+msgstr "Erro ao carregar '%s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
-msgstr ""
+msgstr "Guardando Cena"
#: editor/editor_node.cpp
msgid "Analyzing"
-msgstr ""
+msgstr "Analizando"
#: editor/editor_node.cpp
msgid "Creating Thumbnail"
-msgstr ""
+msgstr "Criando Miniatura"
#: editor/editor_node.cpp
msgid "This operation can't be done without a tree root."
-msgstr ""
+msgstr "Esta operação não pode ser feita sem uma raiz da árvore."
#: editor/editor_node.cpp
msgid ""
"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
msgstr ""
+"Não foi possível guardar cena. Provavelmente, as dependências (instâncias) "
+"não puderam ser satisfeitas."
#: editor/editor_node.cpp
msgid "Failed to load resource."
-msgstr ""
+msgstr "Falha ao carregar recurso."
#: editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
-msgstr ""
+msgstr "Não foi possível carregar MeshLibrary para fundir!"
#: editor/editor_node.cpp
msgid "Error saving MeshLibrary!"
-msgstr ""
+msgstr "Erro ao guardar MeshLibrary!"
#: editor/editor_node.cpp
msgid "Can't load TileSet for merging!"
-msgstr ""
+msgstr "Não foi possível carregar TileSet para fundir!"
#: editor/editor_node.cpp
msgid "Error saving TileSet!"
-msgstr ""
+msgstr "Erro ao guardar TileSet!"
#: editor/editor_node.cpp
msgid "Error trying to save layout!"
-msgstr ""
+msgstr "Erro ao tentar guardar o modelo!"
#: editor/editor_node.cpp
msgid "Default editor layout overridden."
-msgstr ""
+msgstr "O modelo do editor padrão foi substituído."
#: editor/editor_node.cpp
msgid "Layout name not found!"
-msgstr ""
+msgstr "Nome do modelo não encontrado!"
#: editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr ""
+msgstr "Modelo padrão restaurado para as configurações base."
#: editor/editor_node.cpp
msgid ""
@@ -1459,18 +1503,26 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Este recurso pertence a uma cena que foi importado, portanto, não é "
+"editável.\n"
+"Por favor, leia a documentação relevante sobre importação de cenas, para um "
+"melhor entendimento deste fluxo de trabalho."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Este recurso pertence a uma cena que foi instanciada ou herdada.\n"
+"As alterações ao mesmo não serão mantidas, ao guardar a cena actual."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Este recurso foi importado, portanto, não é editável. Altere as suas "
+"configurações no painel de importação e então importe de novo."
#: editor/editor_node.cpp
msgid ""
@@ -1479,38 +1531,65 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Esta cena foi importada, portanto, as alterações à mesma não serão "
+"mantidas.\n"
+"Instanciando-a ou herdando-a vai permitir efectuar alterções à mesma.\n"
+"Por favor, leia a documentação relevante sobre importação de cenas, para um "
+"melhor entendimento do fluxo de trabalho."
#: editor/editor_node.cpp
-msgid "Copy Params"
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
msgstr ""
+"Este é um objecto remoto, portanto, as alterações ao mesmo não serão "
+"mantidas.\n"
+"Por favor, leia a documentação relevante sobre depuração para um melhor "
+"entendimento deste fluxo de trabalho."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Expandir tudo"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Colapsar tudo"
+
+#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Copiar Parâmetros"
#: editor/editor_node.cpp
msgid "Paste Params"
-msgstr ""
+msgstr "Colar Parâmetros"
#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Paste Resource"
-msgstr ""
+msgstr "Colar Recurso"
#: editor/editor_node.cpp
msgid "Copy Resource"
-msgstr ""
+msgstr "Copiar Recurso"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Make Built-In"
-msgstr ""
+msgstr "Tornar Embutido"
#: editor/editor_node.cpp
msgid "Make Sub-Resources Unique"
-msgstr ""
+msgstr "Tornar sub-recursos únicos"
#: editor/editor_node.cpp
msgid "Open in Help"
-msgstr ""
+msgstr "Abrir em Ajuda"
#: editor/editor_node.cpp
msgid "There is no defined scene to run."
-msgstr ""
+msgstr "Não existe nenhuma cena definida para executar."
#: editor/editor_node.cpp
msgid ""
@@ -1518,6 +1597,9 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"Não foi definida nenhuma cena principal. Seleccionar uma?\n"
+"Poderá alterá-la depois nas \"Definições de Projecto\", na categoria "
+"'aplicação'."
#: editor/editor_node.cpp
msgid ""
@@ -1525,6 +1607,9 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"A cena seleccionada '%s' não existe, seleccionar uma válida?\n"
+"Poderá alterá-la depois em \"Configurações de Projecto\", na categoria de "
+"'aplicação'."
#: editor/editor_node.cpp
msgid ""
@@ -1532,124 +1617,137 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"A cena seleccionada '%s' não é um ficheiro de cena, seleccionar um ficheiro "
+"válido?\n"
+"Poderá alterá-la depois em \"Configurações de Projecto\", na categoria de "
+"'aplicação'."
#: editor/editor_node.cpp
msgid "Current scene was never saved, please save it prior to running."
msgstr ""
+"A cena actual nunca foi guardada, por favor guarde-a antes de executar."
#: editor/editor_node.cpp
msgid "Could not start subprocess!"
-msgstr ""
+msgstr "Não foi possível iniciar o subprocesso!"
#: editor/editor_node.cpp
msgid "Open Scene"
-msgstr ""
+msgstr "Abrir Cena"
#: editor/editor_node.cpp
msgid "Open Base Scene"
-msgstr ""
+msgstr "Abrir Cena Base"
#: editor/editor_node.cpp
msgid "Quick Open Scene.."
-msgstr ""
+msgstr "Abrir Cena de forma rápida.."
#: editor/editor_node.cpp
msgid "Quick Open Script.."
-msgstr ""
+msgstr "Abrir Script de forma rápida.."
#: editor/editor_node.cpp
msgid "Save & Close"
-msgstr ""
+msgstr "Guardar & Fechar"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "Guardar alterações a '%s' antes de fechar?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr ""
+msgstr "Guardar Cena Como.."
#: editor/editor_node.cpp
msgid "No"
-msgstr ""
+msgstr "Não"
#: editor/editor_node.cpp
msgid "Yes"
-msgstr ""
+msgstr "Sim"
#: editor/editor_node.cpp
msgid "This scene has never been saved. Save before running?"
-msgstr ""
+msgstr "Esta cena nunca foi guardada. Guardar antes de executar?"
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr ""
+msgstr "Esta operação não pode ser efectuada sem uma cena."
#: editor/editor_node.cpp
msgid "Export Mesh Library"
-msgstr ""
+msgstr "Exportar Biblioteca de Mesh"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Esta operação não pode ser efectuada sem um nó raíz."
#: editor/editor_node.cpp
msgid "Export Tile Set"
-msgstr ""
+msgstr "Exportar Tile Set"
#: editor/editor_node.cpp
msgid "This operation can't be done without a selected node."
-msgstr ""
+msgstr "Esta operação não pode ser efectuada sem um nó seleccionado."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
-msgstr ""
+msgstr "A cena actual não foi guardada. Abrir na mesma?"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
-msgstr ""
+msgstr "Não é possível recarregar uma cena que nunca foi guardada."
#: editor/editor_node.cpp
msgid "Revert"
-msgstr ""
+msgstr "Reverter"
#: editor/editor_node.cpp
msgid "This action cannot be undone. Revert anyway?"
-msgstr ""
+msgstr "Esta acção não pode ser desfeita. Reverter na mesma?"
#: editor/editor_node.cpp
msgid "Quick Run Scene.."
-msgstr ""
+msgstr "Executar Cena de forma rápida.."
#: editor/editor_node.cpp
msgid "Quit"
-msgstr ""
+msgstr "Sair"
#: editor/editor_node.cpp
msgid "Exit the editor?"
-msgstr ""
+msgstr "Sair do editor?"
#: editor/editor_node.cpp
msgid "Open Project Manager?"
-msgstr ""
+msgstr "Abrir Gestor de Projecto?"
#: editor/editor_node.cpp
msgid "Save & Quit"
-msgstr ""
+msgstr "Guardar & Sair"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "Guardar alterações da(s) seguinte(s) cena(s) antes de sair?"
#: editor/editor_node.cpp
msgid "Save changes the following scene(s) before opening Project Manager?"
msgstr ""
+"Guardar alterações da(s) seguinte(s) cena(s) antes de abrir o Gestor de "
+"Projecto?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Esta opção foi descontinuada. Situações onde a actualização tem que ser "
+"forçada, são agora consideras um defeito. Por favor, reporte."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
-msgstr ""
+msgstr "Escolha a Cena Principal"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
@@ -1681,7 +1779,7 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Ugh"
-msgstr ""
+msgstr "Ugh"
#: editor/editor_node.cpp
msgid ""
@@ -1691,36 +1789,44 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr ""
+msgstr "A Cena '%s' tem dependências não satisfeitas:"
#: editor/editor_node.cpp
msgid "Clear Recent Scenes"
-msgstr ""
+msgstr "Limpar Cenas Recentes"
#: editor/editor_node.cpp
msgid "Save Layout"
-msgstr ""
+msgstr "Guardar Modelo"
#: editor/editor_node.cpp
msgid "Delete Layout"
-msgstr ""
+msgstr "Apagar Modelo"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr ""
+msgstr "Por defeito"
#: editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr ""
+msgstr "Trocar Tab de Cena"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr ""
+msgid "%d more files or folders"
+msgstr "%d mais ficheiros ou directorias"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr ""
+msgid "%d more folders"
+msgstr "%d mais directorias"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d mais ficheiros"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Posição do Painel"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1731,119 +1837,123 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Add a new scene."
+msgstr "Adicionar novas bandas."
+
+#: editor/editor_node.cpp
msgid "Scene"
-msgstr ""
+msgstr "Cena"
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
-msgstr ""
+msgstr "Ir para cena aberta anteriormente."
#: editor/editor_node.cpp
msgid "Next tab"
-msgstr ""
+msgstr "Próxima guia"
#: editor/editor_node.cpp
msgid "Previous tab"
-msgstr ""
+msgstr "Guia anterior"
#: editor/editor_node.cpp
msgid "Filter Files.."
-msgstr ""
+msgstr "Filtrar Ficheiro.."
#: editor/editor_node.cpp
msgid "Operations with scene files."
-msgstr ""
+msgstr "Operações com ficheiros de cena."
#: editor/editor_node.cpp
msgid "New Scene"
-msgstr ""
+msgstr "Nova Cena"
#: editor/editor_node.cpp
msgid "New Inherited Scene.."
-msgstr ""
+msgstr "Nova Cena Herdada.."
#: editor/editor_node.cpp
msgid "Open Scene.."
-msgstr ""
+msgstr "Abrir Cena.."
#: editor/editor_node.cpp
msgid "Save Scene"
-msgstr ""
+msgstr "Guardar Cena"
#: editor/editor_node.cpp
msgid "Save all Scenes"
-msgstr ""
+msgstr "Guardar todas as Cenas"
#: editor/editor_node.cpp
msgid "Close Scene"
-msgstr ""
+msgstr "Fechar Cena"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Open Recent"
-msgstr ""
+msgstr "Abrir Recente"
#: editor/editor_node.cpp
msgid "Convert To.."
-msgstr ""
+msgstr "Converter Para.."
#: editor/editor_node.cpp
msgid "MeshLibrary.."
-msgstr ""
+msgstr "MeshLibrary.."
#: editor/editor_node.cpp
msgid "TileSet.."
-msgstr ""
+msgstr "TileSet.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
-msgstr ""
+msgstr "Desfazer"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
-msgstr ""
+msgstr "Refazer"
#: editor/editor_node.cpp
msgid "Revert Scene"
-msgstr ""
+msgstr "Reverter Cena"
#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr ""
+msgstr "Ferramentas diversas atuantes no projeto ou cena."
#: editor/editor_node.cpp
msgid "Project"
-msgstr ""
+msgstr "Projecto"
#: editor/editor_node.cpp
msgid "Project Settings"
-msgstr ""
+msgstr "Configurações de Projecto"
#: editor/editor_node.cpp
msgid "Run Script"
-msgstr ""
+msgstr "Executar Script"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export"
-msgstr ""
+msgstr "Exportar"
#: editor/editor_node.cpp
msgid "Tools"
-msgstr ""
+msgstr "Ferramentas"
#: editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr ""
+msgstr "Sair para a lista de Projectos"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Debug"
-msgstr ""
+msgstr "Depurar"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr ""
+msgstr "Implementar com Depuração Remota"
#: editor/editor_node.cpp
msgid ""
@@ -1867,7 +1977,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
-msgstr ""
+msgstr "Formas de Colisão Visíveis"
#: editor/editor_node.cpp
msgid ""
@@ -1877,7 +1987,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr ""
+msgstr "Navegação Visível"
#: editor/editor_node.cpp
msgid ""
@@ -1887,7 +1997,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Sync Scene Changes"
-msgstr ""
+msgstr "Sincronizar Alterações de Cena"
#: editor/editor_node.cpp
msgid ""
@@ -1899,7 +2009,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Sync Script Changes"
-msgstr ""
+msgstr "Sincronizar Alterações de Script"
#: editor/editor_node.cpp
msgid ""
@@ -1916,11 +2026,11 @@ msgstr "Editar"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr ""
+msgstr "Configurações do Editor"
#: editor/editor_node.cpp
msgid "Editor Layout"
-msgstr ""
+msgstr "Apresentação do Editor"
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
@@ -1928,75 +2038,75 @@ msgstr ""
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Manage Export Templates"
-msgstr ""
+msgstr "Gerir Modelos de Exportação"
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "Ajuda"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
-msgstr ""
+msgstr "Classes"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Online Docs"
-msgstr ""
+msgstr "Documentação Online"
#: editor/editor_node.cpp
msgid "Q&A"
-msgstr ""
+msgstr "Perguntas & Respostas"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "Rastreador de Problemas"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr ""
+msgstr "Comunidade"
#: editor/editor_node.cpp
msgid "About"
-msgstr ""
+msgstr "Sobre"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr ""
+msgstr "Executar o projecto."
#: editor/editor_node.cpp
msgid "Play"
-msgstr ""
+msgstr "Executar"
#: editor/editor_node.cpp
msgid "Pause the scene"
-msgstr ""
+msgstr "Pausar a cena"
#: editor/editor_node.cpp
msgid "Pause Scene"
-msgstr ""
+msgstr "Pausar a Cena"
#: editor/editor_node.cpp
msgid "Stop the scene."
-msgstr ""
+msgstr "Para a cena."
#: editor/editor_node.cpp
msgid "Stop"
-msgstr ""
+msgstr "Parar"
#: editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr ""
+msgstr "Executar a cena editada."
#: editor/editor_node.cpp
msgid "Play Scene"
-msgstr ""
+msgstr "Executar a Cena"
#: editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "Executar a cena customizada"
#: editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "Executar Cena Customizada"
#: editor/editor_node.cpp
msgid "Spins when the editor window repaints!"
@@ -2004,11 +2114,11 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Update Always"
-msgstr ""
+msgstr "Actualizar Sempre"
#: editor/editor_node.cpp
msgid "Update Changes"
-msgstr ""
+msgstr "Actualizar Alterações"
#: editor/editor_node.cpp
msgid "Disable Update Spinner"
@@ -2016,124 +2126,124 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Inspector"
-msgstr ""
+msgstr "Inspector"
#: editor/editor_node.cpp
msgid "Create a new resource in memory and edit it."
-msgstr ""
+msgstr "Crie um novo recurso em memória edite-o."
#: editor/editor_node.cpp
msgid "Load an existing resource from disk and edit it."
-msgstr ""
+msgstr "Carregue um recurso existente a partir do disco e edite-o."
#: editor/editor_node.cpp
msgid "Save the currently edited resource."
-msgstr ""
+msgstr "Guarde o recurso editado."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Save As.."
-msgstr ""
+msgstr "Guardar Como.."
#: editor/editor_node.cpp
msgid "Go to the previous edited object in history."
-msgstr ""
+msgstr "Ir para o objecto editado anteriormente no histórico."
#: editor/editor_node.cpp
msgid "Go to the next edited object in history."
-msgstr ""
+msgstr "Ir para o próximo objecto editado no histórico."
#: editor/editor_node.cpp
msgid "History of recently edited objects."
-msgstr ""
+msgstr "Histórico de objectos recentemente editados."
#: editor/editor_node.cpp
msgid "Object properties."
-msgstr ""
+msgstr "Propriedades do objecto."
#: editor/editor_node.cpp
msgid "Changes may be lost!"
-msgstr ""
+msgstr "As alterações podem ser perdidas!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "Importar"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr ""
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
-msgstr ""
+msgstr "Nó"
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Sistema de Ficheiros"
#: editor/editor_node.cpp
msgid "Output"
-msgstr ""
+msgstr "Saída"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "Não Guardar"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr ""
+msgstr "Importar Modelos a partir de um ficheiro ZIP"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export Project"
-msgstr ""
+msgstr "Exportar Projecto"
#: editor/editor_node.cpp
msgid "Export Library"
-msgstr ""
+msgstr "Exportar Biblioteca"
#: editor/editor_node.cpp
msgid "Merge With Existing"
-msgstr ""
+msgstr "Fundir com o Existente"
#: editor/editor_node.cpp
msgid "Password:"
-msgstr ""
+msgstr "Senha:"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
-msgstr ""
+msgstr "Abrir & Executar um Script"
#: editor/editor_node.cpp
msgid "New Inherited"
-msgstr ""
+msgstr "Novo Herdado"
#: editor/editor_node.cpp
msgid "Load Errors"
-msgstr ""
+msgstr "Carregar Erros"
#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Select"
-msgstr ""
+msgstr "Seleccionar"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
-msgstr ""
+msgstr "Abrir Editor 2D"
#: editor/editor_node.cpp
msgid "Open 3D Editor"
-msgstr ""
+msgstr "Abrir Editor 3D"
#: editor/editor_node.cpp
msgid "Open Script Editor"
-msgstr ""
+msgstr "Abrir Editor de Scripts"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr ""
+msgstr "Abrir Biblioteca de Activos"
#: editor/editor_node.cpp
msgid "Open the next Editor"
-msgstr ""
+msgstr "Abrir o Editor seguinte"
#: editor/editor_node.cpp
msgid "Open the previous Editor"
-msgstr ""
+msgstr "Abrir o Editor anterior"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -2141,28 +2251,28 @@ msgstr ""
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
-msgstr ""
+msgstr "Miniatura.."
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr ""
+msgstr "Plugins Instalados:"
#: editor/editor_plugin_settings.cpp
msgid "Update"
-msgstr ""
+msgstr "Actualizar"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Version:"
-msgstr ""
+msgstr "Versão:"
#: editor/editor_plugin_settings.cpp
msgid "Author:"
-msgstr ""
+msgstr "Autor:"
#: editor/editor_plugin_settings.cpp
msgid "Status:"
-msgstr ""
+msgstr "Estado:"
#: editor/editor_profiler.cpp
msgid "Stop Profiling"
@@ -2174,43 +2284,43 @@ msgstr ""
#: editor/editor_profiler.cpp
msgid "Measure:"
-msgstr ""
+msgstr "Medida:"
#: editor/editor_profiler.cpp
msgid "Frame Time (sec)"
-msgstr ""
+msgstr "Tempo de Quadro (seg)"
#: editor/editor_profiler.cpp
msgid "Average Time (sec)"
-msgstr ""
+msgstr "Tempo Médio (seg)"
#: editor/editor_profiler.cpp
msgid "Frame %"
-msgstr ""
+msgstr "% Quadro"
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
-msgstr ""
+msgstr "% Quadro de Física"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
-msgstr ""
+msgstr "Tempo:"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr ""
+msgstr "Inclusivo"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr ""
+msgstr "Auto"
#: editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr ""
+msgstr "# quadro:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Seleccionar dispositivo da lista"
#: editor/editor_run_native.cpp
msgid ""
@@ -2220,43 +2330,43 @@ msgstr ""
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr ""
+msgstr "Escreva a sua lógica no método _run()."
#: editor/editor_run_script.cpp
msgid "There is an edited scene already."
-msgstr ""
+msgstr "Já existe uma cena editada."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr ""
+msgstr "Não foi possível instanciar o script:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
-msgstr ""
+msgstr "Esqueceu-se da palavra chave 'tool'?"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
-msgstr ""
+msgstr "Não foi possível executar o script:"
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
-msgstr ""
+msgstr "Esqueceu-se do médodo '_run'?"
#: editor/editor_settings.cpp
msgid "Default (Same as Editor)"
-msgstr ""
+msgstr "Por defeito (Mesmo que o Editor)"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr ""
+msgstr "Seleccionar Nó(s) para Importar"
#: editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr ""
+msgstr "Caminho da Cena:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr ""
+msgstr "Importar do Nó:"
#: editor/export_template_manager.cpp
msgid "Re-Download"
@@ -2264,81 +2374,193 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Uninstall"
-msgstr ""
+msgstr "Desinstalar"
#: editor/export_template_manager.cpp
msgid "(Installed)"
-msgstr ""
+msgstr "(Instalado)"
#: editor/export_template_manager.cpp
msgid "Download"
-msgstr ""
+msgstr "Download"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(Em Falta)"
#: editor/export_template_manager.cpp
msgid "(Current)"
+msgstr "(Actual)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
msgstr ""
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "Remover versão de modelo '%s'?"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
-msgstr ""
+msgstr "Não foi possível abrir o zip de modelos."
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "Formato de version.txt inválido, dentro dos modelos."
#: editor/export_template_manager.cpp
msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
msgstr ""
+"Formato de version.txt inválido, dentro dos modelos. Revisão não é um "
+"identificador válido."
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "Não foi encontrado version.txt dentro dos modelos."
#: editor/export_template_manager.cpp
msgid "Error creating path for templates:\n"
-msgstr ""
+msgstr "Erro ao criar o caminho para os modelos:\n"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
-msgstr ""
+msgstr "A Extrair os Modelos de Exportação"
#: editor/export_template_manager.cpp
msgid "Importing:"
+msgstr "Importando:"
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
msgstr ""
+"Não foram encontrados ligações para download para esta versão. Download "
+"directo está apenas disponível para os lançamentos oficiais."
#: editor/export_template_manager.cpp
-msgid "Current Version:"
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Não foi possível resolver."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Não foi possível conectar."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Sem resposta."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Pedido falhado."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
msgstr ""
#: editor/export_template_manager.cpp
-msgid "Installed Versions:"
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Falhou:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Não foi possível escrever o ficheiro."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Download Completo."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
msgstr ""
#: editor/export_template_manager.cpp
-msgid "Install From File"
+msgid "Connecting to Mirror.."
msgstr ""
#: editor/export_template_manager.cpp
#, fuzzy
+msgid "Disconnected"
+msgstr "Discreto"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "A resolver"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Não foi possível resolver"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "A ligar.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Nºao foi possível conectar"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Ligado"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Erro de Ligação"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr "Versão Actual:"
+
+#: editor/export_template_manager.cpp
+msgid "Installed Versions:"
+msgstr "Versões Instaladas:"
+
+#: editor/export_template_manager.cpp
+msgid "Install From File"
+msgstr "Instalar do Ficheiro"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Remove Template"
msgstr "Remover Variável"
#: editor/export_template_manager.cpp
msgid "Select template file"
-msgstr ""
+msgstr "Seleccionar ficheiro de modelo"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
+msgstr "Exportar Gestor de Modelos"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Remover Variável"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
msgstr ""
#: editor/file_type_cache.cpp
@@ -2346,64 +2568,61 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Visualizar itens como uma grelha de miniaturas"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Visualizar itens como uma lista"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-msgid ""
"\n"
-"Source: "
-msgstr ""
+"Estado: A importação do ficheiro falhou. Corrija o ficheiro e importe "
+"manualmente."
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
-msgstr ""
+msgstr "Não foi possível mover/renomear raíz dos recursos."
#: editor/filesystem_dock.cpp
msgid "Cannot move a folder into itself.\n"
-msgstr ""
+msgstr "Não pode mover uma pasta para si mesma.\n"
#: editor/filesystem_dock.cpp
msgid "Error moving:\n"
-msgstr ""
+msgstr "Erro ao mover:\n"
#: editor/filesystem_dock.cpp
msgid "Unable to update dependencies:\n"
-msgstr ""
+msgstr "Não foi possível actualizar as dependências:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "Nenhum nome foi fornecido"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "O nome contém caracteres inválidos"
#: editor/filesystem_dock.cpp
msgid "No name provided."
-msgstr ""
+msgstr "Nome não fornecido."
#: editor/filesystem_dock.cpp
msgid "Name contains invalid characters."
-msgstr ""
+msgstr "O nome contém caracteres inválidos."
#: editor/filesystem_dock.cpp
msgid "A file or folder with this name already exists."
-msgstr ""
+msgstr "Um ficheiro ou directoria já existe com este nome."
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -2412,43 +2631,43 @@ msgstr "Alterar nome da Variável"
#: editor/filesystem_dock.cpp
msgid "Renaming folder:"
-msgstr ""
+msgstr "Renomear directoria:"
#: editor/filesystem_dock.cpp
msgid "Expand all"
-msgstr ""
+msgstr "Expandir tudo"
#: editor/filesystem_dock.cpp
msgid "Collapse all"
-msgstr ""
+msgstr "Colapsar tudo"
#: editor/filesystem_dock.cpp
msgid "Copy Path"
-msgstr ""
+msgstr "Copiar Caminho"
#: editor/filesystem_dock.cpp
msgid "Rename.."
-msgstr ""
+msgstr "Renomear.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
-msgstr ""
+msgstr "Mover para.."
#: editor/filesystem_dock.cpp
msgid "New Folder.."
-msgstr ""
+msgstr "Nova Directoria.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
-msgstr ""
+msgstr "Mostrar no Gestor de Ficheiros"
#: editor/filesystem_dock.cpp
msgid "Instance"
-msgstr ""
+msgstr "Instância"
#: editor/filesystem_dock.cpp
msgid "Edit Dependencies.."
-msgstr ""
+msgstr "Editar Dependências.."
#: editor/filesystem_dock.cpp
msgid "View Owners.."
@@ -2456,11 +2675,11 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Previous Directory"
-msgstr ""
+msgstr "Directoria anterior"
#: editor/filesystem_dock.cpp
msgid "Next Directory"
-msgstr ""
+msgstr "Directoria seguinte"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
@@ -2473,82 +2692,85 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Instance the selected scene(s) as child of the selected node."
msgstr ""
+"Instancie a(s) cena(s) seleccionada(s) como filha(s) do nó seleccionado."
#: editor/filesystem_dock.cpp
msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
+"Analisando Ficheiros,\n"
+"Espere, por favor.."
#: editor/filesystem_dock.cpp
msgid "Move"
-msgstr ""
+msgstr "Mover"
#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Rename"
-msgstr ""
+msgstr "Renomear"
#: editor/groups_editor.cpp
msgid "Add to Group"
-msgstr ""
+msgstr "Adicionar ao Grupo"
#: editor/groups_editor.cpp
msgid "Remove from Group"
-msgstr ""
+msgstr "Remover do Grupo"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
-msgstr ""
+msgstr "Importar como Cena Única"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr ""
+msgstr "Importar com Animações Separadas"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "Importar com Materiais Separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "Importar com Objectos Separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "Importar com Objectos e Materiais Separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "Importar com Objectos e Animações Separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "Importar com Materiais e Animações Separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "Importar com Objectos, Materiais e Animações Separados"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
-msgstr ""
+msgstr "Importar como Cenas Múltiplas"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "Importar como Cenas e Materiais Múltiplos"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import Scene"
-msgstr ""
+msgstr "Importar Cena"
#: editor/import/resource_importer_scene.cpp
msgid "Importing Scene.."
-msgstr ""
+msgstr "A importar Cena.."
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script.."
-msgstr ""
+msgstr "A executar Script Customizado.."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
@@ -2564,31 +2786,31 @@ msgstr ""
#: editor/import/resource_importer_scene.cpp
msgid "Saving.."
-msgstr ""
+msgstr "A guardar.."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "Definir por defeito para '%s'"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr ""
+msgstr "Limpar por defeito para '%s'"
#: editor/import_dock.cpp
msgid " Files"
-msgstr ""
+msgstr " Ficheiros"
#: editor/import_dock.cpp
msgid "Import As:"
-msgstr ""
+msgstr "Importar Como:"
#: editor/import_dock.cpp editor/property_editor.cpp
msgid "Preset.."
-msgstr ""
+msgstr "Predefinido.."
#: editor/import_dock.cpp
msgid "Reimport"
-msgstr ""
+msgstr "Reimportar"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
@@ -2596,7 +2818,7 @@ msgstr ""
#: editor/node_dock.cpp
msgid "Groups"
-msgstr ""
+msgstr "Grupos"
#: editor/node_dock.cpp
msgid "Select a Node to edit Signals and Groups."
@@ -2605,32 +2827,31 @@ msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Poly"
-msgstr ""
+msgstr "Criar Polígono"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly"
-msgstr ""
+msgstr "Editar Polígono"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Insert Point"
-msgstr ""
+msgstr "Inserir Ponto"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr ""
+msgstr "Editar Polígono (Remover Ponto)"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Remove Poly And Point"
-msgstr ""
+msgstr "Remover Polígono e Ponto"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr ""
+msgid "Create a new polygon from scratch"
+msgstr "Criar um novo polígono de raíz"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2640,48 +2861,53 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Apagar Seleccionados"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr ""
+msgstr "Novo nome da Animação:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
-msgstr ""
+msgstr "Nova Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr ""
+msgstr "Mudar o nome da Animação:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Delete Animation?"
-msgstr ""
+msgstr "Apagar Animação?"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr ""
+msgstr "Remover Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr ""
+msgstr "ERRO: Nome de animação inválido!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr ""
+msgstr "ERRO: O nome da animação já existe!"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr ""
+msgstr "Renomear Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr ""
+msgstr "Adicionar Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
@@ -2693,15 +2919,15 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr ""
+msgstr "Carregar Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr ""
+msgstr "Duplicar Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr ""
+msgstr "ERRO: Sem animação para copiar!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
@@ -2709,15 +2935,15 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
-msgstr ""
+msgstr "Animação Colada"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr ""
+msgstr "Colar Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr ""
+msgstr "ERRO: Sem animação para editar!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
@@ -2784,6 +3010,55 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Descrição"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2975,18 +3250,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -2995,30 +3262,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3047,14 +3298,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3167,6 +3410,36 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Remover Variável"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Remover Variável"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3288,10 +3561,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3342,6 +3621,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3530,6 +3813,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3562,6 +3849,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3577,58 +3868,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4026,16 +4265,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4176,7 +4445,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4221,6 +4489,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4273,6 +4555,10 @@ msgstr ""
msgid "Close All"
msgstr "Fechar"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4283,13 +4569,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4393,33 +4677,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4442,6 +4715,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Apagar Seleccionados"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4487,12 +4777,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4501,7 +4789,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4666,6 +4953,15 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "Transições"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4747,6 +5043,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4779,6 +5079,15 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "Escalar Selecção"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4907,6 +5216,11 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Accionar Breakpoint"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5183,6 +5497,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5356,7 +5674,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5618,6 +5936,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5651,10 +5975,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5777,11 +6097,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6251,6 +6571,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Remover Sinal"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6436,6 +6765,11 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Remover Sinal"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6492,18 +6826,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6635,52 +6957,52 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Tipo de argumento inválido para convert(), use constantes TYPE_*."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
"Número de bytes insuficientes para descodificar, ou o formato é inválido."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "o argumento \"step\" é zero!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Não é um script com uma instância"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Não é baseado num script"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Não é baseado num ficheiro de recurso"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Formato de dicionário de instância inválido (falta @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Formato de dicionário de instância inválido (não foi possível carregar o "
"script em @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Formato de dicionário de instância inválido (script inválido em @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Dicionário de instância inválido (subclasses inválidas)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6694,15 +7016,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6770,12 +7100,9 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+#, fuzzy
+msgid "Clear Selection"
+msgstr "Escalar Selecção"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6906,7 +7233,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6914,7 +7241,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6922,7 +7249,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7105,7 +7432,7 @@ msgstr "Nome de índice propriedade inválido."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr "Objecto de base não é un Nó!"
+msgstr "Objecto de base não é um Nó!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
@@ -7154,11 +7481,20 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+#, fuzzy
+msgid "Invalid export template:\n"
+msgstr "Nome de índice propriedade inválido."
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7250,18 +7586,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7320,6 +7644,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7383,6 +7715,11 @@ msgstr ""
msgid "Please Confirm..."
msgstr ""
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Adicionar propriedade Setter"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7397,6 +7734,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7425,7 +7766,7 @@ msgstr ""
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
-msgstr ""
+msgstr "Tamanho de fonte inválido."
#, fuzzy
#~ msgid "Invalid unique name."
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index 05c164c3ee..0a85fe0477 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -5,17 +5,20 @@
#
# B10nicMachine <shumik1337@gmail.com>, 2017.
# DimOkGamer <dimokgamer@gmail.com>, 2016-2017.
+# Igor S <scorched@bk.ru>, 2017.
# ijet <my-ijet@mail.ru>, 2017.
# Maxim Kim <habamax@gmail.com>, 2016.
# Maxim toby3d Lebedev <mail@toby3d.ru>, 2016.
+# outbools <drag4e@yandex.ru>, 2017.
# pitchblack <pitchblack@mail.ru>, 2017.
+# Sergey Agarkov <zorgsoft@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2017-10-26 14:49+0000\n"
-"Last-Translator: ijet <my-ijet@mail.ru>\n"
+"PO-Revision-Date: 2017-11-22 20:31+0000\n"
+"Last-Translator: outbools <drag4e@yandex.ru>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
"Language: ru\n"
@@ -24,7 +27,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -84,7 +87,7 @@ msgstr "Переименовать дорожку"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr "Изменить интреполÑцию"
+msgstr "Изменить интерполÑцию"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
@@ -107,6 +110,7 @@ msgid "Anim Delete Keys"
msgstr "Удалить ключи"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "Дублировать выделенное"
@@ -250,11 +254,11 @@ msgstr "МаÑштаб анимации."
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "Длинна (Ñек.):"
+msgstr "Длина (Ñек.):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr "Длинна анимации (в Ñекундах)."
+msgstr "Длина анимации (в Ñекундах)."
#: editor/animation_editor.cpp
msgid "Step (s):"
@@ -338,7 +342,7 @@ msgstr "Удалить недопуÑтимые ключи"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr "Удалить не разрешенные и пуÑтые дорожки"
+msgstr "Удалить неразрешённые и пуÑтые дорожки"
#: editor/animation_editor.cpp
msgid "Clean-up all animations"
@@ -358,7 +362,7 @@ msgstr "Изменить размер МаÑÑива"
#: editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr "Изменение типа Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð°ÑÑива"
+msgstr "Изменить тип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð°ÑÑива"
#: editor/array_property_edit.cpp
msgid "Change Array Value"
@@ -642,6 +646,13 @@ msgstr "Редактор завиÑимоÑтей"
msgid "Search Replacement Resource:"
msgstr "Ðайти заменÑемый реÑурÑ:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Открыть"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Владельцы:"
@@ -661,7 +672,7 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr "Ðе удаетÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ:\n"
+msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -714,6 +725,14 @@ msgstr "Удалить выбранные файлы?"
msgid "Delete"
msgstr "Удалить"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Изменить ключ ÑловарÑ"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Изменить значение ÑловарÑ"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "СпаÑибо от ÑообщеÑтва Godot!"
@@ -789,7 +808,7 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
-"Движок godot опираетÑÑ Ð½Ð° Ñ€Ñд Ñторонних беÑплатных и открытых библиотек, "
+"Движок Godot опираетÑÑ Ð½Ð° Ñ€Ñд Ñторонних беÑплатных и открытых библиотек, "
"ÑовмеÑтимых Ñ ÑƒÑловиÑми лицензии MIT. Ðиже приводитÑÑ Ð¸Ñчерпывающий ÑпиÑок "
"вÑех Ñторонних компонентов вмеÑте Ñ Ð¸Ñ… авторÑкими правами и уÑловиÑми "
"лицензионного ÑоглашениÑ."
@@ -808,7 +827,7 @@ msgstr "Лицензии"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr "Ошибка при открытии файла, не в формате zip."
+msgstr "Ошибка при открытии файла пакета, не в формате zip."
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -866,7 +885,7 @@ msgstr "Добавить аудио Ñффект"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr "Передвинуть Ñффект"
+msgstr "Передвинуть Ñффект шины"
#: editor/editor_audio_buses.cpp
msgid "Delete Bus Effect"
@@ -911,7 +930,7 @@ msgstr "Добавить аудио шину"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr "МаÑтер шина не может быть удалена!"
+msgstr "Шина Master не может быть удалена!"
#: editor/editor_audio_buses.cpp
msgid "Delete Audio Bus"
@@ -1132,6 +1151,11 @@ msgid "File Exists, Overwrite?"
msgstr "Файл ÑущеÑтвует, перезапиÑать?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Создать папку"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Ð’Ñе разрешённые"
@@ -1139,12 +1163,6 @@ msgstr "Ð’Ñе разрешённые"
msgid "All Files (*)"
msgstr "Ð’Ñе файлы (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Открыть"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Открыть файл"
@@ -1193,7 +1211,7 @@ msgstr "Скрыть файлы"
#: editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
-msgstr "Добавить в избранное"
+msgstr "Переключить Избранное"
#: editor/editor_file_dialog.cpp
msgid "Toggle Mode"
@@ -1211,7 +1229,7 @@ msgstr "ПеремеÑтить избранное вверх"
msgid "Move Favorite Down"
msgstr "ПеремеÑтить избранное вниз"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr "Перейти к родительÑкой папке"
@@ -1398,7 +1416,7 @@ msgstr "Ошибка при Ñохранении."
#: editor/editor_node.cpp
msgid "Can't open '%s'."
-msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ '%s'."
+msgstr "Ðе удаётÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ '%s'."
#: editor/editor_node.cpp
msgid "Error while parsing '%s'."
@@ -1465,7 +1483,7 @@ msgstr "Ошибка при попытке Ñохранить макет!"
#: editor/editor_node.cpp
msgid "Default editor layout overridden."
-msgstr "Переопределить макет по-умолчанию."
+msgstr "Переопределить макет по умолчанию."
#: editor/editor_node.cpp
msgid "Layout name not found!"
@@ -1473,7 +1491,7 @@ msgstr "Ðазвание макета не найдено!"
#: editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr "Вернуть макет по-умолчанию к Ñтандартному."
+msgstr "Вернуть макет по умолчанию к Ñтандартному."
#: editor/editor_node.cpp
msgid ""
@@ -1487,7 +1505,6 @@ msgstr ""
"чтобы лучше понÑть Ñтот процеÑÑ."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
@@ -1496,16 +1513,14 @@ msgstr ""
"Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ будут Ñохранены при Ñохранении текущей Ñцены."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
-"Этот реÑÑƒÑ€Ñ Ð±Ñ‹Ð» импортирован, поÑтому он не редактируетÑÑ. Измени наÑтройки "
-"в панеле импорта, а затем повторно импортируйте."
+"Этот реÑÑƒÑ€Ñ Ð±Ñ‹Ð» импортирован, поÑтому он не редактируетÑÑ. Измените "
+"наÑтройки в панеле импорта, а затем повторно импортируйте."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"This scene was imported, so changes to it will not be kept.\n"
"Instancing it or inheriting will allow making changes to it.\n"
@@ -1518,6 +1533,26 @@ msgstr ""
"чтобы лучше понÑть Ñтот процеÑÑ."
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Это удаленный объект, поÑтому Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ будут Ñохранены.\n"
+"ПожалуйÑта, прочитайте документацию отноÑÑщуюÑÑ Ðº отладке, чтобы лучше "
+"понÑть Ñтот процеÑÑ."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Развернуть вÑе"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Свернуть вÑе"
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr "Копировать параметры"
@@ -1636,6 +1671,10 @@ msgid "Export Mesh Library"
msgstr "ЭкÑпортировать библиотеку полиÑеток"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Эта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть выполнена без выбранного узла."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "ЭкÑпортировать набор тайлов"
@@ -1653,7 +1692,7 @@ msgstr "Ðе возможно загрузить Ñцену, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ðµ
#: editor/editor_node.cpp
msgid "Revert"
-msgstr "Откатить"
+msgstr "ВоÑÑтановить"
#: editor/editor_node.cpp
msgid "This action cannot be undone. Revert anyway?"
@@ -1701,30 +1740,28 @@ msgid "Pick a Main Scene"
msgstr "Выберите главную Ñцену"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "Ðе удаетÑÑ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ плагин: '"
+msgstr "Ðе удаётÑÑ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ плагин: '%s' ошибка конфигурации."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr "Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ поле script Ð´Ð»Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð°: ' res://addons/"
+msgstr "Ðе удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ поле script Ð´Ð»Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð°: ' res://addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '"
+msgstr "Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '"
+msgstr ""
+"Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '%s' базовый тип не EditorPlugin."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '"
+msgstr ""
+"Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '%s' Ñкрипт не в режиме "
+"инÑтрумента."
#: editor/editor_node.cpp
msgid ""
@@ -1768,29 +1805,41 @@ msgstr "Удалить макет"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr "По-умолчанию"
+msgstr "По умолчанию"
#: editor/editor_node.cpp
msgid "Switch Scene Tab"
msgstr "Переключить вкладку Ñцены"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr "Ещё %d файлов или папок"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "Ещё %d каталог(ов)"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
msgstr "Ещё %d файла(ов)"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "Ещё %d файла(ов) или папка(ок)"
+msgid "Dock Position"
+msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
-msgstr "Свободный режим"
+msgstr "Режим без отвлечениÑ"
#: editor/editor_node.cpp
msgid "Toggle distraction-free mode."
msgstr "Переключить режим без отвлечениÑ."
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Добавить новую Ñцену."
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "Сцена"
@@ -1855,13 +1904,12 @@ msgid "TileSet.."
msgstr "Ðабор тайлов.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Отменить"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Повторить"
@@ -2138,14 +2186,14 @@ msgid "Import"
msgstr "Импорт"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Узел"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Вывод"
@@ -2201,7 +2249,7 @@ msgstr "Открыть 3D редактор"
msgid "Open Script Editor"
msgstr "Открыть редактор Ñкриптов"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "Открыть библиотеку шаблонов"
@@ -2267,9 +2315,8 @@ msgid "Frame %"
msgstr "Кадр %"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "ФикÑированный кадр %"
+msgstr "ФизичеÑкий шаг %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2325,7 +2372,7 @@ msgstr "Быть может вы забыли метод _run()?"
#: editor/editor_settings.cpp
msgid "Default (Same as Editor)"
-msgstr "По-умолчанию (как редактор)"
+msgstr "По умолчанию (как редактор)"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -2364,6 +2411,10 @@ msgid "(Current)"
msgstr "(Текущий)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Получение зеркал, пожалуйÑта подождите."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "Удалить верÑию шаблона '%s'?"
@@ -2400,6 +2451,102 @@ msgid "Importing:"
msgstr "ИмпортируетÑÑ:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Ðе найдено Ð´Ð»Ñ Ñтой верÑии ÑÑылки на Ñкачивание. ПрÑÐ¼Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° доÑтупна "
+"только Ð´Ð»Ñ Ð¾Ñ„Ð¸Ñ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ñ… релизов."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Ðе удаётÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Ðет ответа."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ прошёл."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "ЦикличеÑкое перенаправление."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Ðе удалоÑÑŒ:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Ðе удалоÑÑŒ запиÑать файл."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Загрузка завершена."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Ошибка запроÑа адреÑа ÑÑылки: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Подключение к зеркалам.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Отключен"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "ИнициализациÑ"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Ðе удаётÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Подключение.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Подключен"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Запрашиваю.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Загрузка"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Ошибка подключениÑ"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Ошибка Ñ€ÑƒÐºÐ¾Ð¿Ð¾Ð¶Ð°Ñ‚Ð¸Ñ SSH"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð²ÐµÑ€ÑиÑ:"
@@ -2423,6 +2570,14 @@ msgstr "Выбрать файл шаблона"
msgid "Export Template Manager"
msgstr "Менеджер шаблонов ÑкÑпорта"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Загрузить Шаблоны"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Выберите зеркало из ÑпиÑка "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
@@ -2430,8 +2585,9 @@ msgstr ""
"типов файлов!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "Ðе удалоÑÑŒ перейти к '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+"Ðе удаетÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ к '%s', так как он не был найден в файловой ÑиÑтеме!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
@@ -2451,14 +2607,6 @@ msgstr ""
"переимпортируйте вручную."
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-"\n"
-"ИÑточник: "
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑтить/переименовать корень."
@@ -2472,7 +2620,7 @@ msgstr "Ошибка перемещениÑ:\n"
#: editor/filesystem_dock.cpp
msgid "Unable to update dependencies:\n"
-msgstr "Ðе удаетÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ завиÑимоÑти:\n"
+msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ завиÑимоÑти:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
@@ -2593,31 +2741,31 @@ msgstr "Импорт в виде единой Ñцены"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ анимациÑми"
+msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ анимациÑми"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ материалами"
+msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ материалами"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr "Импортировать Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ объектами"
+msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ объектами"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr "Импортировать Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ объектами и материалами"
+msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ объектами и материалами"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr "Импортировать Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ объектами и анимациÑми"
+msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ объектами и анимациÑми"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ материалами и анимациÑми"
+msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ материалами и анимациÑми"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "Импортировать Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ объектами, материалами и анимациÑми"
+msgstr "Импортировать Ñ Ð¾Ñ‚Ð´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ объектами, материалами и анимациÑми"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
@@ -2701,7 +2849,7 @@ msgstr "Создан полигон"
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly"
-msgstr "Изменён полигон"
+msgstr "Редактировать полигон"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Insert Point"
@@ -2711,16 +2859,15 @@ msgstr "Ð’Ñтавить точку"
#: editor/plugins/collision_polygon_editor_plugin.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr "Удалена точка полигона"
+msgstr "Редактировать полигон (удалить точку)"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Remove Poly And Point"
msgstr "Удалить полигон и точку"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "Создать новый полигон Ñ Ð½ÑƒÐ»Ñ."
+msgid "Create a new polygon from scratch"
+msgstr "Создать новый полигон Ñ Ð½ÑƒÐ»Ñ"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2734,9 +2881,13 @@ msgstr ""
"Ctrl+ЛКМ: разделить Ñегмент.\n"
"ПКМ: удалить точку."
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Удалить точку"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr "Переключено автовоÑпроизведение"
+msgstr "Переключить автовоÑпроизведение"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
@@ -2783,7 +2934,7 @@ msgstr "Изменена поÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
-msgstr "Изменено Ð²Ñ€ÐµÐ¼Ñ \"ÑмешиваниÑ\""
+msgstr "Изменить Ð²Ñ€ÐµÐ¼Ñ \"ÑмешиваниÑ\""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
@@ -2881,6 +3032,57 @@ msgid "Copy Animation"
msgstr "Копировать анимацию"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Разделы:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Ð’Ñтавить"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "СвойÑтва"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "Создать новую анимацию"
@@ -2943,7 +3145,7 @@ msgstr "Сочетание"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr "Ðвто перезапуÑк:"
+msgstr "ÐвтоперезапуÑк:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Restart (s):"
@@ -3071,52 +3273,28 @@ msgid "Can't resolve hostname:"
msgstr "Ðевозможно определить Ð¸Ð¼Ñ Ñ…Ð¾Ñта:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "Ðе удаетÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
-msgstr "Ошибка подключениÑ, попробуйте еще раз."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ."
+msgstr "Ошибка подключениÑ, попробуйте ещё раз."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
-msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº хоÑту:"
+msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº хоÑту:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
msgstr "Ðет ответа от хоÑта:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Ðет ответа."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ удалÑÑ, код:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ прошел."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
-msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ прошел, Ñлишком много перенаправлений"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "ЦикличеÑкое перенаправление."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Ðе удалоÑÑŒ:"
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ прошёл, Ñлишком много перенаправлений"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr "ÐеÑовпадение Ñ…Ñша загрузки, возможно файл был изменен."
+msgstr "ÐеÑовпадение Ñ…Ñша загрузки, возможно файл был изменён."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
@@ -3143,14 +3321,6 @@ msgid "Resolving.."
msgstr "ИнициализациÑ..."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "Подключение.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "Запрашиваю.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа"
@@ -3168,7 +3338,7 @@ msgstr "Ошибка Загрузки"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "Загрузка Ñтого шаблона уже идет!"
+msgstr "Загрузка Ñтого шаблона уже идёт!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "first"
@@ -3239,7 +3409,7 @@ msgstr "ÐаÑтроить привÑзку"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Offset:"
-msgstr "ОтÑтуп Ñетку:"
+msgstr "ОтÑтуп Ñетки:"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
@@ -3263,6 +3433,34 @@ msgid "Move Action"
msgstr "ПеремеÑтить дейÑтвие"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Перемещение вертикальной направлÑющей"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Создать вертикальную направлÑющую"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Убрать вертикальную направлÑющую"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "ПеремеÑтить горизонтальную направлÑющую"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Создать новую горизонтальную направлÑющую"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Удалить горизонтальную направлÑющую"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Создание новых горизонтальных и вертикальных направлÑющих"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "Редактировать цепь ИК"
@@ -3387,10 +3585,16 @@ msgid "Snap to other nodes"
msgstr "ПривÑзка к другим узлам"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "Прилипание к Ñетке"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "ЗафикÑировать выбранный объект."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Разблокировать выбранный объект."
@@ -3441,6 +3645,10 @@ msgid "Show rulers"
msgstr "Показывать линейки"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Показывать направлÑющие"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr "Центрировать на выбранном"
@@ -3530,7 +3738,7 @@ msgid ""
"Drag & drop + Shift : Add node as sibling\n"
"Drag & drop + Alt : Change node type"
msgstr ""
-"Drag & drop + Shift : Добавить узел к выделению\n"
+"Drag & drop + Shift : Добавить узел того же уровнÑ\n"
"Drag & drop + Alt : Изменить тип узла"
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -3572,12 +3780,10 @@ msgid "Flat1"
msgstr "ПлоÑкий1"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
msgstr "Переход В"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease out"
msgstr "Переход ИЗ"
@@ -3629,6 +3835,10 @@ msgstr "Переключить кривую линейный тангенÑ"
msgid "Hold Shift to edit tangents individually"
msgstr "Удерживайте Shift, чтобы изменить каÑательные индивидуально"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "Запечь GI Probe"
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "Добавить/Удалить точку Color Ramp"
@@ -3636,7 +3846,7 @@ msgstr "Добавить/Удалить точку Color Ramp"
#: editor/plugins/gradient_editor_plugin.cpp
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Modify Color Ramp"
-msgstr "Изменена Color Ramp"
+msgstr "Редактировать Color Ramp"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
@@ -3663,6 +3873,10 @@ msgid "Create Occluder Polygon"
msgstr "Создан затенÑющий полигон"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Создать новый полигон Ñ Ð½ÑƒÐ»Ñ."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Редактировать ÑущеÑтвующий полигон:"
@@ -3678,69 +3892,17 @@ msgstr "Ctrl+ЛКМ: Разделить Ñегмент."
msgid "RMB: Erase Point."
msgstr "ПКМ: Удалить точку."
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "Удалить точку Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "Добавить точку к кривой"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "Двигать точку в кривой"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Выбрать точки"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Drag: Выбрать точки управлениÑ"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "ЛКМ: Добавить точку"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "ПКМ: Удалить точку"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Добавить точку (в пуÑтом проÑтранÑтрве)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "Разделить Ñегмент (в кривой)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Удалить точку"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "ПолиÑетка пуÑта!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
-msgstr "Создано вогнутое Ñтатичное тело"
+msgstr "Создать вогнутое Ñтатичное тело"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Convex Body"
-msgstr "Создано выпуклое Ñтатичное тело"
+msgstr "Создать выпуклое Ñтатичное тело"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "This doesn't work on scene root!"
@@ -3748,11 +3910,11 @@ msgstr "Это не работает на корне Ñцены!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Shape"
-msgstr "Создана Ð²Ð¾Ð³Ð½ÑƒÑ‚Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°"
+msgstr "Создать вогнутую форму"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Shape"
-msgstr "Создана Ð²Ñ‹Ð³Ð½ÑƒÑ‚Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°"
+msgstr "Создать выгнутую форму"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Navigation Mesh"
@@ -3924,7 +4086,7 @@ msgstr "ÐаÑтройка конфигурации..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr "РаÑчет размера Ñетки..."
+msgstr "РаÑчёт размера Ñетки..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating heightfield..."
@@ -3939,14 +4101,12 @@ msgid "Constructing compact heightfield..."
msgstr "ПоÑтроение компактной карты выÑот..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Eroding walkable area..."
msgstr "Размытие проходимого района..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
-msgstr "Разметка..."
+msgstr "Разбиение..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating contours..."
@@ -4101,7 +4261,7 @@ msgstr "Генерировать AABB"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
-msgstr "Удалена точка Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹"
+msgstr "Удалить точку Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Out-Control from Curve"
@@ -4129,16 +4289,46 @@ msgid "Move Out-Control in Curve"
msgstr "Передвинут выходной луч у кривой"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Выбрать точки"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Drag: Выбрать точки управлениÑ"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "ЛКМ: Добавить точку"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "ПКМ: Удалить точку"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Выбор точек ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (Shift+Тащить)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Добавить точку (в пуÑтом проÑтранÑтрве)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Разделить Ñегмент (в кривой)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Удалить точку"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "Сомкнуть кривую"
@@ -4151,12 +4341,10 @@ msgid "Set Curve Point Position"
msgstr "УÑтановить положение точки кривой"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve In Position"
msgstr "УÑтановить позицию входа кривой"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Out Position"
msgstr "УÑтановить позицию выхода кривой"
@@ -4277,7 +4465,6 @@ msgstr "Загрузить реÑурÑ"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4324,12 +4511,26 @@ msgid " Class Reference"
msgstr " СÑылка на КлаÑÑ"
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Сортировать"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "ПеремеÑтить вверх"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "ПеремеÑтить вниз"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "Следующий Ñкрипт"
#: editor/plugins/script_editor_plugin.cpp
msgid "Previous script"
-msgstr "Предыдущий Ñценарий"
+msgstr "Предыдущий Ñкрипт"
#: editor/plugins/script_editor_plugin.cpp
msgid "File"
@@ -4375,6 +4576,10 @@ msgstr "Закрыть документацию"
msgid "Close All"
msgstr "Закрыть вÑÑ‘"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Закрыть другие вкладки"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "ЗапуÑтить"
@@ -4385,13 +4590,11 @@ msgstr "Переключить панель Ñкриптов"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Ðайти.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Ðайти Ñледующее"
@@ -4499,33 +4702,22 @@ msgstr "нижний региÑтр"
msgid "Capitalize"
msgstr "С ПропиÑной"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Вырезать"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Копировать"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Выбрать вÑе"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "ПеремеÑтить вверх"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "ПеремеÑтить вниз"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr "Удалить Ñтроку"
@@ -4536,7 +4728,7 @@ msgstr "Убрать отÑтуп Ñлева"
#: editor/plugins/script_text_editor.cpp
msgid "Indent Right"
-msgstr "Добавить отÑтуп"
+msgstr "ОтÑтуп вправо"
#: editor/plugins/script_text_editor.cpp
msgid "Toggle Comment"
@@ -4547,6 +4739,22 @@ msgid "Clone Down"
msgstr "Копировать вниз"
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "Свернуть Ñтроку"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "Развернуть Ñтроку"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "Свернуть вÑе Ñтроки"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "Развернуть вÑе Ñтроки"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "СпиÑок автозавершениÑ"
@@ -4564,7 +4772,7 @@ msgstr "Преобразовать отÑтуп в табулÑцию"
#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
-msgstr "Ðвто отÑтуп"
+msgstr "ÐвтоотÑтуп"
#: editor/plugins/script_text_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -4592,12 +4800,10 @@ msgid "Convert To Lowercase"
msgstr "Конвертировать в нижний региÑтр"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Ðайти предыдущее"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "Заменить.."
@@ -4606,7 +4812,6 @@ msgid "Goto Function.."
msgstr "Перейти к функции.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Перейти к Ñтроке.."
@@ -4620,119 +4825,119 @@ msgstr "Шейдер"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Constant"
-msgstr "Изменена чиÑÐ»Ð¾Ð²Ð°Ñ ÐºÐ¾Ð½Ñтанта"
+msgstr "Изменить чиÑловую конÑтанту"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Constant"
-msgstr "Изменена Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта"
+msgstr "Изменить векторную конÑтанту"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change RGB Constant"
-msgstr "Изменён RGB"
+msgstr "Изменить RGB конÑтанту"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Operator"
-msgstr "Изменён чиÑловой оператор"
+msgstr "Изменить чиÑловой оператор"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Operator"
-msgstr "Изменён векторный оператор"
+msgstr "Изменить векторный оператор"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Scalar Operator"
-msgstr "Изменён векторно чиÑловой оператор"
+msgstr "Изменить векторно-чиÑловой оператор"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change RGB Operator"
-msgstr "Изменён RGB оператор"
+msgstr "Изменить RGB оператор"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Toggle Rot Only"
-msgstr "Переключён - только поворот"
+msgstr "Переключить - только поворот"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Function"
-msgstr "Изменена чиÑÐ»Ð¾Ð²Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ"
+msgstr "Изменить чиÑловую функцию"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Function"
-msgstr "Изменена Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ"
+msgstr "Изменить векторную функцию"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Uniform"
-msgstr "Изменена чиÑÐ»Ð¾Ð²Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð°"
+msgstr "Изменить чиÑловую единицу"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Uniform"
-msgstr "Изменена Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð°"
+msgstr "Изменить векторную единицу"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change RGB Uniform"
-msgstr "Изменена RGB единица"
+msgstr "Изменить RGB единицу"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Default Value"
-msgstr "Изменено Ñтандартное значение"
+msgstr "Изменить значение по умолчанию"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change XForm Uniform"
-msgstr "Изменена XForm единица"
+msgstr "Изменить XForm единицу"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Texture Uniform"
-msgstr "Изменена Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð°"
+msgstr "Изменить текÑтурную единицу"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Cubemap Uniform"
-msgstr "Изменена единица кубичеÑкой карты"
+msgstr "Изменить единицу кубичеÑкой карты"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Comment"
-msgstr "Изменён комментарий"
+msgstr "Изменить комментарий"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add/Remove to Color Ramp"
-msgstr "Добавлено/удалено Ñ Color Ramp"
+msgstr "Добавить/Удалить в Color Ramp"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add/Remove to Curve Map"
-msgstr "Добавлено/удалено Ñ Curve Map"
+msgstr "Добавить/Удалить в Curve Map"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Modify Curve Map"
-msgstr "Изменена карта кривой"
+msgstr "Редактировать карту кривой"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Input Name"
-msgstr "Изменено входное имÑ"
+msgstr "Изменить Ð¸Ð¼Ñ Ð²Ñ…Ð¾Ð´Ð°"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Connect Graph Nodes"
-msgstr "Изменено Ð¸Ð¼Ñ Ð³Ñ€Ð°Ñ„Ð°"
+msgstr "Соединить узлы графа"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Disconnect Graph Nodes"
-msgstr "Графы разъединены"
+msgstr "Разъединить узлы графа"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Remove Shader Graph Node"
-msgstr "Удалён граф шейдера"
+msgstr "Удалить узел графа шейдера"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Move Shader Graph Node"
-msgstr "Передвинут граф шейдера"
+msgstr "Передвинуть узел графа шейдера"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Duplicate Graph Node(s)"
-msgstr "Граф(ы) дублированы"
+msgstr "Дублировать узел(ы) графа"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Delete Shader Graph Node(s)"
-msgstr "Удалён(ы) графы шейдера"
+msgstr "Удалить узел(ы) графа шейдера"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Error: Cyclic Connection Link"
-msgstr "Ошибка: ЦикличеÑÐºÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ"
+msgstr "Ошибка: ЦикличеÑкое подключение"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Error: Missing Input Connections"
@@ -4740,19 +4945,19 @@ msgstr "Ошибка: ОтÑутÑтвует входное подключени
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add Shader Graph Node"
-msgstr "Добавлен граф шейдера"
+msgstr "Добавить узел графа шейдера"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal"
-msgstr "ОртогональноÑть"
+msgstr "Ортогональный"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective"
-msgstr "ПерÑпектива"
+msgstr "ПерÑпективный"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
-msgstr "ÐŸÑ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€ÐµÑ€Ñ‹Ð²Ð°ÐµÑ‚ÑÑ."
+msgstr "Преобразование прервано."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "X-Axis Transform."
@@ -4771,6 +4976,14 @@ msgid "View Plane Transform."
msgstr "Вид Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð¾ÑкоÑти."
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "МаÑштаб: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Переводы: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "Поворот на %s градуÑов."
@@ -4836,7 +5049,7 @@ msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð°"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Shader Changes"
-msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑˆÑйдеров"
+msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð¾Ð²"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Surface Changes"
@@ -4851,6 +5064,10 @@ msgid "Vertices"
msgstr "Вершины"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "Кадров/Ñек"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "СовмеÑтить Ñ Ð²Ð¸Ð´Ð¾Ð¼"
@@ -4883,6 +5100,14 @@ msgid "View Information"
msgstr "ИнформациÑ"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Показывать FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Половинчатое разрешение"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "ПроÑлушиватель звука"
@@ -4938,7 +5163,7 @@ msgid ""
msgstr ""
"ТÑнуть: Вращение\n"
"Alt+ТÑнуть: Перемещение\n"
-"Ðльт+ПКМ: Выбор по ÑпиÑку"
+"Alt+ПКМ: Выбор по ÑпиÑку"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Move Mode (W)"
@@ -5013,6 +5238,10 @@ msgid "Tool Scale"
msgstr "ИнÑтрумент маÑштаб"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Переключить Ñвободный обзор"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "Преобразование"
@@ -5103,7 +5332,7 @@ msgstr "Изменение преобразованиÑ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translate:"
-msgstr "ПреобразованиÑ:"
+msgstr "Смещение:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate (deg.):"
@@ -5264,11 +5493,11 @@ msgstr "Удалить вÑе"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "Редактировать тему.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "Меню Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐ¼."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5284,7 +5513,11 @@ msgstr "Создать пуÑтой шаблон"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
-msgstr "Создать пуÑтой образец редактора"
+msgstr "Создать пуÑтой шаблон редактора"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "Создать из текущей темы редактора"
#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
@@ -5300,11 +5533,11 @@ msgstr "Элемент"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Check Item"
-msgstr "Проверить пункт"
+msgstr "Отметить Ñлемент"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Checked Item"
-msgstr "Проверенный пункт"
+msgstr "Отмеченный Ñлемент"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Has"
@@ -5381,7 +5614,7 @@ msgstr "Заливка"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase TileMap"
-msgstr "Стирать карту тайлов"
+msgstr "ОчиÑтить карту тайлов"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase selection"
@@ -5460,8 +5693,8 @@ msgid "Runnable"
msgstr "Ðктивный"
#: editor/project_export.cpp
-msgid "Delete patch '"
-msgstr "Удалить заплатку '"
+msgid "Delete patch '%s' from list?"
+msgstr "Удалить латку '%s' из ÑпиÑка?"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
@@ -5599,7 +5832,7 @@ msgstr "Ðе удалоÑÑŒ Ñоздать project.godot в папке проеÐ
#: editor/project_manager.cpp
msgid "The following files failed extraction from package:"
-msgstr "Следующие файлы не удалоÑÑŒ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· пакета:"
+msgstr "Следующие файлы не удалоÑÑŒ извлечь из пакета:"
#: editor/project_manager.cpp
msgid "Rename Project"
@@ -5651,7 +5884,7 @@ msgstr "БезымÑнный проект"
#: editor/project_manager.cpp
msgid "Can't open project"
-msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ проект"
+msgstr "Ðе удаётÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ проект"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -5688,6 +5921,8 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Язык изменилÑÑ.\n"
+"ПользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð±ÑƒÐ´ÐµÑ‚ обновлен при Ñледующем запуÑке редактора."
#: editor/project_manager.cpp
msgid ""
@@ -5722,13 +5957,18 @@ msgid "Exit"
msgstr "Выход"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "ПерезапуÑк (Ñек.):"
+msgstr "ПерезапуÑтить ÑейчаÑ"
#: editor/project_manager.cpp
msgid "Can't run project"
-msgstr "Ðе удаетÑÑ Ð·Ð°Ð¿ÑƒÑтить проект"
+msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить проект"
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -5763,10 +6003,6 @@ msgid "Add Input Action Event"
msgstr "Добавить дейÑтвие"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5888,12 +6124,12 @@ msgid "Select a setting item first!"
msgstr "Сначала выберите Ñлемент наÑтроек!"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr "Ðет ÑвойÑтва '"
+msgid "No property '%s' exists."
+msgstr "СвойÑтво '%s' не ÑущеÑтвует."
#: editor/project_settings_editor.cpp
-msgid "Setting '"
-msgstr "ÐаÑтройки '"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "Параметр '%s' ÑвлÑетÑÑ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¼, и не может быть удален."
#: editor/project_settings_editor.cpp
msgid "Delete Item"
@@ -5921,15 +6157,15 @@ msgstr "Переопределение СвойÑтва"
#: editor/project_settings_editor.cpp
msgid "Add Translation"
-msgstr "Добавлен перевод"
+msgstr "Добавить перевод"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
-msgstr "Перевод удалён"
+msgstr "Удалить перевод"
#: editor/project_settings_editor.cpp
msgid "Add Remapped Path"
-msgstr "Добавлен путь перенаправлениÑ"
+msgstr "Добавить путь перенаправлениÑ"
#: editor/project_settings_editor.cpp
msgid "Resource Remap Add Remap"
@@ -5937,24 +6173,23 @@ msgstr "Перенаправлен реÑÑƒÑ€Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
-msgstr "Изменён Ñзык перенаправлениÑ"
+msgstr "Изменить Ñзык Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÑурÑов"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap"
-msgstr "Удалён реÑÑƒÑ€Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ"
+msgstr "Удалить реÑÑƒÑ€Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap Option"
-msgstr "Удалён параметр реÑурÑа перенаправлениÑ"
+msgstr "Удалить параметр Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÑурÑа"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Изменено Ð²Ñ€ÐµÐ¼Ñ \"ÑмешиваниÑ\""
+msgstr "Изменен фильтр Ñзыков"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Изменен режим фильтрации Ñзыков"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -5982,7 +6217,7 @@ msgstr "ДейÑтвие:"
#: editor/project_settings_editor.cpp
msgid "Device:"
-msgstr "ДевайÑ:"
+msgstr "УÑтройÑтво:"
#: editor/project_settings_editor.cpp
msgid "Index:"
@@ -6017,28 +6252,24 @@ msgid "Locale"
msgstr "Язык"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "Фильтр:"
+msgstr "Фильтры локализации"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "Показать коÑти"
+msgstr "Показать вÑе Ñзыки"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "Показать только выбранные Ñзыки"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Ð¤Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð²"
+msgstr "Режим фильтра:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "Язык"
+msgstr "Языки:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -6372,6 +6603,14 @@ msgid "Clear a script for the selected node."
msgstr "Убрать Ñкрипт у выбранного узла."
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "Удаленный"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "Локальный"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "ОчиÑтить наÑледование? (ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ!)"
@@ -6381,11 +6620,11 @@ msgstr "ОчиÑтить!"
#: editor/scene_tree_editor.cpp
msgid "Toggle Spatial Visible"
-msgstr "Переключена видимоÑть Spatial"
+msgstr "Переключить видимоÑть Spatial"
#: editor/scene_tree_editor.cpp
msgid "Toggle CanvasItem Visible"
-msgstr "Переключена видимоÑть CanvasItem"
+msgstr "Переключить видимоÑть CanvasItem"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
@@ -6441,7 +6680,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Toggle Visibility"
-msgstr "Переключение видимоÑти"
+msgstr "Переключить видимоÑть"
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
@@ -6564,6 +6803,10 @@ msgid "Attach Node Script"
msgstr "Добавление Ñкрипта"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Удаленный "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Байты:"
@@ -6621,18 +6864,6 @@ msgid "Stack Trace (if applicable):"
msgstr "ТраÑÑировка Ñтека (еÑли применимо):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Удалённый отладчик"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Дерево Ñцены в реальном времени:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Параметры объекта: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Профайлер"
@@ -6702,7 +6933,7 @@ msgstr "ГорÑчие клавиши"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Light Radius"
-msgstr "Изменён Ñ€Ð°Ð´Ð¸ÑƒÑ Ñвета"
+msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ Ñвета"
#: editor/spatial_editor_gizmos.cpp
msgid "Change AudioStreamPlayer3D Emission Angle"
@@ -6710,35 +6941,35 @@ msgstr "Изменить угол AudioStreamPlayer3D"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
-msgstr "Изменён FOV камеры"
+msgstr "Изменить FOV камеры"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera Size"
-msgstr "Изменён размер камеры"
+msgstr "Изменить размер камеры"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Sphere Shape Radius"
-msgstr "Изменён Ñ€Ð°Ð´Ð¸ÑƒÑ Ñферы"
+msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ Ñферы"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Box Shape Extents"
-msgstr "Изменены границы прÑмоугольника"
+msgstr "Изменить границы прÑмоугольника"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Radius"
-msgstr "Изменён Ñ€Ð°Ð´Ð¸ÑƒÑ ÐºÐ°Ð¿Ñулы"
+msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ ÐºÐ°Ð¿Ñулы"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Height"
-msgstr "Изменена выÑота капуÑлы"
+msgstr "Изменить выÑоту капÑулы"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Ray Shape Length"
-msgstr "Изменена длинна луча"
+msgstr "Изменить длину луча"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Notifier Extents"
-msgstr "Изменены границы уведомителÑ"
+msgstr "Изменить границы уведомителÑ"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Particles AABB"
@@ -6746,7 +6977,7 @@ msgstr "Изменить AABB чаÑтиц"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
-msgstr "Изменены Probe Extents"
+msgstr "Изменить Probe Extents"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Library"
@@ -6761,54 +6992,53 @@ msgid "Libraries: "
msgstr "Библиотеки: "
#: modules/gdnative/register_types.cpp
-#, fuzzy
msgid "GDNative"
msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Ðеверный тип аргумента Ð´Ð»Ñ convert(), иÑпользуйте TYPE_* конÑтанты."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Ðе хватает байтов Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð¹Ñ‚Ð¾Ð², или неверный формат."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "Ðргумент шага равен нулю!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Скрипт без ÑкземплÑра"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "ОÑнован не на Ñкрипте"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "ОÑнован не на файле реÑурÑов"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "ÐедопуÑтимый формат ÑкземплÑра ÑÐ»Ð¾Ð²Ð°Ñ€Ñ (отÑутÑтвует @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"ÐедопуÑтимый формат ÑкземплÑра ÑÐ»Ð¾Ð²Ð°Ñ€Ñ (невозможно загрузить Ñкрипт из @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "ÐедопуÑтимый формат ÑкземплÑра ÑÐ»Ð¾Ð²Ð°Ñ€Ñ (неверный Ñкрипт в @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "ÐедопуÑтимый ÑкземплÑÑ€ ÑÐ»Ð¾Ð²Ð°Ñ€Ñ (неверные подклаÑÑÑ‹)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "Объект не может предоÑтавить длину."
@@ -6821,16 +7051,24 @@ msgid "GridMap Duplicate Selection"
msgstr "Дублировать выделенную Ñетку"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "Этаж:"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Сетка"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr "ПривÑзать вид"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr "Пред уровень (%sКолеÑико вниз)"
+msgid "Previous Floor"
+msgstr "Предыдущий Ñтаж"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
-msgstr "Следующий уровень (%sКолеÑико вверх)"
+msgid "Next Floor"
+msgstr "Следующий Ñтаж"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Disabled"
@@ -6897,12 +7135,8 @@ msgid "Erase Area"
msgstr "Стереть облаÑть"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr "Выбор -> Дублировать"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr "Выбор -> ОчиÑтить"
+msgid "Clear Selection"
+msgstr "ОчиÑтить выделение"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -7029,9 +7263,9 @@ msgid "Duplicate VisualScript Nodes"
msgstr "Дублировать узлы VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Зажмите Meta, чтобы добавить Getter. Зажмите Shift, чтобы добавить "
+"Зажмите %s, чтобы добавить геттер. Зажмите Shift, чтобы добавить "
"универÑальную подпиÑÑŒ."
#: modules/visual_script/visual_script_editor.cpp
@@ -7041,16 +7275,16 @@ msgstr ""
"универÑальную подпиÑÑŒ."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "Зажмите Meta, чтобы добавить проÑтую ÑÑылку на узел."
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "Зажмите %s, чтобы добавить проÑтую ÑÑылку на узел."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Зажмите Ctrl, чтобы добавить проÑтую ÑÑылку на узел."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "Зажмите Meta, чтобы добавить Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Зажмите %s, чтобы добавить Setter переменной."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7130,7 +7364,7 @@ msgstr "Изменить входное значение"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't copy the function node."
-msgstr "Ðе удаетÑÑ Ñкопировать узел функцию."
+msgstr "Ðе удаётÑÑ Ñкопировать узел функцию."
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
@@ -7278,13 +7512,21 @@ msgid "Could not write file:\n"
msgstr "Ðе удалоÑÑŒ запиÑать файл:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "Ðе удалоÑÑŒ прочитать файл:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "Ðе удалоÑÑŒ открыть шаблон Ð´Ð»Ñ ÑкÑпорта:\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "Ðеверный шаблон ÑкÑпорта:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "Ðе удаетÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ пользовательÑкую HTML-оболочку:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "Ðе удалоÑÑŒ прочитать файл Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ñтавки:\n"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7406,22 +7648,6 @@ msgstr ""
"Ð”Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы ÑвойÑтво Path должно указывать на дейÑтвующий узел "
"Node2D."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Ð”Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы ÑвойÑтво Path должно указывать на дейÑтвующий узел "
-"Viewport. Такой Viewport должен быть уÑтановлен в режим 'цель рендеринга'."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"ОблаÑти проÑмотра уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð² ÑвойÑтве path должна быть назначена "
-"\"целью визуализации\" Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Ñтот Ñпрайт работал."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7494,6 +7720,14 @@ msgstr ""
"Shape должен быть предуÑмотрен Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ CollisionShape. ПожалуйÑта, "
"Ñоздайте shape-реÑÑƒÑ€Ñ Ð´Ð»Ñ Ñтого!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "ПоÑтроение Ñетки"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "Завершение поÑтроениÑ"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7542,7 +7776,6 @@ msgstr ""
"реÑÑƒÑ€Ñ SpriteFrames в параметре 'Frames'."
#: scene/3d/vehicle_body.cpp
-#, fuzzy
msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
@@ -7570,13 +7803,18 @@ msgstr "Внимание!"
msgid "Please Confirm..."
msgstr "Подтверждение..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Выбрать метод"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
"functions. Making them visible for editing is fine though, but they will "
"hide upon running."
msgstr ""
-"ПоÑле запуÑка вÑплывающие окна по-умолчанию Ñкрыты, Ð´Ð»Ñ Ð¸Ñ… Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ "
+"ПоÑле запуÑка вÑплывающие окна по умолчанию Ñкрыты, Ð´Ð»Ñ Ð¸Ñ… Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ "
"иÑпользуйте функцию popup() или любую из popup_*()."
#: scene/gui/scroll_container.cpp
@@ -7591,6 +7829,10 @@ msgstr ""
"уÑтановите\n"
"минимальный размер вручную."
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Другие)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7607,10 +7849,10 @@ msgid ""
"texture to some node for display."
msgstr ""
"Эта облаÑть не уÑтановлена в качеÑтве цели рендеринга. ЕÑли вы ÑобираетеÑÑŒ "
-"иÑпользовать его, чтобы отобразить его Ñодержимое прÑмо на Ñкране, Ñделать "
-"его потомком Control'а, чтобы он мог получить размер. Ð’ противном Ñлучае, "
-"Ñделайте его целью рендеринга и передайте его внутренние текÑтуры какому-то "
-"другому узлу Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ."
+"иÑпользовать её Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñодержимого прÑмо на Ñкран, то Ñделайте её "
+"потомком Control'а, чтобы она могла получить размер. Ð’ противном Ñлучае, "
+"Ñделайте её целью рендеринга и назначьте её внутреннюю текÑтуру какому-либо "
+"узлу Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ."
#: scene/resources/dynamic_font.cpp
msgid "Error initializing FreeType."
@@ -7628,6 +7870,69 @@ msgstr "Ошибка загрузки шрифта."
msgid "Invalid font size."
msgstr "ÐедопуÑтимый размер шрифта."
+#~ msgid "Cannot navigate to '"
+#~ msgstr "Ðе удалоÑÑŒ перейти к '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "ИÑточник: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Удалить точку Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Добавить точку к кривой"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Двигать точку в кривой"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Разделить Ñегмент (в кривой)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#~ msgid "Setting '"
+#~ msgstr "ÐаÑтройки '"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Удалённый отладчик"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Дерево Ñцены в реальном времени:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Параметры объекта: "
+
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "Пред уровень (%sКолеÑико вниз)"
+
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "Следующий уровень (%sКолеÑико вверх)"
+
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Выбор -> Дублировать"
+
+#~ msgid "Selection -> Clear"
+#~ msgstr "Выбор -> ОчиÑтить"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Ð”Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы ÑвойÑтво Path должно указывать на дейÑтвующий узел "
+#~ "Viewport. Такой Viewport должен быть уÑтановлен в режим 'цель рендеринга'."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "ОблаÑти проÑмотра уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð² ÑвойÑтве path должна быть назначена "
+#~ "\"целью визуализации\" Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Ñтот Ñпрайт работал."
+
#~ msgid "Filter:"
#~ msgstr "Фильтр:"
@@ -7652,9 +7957,6 @@ msgstr "ÐедопуÑтимый размер шрифта."
#~ msgid "Removed:"
#~ msgstr "Удалено:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ð»Ð°Ñа:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Ðевозможно Ñохранить текÑтуру атлаÑа:"
@@ -8044,9 +8346,6 @@ msgstr "ÐедопуÑтимый размер шрифта."
#~ msgid "Cropping Images"
#~ msgstr "Обрезка изображений"
-#~ msgid "Blitting Images"
-#~ msgstr "Блитирование Изображений"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "Ðевозможно Ñохранить изображение атлаÑа:"
@@ -8424,9 +8723,6 @@ msgstr "ÐедопуÑтимый размер шрифта."
#~ msgid "Save Translatable Strings"
#~ msgstr "Сохранить переводимые Ñтроки"
-#~ msgid "Install Export Templates"
-#~ msgstr "УÑтановить шаблоны ÑкÑпорта"
-
#~ msgid "Edit Script Options"
#~ msgstr "Редактировать параметры Ñкрипта"
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index e5ec2ed8d0..24c9c81792 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -99,6 +99,7 @@ msgid "Anim Delete Keys"
msgstr ""
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr ""
@@ -629,6 +630,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Otvoriť"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -699,6 +707,14 @@ msgstr ""
msgid "Delete"
msgstr ""
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -1111,6 +1127,11 @@ msgid "File Exists, Overwrite?"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Vytvoriť adresár"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "Všetko rozpoznané"
@@ -1118,12 +1139,6 @@ msgstr "Všetko rozpoznané"
msgid "All Files (*)"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Otvoriť"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "Otvoriť súbor"
@@ -1190,7 +1205,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1481,6 +1496,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1591,6 +1621,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1717,11 +1751,20 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+#, fuzzy
+msgid "%d more folders"
+msgstr "Vytvoriť adresár"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1733,6 +1776,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1798,13 +1845,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Späť"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2062,11 +2108,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2128,7 +2174,7 @@ msgstr "Otvorit prieÄinok"
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2288,6 +2334,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2322,6 +2372,101 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "Popis:"
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2346,12 +2491,21 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Všetky vybrané"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2369,12 +2523,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2634,8 +2782,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2646,6 +2793,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Všetky vybrané"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2790,6 +2942,56 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Popis:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Vložiť"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2983,18 +3185,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -3003,30 +3197,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3055,14 +3233,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3175,6 +3345,37 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "Popis:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "Popis:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Všetky vybrané"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3295,10 +3496,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3349,6 +3556,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3538,6 +3749,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3570,6 +3785,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3585,58 +3804,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4034,16 +4201,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4184,7 +4381,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4229,6 +4425,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
#, fuzzy
msgid "Next script"
msgstr "Popis:"
@@ -4281,6 +4491,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4291,13 +4505,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4401,33 +4613,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Kopírovať"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr ""
@@ -4449,6 +4650,22 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4494,12 +4711,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4508,7 +4723,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4673,6 +4887,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4753,6 +4975,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4785,6 +5011,15 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "Súbor:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4915,6 +5150,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5193,6 +5432,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5367,7 +5610,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5630,6 +5873,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5663,10 +5912,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5788,11 +6033,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6265,6 +6510,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Všetky vybrané"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6453,6 +6707,11 @@ msgid "Attach Node Script"
msgstr "Popis:"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Všetky vybrané"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6509,18 +6768,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6652,49 +6899,49 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Chybný argument convert(), použite TYPE_* konštanty."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Nedostatok bajtov na dekódovanie, možný chybný formát."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "argument \"step\"/krok je nulový!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6708,15 +6955,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6785,12 +7040,9 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+#, fuzzy
+msgid "Clear Selection"
+msgstr "Všetky vybrané"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6913,7 +7165,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6921,7 +7173,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6929,7 +7181,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7162,11 +7414,19 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7265,18 +7525,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7335,6 +7583,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7398,6 +7654,10 @@ msgstr ""
msgid "Please Confirm..."
msgstr ""
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7412,6 +7672,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7442,6 +7706,9 @@ msgstr ""
msgid "Invalid font size."
msgstr ""
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
#~ msgid "Filter:"
#~ msgstr "Filter:"
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index 4a82428565..2e1fad7e6f 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -3,12 +3,13 @@
# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
-# matevž lapajne <sivar.lapajne@gmail.com>, 2016.
+# matevž lapajne <sivar.lapajne@gmail.com>, 2016-2017.
+# Simon Å ander <simon.sand3r@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-12 09:47+0000\n"
+"PO-Revision-Date: 2017-11-29 08:12+0000\n"
"Last-Translator: matevž lapajne <sivar.lapajne@gmail.com>\n"
"Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/"
"godot/sl/>\n"
@@ -17,15 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3;\n"
-"X-Generator: Weblate 2.8-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
-msgstr ""
+msgstr "OnemogoÄen"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr ""
+msgstr "Vsa izbira"
#: editor/animation_editor.cpp
msgid "Move Add Key"
@@ -68,8 +69,9 @@ msgid "Remove Anim Track"
msgstr ""
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Set Transitions to:"
-msgstr ""
+msgstr "Izberi Prevod:"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
@@ -100,8 +102,9 @@ msgid "Anim Delete Keys"
msgstr ""
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr ""
+msgstr "Podvoji Izbrano"
#: editor/animation_editor.cpp
msgid "Duplicate Transposed"
@@ -109,7 +112,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Remove Selection"
-msgstr ""
+msgstr "Odstrani Izbiro"
#: editor/animation_editor.cpp
msgid "Continuous"
@@ -133,7 +136,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr ""
+msgstr "PoveÄaj Izbiro"
#: editor/animation_editor.cpp
msgid "Scale From Cursor"
@@ -141,16 +144,16 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Goto Next Step"
-msgstr ""
+msgstr "Pojdite na Naslednji Korak"
#: editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr ""
+msgstr "Pojdite na Predhodni Korak"
#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
#: editor/property_editor.cpp
msgid "Linear"
-msgstr ""
+msgstr "Linearno"
#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constant"
@@ -158,11 +161,11 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "In"
-msgstr ""
+msgstr "V"
#: editor/animation_editor.cpp
msgid "Out"
-msgstr ""
+msgstr "Ven"
#: editor/animation_editor.cpp
msgid "In-Out"
@@ -182,7 +185,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr ""
+msgstr "PoÄisti Animacijo"
#: editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
@@ -199,7 +202,7 @@ msgstr ""
#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
msgid "Create"
-msgstr ""
+msgstr "Naredi"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
@@ -239,11 +242,11 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Animation zoom."
-msgstr ""
+msgstr "Približaj Animacijo"
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr ""
+msgstr "Dolžina (s):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
@@ -251,7 +254,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Step (s):"
-msgstr ""
+msgstr "Korak (s):"
#: editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
@@ -311,7 +314,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Key"
-msgstr ""
+msgstr "ÄŒrka"
#: editor/animation_editor.cpp
msgid "Transition"
@@ -327,7 +330,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr ""
+msgstr "Odstrani nedovoljene ÄŒrke"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
@@ -343,11 +346,11 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Clean-Up"
-msgstr ""
+msgstr "Pobriši"
#: editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr ""
+msgstr "PoveÄaj Niz"
#: editor/array_property_edit.cpp
msgid "Change Array Value Type"
@@ -363,7 +366,7 @@ msgstr ""
#: editor/code_editor.cpp
msgid "Line Number:"
-msgstr ""
+msgstr "Å tevilka vrste:"
#: editor/code_editor.cpp
msgid "No Matches"
@@ -375,7 +378,7 @@ msgstr ""
#: editor/code_editor.cpp
msgid "Replace"
-msgstr ""
+msgstr "Zamenjaj"
#: editor/code_editor.cpp
msgid "Replace All"
@@ -399,7 +402,7 @@ msgstr ""
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
msgid "Search"
-msgstr ""
+msgstr "Iskanje"
#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
@@ -411,11 +414,11 @@ msgstr ""
#: editor/code_editor.cpp
msgid "Not found!"
-msgstr ""
+msgstr "Ni Zadetka!"
#: editor/code_editor.cpp
msgid "Replace By"
-msgstr ""
+msgstr "Zamenjaj Z"
#: editor/code_editor.cpp
msgid "Case Sensitive"
@@ -629,6 +632,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr ""
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -699,6 +709,14 @@ msgstr ""
msgid "Delete"
msgstr ""
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -1110,6 +1128,11 @@ msgid "File Exists, Overwrite?"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Dodaj Setter Lastnost"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr ""
@@ -1117,12 +1140,6 @@ msgstr ""
msgid "All Files (*)"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr ""
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr ""
@@ -1189,7 +1206,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1478,6 +1495,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1587,6 +1619,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1712,11 +1748,19 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1728,6 +1772,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1792,13 +1840,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2057,11 +2104,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2120,7 +2167,7 @@ msgstr ""
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2280,6 +2327,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2314,6 +2365,100 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2338,12 +2483,21 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Odstrani Spremenljivko"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2361,12 +2515,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2625,8 +2773,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2637,6 +2784,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "Izbriši Izbrano"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2781,6 +2933,55 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Funkcije:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2972,18 +3173,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -2992,30 +3185,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3044,14 +3221,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3164,6 +3333,36 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove vertical guide"
+msgstr "Odstrani Spremenljivko"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "Odstrani Spremenljivko"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3285,10 +3484,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3339,6 +3544,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3527,6 +3736,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3559,6 +3772,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3574,58 +3791,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4023,16 +4188,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4173,7 +4368,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4218,6 +4412,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4270,6 +4478,10 @@ msgstr ""
msgid "Close All"
msgstr "Zapri"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4280,13 +4492,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4390,33 +4600,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4439,6 +4638,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "Izbriši Izbrano"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4484,12 +4700,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4498,7 +4712,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4663,6 +4876,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4744,6 +4965,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4776,6 +5001,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4904,6 +5137,11 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "Preklopi na Zaustavitev"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5180,6 +5418,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5353,7 +5595,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5615,6 +5857,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5648,10 +5896,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5774,11 +6018,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6248,6 +6492,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "Odstrani Signal"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6433,6 +6686,11 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "Odstrani Signal"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6489,18 +6747,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6632,50 +6878,50 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "Neveljavena vrsta argumenta za convert(), uporabite TYPE_* konstanto."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Ni dovolj pomnilnika za dekodiranje bajtov, ali neveljaven format."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "stopnja argumenta je niÄ!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "To ni skripta z instanco"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Ne temelji na skripti"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "Ne temelji na datoteki virov"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Neveljaven primer formata slovarja (manjka @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
"Neveljaven primer formata slovarja (ni mogoÄe naložiti skripte iz @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Neveljaven primer formata slovarja (neveljavna skripta v @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Neveljaven primer slovarja (neveljavni podrazredi)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6689,15 +6935,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6765,12 +7019,9 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+#, fuzzy
+msgid "Clear Selection"
+msgstr "Izbriši Izbrano"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6900,7 +7151,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6908,7 +7159,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6916,7 +7167,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7150,11 +7401,20 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+#, fuzzy
+msgid "Invalid export template:\n"
+msgstr "Neveljaven indeks lastnosti imena."
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7258,18 +7518,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7328,6 +7576,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7391,6 +7647,11 @@ msgstr ""
msgid "Please Confirm..."
msgstr ""
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Dodaj Setter Lastnost"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7405,6 +7666,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
new file mode 100644
index 0000000000..8b3bfdf8bf
--- /dev/null
+++ b/editor/translations/sr_Cyrl.po
@@ -0,0 +1,7752 @@
+# Serbian (cyrillic) translation of the Godot Engine editor
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
+# This file is distributed under the same license as the Godot source code.
+#
+# ÐлекÑандар Урошевић <nicecubedude@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2017-11-26 15:50+0000\n"
+"Last-Translator: ÐлекÑандар Урошевић <alek.sandar0@yandex.com>\n"
+"Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/godot-"
+"engine/godot/sr_Cyrl/>\n"
+"Language: sr_Cyrl\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 2.18-dev\n"
+
+#: editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Онемогућено"
+
+#: editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Све одабрано"
+
+#: editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "Помери кључ"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Промените прелаз"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Промените положај"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Промените вредноÑÑ‚"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "Промените позив анимације"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Додајте нову траку"
+
+#: editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Дуплирајте кључеве"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Померите траку горе"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Померите траку доле"
+
+#: editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Обришите траку анимације"
+
+#: editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "ПоÑтавите прелаз на:"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Измените име анимације"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Измените интерполацију"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "Измените режим вредноÑти"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Wrap Mode"
+msgstr "Измените режим цикла"
+
+#: editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Измените криву чвора"
+
+#: editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Измените одабрану криву"
+
+#: editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Уколните кључеве"
+
+#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Дуплирајте одабрано"
+
+#: editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "Дуплирај транÑпоновану"
+
+#: editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr "Обришите одабрано"
+
+#: editor/animation_editor.cpp
+msgid "Continuous"
+msgstr "Трајан"
+
+#: editor/animation_editor.cpp
+msgid "Discrete"
+msgstr "Одвојен"
+
+#: editor/animation_editor.cpp
+msgid "Trigger"
+msgstr "Окидач"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Уметни кључ"
+
+#: editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "Помери кључеве"
+
+#: editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Увећај одабрано"
+
+#: editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "Увећај од курÑора"
+
+#: editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Идите на Ñледећи корак"
+
+#: editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Идите на претходни корак"
+
+#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr "Линеаран"
+
+#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "КонÑтантан"
+
+#: editor/animation_editor.cpp
+msgid "In"
+msgstr "Улаз"
+
+#: editor/animation_editor.cpp
+msgid "Out"
+msgstr "Из"
+
+#: editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "У-Из"
+
+#: editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Из-У"
+
+#: editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Прелази"
+
+#: editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Оптимизуј анимацију"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "ОчиÑтите анимацију"
+
+#: editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Ðаправите нову траку за %s и убаците кључ?"
+
+#: editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Ðаправите %d нових трака и убаците кључеве?"
+
+#: editor/animation_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Ðаправи"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Ðаправи анимацију и убаци"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Уметни траку и кључ"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Уметни кључ"
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Измени дужину анимације"
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Измени лупинг анимације"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "Ðаправи кључ Ñа почетном вредношћу"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Ðалепи"
+
+#: editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Увећај кључеве"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "Додај позивну траку"
+
+#: editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "Скала анимације."
+
+#: editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Дужина (Ñек.):"
+
+#: editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Дужина анимације (у Ñекундама)."
+
+#: editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Један корак (Ñек.):"
+
+#: editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "Поравнавање корака курÑора (у Ñекундама)."
+
+#: editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "Укључи/иÑкључи понављање анимације."
+
+#: editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Додај нове траке."
+
+#: editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "Помери траку горе."
+
+#: editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "Помери траку доле."
+
+#: editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Обриши одабрану траку."
+
+#: editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "Ðлатке за траке"
+
+#: editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Омогућите уређивање индивидуалних кључева кликом на њих."
+
+#: editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Оптимизатор анимација"
+
+#: editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr "МакÑимална линеарна грешка:"
+
+#: editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "МакÑимална угаона грешка:"
+
+#: editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "МакÑимални оптимизован угао:"
+
+#: editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Оптимизуј"
+
+#: editor/animation_editor.cpp
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr "Одабери AnimationPlayer из дрвета Ñцене за уређивање анимација."
+
+#: editor/animation_editor.cpp
+msgid "Key"
+msgstr "Кључ"
+
+#: editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Померај"
+
+#: editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Размера Ñкале:"
+
+#: editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Позови функције у којем чвору?"
+
+#: editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Обриши неважеће кључеве"
+
+#: editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Обриши необјашњене и празне траке"
+
+#: editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "ОчиÑти Ñве анимације"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "ОчиÑти анимацију(е) (ÐЕМРОПОЗИВÐЊÐ!)"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "ОчиÑти"
+
+#: editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Промени величину низа"
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "Промени тип вредноÑти низа"
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "Промени вредноÑÑ‚ низа"
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Иди на линију"
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Број линије:"
+
+#: editor/code_editor.cpp
+msgid "No Matches"
+msgstr "Ðема подудара"
+
+#: editor/code_editor.cpp
+msgid "Replaced %d occurrence(s)."
+msgstr "Замени %d појаве/а."
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr "Замени"
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Замени Ñве"
+
+#: editor/code_editor.cpp
+msgid "Match Case"
+msgstr "Подударање великих и малих Ñлова"
+
+#: editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Целе речи"
+
+#: editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Само одабрано"
+
+#: editor/code_editor.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Search"
+msgstr "Тражи"
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "Find"
+msgstr "Ðађи"
+
+#: editor/code_editor.cpp
+msgid "Next"
+msgstr "Следеће"
+
+#: editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Ðије пронађено!"
+
+#: editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Заменити Ñа"
+
+#: editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "Разликовање великих и малих Ñлова"
+
+#: editor/code_editor.cpp
+msgid "Backwards"
+msgstr "Ðатраг"
+
+#: editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Питај за замену"
+
+#: editor/code_editor.cpp
+msgid "Skip"
+msgstr "ПреÑкочи"
+
+#: editor/code_editor.cpp
+msgid "Zoom In"
+msgstr "Увеличај"
+
+#: editor/code_editor.cpp
+msgid "Zoom Out"
+msgstr "Умањи"
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "РеÑетуј увеличање"
+
+#: editor/code_editor.cpp editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Линија:"
+
+#: editor/code_editor.cpp
+msgid "Col:"
+msgstr "Колона:"
+
+#: editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "Метода у циљаном чвору мора бити наведена!"
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Target method not found! Specify a valid method or attach a script to target "
+"Node."
+msgstr ""
+"Циљана метода није пронађена! Ðаведите валидну методу или прикачите "
+"Ñкриптицу на циљани чвор."
+
+#: editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Повежи Ñа чвором:"
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr "Додај"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr "Обриши"
+
+#: editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr "Додај додатан аргумент позива:"
+
+#: editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr "Додатни аргументи позива:"
+
+#: editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr "Пут ка чвору:"
+
+#: editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Ðаправи функцију"
+
+#: editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Одложен"
+
+#: editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "Једном"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Затвори"
+
+#: editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Повежи"
+
+#: editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Повежи '%s' Ñа '%s'"
+
+#: editor/connections_dialog.cpp
+msgid "Connecting Signal:"
+msgstr "Везујући Ñигнал:"
+
+#: editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr "Ðаправи претплату"
+
+#: editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Повежи..."
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "ИÑкопчати"
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+msgid "Signals"
+msgstr "Сигнали"
+
+#: editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Ðаправи нов"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr "Омиљене:"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "ЧеÑте:"
+
+#: editor/create_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Тражи:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Подударање:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "ОпиÑ:"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Тражи замену за:"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "ЗавиÑноÑти за:"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"Ðа Ñцени '%s' Ñе тренутно ради.\n"
+"Промене неће бити у ефекту док Ñе не поново отвори."
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"РеÑÑƒÑ€Ñ '%s' Ñе тренутно кориÑти.\n"
+"Промене неће бити у ефекту док Ñе поново не отворе."
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "ЗавиÑноÑти"
+
+#: editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "РеÑурÑ"
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Path"
+msgstr "Пут"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "ЗавиÑноÑти:"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Поправи покварене"
+
+#: editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Уредник завиÑноÑти"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Потражи замену за реÑурÑ:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Отвори"
+
+#: editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "ВлаÑници:"
+
+#: editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Обриши одабране датотеке из пројекта? (ÐЕМРОПОЗИВÐЊÐ)"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"Жељене датотеке за бриÑање Ñу потребне за рад других реÑурÑа.\n"
+"Ипак их обриши? (ÐЕМРОПОЗИВÐЊÐ)"
+
+#: editor/dependency_editor.cpp
+msgid "Cannot remove:\n"
+msgstr "Ðе може Ñе обриÑати:\n"
+
+#: editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Грешка при учитавању:"
+
+#: editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "Сцена је неуÑпешно очитана због недоÑтајућих завиÑноÑти:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Open Anyway"
+msgstr "Ипак отвори"
+
+#: editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Која акција Ñе треба предузети?"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Поправи завиÑноÑти"
+
+#: editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Грешка при учитавању!"
+
+#: editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "Трајно обриши %d Ñтавка(и)? (ÐЕМРОПОЗИВÐЊÐ)"
+
+#: editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "ВлаÑништво"
+
+#: editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "РеÑурÑи без одређеног влаÑника:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "Преглед повезаних реÑурÑа"
+
+#: editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Обриши одабране датотеке?"
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr "Обриши"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Измени кључ речника"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Промени вредноÑÑ‚ речника"
+
+#: editor/editor_about.cpp
+msgid "Thanks from the Godot community!"
+msgstr "Хвала од Godot заједнице!"
+
+#: editor/editor_about.cpp
+msgid "Thanks!"
+msgstr "Хвала!"
+
+#: editor/editor_about.cpp
+msgid "Godot Engine contributors"
+msgstr "Godot Engine Ñарадници"
+
+#: editor/editor_about.cpp
+msgid "Project Founders"
+msgstr "ОÑнивачи пројекта"
+
+#: editor/editor_about.cpp
+msgid "Lead Developer"
+msgstr "Главни девелопер"
+
+#: editor/editor_about.cpp editor/project_manager.cpp
+msgid "Project Manager"
+msgstr "Менаџер пројекта"
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr "Девелопери"
+
+#: editor/editor_about.cpp
+msgid "Authors"
+msgstr "Ðутори"
+
+#: editor/editor_about.cpp
+msgid "Platinum Sponsors"
+msgstr "ПлатинумÑки Ñпонзори"
+
+#: editor/editor_about.cpp
+msgid "Gold Sponsors"
+msgstr "Златни Ñпонзори"
+
+#: editor/editor_about.cpp
+msgid "Mini Sponsors"
+msgstr "Мали Ñпонзори"
+
+#: editor/editor_about.cpp
+msgid "Gold Donors"
+msgstr "Златни донатори"
+
+#: editor/editor_about.cpp
+msgid "Silver Donors"
+msgstr "Сребрни донатори"
+
+#: editor/editor_about.cpp
+msgid "Bronze Donors"
+msgstr "Бронзани донатори"
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr "Донатори"
+
+#: editor/editor_about.cpp
+msgid "License"
+msgstr "ЛиценÑа"
+
+#: editor/editor_about.cpp
+msgid "Thirdparty License"
+msgstr "ЛиценÑа трећег лица"
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of thirdparty free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such thirdparty components with their "
+"respective copyright statements and license terms."
+msgstr ""
+"Godot Engine Ñе оÑлања на бројне Ñлободне и отворене библиотеке трећег лица "
+"компатибилне Ñа уÑловима MIT лиценÑе. Следи иÑцрпна лиÑта Ñвих тих "
+"компонената трећих лица Ñа њиховим одговарајућим изјавама о ауторÑким "
+"правима и уÑловима лиценÑе."
+
+#: editor/editor_about.cpp
+msgid "All Components"
+msgstr "Све компоненте"
+
+#: editor/editor_about.cpp
+msgid "Components"
+msgstr "Компоненте"
+
+#: editor/editor_about.cpp
+msgid "Licenses"
+msgstr "ЛиценÑе"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Error opening package file, not in zip format."
+msgstr "Грешка при отварању датотеку пакета. Датотека није zip формата."
+
+#: editor/editor_asset_installer.cpp
+msgid "Uncompressing Assets"
+msgstr "ДекомпреÑија ÑредÑтва"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr "Пакет је инÑталиран уÑпешно!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr "УÑпех!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "ИнÑталирај"
+
+#: editor/editor_asset_installer.cpp
+msgid "Package Installer"
+msgstr "ИнÑталер пакета"
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr "Звучници"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr "Додај ефекат"
+
+#: editor/editor_audio_buses.cpp
+msgid "Rename Audio Bus"
+msgstr "Преименуј звучни баÑ(контролер)"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Solo"
+msgstr "Укљ./ИÑкљ. Ñоло звучног баÑа"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Mute"
+msgstr "Укљ./ИÑкљ. немоÑÑ‚ звучног баÑа"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr "Промени Bypass ефекат звучног баÑа"
+
+#: editor/editor_audio_buses.cpp
+msgid "Select Audio Bus Send"
+msgstr "Одабери Ð¿Ñ€ÐµÐ½Ð¾Ñ Ð·Ð²ÑƒÑ‡Ð½Ð¾Ð³ баÑа"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus Effect"
+msgstr "Додај ефекат звучном баÑу"
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Bus Effect"
+msgstr "Помери звучни ефекат"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Bus Effect"
+msgstr "Обриши звучни ефекат"
+
+#: editor/editor_audio_buses.cpp
+msgid "Audio Bus, Drag and Drop to rearrange."
+msgstr "Звучни баÑ, превуците и иÑпуÑтите за преуређивање."
+
+#: editor/editor_audio_buses.cpp
+msgid "Solo"
+msgstr "Ñоло"
+
+#: editor/editor_audio_buses.cpp
+msgid "Mute"
+msgstr "Пригуши"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bypass"
+msgstr "Заобиђи"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bus options"
+msgstr "ПоÑтавке баÑа"
+
+#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "Дуплирај"
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Volume"
+msgstr "РеÑетуј јачину"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr "Обриши ефекат"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus"
+msgstr "Додај звучни баÑ"
+
+#: editor/editor_audio_buses.cpp
+msgid "Master bus can't be deleted!"
+msgstr "Главни Ð±Ð°Ñ Ñе не може обриÑати!"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Audio Bus"
+msgstr "Обриши звучни баÑ"
+
+#: editor/editor_audio_buses.cpp
+msgid "Duplicate Audio Bus"
+msgstr "Дуплирај аудио баÑ"
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Bus Volume"
+msgstr "РеÑетуј јачину баÑа"
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Audio Bus"
+msgstr "Помери звучни баÑ"
+
+#: editor/editor_audio_buses.cpp
+msgid "Save Audio Bus Layout As.."
+msgstr "Сачувај раÑпоред звучног баÑа као..."
+
+#: editor/editor_audio_buses.cpp
+msgid "Location for New Layout.."
+msgstr "Локација за нови раÑпоред..."
+
+#: editor/editor_audio_buses.cpp
+msgid "Open Audio Bus Layout"
+msgstr "Отвори раÑпоред звучног баÑа"
+
+#: editor/editor_audio_buses.cpp
+msgid "There is no 'res://default_bus_layout.tres' file."
+msgstr "Датотека „res://default_bus_layout.tres“ не поÑтоји."
+
+#: editor/editor_audio_buses.cpp
+msgid "Invalid file, not an audio bus layout."
+msgstr "Датотека не Ñадржи раÑпоред звучног баÑа."
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Bus"
+msgstr "Додај баÑ"
+
+#: editor/editor_audio_buses.cpp
+msgid "Create a new Bus Layout."
+msgstr "Ðаправи нови Ð±Ð°Ñ Ñ€Ð°Ñпоред."
+
+#: editor/editor_audio_buses.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Load"
+msgstr "Учитај"
+
+#: editor/editor_audio_buses.cpp
+msgid "Load an existing Bus Layout."
+msgstr "Учитај поÑтојећи Ð±Ð°Ñ Ñ€Ð°Ñпоред."
+
+#: editor/editor_audio_buses.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr "Сачувај као"
+
+#: editor/editor_audio_buses.cpp
+msgid "Save this Bus Layout to a file."
+msgstr "Сачувај овај Ð±Ð°Ñ Ñ€Ð°Ñпоред у датотеци."
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+msgid "Load Default"
+msgstr "Учитај уобичајено"
+
+#: editor/editor_audio_buses.cpp
+msgid "Load the default Bus Layout."
+msgstr "Учитај уобичајен Ð±Ð°Ñ Ñ€Ð°Ñпоред."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr "Ðеважеће име."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr "Важећа Ñлова:"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr "Ðеважеће име. Име је резервиÑано за поÑтојећу клаÑу."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr "Ðеважеће име. Име је резервиÑано за поÑтојећи уграђени тип."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr "Ðеважеће име. Име је резервиÑано за поÑтојећу глобалну конÑтанту."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr "Ðеважећи пут."
+
+#: editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr "Датотека не поÑтоји."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr "Ðије на пут реÑурÑа."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr "Додај аутоматÑко учитавање"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr "ÐутоматÑко учитавање '%s' већ поÑтоји!"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr "Преименуј аутоматÑко учитавање"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "Укљ./ИÑкљ. глобале аутоматÑког учитавања"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr "Помери аутоматÑко учитавање"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr "Обриши аутоматÑко учитавање"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr "Укључи"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr "Преуреди аутоматÑка учитавања"
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Path:"
+msgstr "Пут:"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr "Име чвора:"
+
+#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
+msgid "Name"
+msgstr "Име"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr "Синглетон"
+
+#: editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr "ЛиÑта:"
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Ðжурирање Ñцене"
+
+#: editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "Чувам локалне промене..."
+
+#: editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Ðжурирам Ñцену..."
+
+#: editor/editor_dir_dialog.cpp
+msgid "Please select a base directory first"
+msgstr "Молим, одаберите базни директоријум"
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Одабери директоријум"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr "Ðаправи директоријум"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr "Име:"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr "ÐеуÑпех при прављењу директоријума."
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Одабери"
+
+#: editor/editor_export.cpp
+msgid "Storing File:"
+msgstr "Складиштење датотеке:"
+
+#: editor/editor_export.cpp
+msgid "Packing"
+msgstr "Паковање"
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+msgid "Template file not found:\n"
+msgstr "ШаблонÑка датотека није пронађена:\n"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "Датотека поÑтоји, препиши?"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Ðаправи директоријум"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr "Сви препознати"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Све датотеке (*)"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr "Отвори датотеку"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr "Отвори датотеку/е"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr "Отвори директоријум"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr "Отвори датотеку или директоријум"
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr "Сачувај"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr "Сачувај датотеку"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr "Ðатраг"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr "Ðапред"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr "Иди горе"
+
+#: editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr "ОÑвежи"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr "Прикажи Ñакривене датотеке"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr "Прикажи омиљене"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr "Промени режим"
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr "ФокуÑирај пут"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr "Помери нагоре омиљену"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr "Помери надоле омиљену"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder"
+msgstr "Иди у родитељÑки директоријум"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Директоријуми и датотеке:"
+
+#: editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Преглед:"
+
+#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
+#: scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr "Датотека:"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Мора Ñе кориÑтити важећа екÑтензија."
+
+#: editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "Скенирање извора"
+
+#: editor/editor_file_system.cpp
+msgid "(Re)Importing Assets"
+msgstr "(Поновно) Увожење ÑредÑтава"
+
+#: editor/editor_help.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Потражи помоћ"
+
+#: editor/editor_help.cpp
+msgid "Class List:"
+msgstr "ЛиÑта клаÑа:"
+
+#: editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Потражи клаÑе"
+
+#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Врх"
+
+#: editor/editor_help.cpp editor/property_editor.cpp
+msgid "Class:"
+msgstr "КлаÑа:"
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+msgid "Inherits:"
+msgstr "ÐаÑлеђује:"
+
+#: editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "ÐаÑлеђено од:"
+
+#: editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Кратак опиÑ:"
+
+#: editor/editor_help.cpp
+msgid "Members"
+msgstr "Чланови"
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Members:"
+msgstr "Чланови:"
+
+#: editor/editor_help.cpp
+msgid "Public Methods"
+msgstr "Јавне методе"
+
+#: editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Јавне методе:"
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items"
+msgstr "Ставке теме графичког интерфејÑа"
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "Ставке теме графичког интерфејÑа:"
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Signals:"
+msgstr "Сигнали:"
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr "Енумерације"
+
+#: editor/editor_help.cpp
+msgid "Enumerations:"
+msgstr "Енумерације:"
+
+#: editor/editor_help.cpp
+msgid "enum "
+msgstr "enum "
+
+#: editor/editor_help.cpp
+msgid "Constants"
+msgstr "КонÑтанте"
+
+#: editor/editor_help.cpp
+msgid "Constants:"
+msgstr "КонÑтанте:"
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr "ОпиÑ"
+
+#: editor/editor_help.cpp
+msgid "Properties"
+msgstr "ОÑобине"
+
+#: editor/editor_help.cpp
+msgid "Property Description:"
+msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Тренутно нема опиÑа ове оÑобине. Молимо помозите нама тако што ћете [color="
+"$color][url=$url]напиÑати једну[/url][/color]!"
+
+#: editor/editor_help.cpp
+msgid "Methods"
+msgstr "Методе"
+
+#: editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Тренутно нема опиÑа ове методе. Молимо помозите нама тако што ћете [color="
+"$color][url=$url]напиÑати једну[/url][/color]!"
+
+#: editor/editor_help.cpp
+msgid "Search Text"
+msgstr "Потражи текÑÑ‚"
+
+#: editor/editor_log.cpp
+msgid "Output:"
+msgstr "Излаз:"
+
+#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/property_editor.cpp editor/script_editor_debugger.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Clear"
+msgstr "Обриши"
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr "Грешка при чувању реÑурÑа!"
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr "Сачувај реÑÑƒÑ€Ñ ÐºÐ°Ð¾..."
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "Разумем..."
+
+#: editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Ðе могу отворити датотеку за пиÑање:"
+
+#: editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Тражени формат датотеке је непознат:"
+
+#: editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Грешка при чувању."
+
+#: editor/editor_node.cpp
+msgid "Can't open '%s'."
+msgstr "Ðе могу отворити '%s'."
+
+#: editor/editor_node.cpp
+msgid "Error while parsing '%s'."
+msgstr "Грешка при анализирању '%s'."
+
+#: editor/editor_node.cpp
+msgid "Unexpected end of file '%s'."
+msgstr "Ðеочекивани крај датотеке '%s'."
+
+#: editor/editor_node.cpp
+msgid "Missing '%s' or its dependencies."
+msgstr "ÐедоÑтаје '%s' или његове завиÑноÑти."
+
+#: editor/editor_node.cpp
+msgid "Error while loading '%s'."
+msgstr "Грешка при учитавању '%s'."
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Чување Ñцене"
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Ðнализирање"
+
+#: editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "Прављење приказа"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a tree root."
+msgstr "Ова операција Ñе не може обавити без корена дрвета."
+
+#: editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr "Ðе могу Ñачувати Ñцену. Вероватно завиÑноÑти ниÑу задовољене."
+
+#: editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "Грешка при учитавању реÑурÑа."
+
+#: editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr "Ðе могу учитати MeshLibrary за Ñпајање!"
+
+#: editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr "Грешка при чувању MeshLibrary!"
+
+#: editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "Ðе могу учитати TileSet за Ñпајање!"
+
+#: editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "Грешка при чувању TileSet!"
+
+#: editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "Грешка при чувању раÑпореда!"
+
+#: editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr "Уобичајен раÑпоред је преуређен."
+
+#: editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "Име раÑпореда није пронађен!"
+
+#: editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "ПоÑтави подразумевани изглед на почетну вредноÑÑ‚."
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+"Овај реÑÑƒÑ€Ñ Ð¿Ñ€Ð¸Ð¿Ð°Ð´Ð° Ñцени која је увезена, тако да Ñе не може мењати.\n"
+"Молим, прочитајте документацију за увожење Ñцена како би боље разумели овај "
+"начин рада."
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it will not be kept when saving the current scene."
+msgstr ""
+"Овај реÑÑƒÑ€Ñ Ð¿Ñ€Ð¸Ð¿Ð°Ð´Ð° Ñцени која је или коришћена или наÑлеђена.\n"
+"Промене нећу бити задржане при чувању тренутне Ñцене."
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+"Овај реÑÑƒÑ€Ñ Ñ˜Ðµ увезен, тако да га није могуће изменити. Промените његове "
+"поÑтавке у прозору за увоз и онда га поново унеÑите."
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene was imported, so changes to it will not be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+"Ова Ñцена је увезена, тако да њене промене Ñе нећу задржати.\n"
+"Њено коришћење или наÑлеђивање ће омогућити прављење промена над њом.\n"
+"Молим, прочитајте документацију за увоз Ñцена како би боље размели овај "
+"начин рада."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Овај реÑÑƒÑ€Ñ Ð¿Ñ€Ð¸Ð¿Ð°Ð´Ð° Ñцени која је увезена, тако да Ñе не може мењати.\n"
+"Молим, прочитајте документацију за увожење Ñцена како би боље разумели овај "
+"начин рада."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Прошири Ñве"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Умањи Ñве"
+
+#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Копирај параметре"
+
+#: editor/editor_node.cpp
+msgid "Paste Params"
+msgstr "Ðалепи параметре"
+
+#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "Ðалепи реÑурÑе"
+
+#: editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "Копирај реÑурÑе"
+
+#: editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr "Ðаправи уграђеним"
+
+#: editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr "Ðаправи под-реÑÑƒÑ€Ñ Ñ˜ÐµÐ´Ð¸Ð½Ñтвеним"
+
+#: editor/editor_node.cpp
+msgid "Open in Help"
+msgstr "Отвори у прозору за помоћ"
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "Ðе поÑтоји дефиниÑана Ñцена за покретање."
+
+#: editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+"Главна Ñцена није дефиниÑана, одаберите једну?\n"
+"Можете је променити каÑније у „ПоÑтавке пројекта“ иÑпод категорије "
+"„апликација“."
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+"Одабрана Ñцена '%s' не поÑтоји, одаберите важећу?\n"
+"Можете је променити каÑније у „ПоÑтавке пројекта“ иÑпод категорије "
+"„апликација“."
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+"Одабрана Ñцена '%s' није датотека Ñцене, одаберите бажећу?\n"
+"Можете је променити каÑније у „ПоÑтавке пројекта“ иÑпод категорије "
+"„апликација“."
+
+#: editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr "Тренутна Ñцена није Ñачувана, молим Ñачувајте је пре покретања."
+
+#: editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "Ðе могу покренути подпроцеÑ!"
+
+#: editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "Отвори Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr "Отвори базну Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "Брзо отварање Ñцене..."
+
+#: editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "Брзо отварање Ñкриптице..."
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr "Сачувај и затвори"
+
+#: editor/editor_node.cpp
+msgid "Save changes to '%s' before closing?"
+msgstr "Сачувај промене '%s' пре излаÑка?"
+
+#: editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "Сачувај Ñцену као..."
+
+#: editor/editor_node.cpp
+msgid "No"
+msgstr "Ðе"
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr "Да"
+
+#: editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr "Ова Ñцена није Ñачувана. Сачувај пре покретања?"
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "Ова операција Ñе не може обавити без Ñцене."
+
+#: editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr "Извези Mesh Library"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Ова операција Ñе не може обавити без главног чвора."
+
+#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "Извези Tile Set"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a selected node."
+msgstr "Ова операција Ñе не може обавити без одабраног чвора."
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "Тренутна Ñцена није Ñачувана. Ипак отвори?"
+
+#: editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "Ðе могу поново учитати Ñцену која није Ñачувана."
+
+#: editor/editor_node.cpp
+msgid "Revert"
+msgstr "Врати"
+
+#: editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "Ова акција Ñе не може опозвати. ÐаÑтави?"
+
+#: editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "Брзо покретање Ñцене..."
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr "Изађи"
+
+#: editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "Изађи из уредника?"
+
+#: editor/editor_node.cpp
+msgid "Open Project Manager?"
+msgstr "Отвори менаџер пројекта?"
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr "Сачувај и изађи"
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr "Сачувај промене тренутне Ñцене/а пре излазка?"
+
+#: editor/editor_node.cpp
+msgid "Save changes the following scene(s) before opening Project Manager?"
+msgstr "Сачувај промене тренутне Ñцене/а пре отварање менаџера пројекта?"
+
+#: editor/editor_node.cpp
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+"Ова опција је заÑтарела. Ситуације код којих оÑвежавање је неопходно Ñу Ñада "
+"грешке. Молимо пријавите ову грешку."
+
+#: editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr "Одабери главну Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr "ÐеуÑпех при прикључивању додатка због конфигурационе датотеке: '%s'."
+
+#: editor/editor_node.cpp
+msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
+msgstr "ÐеуÑпех при налажењу поља за Ñкриптицу у додатку „res://addons/%s“."
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s'."
+msgstr "ÐеуÑпех при учитавању Ñкриптице додатка Ñа путем „%s“."
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+"ÐеуÑпех при учитавању Ñкриптице додатка Ñа путем „%s“. Базни тип није "
+"EditorPlugin."
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+"ÐеуÑпех при учитавању Ñкриптице додатка Ñа путем „%s“. Скриптица није у "
+"режиму алатке."
+
+#: editor/editor_node.cpp
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+"Сцена „%s“ је аутоматÑки увезена, тако да Ñе не може мењати.\n"
+"За извршавања измена, направите нову наÑлеђену Ñцену."
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "Уф"
+
+#: editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+"Грешка при учитавању Ñцене. Сцена мора бити унутар директоријума пројекта. "
+"КориÑтите „Увоз“ за отварање Ñцене, онда је Ñачувајте у директоријуму "
+"пројекта."
+
+#: editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "Сцена „%s“ има покварене завиÑноÑти:"
+
+#: editor/editor_node.cpp
+msgid "Clear Recent Scenes"
+msgstr "ОчиÑти недавне Ñцене"
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "Сачувај раÑпоред"
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Обирши раÑпоред"
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+msgid "Default"
+msgstr "Уобичајено"
+
+#: editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "Промени ÑценÑки таб"
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr "још %d датотека/е или директоријум/а"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "још %d директоријум/а"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "још %d датотека/е"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Позиција панела"
+
+#: editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr "Режим без Ñметње"
+
+#: editor/editor_node.cpp
+msgid "Toggle distraction-free mode."
+msgstr "Укљ./ИÑкљ. режим без Ñметње."
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Додај нову Ñцену."
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr "Сцена"
+
+#: editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "Отвори претходну Ñцену."
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr "Следећи таб"
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr "Претходни таб"
+
+#: editor/editor_node.cpp
+msgid "Filter Files.."
+msgstr "Филтрирај датотеке..."
+
+#: editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "Операције Ñа датотекама Ñцена."
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Ðова Ñцена"
+
+#: editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "Ðова наÑлеђена Ñцена..."
+
+#: editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "Отвори Ñцену..."
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "Сачувај Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr "Сачувај Ñве Ñцене"
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "Затвори Ñцену"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Open Recent"
+msgstr "Отвори недавно коришћено"
+
+#: editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "Конвертуј у..."
+
+#: editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr "MeshLibrary..."
+
+#: editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "TileSet..."
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr "Опозови"
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp
+msgid "Redo"
+msgstr "Поново уради"
+
+#: editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "Поврати Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr "Разни алати за пројекат или Ñцену."
+
+#: editor/editor_node.cpp
+msgid "Project"
+msgstr "Пројекат"
+
+#: editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "ПоÑтавке пројекта"
+
+#: editor/editor_node.cpp
+msgid "Run Script"
+msgstr "Покрени Ñкриптицу"
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export"
+msgstr "Извоз"
+
+#: editor/editor_node.cpp
+msgid "Tools"
+msgstr "Ðлати"
+
+#: editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "Изађи у лиÑту пројекта"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "Дебаг"
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr "Извршити Ñа удаљеним дебагом"
+
+#: editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+"При извозу или извршавању, крајља датотека ће покушати да Ñе повеже Ñа "
+"адреÑом овог рачунара како би Ñе могла дебаговати."
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr "Мали извоз Ñа Network FS"
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+"Када је ова опција укључена, извоз ће правити датотеку најмање могуће "
+"величине.\n"
+"Датотечни ÑиÑтем ће бити обезбеђен од Ñтране пројекта преко мреже.\n"
+"Ðа Android, извршавање ће кориÑтити USB кабл за бржу перфоманцу. Ова опција "
+"убрзава теÑтирање великих игра."
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "Видљиви облици Ñудара"
+
+#: editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+"Облици Ñудара и чворова зракова (за 2Д и 3Д) ћу бити видљиви током игре ако "
+"је ова опција укључена."
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Видљива навигација"
+
+#: editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+"Ðавигационе мреже и полигони ће бити видљиви током игре ако је ова опција "
+"укључена."
+
+#: editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr "Синхронизуј промене Ñцене"
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+"Када је ова опција укључена, Ñве промене Ñцене ће бити приказане у "
+"покренутој игри.\n"
+"Када је ово коришћено на удаљеном уређају, ово је много ефикаÑније Ñа "
+"мрежним датотечним ÑиÑтемом."
+
+#: editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr "Синхронизуј промене Ñкриптица"
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+"Када је ова опција укључена, Ñве Ñкриптице које Ñе Ñачувају ће бити поново "
+"учитане у покренутој игри.\n"
+"Када је ово коришћено на удаљеном уређају, ово је много ефикаÑније Ñа "
+"мрежним датотечним ÑиÑтемом."
+
+#: editor/editor_node.cpp
+msgid "Editor"
+msgstr "Уредник"
+
+#: editor/editor_node.cpp editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "ПоÑтавке уредника"
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "РаÑпоред уредника"
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr "Укљ./ИÑкљ. режим целог екрана"
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr "Управљај извозним шаблонима"
+
+#: editor/editor_node.cpp
+msgid "Help"
+msgstr "Помоћ"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "КлаÑе"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Online Docs"
+msgstr "Онлајн документација"
+
+#: editor/editor_node.cpp
+msgid "Q&A"
+msgstr "Питања и одговори"
+
+#: editor/editor_node.cpp
+msgid "Issue Tracker"
+msgstr "Пратилац грешака"
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr "Заједница"
+
+#: editor/editor_node.cpp
+msgid "About"
+msgstr "О програму"
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr "Покрени пројекат."
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr "Покрени"
+
+#: editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr "Паузирај Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr "Паузирај Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr "ЗауÑави Ñцену."
+
+#: editor/editor_node.cpp
+msgid "Stop"
+msgstr "ЗауÑтави"
+
+#: editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr "Покрени промењену Ñцену."
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr "Покрени Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "Покрени Ñпецифичну Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr "Покрени Ñпецифичну Ñцену"
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "Окрене Ñе кад Ñе едиторÑки прозор поново обоји!"
+
+#: editor/editor_node.cpp
+msgid "Update Always"
+msgstr "Увек ажурирај"
+
+#: editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "Ðжурирај промене"
+
+#: editor/editor_node.cpp
+msgid "Disable Update Spinner"
+msgstr "ИÑкључи индикатор ажурирања"
+
+#: editor/editor_node.cpp
+msgid "Inspector"
+msgstr "ИнÑпектор"
+
+#: editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "Ðаправи нови реÑÑƒÑ€Ñ Ñƒ меморији и измени га."
+
+#: editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "Учитај поÑтојећи реÑÑƒÑ€Ñ Ñа диÑка и измени га."
+
+#: editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "Сачувај тренутно измењени реÑурÑ."
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "Сачувај као..."
+
+#: editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "Иди на претходно измењен објекат у иÑторијату."
+
+#: editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "Иди на Ñледећи измењени објекат у иÑторијату."
+
+#: editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr "ИÑторијат недавно измењених објеката."
+
+#: editor/editor_node.cpp
+msgid "Object properties."
+msgstr "ПоÑтавке објекта."
+
+#: editor/editor_node.cpp
+msgid "Changes may be lost!"
+msgstr "Промене Ñе могу изгубити!"
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Увоз"
+
+#: editor/editor_node.cpp
+msgid "Node"
+msgstr "Чвор"
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Датотечни ÑиÑтем"
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr "Излаз"
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr "Ðемој Ñачувати"
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "Увези шаблоне из ZIP датотеке"
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export Project"
+msgstr "Извези пројекат"
+
+#: editor/editor_node.cpp
+msgid "Export Library"
+msgstr "Извези библиотеку"
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "Споји Ñа поÑтојећим"
+
+#: editor/editor_node.cpp
+msgid "Password:"
+msgstr "Лозинка:"
+
+#: editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "Отвори и покрени Ñкриптицу"
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr "Ðова наÑлеђена"
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "Учитај грешке"
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "Одабери"
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr "Отвори 2Д уредник"
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr "Отвори 3Д уредник"
+
+#: editor/editor_node.cpp
+msgid "Open Script Editor"
+msgstr "Отвори уредник Ñкриптица"
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr "Отвори библиотеку ÑредÑтва"
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr "Отвори Ñледећи уредник"
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr "Отвори претходни уредник"
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr "Ðаправи приказ мрежа"
+
+#: editor/editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr "Сличица..."
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr "ИнÑталирани прикључци:"
+
+#: editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr "Ðжурирај"
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr "Верзија:"
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "Ðутор:"
+
+#: editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "СтатуÑ:"
+
+#: editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr "ЗауÑтави профилирање"
+
+#: editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr "Покрени профилирање"
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr "Мера:"
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr "Време Ñлике (Ñек.)"
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr "Средње време (Ñек.)"
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr "Слика %"
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr "Слика физике %"
+
+#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "Време:"
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr "Закључно"
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr "Сам"
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr "Слика број:"
+
+#: editor/editor_run_native.cpp
+msgid "Select device from the list"
+msgstr "Одабери уређај Ñа лиÑте"
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the export menu."
+msgstr ""
+"ÐиÑу пронађене поÑтавке извоза за ову платформу.\n"
+"Молим, додајте поÑтавке у менију за извоз."
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "Пиши логику у _run() методи."
+
+#: editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "Већ поÑтоји уређена Ñцена."
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "ÐеуÑпех при прављењу Ñкриптице:"
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "Да ли Ñте заборавили кључну реч „tool“?"
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "ÐеуÑпех при покретању Ñкриптице:"
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "Да ли Ñте заборавили методу „_run“?"
+
+#: editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "Уобичајено (као и уредник)"
+
+#: editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "Одабери чвор/ове за увоз"
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "Пут Ñцене:"
+
+#: editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr "Увоз преко чвора:"
+
+#: editor/export_template_manager.cpp
+msgid "Re-Download"
+msgstr "Поновно преузимање"
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr "ДеинÑталирај"
+
+#: editor/export_template_manager.cpp
+msgid "(Installed)"
+msgstr "(инÑталирано)"
+
+#: editor/export_template_manager.cpp
+msgid "Download"
+msgstr "Преучми"
+
+#: editor/export_template_manager.cpp
+msgid "(Missing)"
+msgstr "(ÐедоÑтаје)"
+
+#: editor/export_template_manager.cpp
+msgid "(Current)"
+msgstr "(Тренутно)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Прихватам одредишта, молим Ñачекајте..."
+
+#: editor/export_template_manager.cpp
+msgid "Remove template version '%s'?"
+msgstr "Обриши шаблон верзије „%s“?"
+
+#: editor/export_template_manager.cpp
+msgid "Can't open export templates zip."
+msgstr "Ðе могу отворити ZIP датотеку Ñа извозним шаблонима."
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside templates."
+msgstr "Ðеважећи формат датотеке version.txt унутар шаблона."
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Invalid version.txt format inside templates. Revision is not a valid "
+"identifier."
+msgstr ""
+"Ðеважећи формат датотеке „version.txt“ унутар шаблона. „Revision“ није "
+"важећи идентификатор."
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside templates."
+msgstr "„version.txt“ није пронаћен у шаблону."
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for templates:\n"
+msgstr "Грешка при прављењу пута за шаблоне:\n"
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr "Отпакивање извозних шаблона"
+
+#: editor/export_template_manager.cpp
+msgid "Importing:"
+msgstr "Увожење:"
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Ðема линкова за Ñкидање ове верзије. Директно Ñкидање ја дозвољено Ñамо за "
+"званичне верзије."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Ðе могу решити."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Ðе могу Ñе повезати."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Ðема одговора."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "Захтев није уÑпешан."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Петља преуÑмерења."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "ÐеуÑпех:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "ÐеуÑпех при запиÑивању датотеке."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "Преузимање уÑпешно."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Грешка при захтеву url: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Повезивање Ñа одредиштем..."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Веза прекинута"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Решавање"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Ðе могу решити"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Повезивање..."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "ÐеуÑпех при повезивању"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Повезан"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "Захтевање..."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "Преузимање у току"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Повезивање не уÑпешно"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "Грешка SSL руковања"
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr "Тренутна верзија:"
+
+#: editor/export_template_manager.cpp
+msgid "Installed Versions:"
+msgstr "ИнÑталиране верзије:"
+
+#: editor/export_template_manager.cpp
+msgid "Install From File"
+msgstr "ИнÑталирај Ñа датотеком"
+
+#: editor/export_template_manager.cpp
+msgid "Remove Template"
+msgstr "Обриши шаблон"
+
+#: editor/export_template_manager.cpp
+msgid "Select template file"
+msgstr "Одабери шаблонÑку датотеку"
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr "Менаџер извозних шаблона"
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Преузми шаблоне"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Одабери одредиште Ñа лиÑте: "
+
+#: editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+"Ðе могу отворити „file_type_cache.cch“ за пиÑање! Ðе чувам датотеке "
+"кеш(cache) типа!"
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "ÐеуÑпех навигације у „%s“ пошто није пронађен у датотечном ÑиÑтему!"
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails"
+msgstr "Прикажи Ñтвари као мрежа Ñличица"
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a list"
+msgstr "Прикажи Ñтвари као лиÑта"
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"\n"
+"Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+"\n"
+"СтатуÑ: Увоз датотеке неуÑпео. Молим, иÑправите датотеку и поново је увезите "
+"Ñами."
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr "Ðе могу померити/преименовати корен реÑурÑа."
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself.\n"
+msgstr "Ðе могу померити директоријум у њену Ñаму.\n"
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:\n"
+msgstr "Грешка при померању:\n"
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:\n"
+msgstr "Ðије могуће ажурирати завиÑноÑти:\n"
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided"
+msgstr "Име није дато"
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters"
+msgstr "Дато име Ñадржи неважећа Ñлова"
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided."
+msgstr "Име није дато."
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr "Дато име Ñадржи неважећа Ñлова."
+
+#: editor/filesystem_dock.cpp
+msgid "A file or folder with this name already exists."
+msgstr "Датотека или директоријум Ñа овим именом већ поÑтоји."
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming file:"
+msgstr "Преименовање датотеке:"
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming folder:"
+msgstr "Преименовање директоријума:"
+
+#: editor/filesystem_dock.cpp
+msgid "Expand all"
+msgstr "Прошири Ñве"
+
+#: editor/filesystem_dock.cpp
+msgid "Collapse all"
+msgstr "Умањи Ñве"
+
+#: editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr "Копирај пут"
+
+#: editor/filesystem_dock.cpp
+msgid "Rename.."
+msgstr "Преименуј..."
+
+#: editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr "Помери у..."
+
+#: editor/filesystem_dock.cpp
+msgid "New Folder.."
+msgstr "Ðови директоријум..."
+
+#: editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr "Покажи у менаџеру датотека"
+
+#: editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr "Додај инÑтанцу"
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "Измени завиÑноÑти..."
+
+#: editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr "Погледај влаÑнике..."
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr "Претодни директоријум"
+
+#: editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr "Следећи директоријум"
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "Поново Ñкенирај датотеке"
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "Директоријум као омиљени"
+
+#: editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "Ðаправи Ñледећу Ñцену/е као дете одабраног чвора."
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait.."
+msgstr ""
+"Скенирање датотека,\n"
+"Молим Ñачекајте..."
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr "Помери"
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Rename"
+msgstr "Преименуј"
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "Додај у групу"
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "Обриши из групе"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr "Увези као једна Ñцена"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Animations"
+msgstr "Увези Ñа одвојеним анимацијама"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials"
+msgstr "Увези Ñа одвојеним материјалима"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr "Увези Ñа одвојеним објектима"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr "Увези Ñа одвојеним објектима и материјалима"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr "Увези Ñа одвојеним објектима и анимацијама"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials+Animations"
+msgstr "Увези Ñа одвојеним материјалима и анимацијама"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr "Увези Ñа одвојеним објектима, материјалима и анимацијама"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr "Увези као више Ñцена"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr "Увези као више Ñцена и материјала"
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr "Увези Ñцену"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Importing Scene.."
+msgstr "Увожење Ñцеене..."
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script.."
+msgstr "Обрађивање Ñкриптице..."
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr "ÐеуÑпех при учитавању поÑтувозне Ñкриптице:"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr "Ðеважећа/покварена Ñкриптица за поÑÑ‚-увозну фазу (проверите конзолу):"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr "Грешка при обрађивању поÑÑ‚-увозне Ñкриптице:"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving.."
+msgstr "Чување..."
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr "ПоÑтави као уобичајено за „%s“"
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr "Обриши уобичајено за „%s“"
+
+#: editor/import_dock.cpp
+msgid " Files"
+msgstr " Датотеке"
+
+#: editor/import_dock.cpp
+msgid "Import As:"
+msgstr "Увези као:"
+
+#: editor/import_dock.cpp editor/property_editor.cpp
+msgid "Preset.."
+msgstr "ПоÑтавке..."
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr "Поново увези"
+
+#: editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr "ПоÑтави MultiNode"
+
+#: editor/node_dock.cpp
+msgid "Groups"
+msgstr "Групе"
+
+#: editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr "Одабери чвор за мењање Ñигнала и група."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "Ðаправи полигон"
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "Измени полигон"
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr "Уметни тачку"
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "Уреди полигон (обриши тачку)"
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Poly And Point"
+msgstr "Обриши полигон и тачку"
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Create a new polygon from scratch"
+msgstr "Ðаправи нови полигон од почетка"
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit existing polygon:\n"
+"LMB: Move Point.\n"
+"Ctrl+LMB: Split Segment.\n"
+"RMB: Erase Point."
+msgstr ""
+"Измени поÑтојећи полигон:\n"
+"Леви таÑтер миша: помери тачку.\n"
+"ctrl-леви таÑтер миша: преÑечи дуж.\n"
+"ДеÑни таÑтер миша: обриши тачку."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Обриши тачке"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "Укљ./ИÑкљ. аутоматÑко покретање"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "Име нове анимације:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "Ðова анимација"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "Измени име анимације:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr "Обриши анимацију?"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "Обриши анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "Грешка: неважеће име анимације!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "Грешка: име анимације већ поÑтоји!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Преименуј анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "Додај анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr "Промена Ñледеће анимације"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr "Промени време мешања"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "Учитај анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Дуплирај анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "Грешка: нема анимације за копирање!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "Грешка: нема анимације у таблици за копирање!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "Ðалепљена анимација"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "Ðалепи анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "Грешка: нема анимације за измену!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr "ПуÑти одабрану анимацију у назад од тренутне позиције. (Ð)"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr "ПуÑти одабрану анимацију у назад од краја. (Shift+Ð)"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr "ЗауÑтави анимацију. (S)"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr "ПуÑти одабрану анимацију од почетка. (Shift+D)"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr "ПуÑти одабрану анимацију од тренутне позиције. (D)"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "Позиција анимације (у Ñекундама)."
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr "Глобално убрзај анимацију за чвор."
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr "Ðаправи нову анимацију у плејеру."
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr "Учитај анимацију Ñа диÑка."
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr "Учитај анимацију Ñа диÑка."
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "Сачувај тренутну анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "Прикажи лиÑту анимација у плејеру."
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "ÐутоматÑко пуштање након учитавања"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr "Уреди времена циљаног мешања"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr "Ðнимационе алатке"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr "Копирај анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "ОпиÑ"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Ðалепи"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Ðаправи нову анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Име анимације:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "Грешка!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr "Времена мешања:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr "Следећа (Ðутоматки ред):"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Cross-Animation Blend Times"
+msgstr "Вишеанимационо време мешања"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr "Ðнимација"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "Ðово име:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Filters"
+msgstr "Уреди филтере"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "Скала:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "Појављивање (Ñек.):"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "ÐеÑтанак (Ñек.):"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr "Мешање"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr "МикÑ"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr "ÐутоматÑко реÑтартовање:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "РеÑтартовање (Ñек.):"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "ÐаÑумично реÑтартовање (Ñек.):"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "Започни!"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "Количина:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "Мешавина:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "Мешавина 0:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "Мешавина 1:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "Тренутно:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr "Додај улаз"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr "Обриши аутоматÑки напредак"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr "ПоÑтави аутоматÑки напредак"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr "Обриши улаз"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "Ðнимационо дрво је важеће."
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "Ðнимационо дрво није важеће."
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr "Ðнимациони чвор"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "OneShot Node"
+msgstr "OneShot чвор"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr "ÐœÐ¸ÐºÑ Ñ‡Ð²Ð¾Ñ€"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr "Мешање2 чвор"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr "Мешање3 чвор"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr "Мешање4 чвор"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr "TimeScale чвор"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "TimeSeek Node"
+msgstr "TimeSeek чвор"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr "Transition чвор"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "Увези анимације..."
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "Измени филтере чвора"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "Филтери..."
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr "Слободно"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr "Садржај:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr "Погледај датотеке"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr "Ðе могу решити име хоÑта:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr "Повезивање неуÑпешно, молимо Ð²Ð°Ñ Ð´Ð° покушате поново."
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr "Ðе могу Ñе повезати Ñа хоÑтом:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr "Ðема одговора од хоÑта:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr "Захтев неуÑпешан, повратни код:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr "Захтев неуÑпео, превише преуÑмерења"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr "Лоша хеш Ñума, претпоÑтавља Ñе да је датотека измењена."
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr "Очекивано:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr "Добијено:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr "ÐеуÑпела провера sha256 Ñуме"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr "Преузимање реÑурÑа неуÑпешно:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr "Преузимање:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr "Решавање..."
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr "Грешка при захтеву"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr "Ðеактиван"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr "Покушај поново"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr "Грешка при преузимању"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr "Преузимање овог реÑурÑа је у току!"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr "први"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr "претходни"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr "Ñледећи"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr "задњи"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Ñви"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr "Прикључци"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Сортирање:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr "Обрнут"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Category:"
+msgstr "Категорија:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr "Веб Ñтраница:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr "Подршка..."
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr "Званично"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr "ТеÑтирање"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "РеÑурÑи ЗИП датотека"
+
+#: editor/plugins/camera_editor_plugin.cpp
+msgid "Preview"
+msgstr "Преглед"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr "Конфигурација лепљења"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "ОфÑет мреже:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "Корак мреже:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "Ротација офÑета:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "Ротације корака:"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "Помери пивот"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr "Помери акцију"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Помери вертикални водич"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Ðаправи нови вертикални водич"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Обриши вертикални водич"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Помери хоризонтални водич"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Ðаправи нови хоризонтални водич"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Обриши хоризонтални водич"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Ðаправи нови хоризонтални и вертикални водич"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "Измени IK ланац"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "Уреди CanvasItem"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr "Само Ñидра"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr "Промени Ñидра и ивице"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr "Промени Ñидра"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr "Ðалепи позу"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr "Одабери режим"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "Вучење: ротација"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "Alt+вучење: померање"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+"ПритиÑни „v“ за измену пивота, „Shift+v“ за вучење пивота (без померања)."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr "Режим померања"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr "Режим ротације"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+"Прикажи лиÑту Ñвих објеката на одабраној позицију\n"
+"(иÑто као Alt+ДеÑни таÑтер миша у режиму Ñелекције)."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr "Кликни за промену пивота ротације објекта."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Pan Mode"
+msgstr "Режим инÑпекције"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggles snapping"
+msgstr "Укљ./ИÑкљ. лепљења"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr "КориÑти лепљење"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping options"
+msgstr "ПоÑтавке залепљавања"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to grid"
+msgstr "Залепи за мрежу"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr "КориÑти лепљење ротације"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr "ПоÑтавке лепљења..."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr "Залепи релативно"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr "КориÑти лепљење за пикÑеле"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart snapping"
+msgstr "Паметно лепљење"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to parent"
+msgstr "Лепи за родитеља"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node anchor"
+msgstr "Лепи за Ñидро чвора"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node sides"
+msgstr "Лепи за Ñтране чвора"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to other nodes"
+msgstr "Лепи за оÑтале чворове"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "Залепи за мрежу"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr "Закључај одабрани објекат на меÑту (немогуће померање)."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr "Откључај одабрани објекат (могуће померање)."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr "Уверава Ñе да деца објекта не могу бити изабрана."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr "Врати могућноÑÑ‚ бирања деце објекта."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "Ðаправи коÑти"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "Обриши коÑти"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr "Покажи коÑти"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "Ðаправи IK ланац"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "ОчиÑти IK ланац"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr "Поглед"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "Покажи мрежу"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show helpers"
+msgstr "Покажи помагаче"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show rulers"
+msgstr "Покажи лељире"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Покажи водиче"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr "Центрирај одабрано"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr "Ибор рама"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr "РаÑпоред"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr "Убаци кључеве"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "Убаци кључеве"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr "Убаци кључ (поÑтојеће траке)"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr "Копирај позу"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr "Обриши позу"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag pivot from mouse position"
+msgstr "Превуци пивот Ñа позицијом миша"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set pivot at mouse position"
+msgstr "ПоÑтави пивот на позицију миша"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr "Помножи корак мреже Ñа 2"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr "Подели корак мреже Ñа 2"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr "Додај %s"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr "Додавање %s..."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "Ðаправи чвор"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "Грешка при прављењу Ñцене од %s"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "ОК :("
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr "Ðема родитеља за прављење Ñина."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr "Ова операција захтева један изабран чвор."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change default type"
+msgstr "Измени уобичајен тип"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+"Превуците и иÑпуÑтите + Shift: додај чвор као брата\n"
+"Превуците и иÑпуÑтите + Alt: Промени тип чвора"
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr "Ðаправи Poly3D"
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr "ПоÑтави дршку"
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "Обриши Ñтвар %d?"
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr "Додај Ñтвар"
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr "Обриши одабрану Ñтвар"
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr "Увези из Ñцене"
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr "Ðжурирај из Ñцене"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat0"
+msgstr "Раван0"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat1"
+msgstr "Раван1"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease in"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr "Гладак корак"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr "Измени тачку криве"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr "Измени тангенту криве"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr "Учитај поÑтавке криве"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add point"
+msgstr "Додај тачку"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove point"
+msgstr "Обриши тачку"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left linear"
+msgstr "Леви линеарни"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right linear"
+msgstr "ДеÑни линеарни"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load preset"
+msgstr "Учитај подешавања"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr "Обриши тачку криве"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr "Линеарна тангента криве"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Hold Shift to edit tangents individually"
+msgstr "Држи Shift за уређивање појединачних тангенти"
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "ИÑпечи Ñонде глобалног оÑветљења (GI)"
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr "Додај/обриши тачку бојне рампе"
+
+#: editor/plugins/gradient_editor_plugin.cpp
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr "Измени рампу боје"
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "Ствар %d"
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "Ствари"
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "Уредник Ñтвари лиÑте"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid ""
+"No OccluderPolygon2D resource on this node.\n"
+"Create and assign one?"
+msgstr ""
+"OccluderPolygon2D не поÑтоји на овом чвору.\n"
+"Ðаправи и додели један?"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Ðаправи нови полигон од почетка."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "Измени поÑтојећи полигон:"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "Леви таÑтер миша: помери тачку."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "Ctrl+леви таÑтер миша: одÑеци дуж."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "ДеÑни таÑтер миша: обриши тачку."
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr "Мрежа је празна!"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr "Ðаправи Ñтатичо тело од троуглова"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr "Ðаправи конвекÑно Ñтатичко тело"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "Ово не ради на корену Ñцене!"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr "Ðаправи фигуру од троуглова"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr "Ðаправи конвекÑну фигуру"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr "Ðаправи навигациону мрежу"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr "MeshInstance нема мрежу!"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr "Мрежа нема површине за прављење ивица!"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr "ÐеуÑпех при прављењу ивица!"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr "Ðаправи ивице"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr "Мрежа"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr "Ðаправи троуглаÑто Ñтатично тело"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr "Ðаправи конвекÑно Ñтатично тело"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr "Ðаправи троуглаÑтог Ñударног брата"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr "Ðаправи конвекÑног Ñударног брата"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr "Ðаправи ивичну мрежу..."
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr "Ðаправи ивичну мрежу"
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr "Величина ивице:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr "Извор мреже није наведен (и MultiMesh није поÑтављен у чвору)."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr "Извор мреже није наведен (и MultiMesh не Ñадржи мрежу)."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr "Извор мреже није важећи (неважећа путања)."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr "Извор мреже није важећи (није MeshInstance)."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr "Извор мреже није важећи (не Ñадржи реÑÑƒÑ€Ñ Ð¼Ñ€ÐµÐ¶Ðµ)."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr "Извор површине није наведен."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr "Извор површине није важећи (неважећа путања)."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr "Извор површине није важећи (нема геометрије)."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr "Извор површине није важећи (нема Ñтрана)."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr "Родитељ нема Ñтрана за попуњавање."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr "ÐеуÑпех при мапирању облаÑти."
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr "Одабери изворну мрежу:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr "Одабери циљану површину:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr "Попуни површину"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr "Попуни MultiMesh"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr "Циљана површина:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr "Изворна мрежа:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "X оÑа"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Y оÑа"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Z оÑа"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr "Мрежна горња оÑа:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "ÐаÑумична ротација:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr "ÐаÑумичан нагиб:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "ÐаÑумична величина:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr "Попуни"
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake!"
+msgstr "ИÑпеци!"
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake the navigation mesh.\n"
+msgstr "ИÑпеци навигациону мрежу.\n"
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr "Обриши навигациону мрежу."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr "Подешавање конфигурације..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr "Израчунавање величине мреже..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr "Прављење виÑинÑког поља..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr "Маркирање проходних троуглова..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr "КонÑтруиÑање компактног виÑинÑког поља..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr "Ерозија проходне површине..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Partitioning..."
+msgstr "Партиционирање..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating contours..."
+msgstr "Прављење контура..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr "Прављење полигонÑке мреже..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr "Конвертовање у природну навигациону мрежу..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr "ПоÑтавке генератора навигационе мреже:"
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr "Ðнализирање геометрије..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr "Готово!"
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "Ðаправи навигациони полигон"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr "ОчиÑти маÑку емиÑије"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr "ГенериÑање оÑног поравнаног граничниог оквира (AABB)"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "Грешка при учитавању Ñлике:"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr "У Ñлици нема пикÑела Ñа транÑпарентношћу већом од 128..."
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr "ПоÑтави маÑку емиÑије"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr "Генериши правоугаоник видљивоÑти"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr "Учитај маÑку емиÑије"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Particles"
+msgstr "ЧеÑтице"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr "Број генериÑаних тачака:"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr "Време генериÑања (Ñек.):"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr "МаÑка емиÑије"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr "Сними од пикÑела"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr "Боје емиÑије"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr "Чвор не Ñадржи геометрију."
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr "Чвор не Ñадржи геометрију (Ñтране)."
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr "Стране не Ñадрже облаÑÑ‚!"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr "Ðема Ñтрана!"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "Генериши оÑно поравнан гранични оквир (AABB)"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr "Ðаправи тачке емиÑије од мреже"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr "Ðаправи тачке емиÑије од чвора"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr "ОчиÑти емитер"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr "Ðаправи емитер"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr "Тачке емиÑије:"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr "Тачке површи"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr "Запремина"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr "Извор емиÑије: "
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr "Генериши оÑно поравнан гранични оквир (AABB) видљивоÑти"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "Обриши тачку из криве"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr "Уметни тачку у криву"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "Помери тачку у криви"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Одабери тачке"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+повуците: бирање контролних тачака"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Клик: уметни тачку"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "ДеÑни клик: обриши тачку"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Додај тачку (у празном проÑтору)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Обриши тачку"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr "Затвори криву"
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "Тачка криве #"
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr "Раздели пут"
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr "Обриши тачку путање"
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "Ðаправи UV мапу"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "ТранÑформиши UV мапу"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "Помери тачку"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Ctrl: ротација"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Shift: помери Ñве"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Shift+Ctrl: Ñкалирање"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "Помери полигон"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "Ротирај полигон"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "Скалирај полигон"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr "Уреди"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "Полигон->UV"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV->Полигон"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "ОчиÑти UV"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr "Залепи"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr "Укључи лепљење"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr "Мрежа"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "Грешка: неуÑпех при учитавању реÑурÑа!"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "Додај реÑурÑ"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "Преименуј реÑурÑ"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "Обриши реÑурÑ"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "Учитај реÑурÑ"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr "Ðалепи"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr "ОчиÑти недавно отворене датотеке"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Close and save changes?\n"
+"\""
+msgstr ""
+"Затвори и Ñачувај измене?\n"
+"\""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr "Грешка при чувању теме"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr "Грешка при чувању"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr "Грешка при увозу теме"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr "Грешка при увозу"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr "Увези тему"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr "Сачувај тему као..."
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid " Class Reference"
+msgstr " референца клаÑе"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Сортирање"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Помери горе"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Помери доле"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr "Следећа Ñкриптица"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr "Претходна Ñкриптица"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr "Датотека"
+
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "New"
+msgstr "Ðова"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "Сачувај Ñве"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr "Поново учитај тему"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr "Сачувај тему"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr "Сачувај тему као"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr "Затвори документацију"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr "Затвори Ñве"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr "Покрени"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr "Прикажи панел Ñкриптица"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find.."
+msgstr "Тражи..."
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Next"
+msgstr "Тражи Ñледећи"
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr "Корак преко"
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr "Корак у"
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr "Прекини"
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr "ÐаÑтави"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "ОÑтави дебагер отвореним"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with external editor"
+msgstr "Дебагуј Ñа Ñпољашњим уредником"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation"
+msgstr "Отвори Godot онлајн документацију"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "Претражи хијерархију клаÑа."
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "Иди на претходно измењен документ."
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "Иди на Ñледећи измењен документ."
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Discard"
+msgstr "Одбаци"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "Ðаправи Ñкриптицу"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"Следеће датотеке Ñу нове на диÑку.\n"
+"Која акција Ñе треба предузети?:"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "ОÑвежи"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "Поново Ñачувај"
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr "Дебагер"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+"Уграђене Ñкриптице Ñе могу Ñамо уређивати када је учитана Ñцена којој "
+"припадају"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr "Само реÑурÑи из датотечног ÑиÑтема Ñе могу убацити."
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Pick Color"
+msgstr "Одабери боју"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Case"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Uppercase"
+msgstr "Велика Ñлова"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Lowercase"
+msgstr "Мала Ñлова"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Cut"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Select All"
+msgstr "Одабери Ñве"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Delete Line"
+msgstr "Обриши линију"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr "Коментариши"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr "Клонирај доле"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "ПреÑавији линију"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr "ÐутоматÑко увлачење"
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr "Ðађи претходни"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Replace.."
+msgstr "Замени..."
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr "Иди на функцију..."
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Line.."
+msgstr "Иди на линију..."
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr "КонтекÑтуална помоћ"
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr "Шејдер"
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "Ортогонална пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "ПерÑпективна пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "ТранÑформација X оÑе."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "ТранÑформација Y оÑе."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "ТранÑформација Z оÑе."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "Скала: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Померај: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "Ротација за %s Ñтепени."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr "Поглед одоздо."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr "Доле"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr "Поглед одозго."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr "Бочни поглед."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr "Бок"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr "Поглед Ñпреда."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr "ИÑпред"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr "Леви поглед."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr "Лево"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr "ДеÑни поглед."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr "деÑно"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr "Ðнимациони кључ убачен."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn"
+msgstr "Ðацртани објекти"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes"
+msgstr "Промене материјала"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes"
+msgstr "Промене шејдера"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes"
+msgstr "Промене површи"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls"
+msgstr "Позиви цртања"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices"
+msgstr "Тачке"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr "Поравнавање Ñа погледом"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Information"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Погледај бр. Ñлика у Ñекунди (FPS)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Упола резолуције"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Doppler Enable"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode (Q)\n"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Drag: Rotate\n"
+"Alt+Drag: Move\n"
+"Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Select"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Move"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Rotate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Укљ./ИÑкљ. режим Ñлободног гледања"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (After)"
+msgstr ""
+
+#: editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Edit theme.."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme editing menu."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete patch '%s' from list?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted: "
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add.."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Patches"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Make Patch"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The path does not exist."
+msgstr "Путања не поÑтоји."
+
+#: editor/project_manager.cpp
+msgid "Please choose a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Your project will be created in a non empty folder (you might want to create "
+"a new folder)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a folder that does not contain a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid " "
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "It would be a good idea to name your project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Rename Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in the project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create folder"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't open project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in \"Project Settings\" under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The UI will update next time the editor or project manager starts."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Restart Now"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't run project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 6"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 7"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 8"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 9"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Can't contain '/' or ':'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Already existing"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override For.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Localization"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show all locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show only selected locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Select Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "New Script"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Show in File System"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Convert To %s"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can not perform with the root node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Copy Node Path"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Filter nodes"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach a new or existing script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear a script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "Удаљени уређај"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connection(s) and group(s)\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connections.\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Open script"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading template '%s'"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading script from %s"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Directory of the same name exists"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, will be reused"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid Path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script valid"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9 and _"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Create new script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Load existing script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Inherits"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Class Name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Template"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Удаљени уређај "
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Library"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Status"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Libraries: "
+msgstr ""
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Duplicate Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Мапа мреже"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr "Претодни Ñпрат"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit X Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Y Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Z Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Exterior Connector"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Erase Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clear Selection"
+msgstr "Обриши избор"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/mono/editor/mono_bottom_panel.cpp
+msgid "Builds"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Move Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Condition"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Sequence"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Switch"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Iterator"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "While"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Return"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Call"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Get"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Script already has function '%s'"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr "Путања не води ка чвору!"
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run exported HTML in the system's default browser."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "Ðеважећи извозни шаблон:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "ÐеуÑпех при учитавању датотеке Ñа Ñличицом учитавања:\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overriden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller id must not be 0 or this controller will not be bound to an "
+"actual controller"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor id must not be 0 or this anchor will not be bound to an actual "
+"anchor"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVROrigin requires an ARVRCamera child node"
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overriden by "
+"the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid "Path property must point to a valid Spatial node to work."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Raw Mode"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Add current color as a preset"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Cancel"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Одабери режим"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Setings (Rendering -> Viewport -"
+"> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error initializing FreeType."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Unknown font format."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error loading font."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Invalid font size."
+msgstr "Ðеважећа величина фонта."
+
+#~ msgid "Cannot navigate to '"
+#~ msgstr "Ðе могу прећи у '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "Извор: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Обриши тачку Ñа Line2D"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Уметни тачку Line2D"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Помери тачку Line2D"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Подели Ñегмент (у линији)"
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
new file mode 100644
index 0000000000..782ff2c39e
--- /dev/null
+++ b/editor/translations/sv.po
@@ -0,0 +1,8270 @@
+# Swedish translation of the Godot Engine editor
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
+# This file is distributed under the same license as the Godot source code.
+#
+# bergmarklund <davemcgroin@gmail.com>, 2017.
+# Christoffer Sundbom <christoffer_karlsson@live.se>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2017-11-29 08:13+0000\n"
+"Last-Translator: bergmarklund <davemcgroin@gmail.com>\n"
+"Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/"
+"godot/sv/>\n"
+"Language: sv\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.18-dev\n"
+
+#: editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Avaktiverad"
+
+#: editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Alla urval"
+
+#: editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "Flytta Lägg Till Nyckel"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Anim Ändra Övergång"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Anim Ändra Transformation"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Anim Ändra Värde"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "Anim Ändra Samtal"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Lägg till spår"
+
+#: editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Anim Duplicera Nycklar"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Flytta Anim Spåra Upp"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Flytta Anim Spår Ner"
+
+#: editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Ta bort Anim spår"
+
+#: editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "Ange övergångar:"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Anim Byt Namn På Spår"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Anim Ändra Spårets Interpolation"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Wrap Mode"
+msgstr ""
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Edit Node Curve"
+msgstr "Redigera Node-Kurva"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Edit Selection Curve"
+msgstr "Redigera Urval Kurva"
+
+#: editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Anim Ta Bort Nycklar"
+
+#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Duplicera urval"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Duplicate Transposed"
+msgstr "Duplicera Transponerade"
+
+#: editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr "Ta bort Urval"
+
+#: editor/animation_editor.cpp
+msgid "Continuous"
+msgstr "Kontinuerlig"
+
+#: editor/animation_editor.cpp
+msgid "Discrete"
+msgstr "Diskret"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Trigger"
+msgstr "Trigger"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Anim Lägg Till Nyckel"
+
+#: editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "Anim Flytta Nycklar"
+
+#: editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Skala urval"
+
+#: editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "Skala Från Muspekare"
+
+#: editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Gå Till Nästa Steg"
+
+#: editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Ge Till Föregående Steg"
+
+#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr "Linjär"
+
+#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Konstant"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "In"
+msgstr "In"
+
+#: editor/animation_editor.cpp
+msgid "Out"
+msgstr "Ut"
+
+#: editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "In-Ut"
+
+#: editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Ut-In"
+
+#: editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Övergångar"
+
+#: editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Optimera Animation"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Clean-Up Animation"
+msgstr "Städa upp Animation"
+
+#: editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Skapa NYTT spår för %s och infoga nyckel?"
+
+#: editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Skapa %d NYA spår och infoga nycklar?"
+
+#: editor/animation_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Skapa"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Anim Skapa & Infoga"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Anim Infoga Spår & Nyckel"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Anim Infoga Nyckel"
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Ändra Anim Längd"
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Ändra Anim Loop"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Anim Infoga"
+
+#: editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Anim Skala Nycklar"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "Animation zoom."
+
+#: editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Längd (s):"
+
+#: editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Animation längd (i sekunder)."
+
+#: editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Steg (s):"
+
+#: editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "Aktivera/Inaktivera looping i animation."
+
+#: editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Lägg till nya spår."
+
+#: editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "Flytta nuvarande spår upp."
+
+#: editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "Flytta nuvarande spår ner."
+
+#: editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Ta bort valt spår."
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Track tools"
+msgstr "Spårverktyg"
+
+#: editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Aktivera editering av individuella nycklar genom att klicka på dem."
+
+#: editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Anim. Optimerare"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Max. Linear Error:"
+msgstr "Max. Linjärt fel:"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Max. Angular Error:"
+msgstr "Max. Vinkel-fel:"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Max Optimizable Angle:"
+msgstr "Max Optimerbar vinkel:"
+
+#: editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Optimera"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr "Välj en AnimationPlayer från Scenträdet för att redigera animationer."
+
+#: editor/animation_editor.cpp
+msgid "Key"
+msgstr "Nyckel"
+
+#: editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Övergång"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Scale Ratio:"
+msgstr "Skalnings förhållande:"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Call Functions in Which Node?"
+msgstr "Anropa funktioner i vilken Node?"
+
+#: editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Ta bort ogiltiga nycklar"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Remove unresolved and empty tracks"
+msgstr "Ta bort olösta och tomma spår"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Clean-up all animations"
+msgstr "Städa upp alla animationer"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Städa upp Animation(er) (GÅR INTE ÅNGRA!)"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Clean-Up"
+msgstr "Städa upp"
+
+#: editor/array_property_edit.cpp
+#, fuzzy
+msgid "Resize Array"
+msgstr "Ändra storlek på Array"
+
+#: editor/array_property_edit.cpp
+#, fuzzy
+msgid "Change Array Value Type"
+msgstr "Ändra Arrays Värdetyp"
+
+#: editor/array_property_edit.cpp
+#, fuzzy
+msgid "Change Array Value"
+msgstr "Ändra Arrays Värde"
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "GÃ¥ till Rad"
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Radnummer:"
+
+#: editor/code_editor.cpp
+#, fuzzy
+msgid "No Matches"
+msgstr "Inga matchningar"
+
+#: editor/code_editor.cpp
+msgid "Replaced %d occurrence(s)."
+msgstr "Ersatte %d förekomst(er)."
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr "Ersätt"
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Ersätt Alla"
+
+#: editor/code_editor.cpp
+#, fuzzy
+msgid "Match Case"
+msgstr "Matcha gemener/versaler"
+
+#: editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Hela Ord"
+
+#: editor/code_editor.cpp
+#, fuzzy
+msgid "Selection Only"
+msgstr "Endast Urval"
+
+#: editor/code_editor.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Search"
+msgstr "Sök"
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "Find"
+msgstr "Hitta"
+
+#: editor/code_editor.cpp
+msgid "Next"
+msgstr "Nästa"
+
+#: editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Hittades inte!"
+
+#: editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Ersätt Med"
+
+#: editor/code_editor.cpp
+#, fuzzy
+msgid "Case Sensitive"
+msgstr "Skiftlägeskänsligt"
+
+#: editor/code_editor.cpp
+#, fuzzy
+msgid "Backwards"
+msgstr "Baklänges"
+
+#: editor/code_editor.cpp
+#, fuzzy
+msgid "Prompt On Replace"
+msgstr "Fråga vid Ersättning"
+
+#: editor/code_editor.cpp
+msgid "Skip"
+msgstr "Hoppa över"
+
+#: editor/code_editor.cpp
+msgid "Zoom In"
+msgstr "Zooma In"
+
+#: editor/code_editor.cpp
+msgid "Zoom Out"
+msgstr "Zooma Ut"
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "Återställ Zoom"
+
+#: editor/code_editor.cpp editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Rad:"
+
+#: editor/code_editor.cpp
+msgid "Col:"
+msgstr "Kolumn:"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Method in target Node must be specified!"
+msgstr "Metod i Mål-Node måste specificeras!"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid ""
+"Target method not found! Specify a valid method or attach a script to target "
+"Node."
+msgstr ""
+"MÃ¥lmetod hittades inte! Specificera en giltig metod eller koppla ett skript "
+"till MÃ¥l-Node."
+
+#: editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Anslut Till Node:"
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr "Lägg till"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr "Ta bort"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Add Extra Call Argument:"
+msgstr "Lägg till extra Call Argument:"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Extra Call Arguments:"
+msgstr "Extra Call Argument:"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Path to Node:"
+msgstr "Sökväg till Node:"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Make Function"
+msgstr "Skapa Funktion"
+
+#: editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Oneshot"
+msgstr "Oneshot"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Stäng"
+
+#: editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Anslut"
+
+#: editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Anslut '%s' till '%s'"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Connecting Signal:"
+msgstr "Ansluter Signal:"
+
+#: editor/connections_dialog.cpp
+#, fuzzy
+msgid "Create Subscription"
+msgstr "Skapa Prenumeration"
+
+#: editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Anslut.."
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Koppla från"
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+#, fuzzy
+msgid "Signals"
+msgstr "Signaler"
+
+#: editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Skapa Ny"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr "Favoriter:"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#, fuzzy
+msgid "Recent:"
+msgstr "Senaste:"
+
+#: editor/create_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Sök:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp
+#, fuzzy
+msgid "Matches:"
+msgstr "Matchar:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Beskrivning:"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Sök Ersättning För:"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Dependencies For:"
+msgstr "Beroenden För:"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"Scen '%s' håller på att redigeras.\n"
+"Ändringarna börjar inte gälla förrän omladdning."
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"Resurs '%s' är i användning.\n"
+"Ändringarna börjar gälla när den laddas om."
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Dependencies"
+msgstr "Beroenden"
+
+#: editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "Resurs"
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Path"
+msgstr "Sökväg"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Dependencies:"
+msgstr "Beroenden:"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Fix Broken"
+msgstr "Fixa Trasig"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Dependency Editor"
+msgstr "Beroende-Redigerare"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Search Replacement Resource:"
+msgstr "Sök Ersättningsresurs:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Open"
+msgstr "Öppen"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Owners Of:"
+msgstr "Ägare av:"
+
+#: editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Ta bort valda filer från projektet? (går inte ångra)"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"Filerna som tas bort krävs av andra resurser för att de ska fungera.\n"
+"Ta bort dem ändå? (går inte ångra)"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Cannot remove:\n"
+msgstr "Kan inte ta bort:\n"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Error loading:"
+msgstr "Fel vid laddning:"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "Scenen misslyckades att ladda på grund av att beroenden saknas:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+#, fuzzy
+msgid "Open Anyway"
+msgstr "Öppna Ändå"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Which action should be taken?"
+msgstr "Vilken åtgärd bör vidtas?"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Fix Dependencies"
+msgstr "Fixa Beroenden"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Errors loading!"
+msgstr "Fel vid laddning!"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "Ta bort %d sak(er) permanent? (Går inte ångra!)"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Owns"
+msgstr "Äger"
+
+#: editor/dependency_editor.cpp
+#, fuzzy
+msgid "Resources Without Explicit Ownership:"
+msgstr "Resurser Utan Explicit Ägande:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Ta bort valda filer?"
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr "Ta bort"
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Key"
+msgstr "Ändra Ordboksnyckel"
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "Ändra Ordboksvärde"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Thanks from the Godot community!"
+msgstr "Tack från Godot-gemenskapen!"
+
+#: editor/editor_about.cpp
+msgid "Thanks!"
+msgstr "Tack!"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Godot Engine contributors"
+msgstr "Godot Engine bidragare"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Project Founders"
+msgstr "Projektgrundare"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Lead Developer"
+msgstr "Lead Developer"
+
+#: editor/editor_about.cpp editor/project_manager.cpp
+#, fuzzy
+msgid "Project Manager"
+msgstr "Projektledare"
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr "Utvecklare"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Authors"
+msgstr "Författare"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Platinum Sponsors"
+msgstr "Platinumsponsorer"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Gold Sponsors"
+msgstr "Guldsponsorer"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Mini Sponsors"
+msgstr "Minisponsorer"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Gold Donors"
+msgstr "Gulddonatorer"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Silver Donors"
+msgstr "Silverdonatorer"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Bronze Donors"
+msgstr "Bronsdonatorer"
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr "Donatorer"
+
+#: editor/editor_about.cpp
+msgid "License"
+msgstr "Licens"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Thirdparty License"
+msgstr "Tredje parts Licens"
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of thirdparty free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such thirdparty components with their "
+"respective copyright statements and license terms."
+msgstr ""
+"Godot Engine förlitar sig på ett antal av tredje parts gratis och öppen "
+"källkods-bibliotek, alla kompatibla med MIT-licensen. Följande är en "
+"fullständig lista av alla sådana tredje parts komponenter med deras "
+"respektive upphovsrätts uttalanden och licensvillkor."
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "All Components"
+msgstr "Alla Komponenter"
+
+#: editor/editor_about.cpp
+#, fuzzy
+msgid "Components"
+msgstr "Komponenter"
+
+#: editor/editor_about.cpp
+msgid "Licenses"
+msgstr "Licenser"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+#, fuzzy
+msgid "Error opening package file, not in zip format."
+msgstr "Fel vid öppning av paketetfil, inte i zip-format."
+
+#: editor/editor_asset_installer.cpp
+#, fuzzy
+msgid "Uncompressing Assets"
+msgstr "Dekomprimerar Tillgångar"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+#, fuzzy
+msgid "Package Installed Successfully!"
+msgstr "Paketet installerades!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Success!"
+msgstr "Klart!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Installera"
+
+#: editor/editor_asset_installer.cpp
+msgid "Package Installer"
+msgstr "Paketinstallerare"
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr "Högtalare"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr "Lägg till Effekt"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Rename Audio Bus"
+msgstr "Byt namn på Ljud-Buss"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Toggle Audio Bus Solo"
+msgstr "Växla Ljud-Buss Solo"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Toggle Audio Bus Mute"
+msgstr "Växla Ljud-Buss Dämpning"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr "Växla Ljud-Buss Bypass Effekter"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Select Audio Bus Send"
+msgstr "Välj Ljud-Buss Send"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Add Audio Bus Effect"
+msgstr "Lägg till Ljud-Buss Effekt"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Move Bus Effect"
+msgstr "Flytta Buss-Effekt"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Delete Bus Effect"
+msgstr "Ta bort Buss-Effekt"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Audio Bus, Drag and Drop to rearrange."
+msgstr "Ljud-Buss, dra och släpp för att ändra ordning."
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Solo"
+msgstr "Solo"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Mute"
+msgstr "Dämpa"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Bypass"
+msgstr "Bypass"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Bus options"
+msgstr "Buss-alternativ"
+
+#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "Duplicera"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Reset Volume"
+msgstr "Återställ Volym"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr "Ta bort Effekt"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Add Audio Bus"
+msgstr "Lägg till Ljud-Buss"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Master bus can't be deleted!"
+msgstr "Master-Buss kan inte raderas!"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Delete Audio Bus"
+msgstr "Ta bort Ljud-Buss"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Duplicate Audio Bus"
+msgstr "Duplicera Ljud-Buss"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Reset Bus Volume"
+msgstr "Återställ Buss-Volym"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Move Audio Bus"
+msgstr "Flytta Ljud-Buss"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Save Audio Bus Layout As.."
+msgstr "Spara Ljud-Buss Layout Som.."
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Location for New Layout.."
+msgstr "Plats för Ny Layout.."
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Open Audio Bus Layout"
+msgstr "Öppna Ljud-Buss Layout"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "There is no 'res://default_bus_layout.tres' file."
+msgstr "Det finns ingen 'res://default_bus_layout.tres' fil."
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Invalid file, not an audio bus layout."
+msgstr "Ogiltig fil, inte en Ljud-Buss Layout."
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Add Bus"
+msgstr "Lägg till Buss"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Create a new Bus Layout."
+msgstr "Skapa en ny Buss-Layout."
+
+#: editor/editor_audio_buses.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Load"
+msgstr "Ladda"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Load an existing Bus Layout."
+msgstr "Ladda en befintlig Buss-Layout."
+
+#: editor/editor_audio_buses.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr "Spara Som"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Save this Bus Layout to a file."
+msgstr "Spara Buss-Layouten till en fil."
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+#, fuzzy
+msgid "Load Default"
+msgstr "Ladda Standard"
+
+#: editor/editor_audio_buses.cpp
+#, fuzzy
+msgid "Load the default Bus Layout."
+msgstr "Ladda standard Buss-Layouten."
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Invalid name."
+msgstr "Ogiltigt namn."
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Valid characters:"
+msgstr "Giltiga tecken:"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+"Ogiltigt namn. FÃ¥r inte vara samma som ett befintligt engine class-namn."
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr "Ogiltigt namn. FÃ¥r inte vara samma som ett befintligt inbyggt typnamn."
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+"Ogiltigt namn. FÃ¥r inte vara samma som ett befintligt global constant-namn."
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Invalid Path."
+msgstr "Ogiltig Sökväg."
+
+#: editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr "Fil existerar inte."
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Not in resource path."
+msgstr "Inte i resursens sökväg."
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Add AutoLoad"
+msgstr "Lägg till AutoLoad"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Autoload '%s' already exists!"
+msgstr "Autoload '%s' finns redan!"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Rename Autoload"
+msgstr "Byt namn på Autload"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Toggle AutoLoad Globals"
+msgstr "Växla AutoLoad Globals"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Move Autoload"
+msgstr "Flytta Autoload"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Remove Autoload"
+msgstr "Ta bort Autoload"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr "Aktivera"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Rearrange Autoloads"
+msgstr "Ändra ordning på Autoloads"
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Path:"
+msgstr "Sökväg:"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Node Name:"
+msgstr "Node Namn:"
+
+#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
+msgid "Name"
+msgstr "Namn"
+
+#: editor/editor_autoload_settings.cpp
+#, fuzzy
+msgid "Singleton"
+msgstr "Singleton"
+
+#: editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr "Lista:"
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Uppdaterar Scen"
+
+#: editor/editor_data.cpp
+#, fuzzy
+msgid "Storing local changes.."
+msgstr "Lagrar lokala ändringar.."
+
+#: editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Uppdaterar scen.."
+
+#: editor/editor_dir_dialog.cpp
+#, fuzzy
+msgid "Please select a base directory first"
+msgstr "Vänligen välj en baskatalog först"
+
+#: editor/editor_dir_dialog.cpp
+#, fuzzy
+msgid "Choose a Directory"
+msgstr "Välj en Katalog"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr "Skapa Mapp"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr "Namn:"
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Kunde inte skapa mapp."
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Välj"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Storing File:"
+msgstr "Lagrar Fil:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Packing"
+msgstr "Packar"
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Template file not found:\n"
+msgstr "Mallfil hittades inte:\n"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "File Exists, Overwrite?"
+msgstr "Filen finns redan, skriv över?"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Skapa Mapp"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Alla Filer (*)"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr "Öppna en Fil"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr "Öppna Fil(er)"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Open a Directory"
+msgstr "Öppna en Katalog"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Open a File or Directory"
+msgstr "Öppna en Fil eller Katalog"
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr "Spara"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr "Spara en Fil"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr "GÃ¥ Tillbaka"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr "Gå Framåt"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr "GÃ¥ Upp"
+
+#: editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr "Uppdatera"
+
+#: editor/editor_file_dialog.cpp
+#, fuzzy
+msgid "Toggle Hidden Files"
+msgstr "Växla Dolda Filer"
+
+#: editor/editor_file_dialog.cpp
+#, fuzzy
+msgid "Toggle Favorite"
+msgstr "Växla Favorit"
+
+#: editor/editor_file_dialog.cpp
+#, fuzzy
+msgid "Toggle Mode"
+msgstr "Växla Läge"
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr "Flytta Favorit Upp"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr "Flytta Favorit Ner"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Directories & Files:"
+msgstr "Kataloger & Filer:"
+
+#: editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Förhandsvisning:"
+
+#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
+#: scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr "Fil:"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Must use a valid extension."
+msgstr "Måste använda en giltigt filändelse."
+
+#: editor/editor_file_system.cpp
+#, fuzzy
+msgid "ScanSources"
+msgstr "ScanSources"
+
+#: editor/editor_file_system.cpp
+#, fuzzy
+msgid "(Re)Importing Assets"
+msgstr "(Om)Importerar Tillgångar"
+
+#: editor/editor_help.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Sök Hjälp"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Class List:"
+msgstr "Klasslista:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Search Classes"
+msgstr "Sök Klasser"
+
+#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Topp"
+
+#: editor/editor_help.cpp editor/property_editor.cpp
+#, fuzzy
+msgid "Class:"
+msgstr "Klass:"
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+#, fuzzy
+msgid "Inherits:"
+msgstr "Ärver:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Inherited by:"
+msgstr "Ärvd av:"
+
+#: editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Kort Beskrivning:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Members"
+msgstr "Medlemmar"
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Members:"
+msgstr "Medlemmar:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Public Methods"
+msgstr "Publika Metoder"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Public Methods:"
+msgstr "Publika Metoder:"
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr ""
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Signals:"
+msgstr "Signaler:"
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Enumerations:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "enum "
+msgstr "enum "
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Constants"
+msgstr "Konstanter"
+
+#: editor/editor_help.cpp
+msgid "Constants:"
+msgstr "Konstanter:"
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr "Beskrivning"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Properties"
+msgstr "Egenskaper"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Property Description:"
+msgstr "Egenskapsbeskrivning:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Det finns för närvarande ingen beskrivning för denna egenskap. Snälla hjälp "
+"oss genom att [color=$color][url=$url]bidra med en[/url][/color]!"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Methods"
+msgstr "Metoder"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Method Description:"
+msgstr "Metodbeskrivning:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Det finns för närvarande ingen beskrivning för denna metod. Snälla hjälp oss "
+"genom att [color=$color][url=$url]bidra med en[/url][/color]!"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Search Text"
+msgstr "Söktext"
+
+#: editor/editor_log.cpp
+#, fuzzy
+msgid "Output:"
+msgstr "Output:"
+
+#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/property_editor.cpp editor/script_editor_debugger.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#, fuzzy
+msgid "Clear"
+msgstr "Rensa"
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Error saving resource!"
+msgstr "Fel vid sparande av resurs!"
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr "Spara Resurs Som.."
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "I see.."
+msgstr "Jag ser.."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Can't open file for writing:"
+msgstr "Kan inte öppna fil för skrivande:"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Requested file format unknown:"
+msgstr "Efterfrågade filformat okänt:"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Error while saving."
+msgstr "Fel vid sparande."
+
+#: editor/editor_node.cpp
+msgid "Can't open '%s'."
+msgstr "Kan inte öppna '%s'."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Error while parsing '%s'."
+msgstr "Fel vid parsning '%s'."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Unexpected end of file '%s'."
+msgstr "Oväntat filslut '%s'."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Missing '%s' or its dependencies."
+msgstr "Saknar '%s' eller dess beroenden."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Error while loading '%s'."
+msgstr "Fel vid laddning av '%s'."
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Sparar Scen"
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Analyserar"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Creating Thumbnail"
+msgstr "Skapar Miniatyr"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a tree root."
+msgstr "Åtgärden kan inte göras utan en trädrot."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+"Kunde inte spara scenen. Förmodligen kunde inte beroenden (instanser) "
+"uppfyllas."
+
+#: editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "Misslyckades att ladda resurs."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Can't load MeshLibrary for merging!"
+msgstr "Kan inte ladda MeshLibrary för sammanslagning!"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Error saving MeshLibrary!"
+msgstr "Fel vid sparande av MeshLibrary!"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Can't load TileSet for merging!"
+msgstr "Kan inte ladda TileSet för sammanslagning!"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Error saving TileSet!"
+msgstr "Fel vid sparande av TileSet!"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Error trying to save layout!"
+msgstr "Fel vid försök att spara layout!"
+
+#: editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Layout name not found!"
+msgstr "Layoutnamn hittades inte!"
+
+#: editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+"Denna resurs tillhör en scen som var importerad, så den är inte redigerbar.\n"
+"Läs dokumentationen som är relevanta för att importera scener för att bättre "
+"förstå detta arbetsflöde."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it will not be kept when saving the current scene."
+msgstr ""
+"Denna resurs tillhör en scen som var instansierad eller ärvd.\n"
+"Ändringar på den kommer inte att sparas när du sparar den nuvarande scenen."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+"Denna resursen var importerad, så den är inte redigerbar. Ändra dess "
+"inställningar i importpanelen och importera igen."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"This scene was imported, so changes to it will not be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+"Denna scen var importerade, så ändringar i den kommer inte att sparas.\n"
+"Instansiering av den eller arv kommer tillåta förändringar av den.\n"
+"Läs dokumentationen som är relevanta för att importera scener för att bättre "
+"förstå detta arbetsflöde."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Detta är ett remote object så förändringar av den kommer inte att sparas.\n"
+"Läs dokumentationen som är relevanta för felsökning för att bättre förstå "
+"detta arbetsflöde."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Expandera alla"
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Copy Params"
+msgstr "Kopiera Params"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Paste Params"
+msgstr "Klistra in Params"
+
+#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "Klistra in Resurs"
+
+#: editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "Kopiera Resurs"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Make Built-In"
+msgstr "Gör Inbyggd"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Make Sub-Resources Unique"
+msgstr "Gör Under-resurser Unika"
+
+#: editor/editor_node.cpp
+msgid "Open in Help"
+msgstr "Öppna i Hjälp"
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "Det finns ingen definierad scen att köra."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+"Ingen huvudscen har definierats, välj en giltig?\n"
+"Du kan ändra det senare i \"Projektinställningar\" under 'Applikation'-"
+"kategorin."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+"Vald scene '%s' finns inte, välj en giltig?\n"
+"Du kan ändra det senare i \"Projektinställningar\" under 'Applikation'-"
+"kategorin."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+"Vald scen '%s' är inte en scenfil, välj en giltig?\n"
+"Du kan ändra det senare i \"Projektinställningar\" under 'Applikation'-"
+"kategorin."
+
+#: editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr "Nuvarande scen har aldrig sparats, vänligen spara den innan körning."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Could not start subprocess!"
+msgstr "Kunde inte starta underprocess!"
+
+#: editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "Öppna Scen"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Open Base Scene"
+msgstr "Öppna Bas-Scen"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Quick Open Scene.."
+msgstr "Snabböppna Scen.."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Quick Open Script.."
+msgstr "Snabböppna Skript.."
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr "Spara & Stäng"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Save changes to '%s' before closing?"
+msgstr "Spara ändringar i '%s' innan stängning?"
+
+#: editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "Spara Scen Som.."
+
+#: editor/editor_node.cpp
+msgid "No"
+msgstr "Nej"
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr "Ja"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "This scene has never been saved. Save before running?"
+msgstr "Denna scenen har aldrig sparats. Spara innan körning?"
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "This operation can't be done without a scene."
+msgstr "Åtgärden kan inte göras utan en scen."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Export Mesh Library"
+msgstr "Exportera Mesh Library"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a root node."
+msgstr "Åtgärden kan inte göras utan en Rot-Node."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Export Tile Set"
+msgstr "Exportera Tile Set"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a selected node."
+msgstr "Åtgärden kan inte göras utan en vald Node."
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "Nuvarande scen inte sparad. Öppna ändå?"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Can't reload a scene that was never saved."
+msgstr "Kan inte ladda om en scen som aldrig har sparats."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Revert"
+msgstr "Återställ"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "Åtgärden kan inte ångras. Återställ ändå?"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Quick Run Scene.."
+msgstr "Snabbkör Scen.."
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr "Avsluta"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Exit the editor?"
+msgstr "Stäng redigeraren?"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Open Project Manager?"
+msgstr "Öppna Projekthanteraren?"
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr "Spara & Avsluta"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr "Spara ändringar av följande scen(er) innan du avslutar?"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Save changes the following scene(s) before opening Project Manager?"
+msgstr ""
+"Spara ändringar av följande scen(er) innan du öppnar Projekthanteraren?"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+"Detta alternativ är föråldrat. Situationer där uppdatering måste tvingas "
+"anses nu vara en bugg. Vänligen rapportera."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Pick a Main Scene"
+msgstr "Välj en Huvudscen"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr ""
+"Kunde inte aktivera addon plugin vid: '%s' parsning av config misslyckades."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
+msgstr "Kan inte hitta skriptfältet för addon plugin vid: 'res://addons/%s'."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Unable to load addon script from path: '%s'."
+msgstr "Kunde inte ladda addon script från sökväg: '%s'"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+"Kunde inte ladda addon script från sökväg: '%s' Bastyp är inte EditorPlugin."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+"Kunde inte ladda addon script från sökväg: '%s' Skript är inte i "
+"verktygsläge."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+"Scen '%s' var automatiskt importerad, så den kan inte bli modifierad.\n"
+"För att kunna göra ändringar till den så kan en ärvd scen skapas."
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Ugh"
+msgstr "Ugh"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+"Fel vid laddning av scenen, den måste vara i projektsökvägen. Använd "
+"'Importera' för att öppna scenen, spara den sen inom projektsökvägen."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Scene '%s' has broken dependencies:"
+msgstr "Scen '%s' har trasiga beroenden:"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Clear Recent Scenes"
+msgstr "Rensa Senaste Scener"
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "Spara Layout"
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Ta bort Layout"
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Default"
+msgstr "Standard"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Switch Scene Tab"
+msgstr "Byt Scen-flik"
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr "%d fler filer eller mappar"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "%d fler mappar"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d fler filer"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Distraction Free Mode"
+msgstr "Distraktionsfritt Läge"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Toggle distraction-free mode."
+msgstr "Växla distraktionsfritt läge."
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Lägg till en ny scen."
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr "Scen"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Go to previously opened scene."
+msgstr "Gå till föregående öppna scen."
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr "Nästa flik"
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr "Föregående flik"
+
+#: editor/editor_node.cpp
+msgid "Filter Files.."
+msgstr "Filtrera Filer.."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Operations with scene files."
+msgstr "Åtgärder med scenfiler."
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Ny Scen"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "New Inherited Scene.."
+msgstr "Ny Ärvd Scen.."
+
+#: editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "Öppna Scen.."
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "Spara Scen"
+
+#: editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr "Spara alla Scener"
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "Stäng Scen"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Open Recent"
+msgstr "Öppna Senaste"
+
+#: editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "Konvertera Till.."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "MeshLibrary.."
+msgstr "MeshLibrary.."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "TileSet.."
+msgstr "TileSet.."
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr "Ã…ngra"
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp
+#, fuzzy
+msgid "Redo"
+msgstr "Ã…ngra"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Revert Scene"
+msgstr "Återställ Scen"
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project"
+msgstr "Projekt"
+
+#: editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "Projektinställningar"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Run Script"
+msgstr "Kör Skript"
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export"
+msgstr "Exportera"
+
+#: editor/editor_node.cpp
+msgid "Tools"
+msgstr "Verktyg"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Quit to Project List"
+msgstr "Avsluta till Projektlistan"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Debug"
+msgstr "Debugga"
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Sync Scene Changes"
+msgstr "Synkronisera Scenändringar"
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Sync Script Changes"
+msgstr "Synkronisera Skript-ändringar"
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Help"
+msgstr "Hjälp"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Classes"
+msgstr "Klasser"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Online Docs"
+msgstr "Dokumentation Online"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Q&A"
+msgstr "Frågor och svar"
+
+#: editor/editor_node.cpp
+msgid "Issue Tracker"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Community"
+msgstr "Gemenskap"
+
+#: editor/editor_node.cpp
+msgid "About"
+msgstr "Om"
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr "Pausa scenen"
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr "Pausa Scen"
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr "Stanna scenen."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Stop"
+msgstr "Stanna"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Play the edited scene."
+msgstr "Spela den redigerade scenen."
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Always"
+msgstr "Uppdatera Alltid"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Changes"
+msgstr "Uppdatera Ändringar"
+
+#: editor/editor_node.cpp
+msgid "Disable Update Spinner"
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Inspector"
+msgstr "Inspektör"
+
+#: editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "Spara Som.."
+
+#: editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Object properties."
+msgstr "Objektegenskaper."
+
+#: editor/editor_node.cpp
+msgid "Changes may be lost!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Importera"
+
+#: editor/editor_node.cpp
+msgid "Node"
+msgstr "Node"
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr "Spara Inte"
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export Project"
+msgstr "Exportera Projekt"
+
+#: editor/editor_node.cpp
+msgid "Export Library"
+msgstr "Exportera Bibliotek"
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Password:"
+msgstr "Lösenord:"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Open & Run a Script"
+msgstr "Öppna & Kör ett Skript"
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+#, fuzzy
+msgid "Select"
+msgstr "Välj"
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Open Script Editor"
+msgstr "Öppna Skript-Redigerare"
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+#, fuzzy
+msgid "Thumbnail.."
+msgstr "Miniatyr.."
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr "Uppdatera"
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr "Version:"
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "Författare:"
+
+#: editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "Status:"
+
+#: editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr "Genomsnittlig Tid (sek)"
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "Tid:"
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr "Själv"
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Select device from the list"
+msgstr "Välj enhet från listan"
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the export menu."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+#, fuzzy
+msgid "There is an edited scene already."
+msgstr "Det finns en redigerad scen redan."
+
+#: editor/editor_run_script.cpp
+#, fuzzy
+msgid "Couldn't instance script:"
+msgstr "Kunde inte insansiera Skript:"
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+#, fuzzy
+msgid "Couldn't run script:"
+msgstr "Kunde inte köra Skript:"
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+#, fuzzy
+msgid "Select Node(s) to Import"
+msgstr "Välj Nod(er) att Importera"
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+#, fuzzy
+msgid "Import From Node:"
+msgstr "Importera Från Node:"
+
+#: editor/export_template_manager.cpp
+msgid "Re-Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr "Avinstallera"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "(Installed)"
+msgstr "(Installerad)"
+
+#: editor/export_template_manager.cpp
+msgid "Download"
+msgstr "Ladda ner"
+
+#: editor/export_template_manager.cpp
+msgid "(Missing)"
+msgstr "(Saknas)"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "(Current)"
+msgstr "(Nuvarande)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Remove template version '%s'?"
+msgstr "Ta bort mallversionen '%s'?"
+
+#: editor/export_template_manager.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Invalid version.txt format inside templates. Revision is not a valid "
+"identifier."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for templates:\n"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Importing:"
+msgstr "Importerar:"
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Kan inte ansluta."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Complete."
+msgstr "Nedladdning Klar."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Disconnected"
+msgstr "Frånkopplad"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Ansluter.."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "Kan inte Ansluta"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "Ansluten"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "Laddar ner"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "Anslutningsfel"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Current Version:"
+msgstr "Nuvarande Version:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Installed Versions:"
+msgstr "Installerade Versioner:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Install From File"
+msgstr "Installera Från Fil"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Remove Template"
+msgstr "Ta Bort Mall"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Select template file"
+msgstr "Välj mall-fil"
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "Ladda Ner Mallar"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
+#: editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a list"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"\n"
+"Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself.\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "A file or folder with this name already exists."
+msgstr "En fil eller mapp med detta namn finns redan."
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Renaming file:"
+msgstr "Byter namn på filen:"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Renaming folder:"
+msgstr "Byter namn på mappen:"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Expand all"
+msgstr "Expandera alla"
+
+#: editor/filesystem_dock.cpp
+msgid "Collapse all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Copy Path"
+msgstr "Kopiera Sökvägen"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Rename.."
+msgstr "Byt namn.."
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move To.."
+msgstr "Flytta Till.."
+
+#: editor/filesystem_dock.cpp
+msgid "New Folder.."
+msgstr "Ny Mapp.."
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Show In File Manager"
+msgstr "Visa I Filhanteraren"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Instance"
+msgstr "Instans"
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "View Owners.."
+msgstr "Visa Ägare.."
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "Instansiera valda scen(er) som barn till vald Node."
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr "Flytta"
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Rename"
+msgstr "Byt namn"
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "Lägg till i Grupp"
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "Ta bort från Grupp"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#, fuzzy
+msgid "Import with Separate Animations"
+msgstr "Importera med Separata Animationer"
+
+#: editor/import/resource_importer_scene.cpp
+#, fuzzy
+msgid "Import with Separate Materials"
+msgstr "Importera med Separata Material"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#, fuzzy
+msgid "Import with Separate Materials+Animations"
+msgstr "Importera med Separata Material+Animationer"
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr "Importera Scen"
+
+#: editor/import/resource_importer_scene.cpp
+#, fuzzy
+msgid "Importing Scene.."
+msgstr "Importerar Scen.."
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving.."
+msgstr "Sparar.."
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid " Files"
+msgstr ""
+
+#: editor/import_dock.cpp
+#, fuzzy
+msgid "Import As:"
+msgstr "Importera Som:"
+
+#: editor/import_dock.cpp editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr ""
+
+#: editor/multi_node_edit.cpp
+#, fuzzy
+msgid "MultiNode Set"
+msgstr "MultiNode Ange"
+
+#: editor/node_dock.cpp
+msgid "Groups"
+msgstr "Grupper"
+
+#: editor/node_dock.cpp
+#, fuzzy
+msgid "Select a Node to edit Signals and Groups."
+msgstr "Välj en Node för att redigera Signaler och Grupper."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Create a new polygon from scratch"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit existing polygon:\n"
+"LMB: Move Point.\n"
+"Ctrl+LMB: Split Segment.\n"
+"RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "Ny Anim"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr "Ta bort Animation?"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "Ta bort Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Byt namn på Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "Lägg till Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "Ladda Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicera Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Pasted Animation"
+msgstr "Inklistrad Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Paste Animation"
+msgstr "Klistra in Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Save the current animation"
+msgstr "Spara den nuvarande animationen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Animation Tools"
+msgstr "Animeringsverktyg"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Copy Animation"
+msgstr "Kopiera Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Sektioner:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Klistra in"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Create New Animation"
+msgstr "Skapa Ny Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Error!"
+msgstr "Fel!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr "Animation"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "New name:"
+msgstr "Nytt namn:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "Edit Filters"
+msgstr "Redigera Filter"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
+msgid "Scale:"
+msgstr "Skala:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "Current:"
+msgstr "Nuvarande:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "Animation Node"
+msgstr "Animations-Node"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr "OneShot-Node"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "Mix Node"
+msgstr "Mix-Node"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "Import Animations.."
+msgstr "Importera Animationer.."
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "Edit Node Filters"
+msgstr "Redigera Node-Filter"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
+msgid "Filters.."
+msgstr "Filter.."
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Innehåll:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr "Visa Filer"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Retry"
+msgstr "Försök igen"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Alla"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Sortera:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Category:"
+msgstr "Kategori:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Site:"
+msgstr "Webbplats:"
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: editor/plugins/camera_editor_plugin.cpp
+#, fuzzy
+msgid "Preview"
+msgstr "Förhandsgranska"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggles snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to parent"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node sides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to other nodes"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Makes sure the object's children are not selectable."
+msgstr "Ser till att objektets barn inte är valbara."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Restores the object's children's ability to be selected."
+msgstr "Återställer objektets barns egenskap att väljas."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr "Visa"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show helpers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show rulers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr "Layout"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag pivot from mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set pivot at mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr "Lägg till %s"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr "Lägger till %s..."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Create Node"
+msgstr "Skapa Node"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "OK :("
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "No parent to instance a child at."
+msgstr "Ingen förälder att instansiera ett barn till."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "This operation requires a single selected node."
+msgstr "Åtgärden kräver en enstaka vald Node."
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change default type"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+"Dra & släpp + Skift: Lägg till Node som syskon\n"
+"Dra & släpp + Alt: Ändra Node-Typ"
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene"
+msgstr "Importera från Scen"
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#, fuzzy
+msgid "Update from Scene"
+msgstr "Uppdatera från scen"
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat0"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat1"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease in"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+#, fuzzy
+msgid "Hold Shift to edit tangents individually"
+msgstr "Håll Skift för att redigera tangenter individuellt"
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#, fuzzy
+msgid ""
+"No OccluderPolygon2D resource on this node.\n"
+"Create and assign one?"
+msgstr ""
+"Ingen OccluderPolygon2D resurs på denna Node.\n"
+"Skapa och tilldela en?"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
+msgid "X-Axis"
+msgstr "X-Axel"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
+msgid "Y-Axis"
+msgstr "Y-Axel"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
+msgid "Z-Axis"
+msgstr "Z-Axel"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
+msgid "Random Rotation:"
+msgstr "Slumpmässig Rotation:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
+msgid "Random Scale:"
+msgstr "Slumpmässig Skala:"
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake the navigation mesh.\n"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
+msgid "Partitioning..."
+msgstr "Partitionerar.."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
+msgid "Creating contours..."
+msgstr "Skapar konturer..."
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr "Klar!"
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Particles"
+msgstr "Partiklar"
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "Volym"
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Ctrl: Rotera"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Skift: Flytta Alla"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Skift+Ctrl: Skala"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr "Redigera"
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "Lägg till Resurs"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "Byt namn på Resurs"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "Ta bort Resurs"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "Ladda Resurs"
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr "Klistra in"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid ""
+"Close and save changes?\n"
+"\""
+msgstr ""
+"Stäng och spara ändringar?\n"
+"\""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error saving"
+msgstr "Fel vid sparande"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Import Theme"
+msgstr "Importera Tema"
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme As.."
+msgstr "Spara Tema Som.."
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid " Class Reference"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "Sortera"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Move Up"
+msgstr "Flytta Upp"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Move Down"
+msgstr "Flytta Ner"
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Next script"
+msgstr "Nästa Skript"
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Previous script"
+msgstr "Föregående Skript"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr "Fil"
+
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "New"
+msgstr "Ny"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "Spara Alla"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Reload Theme"
+msgstr "Ladda om Tema"
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme"
+msgstr "Spara Tema"
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme As"
+msgstr "Spara Tema Som"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr "Stäng Alla"
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Close Other Tabs"
+msgstr "Stänga Övriga Flikar"
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr "Kör"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Find.."
+msgstr "Hitta.."
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Find Next"
+msgstr "Hitta Nästa"
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with external editor"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Discard"
+msgstr "Kasta"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "Skapa Skript"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Reload"
+msgstr "Ladda om"
+
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Resave"
+msgstr "Spara om"
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Pick Color"
+msgstr "Välj Färg"
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Convert Case"
+msgstr "Konvertera gemener/versaler"
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Uppercase"
+msgstr "Versaler"
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Lowercase"
+msgstr "Gemener"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+#, fuzzy
+msgid "Cut"
+msgstr "Klipp"
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr "Kopiera"
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+#, fuzzy
+msgid "Select All"
+msgstr "Välj Alla"
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Delete Line"
+msgstr "Ta bort rad"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Auto Indent"
+msgstr "Automatisk Indentering"
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Convert To Uppercase"
+msgstr "Konvertera till Versaler"
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Convert To Lowercase"
+msgstr "Konvertera till Gemener"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Replace.."
+msgstr "Ersätt.."
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
+msgid "Change Comment"
+msgstr "Ändra Kommentar"
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "X-Axis Transform."
+msgstr "X-Axel Transformering."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Y-Axis Transform."
+msgstr "Y-Axel Transformering."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Z-Axis Transform."
+msgstr "Z-Axel Transformering."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Scaling: "
+msgstr "Skalning: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rotating %s degrees."
+msgstr "Roterar %s grader."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom View."
+msgstr "Vy Underifrån"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom"
+msgstr "Botten"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top View."
+msgstr "Vy Ovanifrån."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear View."
+msgstr "Vy Bakifrån."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear"
+msgstr "Baksida"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front View."
+msgstr "Vy Framifrån."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front"
+msgstr "Framsida"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left View."
+msgstr "Vy från vänster."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left"
+msgstr "Vänster"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right View."
+msgstr "Vy från höger."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right"
+msgstr "Höger"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Information"
+msgstr "Visa Information"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "Visa FPS"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Audio Listener"
+msgstr "Ljud-Lyssnare"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Doppler Enable"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "preview"
+msgstr "förhandsgranska"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode (Q)\n"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Drag: Rotate\n"
+"Alt+Drag: Move\n"
+"Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom View"
+msgstr "Vy underifrån"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top View"
+msgstr "Vy ovanifrån"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear View"
+msgstr "Vy bakifrån"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front View"
+msgstr "Vy framifrån"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left View"
+msgstr "Vy från vänster"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right View"
+msgstr "Vy från höger"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Select"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Move"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Rotate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Transform"
+msgstr "Transformera"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings"
+msgstr "Inställningar"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "(empty)"
+msgstr "(tom)"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "Animationer"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Loop"
+msgstr "Loop"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Move (Before)"
+msgstr "Flytta (före)"
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Move (After)"
+msgstr "Flytta (efter)"
+
+#: editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Can't save theme to file:"
+msgstr "Kan inte spara tema till fil:"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Add All"
+msgstr "Lägg till Alla"
+
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Remove All"
+msgstr "Ta bort Alla"
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Edit theme.."
+msgstr "Redigera tema.."
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme editing menu."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Create Empty Template"
+msgstr "Skapa tom mall"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#, fuzzy
+msgid "Options"
+msgstr "Alternativ"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Type:"
+msgstr "Typ:"
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Data Type:"
+msgstr "Datatyp:"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "Ikon"
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Style"
+msgstr "Stil"
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Font"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "Färg"
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+#, fuzzy
+msgid "Mirror X"
+msgstr "Spegla X"
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+#, fuzzy
+msgid "Mirror Y"
+msgstr "Spegla Y"
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "Rotera 90 grader"
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "Rotera 180 grader"
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "Rotera 270 grader"
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "Skapa från scen?"
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "Skapa från Scen"
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Error"
+msgstr "Fel"
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete patch '%s' from list?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted: "
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add.."
+msgstr "Lägg till.."
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr "Resurser"
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr "Exportera alla resurser i projektet"
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+#, fuzzy
+msgid "Patches"
+msgstr "Patchar"
+
+#: editor/project_export.cpp
+#, fuzzy
+msgid "Make Patch"
+msgstr "Gör Patch"
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+#, fuzzy
+msgid "Export PCK/Zip"
+msgstr "Exportera PCK/Zip"
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "The path does not exist."
+msgstr "Sökvägen finns inte."
+
+#: editor/project_manager.cpp
+msgid "Please choose a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid ""
+"Your project will be created in a non empty folder (you might want to create "
+"a new folder)."
+msgstr ""
+"Ditt projekt kommer att skapas i en icke-tom mapp (du kanske vill skapa en "
+"ny mapp)."
+
+#: editor/project_manager.cpp
+msgid "Please choose a folder that does not contain a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid " "
+msgstr ""
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "It would be a good idea to name your project."
+msgstr "Det vore en bra idé att namnge ditt projekt."
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Rename Project"
+msgstr "Byt namn på Projekt"
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in the project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "New Game Project"
+msgstr "Nytt Spelprojekt"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Import Existing Project"
+msgstr "Importera Befintligt Projekt"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Create New Project"
+msgstr "Skapa Nytt Projekt"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Install Project:"
+msgstr "Installera Projekt:"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Project Name:"
+msgstr "Projektnamn:"
+
+#: editor/project_manager.cpp
+msgid "Create folder"
+msgstr "Skapa mapp"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Project Path:"
+msgstr "Sökväg till projektet:"
+
+#: editor/project_manager.cpp
+msgid "Browse"
+msgstr "Bläddra"
+
+#: editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "Det är en BINGO!"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Unnamed Project"
+msgstr "Namnlöst Projekt"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Can't open project"
+msgstr "Kan inte öppna projekt"
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in \"Project Settings\" under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The UI will update next time the editor or project manager starts."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Project List"
+msgstr "Projektlista"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Scan"
+msgstr "Skanna"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Select a Folder to Scan"
+msgstr "Välj en mapp att skanna"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "New Project"
+msgstr "Nytt Projekt"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Mallar"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Exit"
+msgstr "Avsluta"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Restart Now"
+msgstr "Starta om nu"
+
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Can't run project"
+msgstr "Kan inte köra projektet"
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Key "
+msgstr "Nyckel "
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Mouse Button"
+msgstr "Musknapp"
+
+#: editor/project_settings_editor.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr "Skift+"
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr "Alt+"
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+#, fuzzy
+msgid "Press a Key.."
+msgstr "Tryck på en Knapp.."
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 6"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 7"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 8"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 9"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Change"
+msgstr "Ändra"
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Axis"
+msgstr "Axel"
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Device"
+msgstr "Enhet"
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr "Knapp"
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Can't contain '/' or ':'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Already existing"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Add Translation"
+msgstr "Lägg Till Översättning"
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Remove Translation"
+msgstr "Ta bort Översättning"
+
+#: editor/project_settings_editor.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+#, fuzzy
+msgid "General"
+msgstr "Allmänt"
+
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override For.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Device:"
+msgstr "Enhet:"
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Localization"
+msgstr "Lokalisering"
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Translations"
+msgstr "Översättningar"
+
+#: editor/project_settings_editor.cpp
+#, fuzzy
+msgid "Translations:"
+msgstr "Översättningar:"
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr "Resurser:"
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show all locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show only selected locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+#, fuzzy
+msgid "Zero"
+msgstr "Noll"
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File.."
+msgstr "Fil.."
+
+#: editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: editor/property_editor.cpp
+#, fuzzy
+msgid "Assign"
+msgstr "Tilldela"
+
+#: editor/property_editor.cpp
+#, fuzzy
+msgid "Select Node"
+msgstr "Välj Node"
+
+#: editor/property_editor.cpp
+#, fuzzy
+msgid "New Script"
+msgstr "Nytt Skript"
+
+#: editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/property_editor.cpp
+#, fuzzy
+msgid "Show in File System"
+msgstr "Visa i Filsystemet"
+
+#: editor/property_editor.cpp
+msgid "Convert To %s"
+msgstr "Konvertera till %s"
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/property_editor.cpp
+#, fuzzy
+msgid "Pick a Node"
+msgstr "Välj en Node"
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_editor.cpp
+#, fuzzy
+msgid "On"
+msgstr "PÃ¥"
+
+#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: editor/property_editor.cpp
+#, fuzzy
+msgid "Sections:"
+msgstr "Sektioner:"
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Reparent Node"
+msgstr "Byt Förälder-Node"
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+#, fuzzy
+msgid "Current Scene"
+msgstr "Nuvarande Scen"
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "OK"
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Error loading scene from %s"
+msgstr "Fel vid laddning av scen från %s"
+
+#: editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "Ok"
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "This operation can't be done on the tree root."
+msgstr "Åtgärden kan inte göras på trädroten."
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Move Node In Parent"
+msgstr "Flytta Node i Förälder"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Move Nodes In Parent"
+msgstr "Flytta Noder i Förälder"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Duplicate Node(s)"
+msgstr "Duplicera Nod(er)"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Delete Node(s)?"
+msgstr "Ta bort Nod(er)?"
+
+#: editor/scene_tree_dock.cpp
+msgid "Can not perform with the root node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Save New Scene As.."
+msgstr "Spara Ny Scen Som.."
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Editable Children"
+msgstr "Redigerbara Barn"
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Makes Sense!"
+msgstr "Vettigt!"
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remove Node(s)"
+msgstr "Ta bort Nod(er)"
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Error saving scene."
+msgstr "Fel vid sparande av scenen."
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Delete Node(s)"
+msgstr "Ta bort Nod(er)"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Add Child Node"
+msgstr "Lägg till Barn-Node"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Instance Child Scene"
+msgstr "Instansiera Barn-Scen"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Change Type"
+msgstr "Ändra Typ"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Attach Script"
+msgstr "Fäst Skript"
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Copy Node Path"
+msgstr "Kopiera Node-Sökväg"
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Add/Create a New Node"
+msgstr "Lägga till/Skapa en Ny Node"
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Filter nodes"
+msgstr "Filtrera noder"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Attach a new or existing script for the selected node."
+msgstr "Koppla på ett nytt eller befintligt Skript till vald Node."
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear a script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connection(s) and group(s)\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connections.\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+#, fuzzy
+msgid "Instance:"
+msgstr "Instans:"
+
+#: editor/scene_tree_editor.cpp
+#, fuzzy
+msgid "Open script"
+msgstr "Öppna Skript"
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+#, fuzzy
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable"
+msgstr ""
+"Barn är inte valbara.\n"
+"Klicka för att göra valbara"
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+#, fuzzy
+msgid "Rename Node"
+msgstr "Byt namn på Node"
+
+#: editor/scene_tree_editor.cpp
+#, fuzzy
+msgid "Scene Tree (Nodes):"
+msgstr "Scenträd (Noder):"
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+#, fuzzy
+msgid "Select a Node"
+msgstr "Välj en Node"
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Error loading template '%s'"
+msgstr "Fel vid laddning av mall '%s'"
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr "Fel - Kunde inte skapa Skript i filsystemet."
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Error loading script from %s"
+msgstr "Fel vid laddning av Skript från %s"
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Path is empty"
+msgstr "Sökvägen är tom"
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Directory of the same name exists"
+msgstr "Katalog med samma namn finns redan"
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, will be reused"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Invalid Path"
+msgstr "Ogiltig Sökväg"
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Script valid"
+msgstr "Skript giltigt"
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9 and _"
+msgstr "Tillåtna: a-z, a-Z, 0-9 och _"
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Create new script file"
+msgstr "Skapa ny Skript-fil"
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Load existing script file"
+msgstr "Ladda in befintlig Skript-fil"
+
+#: editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "Språk"
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Inherits"
+msgstr "Ärver"
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Class Name"
+msgstr "Klassnamn"
+
+#: editor/script_create_dialog.cpp
+#, fuzzy
+msgid "Template"
+msgstr "Mall"
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "Varning"
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "Fel:"
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Source:"
+msgstr "Källa:"
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Function:"
+msgstr "Funktion:"
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Errors"
+msgstr "Fel"
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Child Process Connected"
+msgstr "Barnprocess Ansluten"
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Variable"
+msgstr "Variabel"
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Errors:"
+msgstr "Fel:"
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Value"
+msgstr "Värde"
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Total:"
+msgstr "Totalt:"
+
+#: editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "Typ"
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Usage"
+msgstr "Användning"
+
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Misc"
+msgstr "Övrigt"
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+#, fuzzy
+msgid "Shortcuts"
+msgstr "Genvägar"
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+#, fuzzy
+msgid "Library"
+msgstr "Bibliotek"
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Status"
+msgstr "Status"
+
+#: modules/gdnative/gd_native_library_editor.cpp
+#, fuzzy
+msgid "Libraries: "
+msgstr "Bibliotek: "
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr "GDNative"
+
+#: modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+#, fuzzy
+msgid "Not a script with an instance"
+msgstr "Inte ett Skript med en instans"
+
+#: modules/gdscript/gdscript_functions.cpp
+#, fuzzy
+msgid "Not based on a script"
+msgstr "Inte baserad på ett Skript"
+
+#: modules/gdscript/gdscript_functions.cpp
+#, fuzzy
+msgid "Not based on a resource file"
+msgstr "Inte baserad på en resursfil"
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Duplicate Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Edit X Axis"
+msgstr "Redigera X-Axel"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Edit Y Axis"
+msgstr "Redigera Y-Axel"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Edit Z Axis"
+msgstr "Redigera Z-Axel"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Exterior Connector"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Erase Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
+msgid "Clear Selection"
+msgstr "Rensa Urval"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/mono/editor/mono_bottom_panel.cpp
+msgid "Builds"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr "Funktioner:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr "Variabler:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Rename Function"
+msgstr "Byt namn på funktion"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Rename Variable"
+msgstr "Byt namn på variabel"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Rename Signal"
+msgstr "Byt namn på Signal"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Function"
+msgstr "Lägg till Funktion"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Variable"
+msgstr "Lägg till Variabel"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Signal"
+msgstr "Lägg till Signal"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Node"
+msgstr "Lägg Till Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Move Node(s)"
+msgstr "Flytta Nod(er)"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Connect Nodes"
+msgstr "Anslut Noder"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Condition"
+msgstr "Villkor"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Sequence"
+msgstr "Sekvens"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Switch"
+msgstr "Växla"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Iterator"
+msgstr "Iterator"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "While"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Return"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Call"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Get"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Script already has function '%s'"
+msgstr "Skript har redan funktionen '%s'"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Remove Function"
+msgstr "Ta bort Funktion"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Edit Variable"
+msgstr "Redigera Variabel"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Remove Variable"
+msgstr "Ta bort Variabeln"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Editing Variable:"
+msgstr "Redigerar Variabel:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Available Nodes:"
+msgstr "Tillgängliga Noder:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Edit Variable:"
+msgstr "Redigera Variabel:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr "Kopiera Noder"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Klipp ut Noder"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Klistra in Noder"
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+#, fuzzy
+msgid "VariableGet not found in script: "
+msgstr "VariableGet hittades inte i Skript: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+#, fuzzy
+msgid "VariableSet not found in script: "
+msgstr "VariableSet hittades inte i Skript: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr "Kör i Webbläsare"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Run exported HTML in the system's default browser."
+msgstr "Kör exporterad HTML i systemets standardwebbläsare."
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not write file:\n"
+msgstr "Kunde inte skriva till filen:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+#, fuzzy
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D tjänar bara till att ge en kollisionsform till en "
+"CollisionObject2D-härledd nod. Använd endast det som ett barn till Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. för att ge dem en form."
+
+#: scene/2d/collision_polygon_2d.cpp
+#, fuzzy
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "En tom CollisionPolygon2D har ingen effekt på kollision."
+
+#: scene/2d/collision_shape_2d.cpp
+#, fuzzy
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D tjänar bara till att ge en kollisionsform till en "
+"CollisionObject2D-härledd nod. Använd endast det som ett barn till Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. för att ge dem en form."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+#, fuzzy
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance måste vara ett barn eller barnbarn till en "
+"Navigation2D-Node. Den ger bara navigationsdata."
+
+#: scene/2d/parallax_layer.cpp
+#, fuzzy
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"ParallaxLayer-Node fungerar bara när satt som en barn till en "
+"ParallaxBackground-Node."
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+#, fuzzy
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+"PathFollow2D fungerar bara när den är satt som ett barn till en Path2D-Node."
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overriden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+#, fuzzy
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+"Sökvägs-egenskapen måste peka på en giltigt Node2D Node för att fungera."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller id must not be 0 or this controller will not be bound to an "
+"actual controller"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor id must not be 0 or this anchor will not be bound to an actual "
+"anchor"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+#, fuzzy
+msgid "ARVROrigin requires an ARVRCamera child node"
+msgstr "ARVROrigin kräver en ARVRCamera Barn-Node"
+
+#: scene/3d/collision_polygon.cpp
+#, fuzzy
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon tjänar bara till att ge en kollisionsform till en "
+"CollisionObject-härledd nod. Använd endast det som ett barn till Area, "
+"StaticBody, RigidBody, KinematicBody, etc. för att ge dem en form."
+
+#: scene/3d/collision_polygon.cpp
+#, fuzzy
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "En tom CollisionPolygon har ingen effekt på kollision."
+
+#: scene/3d/collision_shape.cpp
+#, fuzzy
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape tjänar bara till att ge en kollisionsform till en "
+"CollisionObject-härledd nod. Använd endast det som ett barn till Area, "
+"StaticBody, RigidBody, KinematicBody, etc. för att ge dem en form."
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overriden by "
+"the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid "Path property must point to a valid Spatial node to work."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+#, fuzzy
+msgid "Raw Mode"
+msgstr "Raw-Läge"
+
+#: scene/gui/color_picker.cpp
+#, fuzzy
+msgid "Add current color as a preset"
+msgstr "Lägg till nuvarande färg som en förinställning"
+
+#: scene/gui/dialogs.cpp
+#, fuzzy
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: scene/gui/dialogs.cpp
+#, fuzzy
+msgid "Alert!"
+msgstr "Varning!"
+
+#: scene/gui/dialogs.cpp
+#, fuzzy
+msgid "Please Confirm..."
+msgstr "Vänligen Bekräfta..."
+
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Välj en Node"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Setings (Rendering -> Viewport -"
+"> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#, fuzzy
+msgid "Error initializing FreeType."
+msgstr "Fel vid initiering av FreeType."
+
+#: scene/resources/dynamic_font.cpp
+#, fuzzy
+msgid "Unknown font format."
+msgstr "Okänt fontformat."
+
+#: scene/resources/dynamic_font.cpp
+#, fuzzy
+msgid "Error loading font."
+msgstr "Fel vid laddning av font."
+
+#: scene/resources/dynamic_font.cpp
+#, fuzzy
+msgid "Invalid font size."
+msgstr "Ogiltig teckenstorlek."
diff --git a/editor/translations/th.po b/editor/translations/th.po
index 65bbafebb6..3fdfb40961 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -9,15 +9,15 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-10-23 02:49+0000\n"
-"Last-Translator: Poommetee Ketson <poommetee@protonmail.com>\n"
+"PO-Revision-Date: 2017-11-28 13:50+0000\n"
+"Last-Translator: Kaveeta Vivatchai <katviv@protonmail.com>\n"
"Language-Team: Thai <https://hosted.weblate.org/projects/godot-engine/godot/"
"th/>\n"
"Language: th\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -28,7 +28,6 @@ msgid "All Selection"
msgstr "เลือà¸à¸—ั้งหมด"
#: editor/animation_editor.cpp
-#, fuzzy
msgid "Move Add Key"
msgstr "เลื่อนหรือเพิ่มคีย์à¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
@@ -101,6 +100,7 @@ msgid "Anim Delete Keys"
msgstr "ลบคีย์à¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "ทำซ้ำในà¹à¸—ร็à¸à¹€à¸”ิม"
@@ -244,7 +244,7 @@ msgstr "ซูมà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "ความยาว (วินาที):"
+msgstr "ความยาว (วิ):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
@@ -252,7 +252,7 @@ msgstr "ความยาวà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™ (วินาที)"
#: editor/animation_editor.cpp
msgid "Step (s):"
-msgstr "ช่วง (วินาที):"
+msgstr "ช่วง (วิ):"
#: editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
@@ -533,7 +533,7 @@ msgstr "เชื่อมโยงสัà¸à¸à¸²à¸“:"
#: editor/connections_dialog.cpp
msgid "Create Subscription"
-msgstr "ลบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยง"
+msgstr "สร้างà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยง"
#: editor/connections_dialog.cpp
msgid "Connect.."
@@ -634,6 +634,13 @@ msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡"
msgid "Search Replacement Resource:"
msgstr "ค้นหารีซอร์สมาà¹à¸—นที่:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "เปิด"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "เจ้าของของ:"
@@ -706,6 +713,14 @@ msgstr "ลบไฟล์ที่เลือ�"
msgid "Delete"
msgstr "ลบ"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "à¹à¸à¹‰à¹„ขคีย์ดิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µ"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "à¹à¸à¹‰à¹„ขค่าดิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µ"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "ขอขอบคุณจาà¸à¸Šà¸¸à¸¡à¸Šà¸™à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰ Godot!"
@@ -1117,6 +1132,11 @@ msgid "File Exists, Overwrite?"
msgstr "มีไฟล์นี้อยู่à¹à¸¥à¹‰à¸§ จะเขียนทับหรือไม่?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "สร้างโฟลเดอร์"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "ทุà¸à¸™à¸²à¸¡à¸ªà¸¸à¸à¸¥à¸—ี่รู้จัà¸"
@@ -1124,12 +1144,6 @@ msgstr "ทุà¸à¸™à¸²à¸¡à¸ªà¸¸à¸à¸¥à¸—ี่รู้จัà¸"
msgid "All Files (*)"
msgstr "ทุà¸à¹„ฟล์ (*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "เปิด"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "เปิดไฟล์"
@@ -1196,7 +1210,7 @@ msgstr "เลื่อนโฟลเดอร์ที่ชอบขึ้น
msgid "Move Favorite Down"
msgstr "เลื่อนโฟลเดอร์ที่ชอบลง"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr "ไปยังโฟลเดอร์หลัà¸"
@@ -1219,11 +1233,11 @@ msgstr "นามสà¸à¸¸à¸¥à¹„ฟล์ไม่ถูà¸à¸•้อง"
#: editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr ""
+msgstr "สà¹à¸à¸™à¸•้นฉบับ"
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
-msgstr "นำเข้าอีà¸à¸„รั้ง"
+msgstr "นำเข้าทรัพยาà¸à¸£(อีà¸à¸„รั้ง)"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -1240,7 +1254,7 @@ msgstr "ค้นหาคลาส"
#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Top"
-msgstr "บน"
+msgstr "บนสุด"
#: editor/editor_help.cpp editor/property_editor.cpp
msgid "Class:"
@@ -1387,11 +1401,11 @@ msgstr "ผิดพลาดขณะอ่านไฟล์ '%s'"
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "ไฟล์ '%s' ไม่สมบูรณ์"
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
-msgstr "ไฟล์ที่ '%s' ใช้สูà¸à¸«à¸²à¸¢"
+msgstr "'%s' หรือà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸ªà¸¹à¸à¸«à¸²à¸¢"
#: editor/editor_node.cpp
msgid "Error while loading '%s'."
@@ -1489,6 +1503,25 @@ msgstr ""
"อ่านรายละเอียดเพิ่มเติมได้จาà¸à¸„ู่มือในส่วนของà¸à¸²à¸£à¸™à¸³à¹€à¸‚้าฉาà¸"
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"วัตถุนี้เป็นวัตถุรีโมท à¸à¸²à¸£à¹à¸à¹‰à¹„ขจะไม่ถูà¸à¸šà¸±à¸™à¸—ึà¸\n"
+"อ่านรายละเอียดเพิ่มเติมได้จาà¸à¸„ู่มือในส่วนของà¸à¸²à¸£à¹à¸à¹‰à¹„ขจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "ขยายโฟลเดอร์"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "ยุบโฟลเดอร์"
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr "คัดลอà¸à¸•ัวà¹à¸›à¸£"
@@ -1604,6 +1637,10 @@ msgid "Export Mesh Library"
msgstr "ส่งออภMesh Library"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "ทำไม่ได้ถ้าไม่มีโหนดราà¸"
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "ส่งออภTile Set"
@@ -1667,30 +1704,25 @@ msgid "Pick a Main Scene"
msgstr "เลือà¸à¸‰à¸²à¸à¹€à¸£à¸´à¹ˆà¸¡à¸•้น"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "ไม่สามารถเปิดใช้งานปลั๊à¸à¸­à¸´à¸™: '"
+msgstr "ไม่สามารถเปิดใช้งานปลั๊à¸à¸­à¸´à¸™: '%s'"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr "ไม่พบชื่อสคริปต์ใน: 'res://addons/"
+msgstr "ไม่พบชื่อสคริปต์ในปลั๊à¸à¸­à¸´à¸™: 'res://addons/%s'"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '"
+msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '%s'"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '"
+msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '%s' ไม่ได้สืบทอดจาภEditorPlugin"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '"
+msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '%s' ไม่ใช่สคริปต์ tool"
#: editor/editor_node.cpp
msgid ""
@@ -1739,12 +1771,20 @@ msgid "Switch Scene Tab"
msgstr "สลับฉาà¸"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr "à¹à¸¥à¸°à¸­à¸µà¸ %d ไฟล์หรือโฟลเดอร์"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "à¹à¸¥à¸°à¸­à¸µà¸ %d โฟลเดอร์"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
msgstr "à¹à¸¥à¸°à¸­à¸µà¸ %d ไฟล์"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "à¹à¸¥à¸°à¸­à¸µà¸ %d ไฟล์หรือโฟลเดอร์"
+msgid "Dock Position"
+msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¹à¸œà¸‡"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1755,6 +1795,10 @@ msgid "Toggle distraction-free mode."
msgstr "โหมดไร้สิ่งรบà¸à¸§à¸™"
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "เพิ่มฉาà¸à¹ƒà¸«à¸¡à¹ˆ"
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "ฉาà¸"
@@ -1819,13 +1863,12 @@ msgid "TileSet.."
msgstr "TileSet.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "เลิà¸à¸—ำ"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "ทำซ้ำ"
@@ -1863,17 +1906,17 @@ msgstr "ปิดà¹à¸¥à¸°à¸à¸¥à¸±à¸šà¸ªà¸¹à¹ˆà¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¹‚ปรเ
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Debug"
-msgstr "ดีบัค"
+msgstr "à¹à¸à¹‰à¸ˆà¸¸à¸”บà¸à¸žà¸£à¹ˆà¸­à¸‡"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr "ส่งออà¸à¸”้วยรีโมทดีบัค"
+msgstr "ส่งออà¸à¸žà¸£à¹‰à¸­à¸¡à¸à¸²à¸£à¹à¸à¹‰à¹„ขจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡à¸œà¹ˆà¸²à¸™à¹€à¸„รือข่าย"
#: editor/editor_node.cpp
msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
-msgstr "เมื่อส่งออภโปรà¹à¸à¸£à¸¡à¸ˆà¸°à¸žà¸¢à¸²à¸¢à¸²à¸¡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อมายังคอมพิวเตอร์เครื่องนี้เพื่อทำà¸à¸²à¸£à¸”ีบัค"
+msgstr "เมื่อส่งออภโปรà¹à¸à¸£à¸¡à¸ˆà¸°à¸žà¸¢à¸²à¸¢à¸²à¸¡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อมายังคอมพิวเตอร์เครื่องนี้เพื่อทำà¸à¸²à¸£à¹à¸à¹‰à¹„ขจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡"
#: editor/editor_node.cpp
msgid "Small Deploy with Network FS"
@@ -2090,14 +2133,14 @@ msgid "Import"
msgstr "นำเข้า"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "ระบบไฟล์"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "โหนด"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "ระบบไฟล์"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "ข้อความ"
@@ -2130,9 +2173,8 @@ msgid "Open & Run a Script"
msgstr "เปิดà¹à¸¥à¸°à¸£à¸±à¸™à¸ªà¸„ริปต์"
#: editor/editor_node.cpp
-#, fuzzy
msgid "New Inherited"
-msgstr "สืบทอดฉาà¸à¹ƒà¸«à¸¡à¹ˆ.."
+msgstr "สืบทอด"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -2154,7 +2196,7 @@ msgstr "เปิดตัวà¹à¸à¹‰à¹„ข 3 มิติ"
msgid "Open Script Editor"
msgstr "เปิดตัวà¹à¸à¹‰à¹„ขสคริปต์"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "เปิดà¹à¸«à¸¥à¹ˆà¸‡à¸£à¸§à¸¡à¸—รัพยาà¸à¸£"
@@ -2217,12 +2259,11 @@ msgstr "เวลาเฉลี่ย (วินาที)"
#: editor/editor_profiler.cpp
msgid "Frame %"
-msgstr "เฟรม %"
+msgstr "% ของเฟรม"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "เฟรมคงที่ %"
+msgstr "% ของเฟรมฟิสิà¸à¸ªà¹Œ"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2230,11 +2271,11 @@ msgstr "เวลา:"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr ""
+msgstr "รวม"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr ""
+msgstr "ตัวเอง"
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -2317,6 +2358,10 @@ msgid "(Current)"
msgstr "(ปัจจุบัน)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸£à¸µà¸¢à¸à¸‚้อมูล โปรดรอ.."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "ลบà¹à¸¡à¹ˆà¹à¸šà¸šà¸£à¸¸à¹ˆà¸™ '%s'?"
@@ -2351,6 +2396,100 @@ msgid "Importing:"
msgstr "นำเข้า:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr "ไม่พบลิงà¸à¹Œà¸”าวน์โหลดสำหรับรุ่นนี้ มีเฉพาะสำหรับโปรà¹à¸à¸£à¸¡à¸£à¸¸à¹ˆà¸™à¸«à¸¥à¸±à¸"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "ค้นหาไม่สำเร็จ"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "เชื่อมต่อไม่ได้"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "ไม่มีà¸à¸²à¸£à¸•อบà¸à¸¥à¸±à¸š"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "ร้องขอผิดพลาด"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "เปลี่ยนทางมาà¸à¹€à¸à¸´à¸™à¹„ป"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "ผิดพลาด:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "เขียนไฟล์ไม่ได้"
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "ดาวน์โหลดเสร็จสิ้น"
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "ผิดพลาดขณะร้องขอที่อยู่: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อสิ้นสุด"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "ค้นหาไม่สำเร็จ"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "เชื่อมต่อไม่ได้"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "เชื่อมต่อà¹à¸¥à¹‰à¸§"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¹‰à¸­à¸‡à¸‚อ.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸”าวน์โหลด"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "เชื่อมต่อผิดพลาด"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "à¸à¸²à¸£à¸£à¸±à¸šà¸£à¸­à¸‡à¸„วามปลอดภัยผิดพลาด"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "รุ่นปัจจุบัน:"
@@ -2374,21 +2513,29 @@ msgstr "เลือà¸à¹„ฟล์à¹à¸¡à¹ˆà¹à¸šà¸š"
msgid "Export Template Manager"
msgstr "จัดà¸à¸²à¸£à¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸­à¸­à¸"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "ดาวน์โหลดà¹à¸¡à¹ˆà¹à¸šà¸š"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "เลือà¸à¸¥à¸´à¸‡à¸à¹Œà¸”าวน์โหลด: "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr "เปิดไฟล์ file_type_cache.cch เพื่อเขียนไม่ได้ จะไม่บันทึà¸à¹à¸„ชของชนิดไฟล์!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "ไม่สามารถไปยัง '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "ไม่สามารถไปยัง '%s' เนื่องจาà¸à¹„ม่พบในระบบ!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "à¹à¸ªà¸”งเป็นภาพตัวอย่าง"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "à¹à¸ªà¸”งเป็นรายชื่อไฟล์"
#: editor/filesystem_dock.cpp
msgid ""
@@ -2399,15 +2546,6 @@ msgstr ""
"สถานะ: นำเข้าไฟล์ล้มเหลว à¸à¸£à¸¸à¸“าà¹à¸à¹‰à¹„ขไฟล์à¹à¸¥à¸°à¸™à¸³à¹€à¸‚้าใหม่"
#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-"\n"
-"ต้นฉบับ: "
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr "ไม่สามารถย้าย/เปลี่ยนชื่อโฟลเดอร์ราà¸"
@@ -2667,9 +2805,8 @@ msgid "Remove Poly And Point"
msgstr "ลบรูปหลายเหลี่ยมà¹à¸¥à¸°à¸ˆà¸¸à¸”"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "สร้างรูปหลายเหลี่ยมจาà¸à¸„วามว่างเปล่า"
+msgid "Create a new polygon from scratch"
+msgstr "สร้างรูปหลายเหลี่ยมใหม่ตั้งà¹à¸•่ต้น"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2683,6 +2820,10 @@ msgstr ""
"Ctrl+เมาส์ซ้าย: à¹à¸¢à¸à¸ªà¹ˆà¸§à¸™\n"
"เมาส์ขวา: ลบจุด"
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "ลบจุด"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "เปิดปิดà¸à¸²à¸£à¹€à¸¥à¹ˆà¸™à¸­à¸±à¸•โนมัติ"
@@ -2728,11 +2869,11 @@ msgstr "เพิ่มà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸œà¸ªà¸²à¸™à¹„ปข้างหน้า"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขระยะเวลาà¸à¸²à¸£à¸œà¸ªà¸²à¸™"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
@@ -2816,7 +2957,7 @@ msgstr "เล่นอัตโนมัติเมื่อโหลด"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Target Blend Times"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขระยะเวลาà¸à¸²à¸£à¸œà¸ªà¸²à¸™à¹„ปยังเป้าหมาย"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
@@ -2827,6 +2968,57 @@ msgid "Copy Animation"
msgstr "คัดลอà¸à¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "หัวข้อ:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "วาง"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "ฟีเจอร์"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "สร้างà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™à¹ƒà¸«à¸¡à¹ˆ"
@@ -2843,15 +3035,15 @@ msgstr "ผิดพลาด!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
-msgstr ""
+msgstr "ระยะเวลาผสาน:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
-msgstr ""
+msgstr "ถัดไป (คิวอัตโนมัติ):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
-msgstr ""
+msgstr "ระยะเวลาà¸à¸²à¸£à¸œà¸ªà¸²à¸™ Cross-Animation"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/canvas_item_editor_plugin.cpp
@@ -2884,7 +3076,6 @@ msgid "Blend"
msgstr "ผสม"
#: editor/plugins/animation_tree_editor_plugin.cpp
-#, fuzzy
msgid "Mix"
msgstr "ร่วม"
@@ -2894,11 +3085,11 @@ msgstr "เริ่มใหม่อัตโนมัติ:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Restart (s):"
-msgstr ""
+msgstr "เริ่มใหม่ (วิ):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Random Restart (s):"
-msgstr ""
+msgstr "สุ่มเริ่มใหม่ (วิ):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Start!"
@@ -2923,7 +3114,7 @@ msgstr "ผสม 1:"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "X-Fade Time (s):"
-msgstr "ระยะเวลาเฟด (วินาที):"
+msgstr "ระยะเวลาเฟด (วิ):"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Current:"
@@ -2935,11 +3126,11 @@ msgstr "เพิ่มอินพุต"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Clear Auto-Advance"
-msgstr ""
+msgstr "ลบ Auto-Advance"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Set Auto-Advance"
-msgstr ""
+msgstr "ตั้ง Auto-Advance"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Delete Input"
@@ -3018,18 +3209,10 @@ msgid "Can't resolve hostname:"
msgstr "ไม่พบตำà¹à¸«à¸™à¹ˆà¸‡à¸™à¸µà¹‰:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "ค้นหาไม่สำเร็จ"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "เชื่อมต่อไม่ได้ à¸à¸£à¸¸à¸“าลองใหม่"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "เชื่อมต่อไม่ได้"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "ไม่สามารถเชื่อมต่อà¸à¸±à¸šà¹‚ฮสต์:"
@@ -3038,30 +3221,14 @@ msgid "No response from host:"
msgstr "ไม่มีà¸à¸²à¸£à¸•อบà¸à¸¥à¸±à¸šà¸ˆà¸²à¸à¹‚ฮสต์:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "ไม่มีà¸à¸²à¸£à¸•อบà¸à¸¥à¸±à¸š"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "à¸à¸²à¸£à¸£à¹‰à¸­à¸‡à¸‚อผิดพลาด รหัส:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "ร้องขอผิดพลาด"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "à¸à¸²à¸£à¸£à¹‰à¸­à¸‡à¸‚อผิดพลาด เปลี่ยนทางมาà¸à¹€à¸à¸´à¸™à¹„ป"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "เปลี่ยนทางมาà¸à¹€à¸à¸´à¸™à¹„ป"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "ผิดพลาด:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "à¹à¸®à¸Šà¸œà¸´à¸”พลาด ไฟล์ดาวน์โหลดอาจเสียหาย"
@@ -3079,7 +3246,7 @@ msgstr "ผิดพลาดในà¸à¸²à¸£à¸•รวจสอบà¹à¸®à¸Š SHA25
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr "à¸à¸²à¸£à¸”าวน์โหลดผิดพลาด:"
+msgstr "ดาวน์โหลดทรัพยาà¸à¸£à¸œà¸´à¸”พลาด:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Fetching:"
@@ -3090,14 +3257,6 @@ msgid "Resolving.."
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา.."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¹‰à¸­à¸‡à¸‚อ.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "à¸à¸²à¸£à¸£à¹‰à¸­à¸‡à¸‚อผิดพลาด"
@@ -3207,7 +3366,35 @@ msgstr "ย้ายจุดหมุน"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Action"
-msgstr ""
+msgstr "เคลื่อนย้าย"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "เลื่อนเส้นนำà¹à¸™à¸§à¸•ั้ง"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "สร้างเส้นนำà¹à¸™à¸§à¸•ั้ง"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "ลบเส้นนำà¹à¸™à¸§à¸•ั้ง"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "เลื่อนเส้นนำà¹à¸™à¸§à¸™à¸­à¸™"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "สร้างเส้นนำà¹à¸™à¸§à¸™à¸­à¸™"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "ลบเส้นนำà¹à¸™à¸§à¸™à¸­à¸™"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "สร้างเส้นนำà¹à¸™à¸§à¸•ั้งà¹à¸¥à¸°à¹à¸™à¸§à¸™à¸­à¸™"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
@@ -3218,9 +3405,8 @@ msgid "Edit CanvasItem"
msgstr "à¹à¸à¹‰à¹„ข CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Anchors only"
-msgstr "ตรึง"
+msgstr "ปรับหมุดเท่านั้น"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors and Margins"
@@ -3280,9 +3466,8 @@ msgid "Pan Mode"
msgstr "โหมดมุมมอง"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggles snapping"
-msgstr "เปิด/ปิด จุดพัà¸à¹‚ปรà¹à¸à¸£à¸¡"
+msgstr "เปิด/ปิด à¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3290,23 +3475,20 @@ msgid "Use Snap"
msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸„ลื่อนย้าย"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snapping options"
-msgstr "ตัวเลือà¸à¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
+msgstr "ตัวเลือà¸à¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to grid"
-msgstr "โหมดà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”:"
+msgstr "จำà¸à¸±à¸”ด้วยเส้นตาราง"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¸«à¸¡à¸¸à¸™"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Configure Snap..."
-msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”.."
+msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
@@ -3318,30 +3500,35 @@ msgstr "จำà¸à¸±à¸”ให้ย้ายเป็นพิà¸à¹€à¸‹à¸¥"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "จำà¸à¸±à¸”อัตโนมัติ"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to parent"
-msgstr "ขยายให้เต็มโหนดà¹à¸¡à¹ˆ"
+msgstr "จำà¸à¸±à¸”ด้วยโหนดà¹à¸¡à¹ˆ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "จำà¸à¸±à¸”ด้วยจุดหมุนของโหนด"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "จำà¸à¸±à¸”ด้วยเส้นขอบของโหนด"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "จำà¸à¸±à¸”ด้วยโหนดอื่น"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "จำà¸à¸±à¸”ด้วยเส้นนำ"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "ล็อคไม่ให้วัตถุที่เลือà¸à¸¢à¹‰à¸²à¸¢à¸•ำà¹à¸«à¸™à¹ˆà¸‡"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "ปลดล็อควัตถุที่เลือà¸"
@@ -3392,6 +3579,10 @@ msgid "Show rulers"
msgstr "à¹à¸ªà¸”งไม้บรรทัด"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "à¹à¸ªà¸”งเส้นนำ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr "ให้สิ่งที่เลือà¸à¸­à¸¢à¸¹à¹ˆà¸à¸¥à¸²à¸‡à¸ˆà¸­"
@@ -3425,7 +3616,7 @@ msgstr "ลบท่าทาง"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "เลื่อนจุดหมุนจาà¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¹€à¸¡à¸²à¸ªà¹Œ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set pivot at mouse position"
@@ -3433,11 +3624,11 @@ msgstr "à¸à¸³à¸«à¸™à¸”จุดหมุนที่ตำà¹à¸«à¸™à¹ˆà¸‡à¹€à¸¡
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "เพิ่มความถี่เส้นตารางขึ้น 2 เท่า"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "ลดความถี่เส้นตารางลงครึ่งหนึ่ง"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3572,12 +3763,16 @@ msgstr "ลบจุดบนเส้นโค้ง"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
-msgstr ""
+msgstr "เปิด/ปิดเส้นสัมผัสà¹à¸™à¸§à¹‚ค้ง"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Hold Shift to edit tangents individually"
msgstr "à¸à¸” Shift ค้างเพื่อปรับเส้นสัมผัสà¹à¸¢à¸à¸à¸±à¸™"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "สร้าง GI Probe"
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "เพิ่ม/ลบตำà¹à¸«à¸™à¹ˆà¸‡à¸ªà¸µ"
@@ -3612,6 +3807,10 @@ msgid "Create Occluder Polygon"
msgstr "สร้างรูปหลายเหลี่ยมà¸à¸±à¹‰à¸™à¹à¸ªà¸‡"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "สร้างรูปหลายเหลี่ยมจาà¸à¸„วามว่างเปล่า"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยมเดิม:"
@@ -3627,58 +3826,6 @@ msgstr "Ctrl+คลิà¸à¸‹à¹‰à¸²à¸¢: à¹à¸¢à¸à¸ªà¹ˆà¸§à¸™"
msgid "RMB: Erase Point."
msgstr "คลิà¸à¸‚วา: ลบจุด"
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "ลบจุดจาà¸à¹€à¸ªà¹‰à¸™"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "เพิ่มจุดในเส้น"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "ย้ายจุดในเส้น"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "เลือà¸à¸ˆà¸¸à¸”"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+ลาà¸: เลือà¸à¹€à¸ªà¹‰à¸™à¸ªà¸±à¸¡à¸œà¸±à¸ª"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "คลิà¸: เพิ่มจุด"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "คลิà¸à¸‚วา: ลบจุด"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "เพิ่มจุด (ในที่ว่าง)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "à¹à¸¢à¸à¸ªà¹ˆà¸§à¸™ (ในเส้น)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "ลบจุด"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "Mesh ว่างเปล่า!"
@@ -3793,11 +3940,11 @@ msgstr "พื้นผิวต้นฉบับไม่ถูà¸à¸•้อง
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Parent has no solid faces to populate."
-msgstr ""
+msgstr "โหนดà¹à¸¡à¹ˆà¹„ม่มีพื้นผิวเพื่อสร้าง"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Couldn't map area."
-msgstr ""
+msgstr "ไม่สามารถวางพื้นที่"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Source Mesh:"
@@ -3809,11 +3956,11 @@ msgstr "เลือà¸à¸žà¸·à¹‰à¸™à¸œà¸´à¸§à¸›à¸¥à¸²à¸¢à¸—าง:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate Surface"
-msgstr ""
+msgstr "สร้างพื้นผิว"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate MultiMesh"
-msgstr ""
+msgstr "สร้าง MultiMesh"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Target Surface:"
@@ -3853,11 +4000,11 @@ msgstr "สุ่มขนาด:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate"
-msgstr ""
+msgstr "สร้าง"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
msgid "Bake!"
-msgstr ""
+msgstr "สร้าง!"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
msgid "Bake the navigation mesh.\n"
@@ -3869,11 +4016,11 @@ msgstr "ล้าง Mesh นำทาง"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ˆà¸±à¸”à¸à¸²à¸£à¹‚ครงร่าง..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„ำนวณขนาดตาราง..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Creating heightfield..."
@@ -3885,14 +4032,13 @@ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸à¸³à¸«à¸™à¸”พื้นผิวที่เดิน
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸µà¸šà¸­à¸±à¸”สนามความสูง..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
msgstr "บีบà¹à¸„บส่วนที่เดินผ่านได้..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
msgstr "à¸à¸³à¸¥à¸±à¸‡à¹à¸šà¹ˆà¸‡à¸ªà¹ˆà¸§à¸™..."
@@ -3910,7 +4056,7 @@ msgstr "à¸à¸³à¸¥à¸±à¸‡à¹à¸›à¸¥à¸‡à¸à¸¥à¸±à¸šà¹€à¸›à¹‡à¸™ Mesh นำทาง
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "à¸à¸²à¸£à¸•ั้งค่าà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸žà¸·à¹‰à¸™à¸œà¸´à¸§à¸™à¸³à¸—าง:"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Parsing Geometry..."
@@ -3918,7 +4064,7 @@ msgstr "วิเคราะห์พื้นผิว..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "เสร็จสิ้น!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -3930,13 +4076,12 @@ msgstr "ลบ Mask à¸à¸²à¸£à¸›à¸¥à¹ˆà¸­à¸¢"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generating AABB"
msgstr "สร้างเส้นà¸à¸£à¸­à¸š"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
-msgstr ""
+msgstr "สามารถà¸à¸³à¸«à¸™à¸”จุดให้à¹à¸à¹ˆ ParticlesMaterial เท่านั้น"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Error loading image:"
@@ -3994,7 +4139,7 @@ msgstr "โหนดไม่มี geometry (หน้า)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr "ต้องà¸à¸²à¸£ Material ประเภท 'ParticlesMaterial'"
+msgstr "ต้องà¸à¸²à¸£à¸§à¸±à¸ªà¸”ุประเภท 'ParticlesMaterial'"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
@@ -4005,7 +4150,6 @@ msgid "No faces!"
msgstr "ไม่มีหน้า!"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generate AABB"
msgstr "สร้างเส้นà¸à¸£à¸­à¸š"
@@ -4046,9 +4190,8 @@ msgid "Emission Source: "
msgstr "à¹à¸«à¸¥à¹ˆà¸‡à¸›à¸°à¸—ุ: "
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generate Visibility AABB"
-msgstr "สร้างà¸à¸£à¸­à¸šà¸à¸²à¸£à¸¡à¸­à¸‡à¹€à¸«à¹‡à¸™"
+msgstr "สร้างเส้นà¸à¸£à¸­à¸šà¸à¸²à¸£à¸¡à¸­à¸‡à¹€à¸«à¹‡à¸™"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
@@ -4080,16 +4223,46 @@ msgid "Move Out-Control in Curve"
msgstr "ย้ายจุดควบคุมขาออà¸à¸‚องเส้นโค้ง"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "เลือà¸à¸ˆà¸¸à¸”"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+ลาà¸: เลือà¸à¹€à¸ªà¹‰à¸™à¸ªà¸±à¸¡à¸œà¸±à¸ª"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "คลิà¸: เพิ่มจุด"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "คลิà¸à¸‚วา: ลบจุด"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "เลือà¸à¹€à¸ªà¹‰à¸™à¸ªà¸±à¸¡à¸œà¸±à¸ª (Shift+ลาà¸)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "เพิ่มจุด (ในที่ว่าง)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "à¹à¸¢à¸à¸ªà¹ˆà¸§à¸™ (ในเส้นโค้ง)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "ลบจุด"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "ปิดเส้นโค้ง"
@@ -4098,17 +4271,14 @@ msgid "Curve Point #"
msgstr "จุดเส้นโค้ง #"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
msgstr "à¸à¸³à¸«à¸™à¸”พิà¸à¸±à¸”จุดเส้นโค้ง"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve In Position"
msgstr "à¸à¸³à¸«à¸™à¸”เส้นโค้งขาเข้า"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Out Position"
msgstr "à¸à¸³à¸«à¸™à¸”เส้นโค้งขาออà¸"
@@ -4229,7 +4399,6 @@ msgstr "โหลดรีซอร์ส"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4276,6 +4445,20 @@ msgid " Class Reference"
msgstr " ตำราอ้างอิงคลาส"
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "เรียง"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "ย้ายขึ้น"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "ย้ายลง"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "สคริปต์ถัดไป"
@@ -4327,6 +4510,10 @@ msgstr "ปิดคู่มือ"
msgid "Close All"
msgstr "ปิดทั้งหมด"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "ปิดà¹à¸—็บอื่น"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "รัน"
@@ -4337,13 +4524,11 @@ msgstr "เปิด/ปิดà¹à¸œà¸‡à¸ªà¸„ริปต์"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "ค้นหา.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "ค้นหาต่อไป"
@@ -4366,11 +4551,11 @@ msgstr "ทำต่อไป"
#: editor/plugins/script_editor_plugin.cpp
msgid "Keep Debugger Open"
-msgstr "เปิดตัวดีบัคค้างไว้"
+msgstr "เปิดตัวà¹à¸à¹‰à¹„ขจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡à¸„้างไว้"
#: editor/plugins/script_editor_plugin.cpp
msgid "Debug with external editor"
-msgstr "ดีบัคด้วยโปรà¹à¸à¸£à¸¡à¸­à¸·à¹ˆà¸™"
+msgstr "à¹à¸à¹‰à¸ˆà¸¸à¸”บà¸à¸žà¸£à¹ˆà¸­à¸‡à¸”้วยโปรà¹à¸à¸£à¸¡à¸­à¸·à¹ˆà¸™"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Godot online documentation"
@@ -4418,7 +4603,7 @@ msgstr "บันทึà¸à¸­à¸µà¸à¸„รั้ง"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Debugger"
-msgstr "ตัวดีบัค"
+msgstr "ตัวà¹à¸à¹‰à¹„ขจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
@@ -4449,36 +4634,25 @@ msgstr "ตัวพิมพ์เล็à¸"
msgid "Capitalize"
msgstr "อัà¸à¸©à¸£à¹à¸£à¸à¸žà¸´à¸¡à¸žà¹Œà¹ƒà¸«à¸à¹ˆ"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "ตัด"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "คัดลอà¸"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "เลือà¸à¸—ั้งหมด"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "ย้ายขึ้น"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "ย้ายลง"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
-msgstr "ลบเส้น"
+msgstr "ลบบรรทัด"
#: editor/plugins/script_text_editor.cpp
msgid "Indent Left"
@@ -4497,6 +4671,22 @@ msgid "Clone Down"
msgstr "คัดลอà¸à¸šà¸£à¸£à¸—ัดลงมา"
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "ซ่อน"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "à¹à¸ªà¸”ง"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "ซ่อนทั้งหมด"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "à¹à¸ªà¸”งทั้งหมด"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "เสนอà¹à¸™à¸°à¸„ำเต็ม"
@@ -4542,12 +4732,10 @@ msgid "Convert To Lowercase"
msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™à¸•ัวพิมพ์เล็à¸"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "ค้นหาà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "à¹à¸—นที่.."
@@ -4556,7 +4744,6 @@ msgid "Goto Function.."
msgstr "ไปยังฟังà¸à¹Œà¸Šà¸±à¸™.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "ไปยังบรรทัด.."
@@ -4570,7 +4757,7 @@ msgstr "Shader"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Constant"
-msgstr "à¹à¸à¹‰à¹„ขค่าคงที่"
+msgstr "à¹à¸à¹‰à¹„ขค่าคงที่สเà¸à¸¥à¸²à¸£à¹Œ"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Constant"
@@ -4582,27 +4769,27 @@ msgstr "à¹à¸à¹‰à¹„ขค่าคงที่สี"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Operator"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขเครื่องหมายสเà¸à¸¥à¸²à¸£à¹Œ"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Operator"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขเครื่องหมายเวà¸à¹€à¸•อร์"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Scalar Operator"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขเครื่องหมายเวà¸à¹€à¸•อร์สเà¸à¸¥à¸²à¸£à¹Œ"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change RGB Operator"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขเครื่องหมาย RGB"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Toggle Rot Only"
-msgstr ""
+msgstr "สลับเฉพาะà¸à¸²à¸£à¸«à¸¡à¸¸à¸™"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Function"
-msgstr "à¹à¸à¹‰à¹„ขฟังà¸à¹Œà¸Šà¸±à¸™ Scalar"
+msgstr "à¹à¸à¹‰à¹„ขฟังà¸à¹Œà¸Šà¸±à¸™à¸ªà¹€à¸à¸¥à¸²à¸£à¹Œ"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Function"
@@ -4610,15 +4797,15 @@ msgstr "à¹à¸à¹‰à¹„ขฟังà¸à¹Œà¸Šà¸±à¸™à¹€à¸§à¸à¹€à¸•อร์"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Uniform"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขสเà¸à¸¥à¸²à¸£à¹Œ Uniform"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Vec Uniform"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขเวà¸à¹€à¸•อร์ Uniform"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change RGB Uniform"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ข RGB Uniform"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Default Value"
@@ -4626,15 +4813,15 @@ msgstr "à¹à¸à¹‰à¹„ขค่าปริยาย"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change XForm Uniform"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ข XForm Uniform"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Texture Uniform"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ข Texture Uniform"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Cubemap Uniform"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ข Cubemap Uniform"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Comment"
@@ -4645,12 +4832,10 @@ msgid "Add/Remove to Color Ramp"
msgstr "เพิ่ม/ลบในà¸à¸²à¸£à¹„ล่สี"
#: editor/plugins/shader_graph_editor_plugin.cpp
-#, fuzzy
msgid "Add/Remove to Curve Map"
msgstr "เพิ่ม/ลบในเส้นโค้ง"
#: editor/plugins/shader_graph_editor_plugin.cpp
-#, fuzzy
msgid "Modify Curve Map"
msgstr "à¹à¸à¹‰à¹„ขเส้นโค้ง"
@@ -4720,7 +4905,15 @@ msgstr "ย้ายตามà¹à¸à¸™ Z"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Plane Transform."
-msgstr ""
+msgstr "ดูระนาบà¸à¸²à¸£à¸¢à¹‰à¸²à¸¢"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "อัตราส่วน: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "à¸à¸²à¸£à¹€à¸¥à¸·à¹ˆà¸­à¸™: "
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -4803,6 +4996,10 @@ msgid "Vertices"
msgstr "มุมรูปทรง"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "เฟรมต่อวินาที"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "ย้ายมาที่à¸à¸¥à¹‰à¸­à¸‡"
@@ -4835,6 +5032,14 @@ msgid "View Information"
msgstr "à¹à¸ªà¸”งข้อมูล"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "à¹à¸ªà¸”งอัตราเฟรม/วินาที"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "ความละเอียดครื่งหนึ่ง"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "ตัวรับเสียง"
@@ -4868,7 +5073,7 @@ msgstr "มุมมองอิสระ ลง"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Speed Modifier"
-msgstr "มุมมองอิสระ ปรับความเร็ว"
+msgstr "ปรับความเร็วมุมมองอิสระ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "preview"
@@ -4965,6 +5170,10 @@ msgid "Tool Scale"
msgstr "เครื่องมือปรับขนาด"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "เปิด/ปิดมุมมองอิสระ"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "เคลื่อนย้าย"
@@ -5115,7 +5324,7 @@ msgstr "à¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed (FPS):"
-msgstr "ความเร็ว (เฟรมต่อวินาที):"
+msgstr "ความเร็ว (เฟรม/วินาที):"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Loop"
@@ -5146,9 +5355,8 @@ msgid "StyleBox Preview:"
msgstr "ตัวอย่าง StyleBox:"
#: editor/plugins/texture_region_editor_plugin.cpp
-#, fuzzy
msgid "Set Region Rect"
-msgstr "ขอบเขต Texture"
+msgstr "à¸à¸³à¸«à¸™à¸”ขอบเขต Texture"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Snap Mode:"
@@ -5217,11 +5425,11 @@ msgstr "ลบทั้งหมด"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขธีม.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "เมนูà¹à¸à¹‰à¹„ขธีม"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5237,7 +5445,11 @@ msgstr "สร้างà¹à¸¡à¹ˆà¹à¸šà¸šà¹€à¸›à¸¥à¹ˆà¸²"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
-msgstr "สร้างà¹à¸¡à¹ˆà¹à¸šà¸šà¹€à¸›à¸¥à¹ˆà¸²"
+msgstr "สร้างà¹à¸¡à¹ˆà¹à¸šà¸šà¹€à¸›à¸¥à¹ˆà¸²à¸ªà¸³à¸«à¸£à¸±à¸š Editor"
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "สร้างจาà¸à¸˜à¸µà¸¡à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™"
#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
@@ -5346,7 +5558,7 @@ msgstr "ค้นหา tile"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Transpose"
-msgstr ""
+msgstr "สลับเปลี่ยน"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Mirror X"
@@ -5413,8 +5625,8 @@ msgid "Runnable"
msgstr "รันได้"
#: editor/project_export.cpp
-msgid "Delete patch '"
-msgstr "ลบà¹à¸žà¸•ช์ '"
+msgid "Delete patch '%s' from list?"
+msgstr "ลบà¹à¸žà¸•ช์ '%s' จาà¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­?"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
@@ -5500,10 +5712,9 @@ msgstr "à¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸­à¸­à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟอ
#: editor/project_export.cpp
msgid "Export With Debug"
-msgstr "ส่งออà¸à¸žà¸£à¹‰à¸­à¸¡à¸•ัวดีบัค"
+msgstr "ส่งออà¸à¸žà¸£à¹‰à¸­à¸¡à¸à¸²à¸£à¹à¸à¹‰à¹„ขจุดบà¸à¸žà¸£à¹ˆà¸­à¸‡"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
msgstr "ไม่พบไฟล์"
@@ -5515,11 +5726,11 @@ msgstr "à¸à¸£à¸¸à¸“าเลือà¸à¹„ฟล์ 'project.godot'"
msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
-msgstr ""
+msgstr "จะสร้างโปรเจà¸à¸•์ในโฟลเดอร์ที่มีไฟล์อยู่à¹à¸¥à¹‰à¸§ (ท่านอาจต้องà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹‚ฟลเดอร์ใหม่)"
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
-msgstr ""
+msgstr "à¸à¸£à¸¸à¸“าเลือà¸à¹‚ฟลเดอร์ที่ไม่มีไฟล์ 'project.godot'"
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -5527,11 +5738,11 @@ msgstr "นำเข้าโปรเจà¸à¸•์à¹à¸¥à¹‰à¸§"
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "ควรตั้งชื่อโปรเจà¸à¸•์"
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
@@ -5639,6 +5850,8 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"เปลี่ยนภาษาà¹à¸¥à¹‰à¸§\n"
+"à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸ˆà¸°à¸¡à¸µà¸œà¸¥à¹€à¸¡à¸·à¹ˆà¸­à¹€à¸›à¸´à¸”โปรà¹à¸à¸£à¸¡à¹à¸à¹‰à¹„ขหรือตัวจัดà¸à¸²à¸£à¹‚ปรเจà¸à¸•์ใหม่"
#: editor/project_manager.cpp
msgid ""
@@ -5671,14 +5884,19 @@ msgid "Exit"
msgstr "ออà¸"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "หาโหนดà¹à¸¡à¹ˆà¹ƒà¸«à¸¡à¹ˆ"
+msgstr "เริ่มใหม่ทันที"
#: editor/project_manager.cpp
msgid "Can't run project"
msgstr "ไม่สามารถรันโปรเจà¸à¸•์"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "ปุ่ม "
@@ -5712,10 +5930,6 @@ msgid "Add Input Action Event"
msgstr "เพิ่มà¸à¸²à¸£à¸à¸£à¸°à¸—ำ"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5837,12 +6051,12 @@ msgid "Select a setting item first!"
msgstr "à¸à¸£à¸¸à¸“าเลือà¸à¸•ัวเลือà¸à¸à¹ˆà¸­à¸™!"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr "ไม่พบคุณสมบัติ '"
+msgid "No property '%s' exists."
+msgstr "ไม่พบคุณสมบัติ '%s'"
#: editor/project_settings_editor.cpp
-msgid "Setting '"
-msgstr "ตัวเลือภ'"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "ตัวเลือภ'%s' เป็นค่าภายในไม่สามารถลบได้"
#: editor/project_settings_editor.cpp
msgid "Delete Item"
@@ -5897,13 +6111,12 @@ msgid "Remove Resource Remap Option"
msgstr "ลบà¸à¸²à¸£à¹à¸—นที่"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "ปรับขนาดà¸à¸¥à¹‰à¸­à¸‡"
+msgstr "à¹à¸à¹‰à¹„ขตัวà¸à¸£à¸­à¸‡à¸ à¸¹à¸¡à¸´à¸ à¸²à¸„"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขโหมดà¸à¸²à¸£à¸à¸£à¸­à¸‡à¸ à¸¹à¸¡à¸´à¸ à¸²à¸„"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -5966,28 +6179,24 @@ msgid "Locale"
msgstr "ท้องถิ่น"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "ท้องถิ่น"
+msgstr "ตัวà¸à¸£à¸­à¸‡à¸ à¸¹à¸¡à¸´à¸ à¸²à¸„"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "à¹à¸ªà¸”งà¸à¸£à¸°à¸”ูà¸"
+msgstr "à¹à¸ªà¸”งทุà¸à¸ à¸¹à¸¡à¸´à¸ à¸²à¸„"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "à¹à¸ªà¸”งเฉพาะภูมิภาคที่เลือà¸"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "ตัวà¸à¸£à¸­à¸‡"
+msgstr "โหมดà¸à¸²à¸£à¸à¸£à¸­à¸‡:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "ท้องถิ่น"
+msgstr "ภูมิภาค:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -6111,7 +6320,7 @@ msgstr "เลือà¸à¹‚หนดà¹à¸¡à¹ˆà¹ƒà¸«à¸¡à¹ˆ:"
#: editor/reparent_dialog.cpp
msgid "Keep Global Transform"
-msgstr ""
+msgstr "เà¸à¹‡à¸š Global Transform"
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent"
@@ -6119,7 +6328,7 @@ msgstr "เลือà¸à¹‚หนดà¹à¸¡à¹ˆà¹ƒà¸«à¸¡à¹ˆ"
#: editor/run_settings_dialog.cpp
msgid "Run Mode:"
-msgstr ""
+msgstr "โหมดà¸à¸²à¸£à¸—ำงาน:"
#: editor/run_settings_dialog.cpp
msgid "Current Scene"
@@ -6313,6 +6522,14 @@ msgid "Clear a script for the selected node."
msgstr "ลบสคริปต์ของโหนดที่เลือà¸"
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "ระยะไà¸à¸¥"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "ระยะใà¸à¸¥à¹‰"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "ลบà¸à¸²à¸£à¸ªà¸·à¸šà¸—อด? (ย้อนà¸à¸¥à¸±à¸šà¹„ม่ได้!)"
@@ -6322,7 +6539,7 @@ msgstr "ลบ!"
#: editor/scene_tree_editor.cpp
msgid "Toggle Spatial Visible"
-msgstr "ซ่อน/à¹à¸ªà¸”งโหนด"
+msgstr "ซ่อน/à¹à¸ªà¸”งโหนด Spatial"
#: editor/scene_tree_editor.cpp
msgid "Toggle CanvasItem Visible"
@@ -6434,7 +6651,7 @@ msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¹€à¸£à¸´à¹ˆà¸¡à¸•้นไม่ถูà¸à¸•้อ
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "มีโฟลเดอร์ชื่อนี้อยู่à¹à¸¥à¹‰à¸§"
#: editor/script_create_dialog.cpp
msgid "File exists, will be reused"
@@ -6457,9 +6674,8 @@ msgid "Invalid class name"
msgstr "ชื่อคลาสไม่ถูà¸à¸•้อง"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid inherited parent name or path"
-msgstr "ไม่พบคุณสมบัติ"
+msgstr "ชื่อหรือตำà¹à¸«à¸™à¹ˆà¸‡à¸—ีสืบทอดไม่ถูà¸à¸•้อง"
#: editor/script_create_dialog.cpp
msgid "Script valid"
@@ -6506,6 +6722,10 @@ msgid "Attach Node Script"
msgstr "เชื่อมสคริปต์ให้โหนด"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "ควบคุม "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "ไบต์:"
@@ -6527,7 +6747,7 @@ msgstr "ฟังà¸à¹Œà¸Šà¸±à¸™:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "เลือà¸à¸‚้อมูลจาà¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¹€à¸žà¸·à¹ˆà¸­à¹à¸ªà¸”งà¸à¸£à¸²à¸Ÿ"
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6562,18 +6782,6 @@ msgid "Stack Trace (if applicable):"
msgstr "สà¹à¸•ค (ถ้ามี):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "คุณสมบัติ"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "ผังฉาà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "คุณสมบัติ: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "ประสิทธิภาพ"
@@ -6647,7 +6855,7 @@ msgstr "ปรับรัศมีà¹à¸ªà¸‡"
#: editor/spatial_editor_gizmos.cpp
msgid "Change AudioStreamPlayer3D Emission Angle"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ของศาà¸à¸²à¸£à¹€à¸›à¸¥à¹ˆà¸‡à¹€à¸ªà¸µà¸¢à¸‡à¸‚อง AudioStreamPlayer3D"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
@@ -6682,9 +6890,8 @@ msgid "Change Notifier Extents"
msgstr "à¹à¸à¹‰à¹„ขขนาด Notifier"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Change Particles AABB"
-msgstr "เปลี่ยนà¸à¸£à¸­à¸šà¸­à¸™à¸¸à¸ à¸²à¸„"
+msgstr "เปลี่ยนเส้นà¸à¸£à¸­à¸š Particles"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
@@ -6695,61 +6902,60 @@ msgid "Library"
msgstr "ไลบรารี"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Status"
-msgstr "สถานะ:"
+msgstr "สถานะ"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "ไลบรารี: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "ตัวà¹à¸›à¸£à¹ƒà¸™ convert() ผิดพลาด ใช้ค่าคงที่ TYPE_* เท่านั้น"
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "ไบต์ไม่ครบหรือผิดรูปà¹à¸šà¸š ไม่สามารถà¹à¸›à¸¥à¸‡à¸„่าได้"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "ตัวà¹à¸›à¸£ step เป็นศูนย์!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "ไม่ใช่สคริปต์ที่มีอินสà¹à¸•นซ์"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "ไม่ได้มีต้นà¸à¸³à¹€à¸™à¸´à¸”จาà¸à¸ªà¸„ริปต์"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "ไม่ได้มีต้นà¸à¸³à¹€à¸™à¸´à¸”มาจาà¸à¹„ฟล์รีซอร์ส"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "รูปà¹à¸šà¸šà¸”ิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µà¸—ี่เà¸à¹‡à¸šà¸­à¸´à¸™à¸ªà¹à¸•นซ์ไม่ถูà¸à¸•้อง (ไม่มี @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "รูปà¹à¸šà¸šà¸”ิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µà¸—ี่เà¸à¹‡à¸šà¸­à¸´à¸™à¸ªà¹à¸•นซ์ไม่ถูà¸à¸•้อง (โหลดสคริปต์ที่ @path ไม่ได้)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "รูปà¹à¸šà¸šà¸”ิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µà¸—ี่เà¸à¹‡à¸šà¸­à¸´à¸™à¸ªà¹à¸•นซ์ไม่ถูà¸à¸•้อง (สคริปต์ที่ @path ผิดพลาด)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "ดิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µà¸—ี่เà¸à¹‡à¸šà¸­à¸´à¸™à¸ªà¹à¸•นซ์ผิดพลาด (คลาสย่อยผิดพลาด)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "ไม่สามารถบอà¸à¸„วามยาวของวัตถุได้"
@@ -6762,29 +6968,36 @@ msgid "GridMap Duplicate Selection"
msgstr "ทำซ้ำใน GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "ชั้น:"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "จำà¸à¸±à¸”ด้วยเส้นตาราง"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
-msgstr ""
+msgstr "บังคับà¹à¸™à¸§à¸•าราง"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr "ชั้นà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸² (%sล้อเมาส์ลง)"
+msgid "Previous Floor"
+msgstr "ไปชั้นล่าง"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
-msgstr "ชั้นถัดไป (%sล้อเมาส์ขึ้น)"
+msgid "Next Floor"
+msgstr "ไปชั้นบน"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Clip Disabled"
-msgstr "ปิดใช้งาน"
+msgstr "ปิดà¸à¸²à¸£à¸•ัด"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
-msgstr ""
+msgstr "ตัดด้านบน"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Below"
-msgstr ""
+msgstr "ตัดส่วนล่าง"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit X Axis"
@@ -6800,31 +7013,31 @@ msgstr "à¹à¸à¹‰à¹„ขà¹à¸à¸™ Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate X"
-msgstr "หมุนตามà¹à¸à¸™ X"
+msgstr "เคอร์เซอร์หมุนตามà¹à¸à¸™ X"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate Y"
-msgstr "หมุนตามà¹à¸à¸™ Y"
+msgstr "เคอร์เซอร์หมุนตามà¹à¸à¸™ Y"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate Z"
-msgstr "หมุนตามà¹à¸à¸™ Z"
+msgstr "เคอร์เซอร์หมุนตามà¹à¸à¸™ Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate X"
-msgstr ""
+msgstr "เคอร์เซอร์หมุนย้อนà¹à¸à¸™ X"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Y"
-msgstr ""
+msgstr "เคอร์เซอร์หมุนย้อนà¹à¸à¸™ Y"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Z"
-msgstr ""
+msgstr "เคอร์เซอร์หมุนย้อนà¹à¸à¸™ Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Clear Rotation"
-msgstr ""
+msgstr "เคอร์เซอร์ลบà¸à¸²à¸£à¸«à¸¡à¸¸à¸™"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Create Area"
@@ -6832,31 +7045,27 @@ msgstr "สร้างพื้นที่ใหม่"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Create Exterior Connector"
-msgstr ""
+msgstr "สร้างจุดเชื่อมต่อภายนอà¸"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Erase Area"
msgstr "ลบพื้นที่"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr "ทำซ้ำที่เลือà¸"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
+msgid "Clear Selection"
msgstr "ลบที่เลือà¸"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
-msgstr ""
+msgstr "à¸à¸²à¸£à¸•ั้งค่า GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Pick Distance:"
-msgstr ""
+msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸­à¸:"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
-msgstr ""
+msgstr "สร้าง"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -6950,7 +7159,6 @@ msgid "Add Signal"
msgstr "เพิ่มสัà¸à¸à¸²à¸“"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Expression"
msgstr "à¹à¸à¹‰à¹„ขสมà¸à¸²à¸£"
@@ -6967,24 +7175,24 @@ msgid "Duplicate VisualScript Nodes"
msgstr "ทำซ้ำโหนด"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
-msgstr "à¸à¸”ปุ่ม Meta ค้างเพื่อวาง Getter à¸à¸” Shift ค้างเพื่อวาง generic signature"
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr "à¸à¸”ปุ่ม %s ค้างเพื่อวาง Getter หรือà¸à¸” Shift ค้างเพื่อวาง generic signature"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr "à¸à¸” Ctrl ค้างเพื่อวาง Getter à¸à¸” Shift ค้างเพื่อวาง generic signature"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "à¸à¸”ปุ่ม Meta เพื่อวางà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¹„ปยังโหนดอย่างง่าย"
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "à¸à¸”ปุ่ม %s เพื่อวางà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸­à¸¢à¹ˆà¸²à¸‡à¸‡à¹ˆà¸²à¸¢à¹„ปยังโหนด"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "à¸à¸” Ctrl เพื่อวางà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¹„ปยังโหนดอย่างง่าย"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "à¸à¸”ปุ่ม Meta ค้างเพื่อวาง Setter ของตัวà¹à¸›à¸£"
+msgid "Hold %s to drop a Variable Setter."
+msgstr "à¸à¸”ปุ่ม %s ค้างเพื่อวาง Setter ของตัวà¹à¸›à¸£"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7056,7 +7264,7 @@ msgstr "รับ"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr ""
+msgstr "สคริปต์มีฟังà¸à¹Œà¸Šà¸±à¸™ '%s' อยู่à¹à¸¥à¹‰à¸§"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Input Value"
@@ -7209,13 +7417,21 @@ msgid "Could not write file:\n"
msgstr "เขียนไฟล์ไม่ได้:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "อ่านไฟล์ไม่ได้:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "เปิดà¹à¸¡à¹ˆà¹à¸šà¸šà¹€à¸žà¸·à¹ˆà¸­à¸ªà¹ˆà¸‡à¸­à¸­à¸à¹„ม่ได้:\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "à¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸­à¸­à¸à¹„ม่ถูà¸à¸•้อง:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "ไม่สามารถอ่านโครงสร้าง HTML:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "ไม่สามารถอ่านไฟล์ภาพขณะบูต:\n"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7318,20 +7534,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "ต้องà¹à¸à¹‰à¹„ข Path ให้ชี้ไปยังโหนด Node2D จึงจะทำงานได้"
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"ต้องà¹à¸à¹‰à¹„ข Path ให้ชี้ไปยังโหนด Viewport จึงจะทำงานได้ à¹à¸¥à¸° Viewport นั้นต้องปรับโหมดเป็น "
-"'render target'"
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr "Viewport ใน path จะต้องปรับโหมดเป็น 'render target' จึงจะทำงานได้"
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7377,7 +7579,7 @@ msgstr ""
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
-msgstr "CollisionPolygon ที่ว่างเปล่าจะไม่มีผลทางà¸à¸²à¸¢à¸ à¸²à¸ž"
+msgstr "CollisionPolygon ที่ว่างเปล่าจะไม่มีผลต่อà¸à¸²à¸£à¸Šà¸™à¸à¸±à¸™"
#: scene/3d/collision_shape.cpp
msgid ""
@@ -7394,6 +7596,14 @@ msgid ""
"shape resource for it!"
msgstr "ต้องมีรูปทรงเพื่อให้ CollisionShape ทำงานได้ à¸à¸£à¸¸à¸“าสร้างรูปทรง!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "วางà¹à¸™à¸§ meshes"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "เสร็จสิ้นà¸à¸²à¸£à¸§à¸²à¸‡à¹à¸™à¸§"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr "ต้องมี NavigationMesh เพื่อให้โหนดนี้ทำงานได้"
@@ -7439,7 +7649,7 @@ msgstr "ต้องมี SpriteFrames ใน 'Frames' เพื่อให้
msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
-msgstr ""
+msgstr "VehicleWheel เป็นระบบล้อของ VehicleBody à¸à¸£à¸¸à¸“าใช้เป็นโหนดลูà¸à¸‚อง VehicleBody"
#: scene/gui/color_picker.cpp
msgid "Raw Mode"
@@ -7461,6 +7671,11 @@ msgstr "à¹à¸ˆà¹‰à¸‡à¹€à¸•ือน!"
msgid "Please Confirm..."
msgstr "à¸à¸£à¸¸à¸“ายืนยัน..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "เลือà¸à¹€à¸¡à¸—็อด"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7480,6 +7695,10 @@ msgstr ""
"ใช้ container เป็นโหนดลูภ(VBox,HBox,ฯลฯ) หรือโหนดà¸à¸¥à¸¸à¹ˆà¸¡ Control "
"à¹à¸¥à¸°à¸›à¸£à¸±à¸šà¸‚นาดเล็à¸à¸ªà¸¸à¸”ด้วยตนเอง"
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(อื่น)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7515,6 +7734,68 @@ msgstr "ผิดพลาดขณะโหลดฟอนต์"
msgid "Invalid font size."
msgstr "ขนาดฟอนต์ผิดพลาด"
+#~ msgid "Cannot navigate to '"
+#~ msgstr "ไม่สามารถไปยัง '"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "ต้นฉบับ: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "ลบจุดจาà¸à¹€à¸ªà¹‰à¸™"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "เพิ่มจุดในเส้น"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "ย้ายจุดในเส้น"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "à¹à¸¢à¸à¸ªà¹ˆà¸§à¸™ (ในเส้น)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#~ msgid "Setting '"
+#~ msgstr "ตัวเลือภ'"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "คุณสมบัติ"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "ผังฉาà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "คุณสมบัติ: "
+
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "ชั้นà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸² (%sล้อเมาส์ลง)"
+
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "ชั้นถัดไป (%sล้อเมาส์ขึ้น)"
+
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "ทำซ้ำที่เลือà¸"
+
+#~ msgid "Selection -> Clear"
+#~ msgstr "ลบที่เลือà¸"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "ต้องà¹à¸à¹‰à¹„ข Path ให้ชี้ไปยังโหนด Viewport จึงจะทำงานได้ à¹à¸¥à¸° Viewport "
+#~ "นั้นต้องปรับโหมดเป็น 'render target'"
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr "Viewport ใน path จะต้องปรับโหมดเป็น 'render target' จึงจะทำงานได้"
+
#~ msgid "Filter:"
#~ msgstr "ตัวà¸à¸£à¸­à¸‡:"
@@ -7539,9 +7820,6 @@ msgstr "ขนาดฟอนต์ผิดพลาด"
#~ msgid "Removed:"
#~ msgstr "ลบ:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "ผิดพลาดขณะบันทึภatlas:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "บันทึภtexture ย่อยของ atlas ไม่ได้:"
@@ -7915,9 +8193,6 @@ msgstr "ขนาดฟอนต์ผิดพลาด"
#~ msgid "Cropping Images"
#~ msgstr "ครอบตัดรูป"
-#~ msgid "Blitting Images"
-#~ msgstr "คัดลอà¸à¸£à¸¹à¸›"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "บันทึภAtlas ไม่ได้:"
@@ -8275,9 +8550,6 @@ msgstr "ขนาดฟอนต์ผิดพลาด"
#~ msgid "Save Translatable Strings"
#~ msgstr "บันทึà¸à¸ªà¸•ริงหลายภาษา"
-#~ msgid "Install Export Templates"
-#~ msgstr "ติดตั้งà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸­à¸­à¸"
-
#~ msgid "Edit Script Options"
#~ msgstr "à¹à¸à¹‰à¹„ขตัวเลือà¸à¸ªà¸„ริปต์"
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index afb2c82be1..db92e63768 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -6,22 +6,27 @@
# Aprın Çor Tigin <kabusturk38@gmail.com>, 2016-2017.
# Ceyhun Can Ulker <ceyhuncanu@gmail.com>, 2016.
# Enes Kaya Öcal <ekayaocal@hotmail.com>, 2016.
+# Enescan Yerlikaya <enescanyerlikaya@gmail.com>, 2017.
+# Fatih Mert DoÄŸancan <fatihmertdogancan@hotmail.com>, 2017.
# hubbyist <hub@legrud.net>, 2017.
# M. Yavuz Uzun <myavuzuzun@yandex.com>, 2016.
# Orkun Turan <holygatestudio@yandex.com>, 2016-2017.
+# razah <icnikerazah@gmail.com>, 2017.
+# stnmycri <satenmeycri@gmail.com>, 2017.
+# Yavuz Günay <yavuzgunay@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-08-29 13:49+0000\n"
-"Last-Translator: hubbyist <hub@legrud.net>\n"
+"PO-Revision-Date: 2017-11-29 08:13+0000\n"
+"Last-Translator: razah <icnikerazah@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot/tr/>\n"
"Language: tr\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -29,47 +34,47 @@ msgstr "Devre dışı"
#: editor/animation_editor.cpp
msgid "All Selection"
-msgstr "Tüm seçim"
+msgstr "Tüm Seçim"
#: editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr "Açar Eklemeyi Taşı"
+msgstr "Hareket Anahtar Ekle"
#: editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr "Canln Geçişi Değiştir"
+msgstr "Animasyon Değişikliği Geçişi"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr "Canln Dönüşümü Değiştir"
+msgstr "Animasyon Değişikliği Dönüşümü"
#: editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr "Canln DeÄŸeri DeÄŸiÅŸtir"
+msgstr "Animasyon DeÄŸiÅŸikliÄŸi DeÄŸeri"
#: editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr "Canln Çağrıyı Değiştir"
+msgstr "Animasyon Değişikliği Çağrısı"
#: editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr "Canln İz Ekle"
+msgstr "Animasyon İz Ekle"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr "Canln Açarlarını İkile"
+msgstr "Animasyon Anahtarlrını Çoğalt"
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr "Canln İzini Yukarı Hareket Ettir"
+msgstr "Animasyon İzini Yukarı Taşı"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr "Canln İzini Aşağı Hareket Ettir"
+msgstr "Animasyon İzini Aşağı Taşı"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr "Canln İzini Sil"
+msgstr "Animasyon İzini Kaldır"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
@@ -77,19 +82,19 @@ msgstr "Geçişleri şuna ayarla:"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr "Canln İzini Yeniden Adlandır"
+msgstr "Animasyon İzini Yeniden Adlandır"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr "Canln İz Ara Değer Değiştir"
+msgstr "Anim İzi Değişikliği İnterpolasyonu"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr "Canln İzi Değer Değiştir Biçimi"
+msgstr "Animasyon İzi Değişikliği Kipi"
#: editor/animation_editor.cpp
msgid "Anim Track Change Wrap Mode"
-msgstr "Canlandırma İzi Hizalama Modunu Değiştir"
+msgstr "Animasyon İzi Değişikliği Sarmalama Kipi"
#: editor/animation_editor.cpp
msgid "Edit Node Curve"
@@ -101,15 +106,16 @@ msgstr "Seçim Eğrisini Düzenle"
#: editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr "Canln Açarları Sil"
+msgstr "Animasyon Anahtarları Sil"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr "Seçimi İkile"
+msgstr "Seçimi Çoğalt"
#: editor/animation_editor.cpp
msgid "Duplicate Transposed"
-msgstr "Tersine Çevirmeyi İkile"
+msgstr "Tersine Çevrilmişi Çoğalt"
#: editor/animation_editor.cpp
msgid "Remove Selection"
@@ -121,7 +127,7 @@ msgstr "Kesintisiz"
#: editor/animation_editor.cpp
msgid "Discrete"
-msgstr "Ayrık"
+msgstr "Kesikli"
#: editor/animation_editor.cpp
msgid "Trigger"
@@ -129,11 +135,11 @@ msgstr "Tetikleyici"
#: editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr "Canln Açar Ekle"
+msgstr "Animasyon Anahtar Ekle"
#: editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr "Canln Açarlarını Taşı"
+msgstr "Animasyon Anahtarları Taşı"
#: editor/animation_editor.cpp
msgid "Scale Selection"
@@ -141,7 +147,7 @@ msgstr "Seçimi Ölçekle"
#: editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr "Göstergeden Ölçekle"
+msgstr "İmleçten Ölçekle"
#: editor/animation_editor.cpp
msgid "Goto Next Step"
@@ -182,19 +188,19 @@ msgstr "Geçişler"
#: editor/animation_editor.cpp
msgid "Optimize Animation"
-msgstr "Canlandırmayı İyileştir"
+msgstr "Animasyonu İyileştir"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr "Canlandırmayı Temizle"
+msgstr "Animasyonu Temizle"
#: editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr "%s için yeni iz oluştur ve açar gir?"
+msgstr "%s için YENİ iz oluştur ve anahtar gir?"
#: editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr "%d için yeni izler oluştur ve açar gir?"
+msgstr "%d YENİ izler oluştur ve anahtarlar gir?"
#: editor/animation_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
@@ -207,63 +213,63 @@ msgstr "OluÅŸtur"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr "Canln OluÅŸtur & Gir"
+msgstr "Animasyon OluÅŸtur & Gir"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr "Canln İz Gir & Açar"
+msgstr "Animasyon İz & Anahtar Gir"
#: editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr "Canln Açar Gir"
+msgstr "Animasyon Anahtar Gir"
#: editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr "Canln UzunluÄŸu DeÄŸiÅŸtir"
+msgstr "Animasyon UzunluÄŸunu DeÄŸiÅŸtir"
#: editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr "Canln Döngüsünü Değiştir"
+msgstr "Animasyon Döngüsünü Değiştir"
#: editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
-msgstr "Canln Yazılı Değer Açarı Oluştur"
+msgstr "Animasyon Yazılı Değer Anahtarı Oluştur"
#: editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr "Canln Gir"
+msgstr "Animasyon Gir"
#: editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr "Canln Açarı Ölçekle"
+msgstr "Animasyon Anahtarı Ölçekle"
#: editor/animation_editor.cpp
msgid "Anim Add Call Track"
-msgstr "Canln İzi Çağırma Ekle"
+msgstr "Animasyon Çağrı İzi Ekle"
#: editor/animation_editor.cpp
msgid "Animation zoom."
-msgstr "Canlandırma yaklaş."
+msgstr "Animasyon yaklaÅŸ."
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "Uzunluk (lar):"
+msgstr "Uzunluk (sn):"
#: editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr "Canlandırma uzunluğu (saniye)."
+msgstr "Animasyon uzunluÄŸu (saniye)."
#: editor/animation_editor.cpp
msgid "Step (s):"
-msgstr "Adım (lar):"
+msgstr "Adım (sn):"
#: editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
-msgstr "Gösterge şipşak adımla (saniyelerde)."
+msgstr "İmleç basamak yapışması (saniye)."
#: editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr "Canlandırma yinelemesini Aç/Kapat."
+msgstr "Animasyon yinelemesini Aç/Kapat."
#: editor/animation_editor.cpp
msgid "Add new tracks."
@@ -271,11 +277,11 @@ msgstr "Yeni izler ekle."
#: editor/animation_editor.cpp
msgid "Move current track up."
-msgstr "Mevcut izi yukarı al."
+msgstr "Mevcut izi yukarı taşı."
#: editor/animation_editor.cpp
msgid "Move current track down."
-msgstr "Mevcut izi aşağı al."
+msgstr "Mevcut izi aşağı taşı."
#: editor/animation_editor.cpp
msgid "Remove selected track."
@@ -287,37 +293,37 @@ msgstr "İz araçları"
#: editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr "Özgün açarların düzenlenebilmesini onları tıklayarak etkinleştirin."
+msgstr "Anahtarlara tıklayarak tek tek düzenlemeyi etkinleştir."
#: editor/animation_editor.cpp
msgid "Anim. Optimizer"
-msgstr "Cnln. İyileştirici"
+msgstr "Anim. EniyileÅŸtirici"
#: editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr "En üst Doğrusal Sorun:"
+msgstr "Maks. DoÄŸrusal Hata:"
#: editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr "En üst Açısal Sorun:"
+msgstr "Maks. Açısal Hata:"
#: editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr "Max İyileştirilebilir Açı:"
+msgstr "Maks. Eniyileştirilebilir Açı:"
#: editor/animation_editor.cpp
msgid "Optimize"
-msgstr "İyileştir"
+msgstr "EniyileÅŸtir"
#: editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
-"Sahne Ağacından canlandırmaları düzenleyebilmek için bir AnimationPlayer "
+"Sahne Ağacı'ndan animasyonları düzenleyebilmek için bir AnimationPlayer "
"seçin."
#: editor/animation_editor.cpp
msgid "Key"
-msgstr "Açar"
+msgstr "Anahtar"
#: editor/animation_editor.cpp
msgid "Transition"
@@ -329,11 +335,11 @@ msgstr "Ölçek Oranı:"
#: editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr "Hangi düğümdeki İşlevler Çağrılsın?"
+msgstr "Hangi Düğümdeki Fonksiyonlar Çağrılsın?"
#: editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr "Geçersiz açarları kaldır"
+msgstr "Geçersiz anahtarları kaldır"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
@@ -341,11 +347,11 @@ msgstr "Çözümlenmemiş ve boş izleri sil"
#: editor/animation_editor.cpp
msgid "Clean-up all animations"
-msgstr "Tüm canlandırmaları temizle"
+msgstr "Tüm animasyonları temizle"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr "Canlandırma(ları) Temizle (GERİ ALINAMAZ!)"
+msgstr "Animasyon(ları) Temizle (GERİ ALINAMAZ!)"
#: editor/animation_editor.cpp
msgid "Clean-Up"
@@ -353,11 +359,11 @@ msgstr "Temizle"
#: editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr "Sırayı Yeniden Boyutlandır"
+msgstr "Diziyi Yeniden Boyutlandır"
#: editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr "Dizinin türünü degistir"
+msgstr "Dizinin Türünü Değiştir"
#: editor/array_property_edit.cpp
msgid "Change Array Value"
@@ -365,20 +371,19 @@ msgstr "Dizi DeÄŸerini DeÄŸiÅŸtir"
#: editor/code_editor.cpp
msgid "Go to Line"
-msgstr "Dizeye Git"
+msgstr "Satıra git"
#: editor/code_editor.cpp
msgid "Line Number:"
-msgstr "Dize Numarası:"
+msgstr "Satır Numarası:"
#: editor/code_editor.cpp
msgid "No Matches"
-msgstr "Eşleşme Bulunamadı"
+msgstr "EÅŸleÅŸme Yok"
#: editor/code_editor.cpp
-#, fuzzy
msgid "Replaced %d occurrence(s)."
-msgstr "%d Olgusu(ları) ile Değiştirildi."
+msgstr "DeÄŸiÅŸtirildi %d oluÅŸ(sn)."
#: editor/code_editor.cpp
msgid "Replace"
@@ -414,7 +419,7 @@ msgstr "Bul"
#: editor/code_editor.cpp
msgid "Next"
-msgstr "İleri"
+msgstr "Sonraki"
#: editor/code_editor.cpp
msgid "Not found!"
@@ -426,11 +431,11 @@ msgstr "Åžununla DeÄŸiÅŸtir"
#: editor/code_editor.cpp
msgid "Case Sensitive"
-msgstr "Büyük Küçük Damga Duyarlı"
+msgstr "Büyük Küçük Harf Duyarlı"
#: editor/code_editor.cpp
msgid "Backwards"
-msgstr "Terse doÄŸru"
+msgstr "Tersten"
#: editor/code_editor.cpp
msgid "Prompt On Replace"
@@ -454,23 +459,23 @@ msgstr "Yaklaşmayı Sıfırla"
#: editor/code_editor.cpp editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr "Dize:"
+msgstr "Satır:"
#: editor/code_editor.cpp
msgid "Col:"
-msgstr "Dik:"
+msgstr "Sütun:"
#: editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
-msgstr "Hedef Node daki Yöntem belirtilmeli!"
+msgstr "Hedef Düğümdeki Fonksiyon tanımlanmış olmalı!"
#: editor/connections_dialog.cpp
msgid ""
"Target method not found! Specify a valid method or attach a script to target "
"Node."
msgstr ""
-"Amaçlanan yöntem bulunamadı! Geçerli bir yöntem belirtin veya amaçlanan "
-"Düğüme bir betik iliştirin."
+"Amaçlanan fonksiyon bulunamadı! Geçerli bir fonksiyon tanımla ya da "
+"amaçlanan Düğüme bir betik iliştirin."
#: editor/connections_dialog.cpp
msgid "Connect To Node:"
@@ -491,11 +496,11 @@ msgstr "Kaldır"
#: editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr "Ayrı Çağrı Değiştirgeni Ekleyin:"
+msgstr "Ekstra Çağrı Argümanı Ekle:"
#: editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr "Ayrıca Çağrı Değiştirgenler:"
+msgstr "Ekstra Çağrı Argümanları:"
#: editor/connections_dialog.cpp
msgid "Path to Node:"
@@ -503,7 +508,7 @@ msgstr "Düğüm Yolu:"
#: editor/connections_dialog.cpp
msgid "Make Function"
-msgstr "İşlev Yap"
+msgstr "Fonksiyon Yap"
#: editor/connections_dialog.cpp
msgid "Deferred"
@@ -533,11 +538,11 @@ msgstr "BaÄŸla"
#: editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr "Bunu '%s' ÅŸuna '%s' BaÄŸla"
+msgstr "Bunu '%s' ÅŸuna '%s' baÄŸla"
#: editor/connections_dialog.cpp
msgid "Connecting Signal:"
-msgstr "İşarete Bağlanıyor:"
+msgstr "Bağlantı Sinyali:"
#: editor/connections_dialog.cpp
msgid "Create Subscription"
@@ -554,7 +559,7 @@ msgstr "Bağlantıyı kes"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr "İşaretler"
+msgstr "Sinyaller"
#: editor/create_dialog.cpp
msgid "Create New"
@@ -590,7 +595,7 @@ msgstr "Açıklama:"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
-msgstr "Şunun İçin Değişikliği Ara:"
+msgstr "Şunun İçin Değiştirme Ara:"
#: editor/dependency_editor.cpp
msgid "Dependencies For:"
@@ -642,13 +647,20 @@ msgstr "Bağımlılık Düzenleyicisi"
msgid "Search Replacement Resource:"
msgstr "Değişim Kaynağını Ara:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Aç"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "Bunun Sahibi:"
#: editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
-msgstr "Seçili dizeçleri tasarıdan kaldır? (Geri alınamaz)"
+msgstr "Seçili dosyaları projeden kaldır? (Geri alınamaz)"
#: editor/dependency_editor.cpp
msgid ""
@@ -656,13 +668,12 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
-"Kaldırılmakta olan dizeçler başka dizeçlerin çalışması için gerekli.\n"
+"Kaldırılmakta olan dosyalar başka kaynakların çalışması için gerekli.\n"
"Yine de kaldırmak istiyor musunuz? (Geri alınamaz)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Cannot remove:\n"
-msgstr "Çözümlenemedi."
+msgstr "Kaldırılamadı:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -702,11 +713,11 @@ msgstr "Belirgin SahipliÄŸi Olmayan Kaynaklar:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr "Orphan Kaynak Gezgini"
+msgstr "Orphan Kaynak Araştırıcı"
#: editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr "Seçili dizeçleri sil?"
+msgstr "Seçili dosyalar silinsin mi?"
#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
#: editor/editor_node.cpp editor/filesystem_dock.cpp
@@ -715,22 +726,29 @@ msgstr "Seçili dizeçleri sil?"
msgid "Delete"
msgstr "Sil"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Sözlükteki Anahtarı Değiştir"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Sözlükteki Değeri Değiştir"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
-msgstr "Godot Topluluğu Sağ Olmanızı Diliyor!"
+msgstr "Godot topluluğundan teşekkürler!"
#: editor/editor_about.cpp
msgid "Thanks!"
-msgstr "SaÄŸ olun!"
+msgstr "Teşekkürler!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
msgstr "Godot Oyun Motoru katkı sağlayanlar"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Project Founders"
-msgstr "Tasarı Yöneticisi"
+msgstr "Projenin Kurucuları"
#: editor/editor_about.cpp
msgid "Lead Developer"
@@ -738,45 +756,43 @@ msgstr "BaÅŸ GeliÅŸtirici"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr "Tasarı Yöneticisi"
+msgstr "Proje Yöneticisi"
#: editor/editor_about.cpp
msgid "Developers"
msgstr "GeliÅŸtiriciler"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Authors"
-msgstr "Yazar:"
+msgstr "Yazarlar"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "Platin Sponsorlar"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "Altın Sponsorlar"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "Mini Sponsorlar"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "Altın Bağışçılar"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "Gümüş Bağışçılar"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "Aşağıya Eşle"
+msgstr "Bronz Bağışçılar"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "Bağışçılar"
#: editor/editor_about.cpp
msgid "License"
@@ -793,16 +809,18 @@ msgid ""
"is an exhaustive list of all such thirdparty components with their "
"respective copyright statements and license terms."
msgstr ""
+"Godot Oyun Motoru, bazı ücretsiz ve açık kaynaklı üçüncü parti "
+"kütüphanelerden faydalanır, bunların hepsinin kullanım koşulları MIT "
+"lisansına uygundur. Aşağıda, bu üçüncü parti bileşenlerin ayrıntılı telif "
+"hakkı bildirimleri ve lisans koşulları belirtilmiştir."
#: editor/editor_about.cpp
-#, fuzzy
msgid "All Components"
-msgstr "İçerikler:"
+msgstr "Tüm Bileşenler"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Components"
-msgstr "İçerikler:"
+msgstr "BileÅŸenler"
#: editor/editor_about.cpp
msgid "Licenses"
@@ -810,16 +828,15 @@ msgstr "Lisanslar"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
-msgstr ""
+msgstr "Paket dosyası açılamıyor, zip formatında değil."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Uncompressing Assets"
-msgstr "Sıkıştırılmamış"
+msgstr "Varlıklar Çıkartılıyor"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr "Çıkın Başarı ile Kuruldu!"
+msgstr "Paket Başarı ile Kuruldu!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -832,61 +849,56 @@ msgid "Install"
msgstr "Kur"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Installer"
-msgstr "Çıkın Başarı ile Kuruldu!"
+msgstr "Paket Yükleyici"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
msgstr "Hoparlörler"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Effect"
-msgstr "BoÅŸ Ekle"
+msgstr "Efekt Ekle"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Rename Audio Bus"
-msgstr "KendindenYüklenme'yi Yeniden Adlandır"
+msgstr "Audio Bus'ı Yeniden Adlandır"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Solo"
-msgstr "KendindenOynatmayı Aç/Kapat"
+msgstr "Audio Bus'ı Solo Aç/Kapat"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr ""
+msgstr "Audio Bus Sessizliği Aç/Kapat"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "Audio Bus Baypas Efektlerini Aç/Kapat"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
-msgstr ""
+msgstr "Audio Bus Gönderimini Seç"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr ""
+msgstr "Audio Bus Efekti Ekle"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr ""
+msgstr "Bus Efektini Taşı"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Bus Effect"
-msgstr "Seçilenleri Sil"
+msgstr "Bus Efekti Sil"
#: editor/editor_audio_buses.cpp
msgid "Audio Bus, Drag and Drop to rearrange."
-msgstr ""
+msgstr "Audio Bus, düzenlemek için Sürükle-Bırak."
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr "Tekil"
+msgstr "Tek"
#: editor/editor_audio_buses.cpp
msgid "Mute"
@@ -894,89 +906,76 @@ msgstr "Sessiz"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
-msgstr "Dolan"
+msgstr "Baypas"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus options"
-msgstr "Sorun ayıklama seçenekleri"
+msgstr "Bus ayarları"
#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr "İkile"
+msgstr "Kopyala"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "Yaklaşmayı Sıfırla"
+msgstr "Ses Düzeyini Sıfırla"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Effect"
-msgstr "Seçilenleri Sil"
+msgstr "Efekt'i Sil"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Audio Bus"
-msgstr "Ekle %s"
+msgstr "Audio Bus Ekle"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr ""
+msgstr "Master bus silinemez!"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Delete Audio Bus"
-msgstr "Tasarımı Sil"
+msgstr "Audio Bus'ı Sil"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Duplicate Audio Bus"
-msgstr "Canlandırmayı İkile"
+msgstr "Audio Bus'ın Bir Kopyasını Oluştur"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "Yaklaşmayı Sıfırla"
+msgstr "Bus Ses Düzeyini Sıfırla"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Move Audio Bus"
-msgstr "Eylemi Taşı"
+msgstr "Audio Bus'ı Taşı"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As.."
-msgstr ""
+msgstr "Audio Bus Yerleşim Düzenini Farklı Kaydet.."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout.."
-msgstr ""
+msgstr "Yeni Yerleşim Düzeni için Konum.."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "Audio Bus Yerleşim Düzenini Aç"
#: editor/editor_audio_buses.cpp
msgid "There is no 'res://default_bus_layout.tres' file."
-msgstr ""
+msgstr "'res://default_bus_layout.tres' dosyası bulunamadı."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Invalid file, not an audio bus layout."
-msgstr ""
-"Geçersiz dizeç uzantısı.\n"
-"Lütfen .fnt uzantısını kullanın."
+msgstr "Geçersiz dosya, bu bir audio bus yerleşim düzeni değil."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Add Bus"
-msgstr "Ekle %s"
+msgstr "Bus ekle"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Create a new Bus Layout."
-msgstr "Yeni Kaynak OluÅŸtur"
+msgstr "Yeni bir Bus Yerleşim Düzeni oluştur."
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
@@ -984,27 +983,25 @@ msgid "Load"
msgstr "Yükle"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Load an existing Bus Layout."
-msgstr "Var olan bir kaynağı saklaktan yükleyin ve düzenleyin."
+msgstr "Var olan bir Bus Yerleşim Düzeni yükle."
#: editor/editor_audio_buses.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr "BaÅŸkaca Kaydet"
+msgstr "Farklı Kaydet"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "Bu Bus Yerleşim Düzenini bir dosyaya kaydet."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
-#, fuzzy
msgid "Load Default"
-msgstr "Önyüklü"
+msgstr "Varsayılanı Yükle"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "Varsayılan Bus Yerleşim Düzenini yükle."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1032,7 +1029,7 @@ msgstr "Gecersiz Yol."
#: editor/editor_autoload_settings.cpp
msgid "File does not exist."
-msgstr "Dizeç yok."
+msgstr "Dosya yok."
#: editor/editor_autoload_settings.cpp
msgid "Not in resource path."
@@ -1073,7 +1070,7 @@ msgstr "KendindenYüklenme'leri Yeniden Sırala"
#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
#: scene/gui/file_dialog.cpp
msgid "Path:"
-msgstr "Dizeç yolu:"
+msgstr "Dosya yolu:"
#: editor/editor_autoload_settings.cpp
msgid "Node Name:"
@@ -1104,9 +1101,8 @@ msgid "Updating scene.."
msgstr "Sahne güncelleniyor.."
#: editor/editor_dir_dialog.cpp
-#, fuzzy
msgid "Please select a base directory first"
-msgstr "Lütfen önce sahneyi kaydediniz."
+msgstr "Lütfen öncelikle bir taban dizini seçin"
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
@@ -1135,7 +1131,7 @@ msgstr "Seç"
#: editor/editor_export.cpp
msgid "Storing File:"
-msgstr "Dizeci Depoluyor:"
+msgstr "Dosya Depolama:"
#: editor/editor_export.cpp
msgid "Packing"
@@ -1147,7 +1143,12 @@ msgstr "Biçem dosyası bulunamadı:\n"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File Exists, Overwrite?"
-msgstr "Dizeç var. Üzerine Yazılsın mı?"
+msgstr "Dosya var. Üzerine Yazılsın mı?"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Dizin OluÅŸtur"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
@@ -1155,21 +1156,15 @@ msgstr "Tümü Onaylandı"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Files (*)"
-msgstr "Tüm Dizeçler (*)"
-
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "Aç"
+msgstr "Tüm Dosyalar (*)"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
-msgstr "Bir Dizeç Aç"
+msgstr "Bir Dosya Aç"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open File(s)"
-msgstr "Dizeç(leri) Aç"
+msgstr "Dosya(leri) Aç"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a Directory"
@@ -1177,7 +1172,7 @@ msgstr "Bir dizin aç"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File or Directory"
-msgstr "Bir Dizeç ya da Dizin Aç"
+msgstr "Bir Dosya ya da Dizin Aç"
#: editor/editor_file_dialog.cpp editor/editor_node.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -1187,7 +1182,7 @@ msgstr "Kaydet"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Save a File"
-msgstr "Dizeci Kaydet"
+msgstr "Bir Dosya Kaydet"
#: editor/editor_file_dialog.cpp
msgid "Go Back"
@@ -1207,7 +1202,7 @@ msgstr "Yenile"
#: editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr "Gizli Dizeçleri Aç / Kapat"
+msgstr "Gizli Dosyalari Aç / Kapat"
#: editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
@@ -1229,14 +1224,13 @@ msgstr "Beğenileni Yukarı Taşı"
msgid "Move Favorite Down"
msgstr "Beğenileni Aşağı Taşı"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "Dizin oluşturulamadı."
+msgstr "Üst klasöre git"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
-msgstr "Dizinler & Dizeçler:"
+msgstr "Dizinler & Dosyalar:"
#: editor/editor_file_dialog.cpp
msgid "Preview:"
@@ -1245,7 +1239,7 @@ msgstr "Önizleme:"
#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
#: scene/gui/file_dialog.cpp
msgid "File:"
-msgstr "Dizeç:"
+msgstr "Dosya:"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Must use a valid extension."
@@ -1256,9 +1250,8 @@ msgid "ScanSources"
msgstr "KaynaklarıTara"
#: editor/editor_file_system.cpp
-#, fuzzy
msgid "(Re)Importing Assets"
-msgstr "Yeniden-İçe Aktarım"
+msgstr "Varlıklar Yeniden-İçe Aktarılıyor"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -1294,68 +1287,60 @@ msgid "Brief Description:"
msgstr "Kısa Açıklama:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "Üyeler:"
+msgstr "Üyeler"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "Üyeler:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "Açık Yöntemler:"
+msgstr "Açık Metodlar"
#: editor/editor_help.cpp
msgid "Public Methods:"
msgstr "Açık Yöntemler:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "GUI Theme Items"
-msgstr "Arayüz Kalıbı Öğeleri:"
+msgstr "Grafik Arayüzü Tema Öğeleri"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
-msgstr "Arayüz Kalıbı Öğeleri:"
+msgstr "Grafik Arayüzü Tema Öğeleri:"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Signals:"
-msgstr "İşaretler:"
+msgstr "Sinyaller:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Canlandırmalar"
+msgstr "Numaralandırmalar"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations:"
-msgstr "Canlandırmalar"
+msgstr "Numaralandırmalar:"
#: editor/editor_help.cpp
msgid "enum "
msgstr "enum… "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "Sabitler:"
+msgstr "Sabitler"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr "Sabitler:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "Açıklama:"
+msgstr "Açıklama"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Properties"
-msgstr "Özellikleri:"
+msgstr "Özellikler"
#: editor/editor_help.cpp
msgid "Property Description:"
@@ -1366,11 +1351,12 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Bu özellik için henüz bir açıklama yok. Bize [color=$color][url=$url]katkıda "
+"bulunarak[/url][/color] yardım edebilirsiniz!"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "Yöntem Dizelgesi:"
+msgstr "Metodlar"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1381,15 +1367,16 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"Bu metod için henüz bir açıklama yok. Bize [color=$color][url=$url]katkıda "
+"bulunarak[/url][/color] yardım edebilirsiniz!"
#: editor/editor_help.cpp
msgid "Search Text"
msgstr "Yazı Ara"
#: editor/editor_log.cpp
-#, fuzzy
msgid "Output:"
-msgstr " Çıktı:"
+msgstr "Çıktı:"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
@@ -1403,7 +1390,7 @@ msgstr "Kaynak kaydedilirken sorun!"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Save Resource As.."
-msgstr "Kaynağı Başkaca Kaydet.."
+msgstr "Kaynağı Farklı Kaydet.."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1412,39 +1399,35 @@ msgstr "Anlıyorum.."
#: editor/editor_node.cpp
msgid "Can't open file for writing:"
-msgstr "Dizeç yazmak için açılamıyor:"
+msgstr "Dosya yazmak için açılamıyor:"
#: editor/editor_node.cpp
msgid "Requested file format unknown:"
-msgstr "İstenilen dizeç formatı bilinmiyor:"
+msgstr "İstenilen dosya formatı bilinmiyor:"
#: editor/editor_node.cpp
msgid "Error while saving."
msgstr "Kaydedilirken sorun oluÅŸtu."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "'..' üzerinde çalışılamıyor"
+msgstr "'%s' açılamıyor."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "Kaydedilirken sorun oluÅŸtu."
+msgstr "'%s' ayrıştırılırken hata oluştu."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "'%s' dosyası beklenmeyen bir biçimde bitiyor."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Missing '%s' or its dependencies."
-msgstr "Sahne '%s' bağımlılıkları koptu:"
+msgstr "'%s' veya bağımlılıkları eksik."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "Kaydedilirken sorun oluÅŸtu."
+msgstr "'%s' yüklenirken bir hata oluştu."
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1459,9 +1442,8 @@ msgid "Creating Thumbnail"
msgstr "Küçük Bediz Oluşturuluyor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "This operation can't be done without a tree root."
-msgstr "Bu işlem bir sahne olmadan yapılamaz."
+msgstr "Bu işlem bir kök sahne olmadan yapılamaz."
#: editor/editor_node.cpp
msgid ""
@@ -1490,19 +1472,19 @@ msgstr "TileSet kayıt edilirken sorun!"
#: editor/editor_node.cpp
msgid "Error trying to save layout!"
-msgstr "Tasarım kaydedilmeye çalışılırken sorun oluştu!"
+msgstr "Yerleşim Düzeni kaydedilmeye çalışılırken sorun oluştu!"
#: editor/editor_node.cpp
msgid "Default editor layout overridden."
-msgstr "Önyüklü düzenleyici tasarımı geçersiz kılındı."
+msgstr "Önyüklü düzenleyici Yerleşim Düzeni geçersiz kılındı."
#: editor/editor_node.cpp
msgid "Layout name not found!"
-msgstr "Tasarım adı bulunamadı!"
+msgstr "Yerleşim Düzeni adı bulunamadı!"
#: editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr "Önyüklü tasarım temel ayarlara onarıldı."
+msgstr "Önyüklü Yerleşim Düzeni temel ayarlara onarıldı."
#: editor/editor_node.cpp
msgid ""
@@ -1510,18 +1492,26 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Bu kaynak içe aktarılmış bir sahneye ait, yani üzerinde düzenleme "
+"yapılamaz.\n"
+"Lütfen, bu iş akışını daha iyi anlamak için dökümantasyondaki sahneleri içe "
+"aktarma kısmını okuyunuz."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"Bu kaynak örneklenmiş veya devredilmiş bir sahneye ait.\n"
+"Yaptığınız değişiklikler geçerli sahneyi kaydederken saklanmayacaktır."
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"Bu kaynak içe aktarılmış, yani üzerinde düzenleme yapılamaz. İçe aktarma "
+"panelinden ayarlarını değiştirin ve yeniden içe aktarın."
#: editor/editor_node.cpp
msgid ""
@@ -1530,6 +1520,31 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Bu sahne içe aktarılmış, yani yaptığınız değişiklikler saklanmayacak.\n"
+"Örnekleme veya devretme yapmak, üzerinde değişiklik yapmaya izin "
+"verecektir.\n"
+"Lütfen, bu iş akışını daha iyi anlamak için dökümantasyondaki sahneleri içe "
+"aktarma kısmını okuyunuz."
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"Bu bir uzak nesne, yani yaptığınız değişiklikler saklanmayacaktır.\n"
+"Lütfen, bu iş akışını daha iyi anlamak için dökümantasyondaki sahneleri içe "
+"aktarma kısmını okuyunuz."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "Hepsini geniÅŸlet"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "Hepsini daralt"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1564,14 +1579,13 @@ msgid "There is no defined scene to run."
msgstr "Çalıştırmak için herhangi bir sahne seçilmedi."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"No main scene has ever been defined, select one?\n"
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
"Hiçbir ana sahne tanımlanmadı, birini seçiniz?\n"
-"Daha sonra \"uygulama\" kategorisinin altındaki \"Tasarı Ayarları\" ndan "
+"Daha sonra \"uygulama\" kategorisinin altındaki \"Proje Ayarları\" ndan "
"deÄŸiÅŸtirebilirsiniz."
#: editor/editor_node.cpp
@@ -1581,7 +1595,7 @@ msgid ""
"category."
msgstr ""
"Seçilen sahne '%s' mevcut değil, geçerli bir tane seçin?\n"
-"Daha sonra \"uygulama\" kategorisinin altındaki \"Tasarı Ayarları\" ndan "
+"Daha sonra \"uygulama\" kategorisinin altındaki \"Proje Ayarları\" ndan "
"deÄŸiÅŸtirebilirsiniz."
#: editor/editor_node.cpp
@@ -1590,8 +1604,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
-"Seçilen sahne '%s' bir sahne dizeci değil, geçerli bir tane seç?\n"
-"Daha sonra \"uygulama\" kategorisinin altındaki \"Tasarı Ayarları\" ndan "
+"Seçilen sahne '%s' bir sahne dosyası değil, geçerli bir tane seç?\n"
+"Daha sonra \"uygulama\" kategorisinin altındaki \"Proje Ayarları\" ndan "
"deÄŸiÅŸtirebilirsiniz."
#: editor/editor_node.cpp
@@ -1619,22 +1633,20 @@ msgid "Quick Open Script.."
msgstr "Betiği Hızlı Aç.."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Close"
-msgstr "Dizeci Kaydet"
+msgstr "Kaydet & Kapat"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "Kapatmadan önce değişklikler buraya '%s' kaydedilsin mi?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr "Sahneyi BaÅŸkaca Kaydet.."
+msgstr "Sahneyi Farklı Kaydet.."
#: editor/editor_node.cpp
-#, fuzzy
msgid "No"
-msgstr "Düğüm"
+msgstr "Hayır"
#: editor/editor_node.cpp
msgid "Yes"
@@ -1653,13 +1665,16 @@ msgid "Export Mesh Library"
msgstr "Örüntü Betikevini Dışa Aktar"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "Bu işlem bir kök sahne olmadan yapılamaz."
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "Döşenti Dizi Dışa Aktar"
#: editor/editor_node.cpp
-#, fuzzy
msgid "This operation can't be done without a selected node."
-msgstr "Bu işlem bir sahne olmadan yapılamaz."
+msgstr "Bu işlem seçili bir sahne olmadan yapılamaz."
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
@@ -1690,28 +1705,30 @@ msgid "Exit the editor?"
msgstr "Düzenleyiciden çık?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Project Manager?"
-msgstr "Tasarı Yöneticisi"
+msgstr "Proje Yöneticisi Açılsın mı?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Save & Quit"
-msgstr "Dizeci Kaydet"
+msgstr "Kaydet & Çık"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "Çıkmadan önce değişiklikler aşağıdaki sahneye(lere) kaydedilsin mi?"
#: editor/editor_node.cpp
msgid "Save changes the following scene(s) before opening Project Manager?"
msgstr ""
+"Proje Yöneticisi açılmadan önce değişiklikler aşağıdaki sahneye(lere) "
+"kaydedilsin mi?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
+"Bu seçenek artık kullanılmıyor. Yenilemeye zorlayan durumlar bug olarak "
+"değerlendirilir. Lütfen bildirin."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -1720,30 +1737,34 @@ msgstr "Bir Ana Sahne Seç"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
msgstr ""
+"Şu eklenti etkinleştirilemedi: '%s' yapılandırma ayarlarının ayrıştırılması "
+"başarısız oldu."
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr ""
+msgstr "Eklentideki betik alanı bulunamıyor: 'res://addons/%s'."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "Yazı tipi %s yüklerken sorun oluştu"
+msgstr "Yoldaki eklenti betiği yüklenemedi: '%s'."
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
msgstr ""
+"Eklenti betiği '%s' yolundan yüklenemedi. İçerik tipi EditorPlugin değil."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr ""
+msgstr "Eklenti betiği '%s' yolundan yüklenemedi. Betik araç modunda değil."
#: editor/editor_node.cpp
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
+"Sahne '% s' otomatik olarak içe aktarıldı, bu nedenle değiştirilemez.\n"
+"Değişiklik yapmak için miras alınmış yeni bir sahne oluşturulabilir."
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1755,52 +1776,62 @@ msgid ""
"Error loading scene, it must be inside the project path. Use 'Import' to "
"open the scene, then save it inside the project path."
msgstr ""
-"Sahne yüklenirken sorun oluştu, tasarı yolunun içinde olmalı. Sahneyi açmak "
-"için 'İçe Aktar' seçeneğini kullanın, ardından tasarının yolunun içine "
+"Sahne yüklenirken sorun oluştu, sahne proje yolunun içinde olmalı. Sahneyi "
+"açmak için 'İçe Aktar' seçeneğini kullanın, ardından projenin yolunun içine "
"kaydedin."
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr "Sahne '%s' bağımlılıkları koptu:"
+msgstr "Sahne '%s' kırık bağımlılıklara sahip:"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Clear Recent Scenes"
-msgstr "Kemikleri Temizle"
+msgstr "En Son Sahneleri Temizle"
#: editor/editor_node.cpp
msgid "Save Layout"
-msgstr "Tasarımı Kaydet"
+msgstr "Yerleşim Düzenini Kaydet"
#: editor/editor_node.cpp
msgid "Delete Layout"
-msgstr "Tasarımı Sil"
+msgstr "Yerleşim Düzenini Sil"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr "Önyüklü"
+msgstr "Varsayılan"
#: editor/editor_node.cpp
msgid "Switch Scene Tab"
msgstr "Sahne Sekmesine Geç"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr "%d daha çok dizeç(ler)"
+msgid "%d more files or folders"
+msgstr "%d daha fazla dosyalar veya Klasörler"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "%d daha fazla klasörler"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "%d daha çok dizeç(ler) veya dizin(ler)"
+msgid "%d more files"
+msgstr "%d daha fazla dosyalar"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Dock Pozisyonu"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
-msgstr "Dikkat Dağıtmayan Biçim"
+msgstr "Dikkat Dağıtmayan Kip"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Toggle distraction-free mode."
-msgstr "Dikkat Dağıtmayan Biçim"
+msgstr "Dikkat-Dağıtmayan Kipine geç."
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Yeni bir sahne ekle."
#: editor/editor_node.cpp
msgid "Scene"
@@ -1819,13 +1850,12 @@ msgid "Previous tab"
msgstr "Önceki sekme"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Filter Files.."
-msgstr "Hızlı Süzgeç Dizeçleri.."
+msgstr "Dosyaları Süz.."
#: editor/editor_node.cpp
msgid "Operations with scene files."
-msgstr "Sahne dizeçlerinin işlemleri."
+msgstr "Sahne dosyalarının işlemleri."
#: editor/editor_node.cpp
msgid "New Scene"
@@ -1868,13 +1898,12 @@ msgid "TileSet.."
msgstr "TileSet .."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "Geri"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "Geri"
@@ -1884,16 +1913,15 @@ msgstr "Sahneyi Eski Durumuna Çevir"
#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr "Türlü tasarı ya da sahne genişliğinde araçlar."
+msgstr "Çeşitli proje ya da sahne-çapında araçlar."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Project"
-msgstr "Yeni Tasarı"
+msgstr "Proje"
#: editor/editor_node.cpp
msgid "Project Settings"
-msgstr "Tasarı Ayarları"
+msgstr "Proje Ayarları"
#: editor/editor_node.cpp
msgid "Run Script"
@@ -1909,7 +1937,7 @@ msgstr "Araçlar"
#: editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr "Tasarı Dizelgesine Git"
+msgstr "Proje Listesine Çık"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Debug"
@@ -1924,7 +1952,7 @@ msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
msgstr ""
-"Verilen yürütülebilir dizeç, dışa aktarılırken veya dağıtıldığında, sorun "
+"Verilen yürütülebilir dosya, dışa aktarılırken veya dağıtıldığında, sorun "
"ayıklanacak şekilde bu bilgisayarın IP'sine bağlanmaya çalışacaktır."
#: editor/editor_node.cpp
@@ -1941,8 +1969,8 @@ msgid ""
"option speeds up testing for games with a large footprint."
msgstr ""
"Bu seçenek etkinleştirildiğinde, dışa aktarma veya dağıtma çok küçük bir "
-"çalıştırılabilir dizeç üretir.\n"
-"Dizeç düzeni, ağ üzerindeki düzenleyici tarafından tasarıdan sağlanacaktır.\n"
+"çalıştırılabilir dosya üretir.\n"
+"Dosya düzeni, ağ üzerindeki düzenleyici tarafından tasarıdan sağlanacaktır.\n"
"Android'de daha hızlı verim için dağıtım uygulaması USB kablosunu "
"kullanacak. Bu seçenek, ayak izi büyük olan oyunları denemeyi hızlandırır."
@@ -1983,7 +2011,7 @@ msgid ""
msgstr ""
"Bu seçenek etkinleştirildiğinde, düzenleyicide bulunan sahnedeki "
"değişiklikler çalışmakta olan oyununda çoğaltılır.\n"
-"Bir cihazda uzaktan kullanıldığında, ağ dizeç düzeni ile bu işlem daha "
+"Bir cihazda uzaktan kullanıldığında, ağ dosya sistemi ile bu işlem daha "
"verimli olur."
#: editor/editor_node.cpp
@@ -1999,13 +2027,12 @@ msgid ""
msgstr ""
"Bu seçenek etkinleştirildiğinde, kaydedilen tüm betik çalışan oyunda yeniden "
"yüklenecektir.\n"
-"Bir cihazda uzaktan kullanıldığında, ağ dizeç düzeni ile bu işlem daha "
+"Bir cihazda uzaktan kullanıldığında, ağ dosya sistemi ile bu işlem daha "
"verimli olur."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Editor"
-msgstr "Düzenle"
+msgstr "Düzenleyici"
#: editor/editor_node.cpp editor/settings_config_dialog.cpp
msgid "Editor Settings"
@@ -2013,37 +2040,35 @@ msgstr "Düzenleyici Ayarları"
#: editor/editor_node.cpp
msgid "Editor Layout"
-msgstr "Düzenleyici Tasarımı"
+msgstr "Düzenleyici Yerleşim Planı"
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
msgstr "Tam Ekran Aç / Kapat"
#: editor/editor_node.cpp editor/project_export.cpp
-#, fuzzy
msgid "Manage Export Templates"
-msgstr "Dışa Aktarım Kalıpları Yükleniyor"
+msgstr "Dışa Aktarım Şablonlarını Yönet"
#: editor/editor_node.cpp
msgid "Help"
-msgstr ""
+msgstr "Yardım"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Classes"
msgstr "Bölütler"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Online Docs"
-msgstr "Belgeleri Kapat"
+msgstr "Çevrimiçi Belgeler"
#: editor/editor_node.cpp
msgid "Q&A"
-msgstr ""
+msgstr "SSS"
#: editor/editor_node.cpp
msgid "Issue Tracker"
-msgstr ""
+msgstr "Sorun İzleyici"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -2055,7 +2080,7 @@ msgstr "İlişkin"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr "Tasarıyı oynat."
+msgstr "Projeti oynat."
#: editor/editor_node.cpp
msgid "Play"
@@ -2119,7 +2144,7 @@ msgstr "Bellekte yeni bir kaynak oluşturun ve onu düzenleyin."
#: editor/editor_node.cpp
msgid "Load an existing resource from disk and edit it."
-msgstr "Var olan bir kaynağı saklaktan yükleyin ve düzenleyin."
+msgstr "Var olan bir kaynağı diskten yükleyin ve düzenleyin."
#: editor/editor_node.cpp
msgid "Save the currently edited resource."
@@ -2127,7 +2152,7 @@ msgstr "Düzenlenen kaynağı kaydedin."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Save As.."
-msgstr "BaÅŸkaca Kaydet.."
+msgstr "Farklı Kaydet.."
#: editor/editor_node.cpp
msgid "Go to the previous edited object in history."
@@ -2146,9 +2171,8 @@ msgid "Object properties."
msgstr "Nesne özellikleri."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Changes may be lost!"
-msgstr "Bediz Öbeğini Değiştir"
+msgstr "DeÄŸiÅŸiklikler Kaybolabilir!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2156,28 +2180,28 @@ msgid "Import"
msgstr "İçe Aktar"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "DizeçDüzeni"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "Düğüm"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "DosyaSistemi"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "Çıktı"
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "Kaydetme"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr "Kalıpları ZIP Dizecinden İçe Aktar"
+msgstr "Şablonları Zip Dosyasından İçeri Aktar"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export Project"
-msgstr "Tasarıyı Dışa Aktar"
+msgstr "Projeyi Dışa Aktar"
#: editor/editor_node.cpp
msgid "Export Library"
@@ -2196,9 +2220,8 @@ msgid "Open & Run a Script"
msgstr "Aç & Bir Betik Çalıştır"
#: editor/editor_node.cpp
-#, fuzzy
msgid "New Inherited"
-msgstr "Yeni Kalıt Alınmış Sahne .."
+msgstr "Yeni Örnekleme"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -2209,43 +2232,36 @@ msgid "Select"
msgstr "Seç"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 2D Editor"
msgstr "Düzenleyicide Aç"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open 3D Editor"
-msgstr "Düzenleyicide Aç"
+msgstr "3B Düzenleyicide Aç"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open Script Editor"
-msgstr "Düzenleyicide Aç"
+msgstr "Betik Düzenleyiciyi Aç"
-#: editor/editor_node.cpp
-#, fuzzy
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr "Betikevini Dışa Aktar"
+msgstr "Malvarlığı Kütüphanesini Aç"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the next Editor"
-msgstr "Düzenleyicide Aç"
+msgstr "Sonraki Düzenleyiciyi aç"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open the previous Editor"
-msgstr "Düzenleyicide Aç"
+msgstr "Önceki Düzenleyiciyi Aç"
#: editor/editor_plugin.cpp
-#, fuzzy
msgid "Creating Mesh Previews"
-msgstr "Örüntü Betikevi Oluştur"
+msgstr "Mesh Önizlemeleri Oluşturuluyor"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
-msgstr "Küçük Bediz.."
+msgstr "Küçük Resim.."
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
@@ -2293,9 +2309,8 @@ msgid "Frame %"
msgstr "Kare %"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "Sabit Kare %"
+msgstr "Fizik Kare %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2315,13 +2330,15 @@ msgstr "Kare #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Listeden aygıt seç"
#: editor/editor_run_native.cpp
msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the export menu."
msgstr ""
+"Çalıştırılabilir dışa aktarma önayarı bu platform için bulunamadı.\n"
+"Lütfen dışa aktar menüsünden çalıştırılabilir bir önayar ekleyin."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -2333,7 +2350,7 @@ msgstr "Düzenlenmiş bir sahne zaten var."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr "Betik dizeci alınamadı:"
+msgstr "Betik dosyası alınamadı:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
@@ -2364,37 +2381,36 @@ msgid "Import From Node:"
msgstr "Düğümden İçe Aktar:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Re-Download"
msgstr "Yeniden Yükle"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall"
-msgstr "Kur"
+msgstr "Kaldır"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "(Installed)"
-msgstr "Kur"
+msgstr "(Kurulu)"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download"
-msgstr "Aşağı"
+msgstr "İndir"
#: editor/export_template_manager.cpp
msgid "(Missing)"
-msgstr ""
+msgstr "(Mevcut DeÄŸil)"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "(Current)"
-msgstr "Geçerli:"
+msgstr "(Åžuanki)"
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "Aynalar alınıyor, lütfen bekleyin.."
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr ""
+msgstr "Şablon sürümünü kaldır '%s'?"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
@@ -2402,176 +2418,258 @@ msgstr "Dışa aktarım kalıplarının zipi açılamadı."
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "Şablonların içinde geçersiz version.txt formatı."
#: editor/export_template_manager.cpp
msgid ""
"Invalid version.txt format inside templates. Revision is not a valid "
"identifier."
msgstr ""
+"Şablonların içinde geçersiz version.txt formatı. Revizyon geçerli bir "
+"tanımlayıcı değil."
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "Şablonların içinde version.txt bulunamadı."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for templates:\n"
-msgstr "Atlas kaydedilirken sorun oluÅŸtu:"
+msgstr "Şablonlar için yol oluşturulurken hata:\n"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Extracting Export Templates"
-msgstr "Dışa Aktarım Kalıpları Yükleniyor"
+msgstr "Dışa Aktarım Şablonları Çıkartılıyor"
#: editor/export_template_manager.cpp
msgid "Importing:"
msgstr "İçe Aktarım:"
#: editor/export_template_manager.cpp
-#, fuzzy
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+"Bu sürüm için indirme bağlantıları bulunamadı. Doğrudan indirme sadece resmi "
+"dağıtımlar için mecut."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "Çözümlenemedi."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "Bağlanamadı."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "Cevap yok."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "İstem Başarısız."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "Yönlendirme Döngüsü."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "Başarısız:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "Dosyaya yazılamıyor."
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "İndirme Tamamlandı."
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "Url isteği hatası: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "Aynaya bağlanılıyor.."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "Bağlantı kesildi"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "Çözülüyor"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "Çözümlenemedi"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "Bağlanılıyor.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "Bağlanamadı"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "Bağlı"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "İsteniyor.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "İndiriliyor"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "Bağlantı Hatası"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "SSL El Sıkışma Hatası"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
-msgstr "Åžu anki Sahne"
+msgstr "Şu Anki Sürüm:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Installed Versions:"
-msgstr "Yüklü Eklentiler:"
+msgstr "Yüklü Sürümler:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install From File"
-msgstr "Tasarıyı Kur:"
+msgstr "Dosyadan Kur"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove Template"
-msgstr "Öğeyi Kaldır"
+msgstr "Şablonu Kaldır"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Select template file"
-msgstr "Seçili dizeçleri sil?"
+msgstr "Şablon dosyası seç"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Export Template Manager"
-msgstr "Dışa Aktarım Kalıpları Yükleniyor"
+msgstr "Dışa Aktarım Şablonu Yöneticisi"
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "Şablonları İndir"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "Listeden ayna seç: "
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
-"file_type_cache.cch yazma için açılamıyor! Dizeç türü önbelleğe "
+"file_type_cache.cch yazma için açılamıyor! dosya türü önbelleğe "
"kaydedilmiyor!"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr ""
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "Gidilemiyor. '%s' bu dosya sisteminde bulunamadı!"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "Öğeleri küçük resim ızgarası şeklinde göster"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "Öğeleri liste olarak göster"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
"\n"
-"Source: "
-msgstr "Kaynak:"
+"Durum: Dosya içe aktarma başarısız oldu. Lütfen dosyayı onarın ve tekrar içe "
+"aktarın."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move/rename resources root."
-msgstr "Kaynak yazı tipi yüklenemiyor / işlenemiyor."
+msgstr "Kaynakların kökü taşınamaz/yeniden adlandırılamaz."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move a folder into itself.\n"
-msgstr "Bir dizeç kendisi üzerine içe aktaramıyor:"
+msgstr "Bir klasör kendisinin içine taşınamaz.\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "İçe aktarırken sorun:"
+msgstr "Taşıma Hatası:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "Sahne '%s' bağımlılıkları koptu:"
+msgstr "Bağımlılıklar güncellenemedi:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "İsim sağlanmadı"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "Sağlanan isim geçersiz karakterler içeriyor"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "No name provided."
-msgstr "Yeniden Adlandır ya da Taşı.."
+msgstr "SaÄŸlanan isim yok."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "Geçerli damgalar:"
+msgstr "İsim geçersiz karkterler içeriyor."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "A file or folder with this name already exists."
-msgstr "Öbek adı zaten var!"
+msgstr "Bu isimde zaten bir dosya ve ya klasör mevcut."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "Değişkeni Yeniden Adlandır"
+msgstr "Dosya yeniden-adlandırma:"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming folder:"
-msgstr "Düğümü Yeniden Adlandır"
+msgstr "Klasör yeniden-adlandırma:"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Expand all"
-msgstr "Ataya geniÅŸletin"
+msgstr "Hepsini geniÅŸlet"
#: editor/filesystem_dock.cpp
msgid "Collapse all"
-msgstr ""
+msgstr "Hepsini daralt"
#: editor/filesystem_dock.cpp
msgid "Copy Path"
-msgstr "Dizeç Yolunu Tıpkıla"
+msgstr "Dosya Yolunu Tıpkıla"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Rename.."
-msgstr "Yeniden Adlandır"
+msgstr "Yeniden Adlandır.."
#: editor/filesystem_dock.cpp
msgid "Move To.."
msgstr "Şuraya Taşı.."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "Dizin OluÅŸtur"
+msgstr "Yeni Klasör.."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
-msgstr "Dizeç Yöneticisinde Göster"
+msgstr "Dosya Yöneticisinde Göster"
#: editor/filesystem_dock.cpp
msgid "Instance"
@@ -2595,7 +2693,7 @@ msgstr "Sıradaki Dizin"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr "Dizeç Düzenini Yeniden Tara"
+msgstr "Dosya Düzenini Yeniden Tara"
#: editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
@@ -2610,6 +2708,8 @@ msgid ""
"Scanning Files,\n"
"Please Wait.."
msgstr ""
+"Dosyalar Taranıyor,\n"
+"Lütfen Bekleyiniz.."
#: editor/filesystem_dock.cpp
msgid "Move"
@@ -2629,47 +2729,44 @@ msgid "Remove from Group"
msgstr "Öbekten Kaldır"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import as Single Scene"
-msgstr "Sahneyi İçe Aktarıyor..."
+msgstr "Tek Bir Sahne Şeklinde İçe Aktar"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import with Separate Animations"
-msgstr "Canlandırmaları İçe Aktar.."
+msgstr "Ayrı Animasyonlar Şeklinde İçe Aktar"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "Ayrı Materyaller Şeklinde İçe Aktar"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "Ayrı Nesneler Şeklinde İçe Aktar"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "Ayrı Nesneler+Materyaller Şeklinde İçe Aktar"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "Ayrı Nesneler+Animasyonlar Şekline İçe Aktar"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "Ayrı Materyaller+Animasyonlar Şeklinde İçe Aktar"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "Ayrı Nesneler+Materyaller+Animasyonlar Şeklinde İçe Aktar"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Import as Multiple Scenes"
-msgstr "3B Sahneyi İçe Aktar"
+msgstr "Çoklu Sahne Olarak İçe Aktar"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "Çoklu Sahneler+Materyaller olarak İçe Aktar"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/cube_grid_theme_editor_plugin.cpp
@@ -2686,17 +2783,17 @@ msgstr "Çalışan Özel Betik.."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
-msgstr "İçe aktarma sonrası betik dizeci yüklenemedi:"
+msgstr "İçe aktarma sonrası betik dosyası yüklenemedi:"
#: editor/import/resource_importer_scene.cpp
msgid "Invalid/broken script for post-import (check console):"
msgstr ""
-"İçe aktarma işlemi sonrası için geçersiz/bozuk betik dizeci (konsolu "
+"İçe aktarma işlemi sonrası için geçersiz/bozuk betik dosyası (konsolu "
"denetleyin):"
#: editor/import/resource_importer_scene.cpp
msgid "Error running post-import script:"
-msgstr "İçe aktarma sonrası betik dizeci çalıştırılırken sorun oluştu:"
+msgstr "İçe aktarma sonrası betik dosyası çalıştırılırken sorun oluştu:"
#: editor/import/resource_importer_scene.cpp
msgid "Saving.."
@@ -2704,28 +2801,25 @@ msgstr "Kaydediliyor..."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr ""
+msgstr "'%s' için Varsayılanı Ayarla"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr ""
+msgstr "'%s' İçin Varsayılanı Temizle"
#: editor/import_dock.cpp
-#, fuzzy
msgid " Files"
-msgstr "Dizeç"
+msgstr " Dosyalar"
#: editor/import_dock.cpp
-#, fuzzy
msgid "Import As:"
-msgstr "İçe Aktar"
+msgstr "Şu Şekilde İçe Aktar:"
#: editor/import_dock.cpp editor/property_editor.cpp
msgid "Preset.."
msgstr "Ön ayar.."
#: editor/import_dock.cpp
-#, fuzzy
msgid "Reimport"
msgstr "Yeniden İçe Aktar"
@@ -2735,11 +2829,11 @@ msgstr "MultiNode Kur"
#: editor/node_dock.cpp
msgid "Groups"
-msgstr "Öbekler"
+msgstr "Gruplar"
#: editor/node_dock.cpp
msgid "Select a Node to edit Signals and Groups."
-msgstr "İşaretleri ve Öbekleri düzenlemek için bir Düğüm seçin."
+msgstr "Sinyalleri ve Grupları düzenlemek için bir Düğüm seçin."
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -2753,9 +2847,8 @@ msgid "Edit Poly"
msgstr "Çokluyu Düzenleyin"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#, fuzzy
msgid "Insert Point"
-msgstr "Girdileme"
+msgstr "Nokta YerleÅŸtir"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -2768,9 +2861,8 @@ msgid "Remove Poly And Point"
msgstr "Çokluyu ve Noktayı Kaldır"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "Sıfırdan yeni bir çokgen oluşturun."
+msgid "Create a new polygon from scratch"
+msgstr "Sıfırdan yeni bir çokgen oluşturun"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2779,6 +2871,14 @@ msgid ""
"Ctrl+LMB: Split Segment.\n"
"RMB: Erase Point."
msgstr ""
+"Varolan çokgeni düzenle:\n"
+"FareSolTık: Noktayı Taşı.\n"
+"Ctrl+FareSolTık: Parça Ayır.\n"
+"FareSağTık: Noktayı Sil."
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "Noktaları sil"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
@@ -2786,43 +2886,42 @@ msgstr "KendindenOynatmayı Aç/Kapat"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr "Yeni Canlandırma Adı:"
+msgstr "Yeni Animasyon Adı:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
-msgstr "Yeni Canlandırma"
+msgstr "Yeni Animasyon"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr "Canlandırmanın Adını Değiştir:"
+msgstr "Animasyonun Adını Değiştir:"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Delete Animation?"
-msgstr "Canlandırmayı İkile"
+msgstr "Animasyon Silinsin mi?"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr "Canlandırmayı Kaldır"
+msgstr "Animasyonu Kaldır"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr "SORUN: Geçersiz canlandırma adı!"
+msgstr "SORUN: Geçersiz animasyon adı!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr "SORUN: Bu canlandırma adı zaten var!"
+msgstr "SORUN: Bu animasyon adı zaten var!"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr "Canlandırmayı Yeniden Adlandır"
+msgstr "Animasyonu Yeniden Adlandır"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr "Canlandırma Ekle"
+msgstr "Animasyon Ekle"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
@@ -2834,79 +2933,79 @@ msgstr "Karışım Süresini Değiştir"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr "Canlandırma Yükle"
+msgstr "Animasyon Yükle"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr "Canlandırmayı İkile"
+msgstr "Animasyonu Çoğalt"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr "SORUN: Tıpkılamak için bir canlandırma yok!"
+msgstr "SORUN: Tıpkılamak için bir animasyon yok!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
-msgstr "SORUN: Bellemde canlandırma kaynağı yok!"
+msgstr "SORUN: Bellemde animasyon kaynağı yok!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
-msgstr "Yapıştırılan Canlandırma"
+msgstr "Yapıştırılan Animasyon"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr "Canlandırmayı Yapıştır"
+msgstr "Animasyonu Yapıştır"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr "SORUN: Düzenlemek için bir canlandırma yok!"
+msgstr "SORUN: Düzenlemek için bir animasyon yok!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
-msgstr "Seçilen canlandırmayı geçerli konumdan geriye doğru oynat. (A)"
+msgstr "Seçilen animasyonu geçerli konumdan geriye doğru oynat. (A)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
-msgstr "Seçilen canlandırmayı geriye doğru oynat. (Shift + A)"
+msgstr "Seçilen animasyonu geriye doğru oynat. (Shift + A)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Stop animation playback. (S)"
-msgstr "Canlandırmayı oynatmayı durdur. (S)"
+msgstr "Animasyonu oynatmayı durdur. (S)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
-msgstr "Seçilen canlandırmayı başlangıç anından oynat. (ÜstKrkt + D)"
+msgstr "Seçilen animasyonu başlangıç anından oynat. (ÜstKrkt + D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
-msgstr "Seçilen calandırmayı geçerli konumdan oynat. (D)"
+msgstr "Seçilen animasyonu geçerli konumdan oynat. (D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
-msgstr "Canlandırma konumu (saniye olarak)."
+msgstr "Animasyon konumu (saniye olarak)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
-msgstr "Düğüm için canlandırma arka oynatmasını ölçeklendir."
+msgstr "Düğüm için animasyon arka oynatmasını ölçeklendir."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create new animation in player."
-msgstr "Oynatıcıda yeni canlandırma oluşturun."
+msgstr "Oynatıcıda yeni animasyon oluşturun."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load animation from disk."
-msgstr "Canlandırmayı saklaktan yükle."
+msgstr "Animasyonu diskten yükle."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load an animation from disk."
-msgstr "Bir canlandırmayı saklaktan yükle."
+msgstr "Bir animasyonu diskten yükle."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Save the current animation"
-msgstr "Geçerli canlandırmayı kaydet"
+msgstr "Geçerli animasyonu kaydet"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
-msgstr "Oyuncudaki canlandırmaların dizelgesini görüntüle."
+msgstr "Oynatıcıda animasyonların listesini görüntüle."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
@@ -2918,26 +3017,77 @@ msgstr "Amaçlanan Karışma Zamanlarını Düzenle"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr "Canlandırma Araçları"
+msgstr "Animasyon Araçları"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Copy Animation"
-msgstr "Canlandırmayı Tıpkıla"
+msgstr "Animasyonu Tıpkıla"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "Bölümler:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "Yapıştır"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "Özellikler"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
-msgstr "Yeni Canlandırma Oluştur"
+msgstr "Yeni Animasyon OluÅŸtur"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
-msgstr "Canlandırma Adı:"
+msgstr "Animasyon Adı:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Error!"
-msgstr "Sorun!"
+msgstr "Hata!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
@@ -2949,21 +3099,20 @@ msgstr "Sonraki (KendiliÄŸinden KuyruÄŸu):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
-msgstr "Çapraz Canlandırma Karışma Süreleri"
+msgstr "Çapraz-Animasyon Karışma Süreleri"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Animation"
-msgstr "Canlandırma"
+msgstr "Animasyon"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "New name:"
msgstr "Yeni ad:"
#: editor/plugins/animation_tree_editor_plugin.cpp
-#, fuzzy
msgid "Edit Filters"
-msgstr "Düğüm Süzgeçlerini Düzenle"
+msgstr "Süzgeçleri Düzenle"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
@@ -3045,15 +3194,15 @@ msgstr "GiriÅŸi Sil"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is valid."
-msgstr "Canlandırma ağacı geçerlidir."
+msgstr "Animasyon ağacı geçerlidir."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is invalid."
-msgstr "Canlandırma ağacı geçersizdir."
+msgstr "Animasyon ağacı geçersizdir."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation Node"
-msgstr "Canlandırma Düğümü"
+msgstr "Animasyon Düğümü"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
@@ -3089,7 +3238,7 @@ msgstr "Geçiş Düğümü"
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
-msgstr "Canlandırmaları İçe Aktar.."
+msgstr "Animasyonları İçe Aktar.."
#: editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
@@ -3101,7 +3250,7 @@ msgstr "Süzgeçler..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Free"
-msgstr "Özgür"
+msgstr "Ücretsiz"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
@@ -3116,18 +3265,10 @@ msgid "Can't resolve hostname:"
msgstr "Ana makine adı çözümlenemedi:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "Çözümlenemedi."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "Bağlantı hatası, lütfen tekrar deneyiniz."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "Bağlanamadı."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "Ana makineye bağlanılamadı:"
@@ -3136,32 +3277,16 @@ msgid "No response from host:"
msgstr "Ana makineden cevap yok:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "Cevap yok."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "İstem başarısız, dönen kod:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "İstem Başarısız."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "İstem Başarısız, çok fazla yönlendirme"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "Yönlendirme Döngüsü."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "Başarısız:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr ""
+msgstr "Kötü indirme sağlaması, dosya üzerinde oynama yapılmış."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
@@ -3184,24 +3309,12 @@ msgid "Fetching:"
msgstr "Alınıyor:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Resolving.."
-msgstr "Kaydediliyor..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Connecting.."
-msgstr "BaÄŸlan..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Requesting.."
-msgstr "Deneme"
+msgstr "Çözümleniyor..."
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
-msgstr "Kaynak kaydedilirken sorun!"
+msgstr "İstek yapma hatası"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
@@ -3275,7 +3388,7 @@ msgstr "Deneme"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr "Varlıkların ZIP Dizeci"
+msgstr "Varlıkların ZIP Dosyası"
#: editor/plugins/camera_editor_plugin.cpp
msgid "Preview"
@@ -3312,6 +3425,34 @@ msgid "Move Action"
msgstr "Eylemi Taşı"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr "Dikey kılavuzu taşı"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr "Yeni dikey kılavuz oluştur"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "Dikey kılavuzu kaldır"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "Yatay kılavuzu taşı"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "Yeni yatay kılavuz oluştur"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "Yatay kılavuzu kaldır"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "Yeni yatay ve dikey kılavuzlar oluştur"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "IK Zincirini Düzenle"
@@ -3320,14 +3461,12 @@ msgid "Edit CanvasItem"
msgstr "CanvasItem Düzenle"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Anchors only"
-msgstr "Çapa"
+msgstr "Sadece çapalar"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change Anchors and Margins"
-msgstr "Çapaları Değiştir"
+msgstr "Çapa ve Kenar Boşluklarını Değiştir"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
@@ -3339,7 +3478,7 @@ msgstr "Duruşu Yapıştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Select Mode"
-msgstr "Biçim Seç"
+msgstr "Kip Seç"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3357,7 +3496,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+RMB: Depth list selection"
-msgstr "Alt + RMB: Derin dizelge seçimi"
+msgstr "Alt + RMB: Derin liste seçimi"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Mode"
@@ -3373,7 +3512,7 @@ msgid ""
"Show a list of all objects at the position clicked\n"
"(same as Alt+RMB in select mode)."
msgstr ""
-"Tıklanan konumdaki tüm nesnelerin bir dizelgesini gösterin\n"
+"Tıklanan konumdaki tüm nesnelerin bir listesini gösterin\n"
"(Seçme biçiminde Alt + RMB ile özdeş)."
#: editor/plugins/canvas_item_editor_plugin.cpp
@@ -3385,9 +3524,8 @@ msgid "Pan Mode"
msgstr "Kaydırma Biçimi"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggles snapping"
-msgstr "Kesme Noktası Aç/Kapat"
+msgstr "Yapılmayı aç/kapat"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3395,23 +3533,20 @@ msgid "Use Snap"
msgstr "Yapışma Kullan"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snapping options"
-msgstr "Canlandırma Seçenekleri"
+msgstr "Yapışma ayarları"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to grid"
-msgstr "Yapışma Biçimi:"
+msgstr "Izgaraya yapış"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
msgstr "Döndürme Yapışması Kullan"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Configure Snap..."
-msgstr "Yapışmayı Yapılandır.."
+msgstr "Yapışmayı Yapılandır..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
@@ -3419,34 +3554,39 @@ msgstr "Göreceli Yapış"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr "Nokta Yapışması Kullan"
+msgstr "Piksel Yapışması Kullan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "Akıllı yapışma"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to parent"
-msgstr "Ataya geniÅŸletin"
+msgstr "Ebeveyne yapıştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "Düğüm çapasına yapıştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "Düğüm kenalarına yapıştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "Diğer düğümlere yapıştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "Kılavuzlara yapış"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "Seçilen nesneyi yerine kilitleyin (taşınamaz)."
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "Seçilen nesnenin kilidini açın (taşınabilir)."
@@ -3489,14 +3629,16 @@ msgid "Show Grid"
msgstr "Izgarayı Göster"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show helpers"
-msgstr "Kemikleri Göster"
+msgstr "Yardımcıları Göster"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show rulers"
-msgstr "Kemikleri Göster"
+msgstr "Cetvelleri göster"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr "Kılavuzları göster"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3507,21 +3649,20 @@ msgid "Frame Selection"
msgstr "Kafes Seçimi"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "Tasarımı Kaydet"
+msgstr "Yerleşim Düzeni"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
-msgstr "Açarlar Gir"
+msgstr "Anahtarları Gir"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key"
-msgstr "Açar Gir"
+msgstr "Anahtar Gir"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr "Açar Gir (Var Olan İzler)"
+msgstr "Anahtar Gir (Var Olan İzler)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
@@ -3533,20 +3674,19 @@ msgstr "DuruÅŸu Temizle"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "Pivotu Fare pozisyonundan sürükle"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "Eğri Çıkış Konumunu Ayarla"
+msgstr "Pivotu fare pozisyonunda ayarla"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Izgara adımlarını 2 ile çarp"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "Izgara basamağını 2'ye böl"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3574,7 +3714,7 @@ msgstr "Tamam :("
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
-msgstr "Çocuğun örnek alacağı bir ata yok."
+msgstr "Çocuğun örnek alacağı bir ebeveyn yok."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -3625,78 +3765,71 @@ msgstr "Sahneden Güncelle"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat0"
-msgstr ""
+msgstr "Düz0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat1"
-msgstr ""
+msgstr "Düz1"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
msgstr "Açılma"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease out"
msgstr "Kararma"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
-msgstr ""
+msgstr "Yumuşakgeçiş"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Modify Curve Point"
-msgstr "Eğri Haritasını Değiştir"
+msgstr "Eğri Noktasını Değiştir"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Modify Curve Tangent"
-msgstr "Eğri Haritasını Değiştir"
+msgstr "Eğri Tanjantını Değiştir"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Load Curve Preset"
-msgstr "Kaynak Yükle"
+msgstr "Eğri Önayarı Yükle"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Add point"
-msgstr "GiriÅŸ Ekle"
+msgstr "Nokta Ekle"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove point"
-msgstr "Yol Noktasını Kaldır"
+msgstr "Noktayı kaldır"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Left linear"
-msgstr "DoÄŸrusal"
+msgstr "Sol doÄŸrusal"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Right linear"
-msgstr "Sağdan Görünüm"
+msgstr "SaÄŸ doÄŸrusal"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Load preset"
-msgstr "Kaynak Yükle"
+msgstr "Önayar yükle"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove Curve Point"
msgstr "Yol Noktasını Kaldır"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
-msgstr ""
+msgstr "Eğri Doğrusal Tanjantını Aç/Kapa"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Hold Shift to edit tangents individually"
-msgstr ""
+msgstr "Tanjantları tek tek düzenlemek için Shift'e basılı tut"
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "GI Prob PiÅŸir"
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
@@ -3724,12 +3857,18 @@ msgid ""
"No OccluderPolygon2D resource on this node.\n"
"Create and assign one?"
msgstr ""
+"Bu düğümde OccluderPolygon2D kaynağı yok.\n"
+"OluÅŸtur ve bir tane ata?"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
msgstr "Engelleyici Çokgeni Oluştur"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Sıfırdan yeni bir çokgen oluşturun."
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "Var olan çokgeni düzenleyin:"
@@ -3745,62 +3884,6 @@ msgstr "Ctrl + LMB: Parçayı Böl."
msgid "RMB: Erase Point."
msgstr "RMB: Noktayı Sil."
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Remove Point from Line2D"
-msgstr "Noktayı Eğriden Kaldır"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Add Point to Line2D"
-msgstr "Noktayı Eğriye Ekle"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Move Point in Line2D"
-msgstr "Noktayı Eğriye Taşı"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "Noktaları Seç"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift + Sürükle: Denetim Noktalarını Seç"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "Tıkla: Nokta Ekle"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "Sağ tıkla: Nokta Sil"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "Nokta Ekle (boÅŸlukta)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#, fuzzy
-msgid "Split Segment (in line)"
-msgstr "Parçayı Ayır (eğriye göre)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "Noktayı Sil"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "Örüntü boş!"
@@ -3982,73 +4065,64 @@ msgid "Bake!"
msgstr "PiÅŸir!"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Bake the navigation mesh.\n"
-msgstr "Yönlendirici Örüntüsü Oluştur"
+msgstr "Yönlendirici örüntüsünü pişir.\n"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Clear the navigation mesh."
-msgstr "Yönlendirici Örüntüsü Oluştur"
+msgstr "Yönlendirici örüntüsünü temizle."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "Konfigürasyon Ayarlanıyor..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "Izgara boyutu hesaplanıyor..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating heightfield..."
-msgstr "Işık Sekağacı Oluşturuyor"
+msgstr "Yükseklik-alanı Oluşturuluyor..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Marking walkable triangles..."
-msgstr "Çevirilebilir Dizeler.."
+msgstr "Yürünebilir üçgenler işaretleniyor..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "Aralıksız yükseklialanı inşa ediliyor..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "Yürünebilir alan aşındırılıyor..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Partitioning..."
-msgstr "Uyarı"
+msgstr "Bölümleniyor..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating contours..."
-msgstr "Sekağaç Dokusu Oluşturuyor"
+msgstr "Konturlar oluÅŸturuluyor..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating polymesh..."
-msgstr "Anahat Örüntüsü Oluştur.."
+msgstr "Çoklu-örüntü oluşturuluyor..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Converting to native navigation mesh..."
-msgstr "Yönlendirici Örüntüsü Oluştur"
+msgstr "Yerli yönlendirici örüntüsüne dönüştürülüyor..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "Navigasyon Örüntüsü Üreteci Kurulumu:"
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Parsing Geometry..."
-msgstr "Uzambilgisini Ayrıştırıyor"
+msgstr "Geometri Ayrıştırılıyor..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "Oldu!"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4060,13 +4134,12 @@ msgstr "Yayma Örtecini Temizle"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generating AABB"
-msgstr "AABB Üret"
+msgstr "AABB Üretimi"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
-msgstr ""
+msgstr "Nokta sadece ParçacıkMateryal işlem materyalinin içinde ayarlanabilir"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Error loading image:"
@@ -4082,7 +4155,7 @@ msgstr "Yayma Örtecini Ayarla"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generate Visibility Rect"
-msgstr ""
+msgstr "Görünebilirlik Dikdörtgeni Üret"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Load Emission Mask"
@@ -4090,9 +4163,8 @@ msgstr "Yayma Örtecini Yükle"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Particles"
-msgstr "BaÅŸucu"
+msgstr "Parçacıklar"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generated Point Count:"
@@ -4100,24 +4172,20 @@ msgstr "Üretilen Nokta Say:"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generation Time (sec):"
-msgstr "Ortalama Zaman (sn)"
+msgstr "Nesil Süresi (sn):"
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Emission Mask"
-msgstr "Yayma Örtecini Ayarla"
+msgstr "Emisyon Maskesi"
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Capture from Pixel"
-msgstr "Sahneden OluÅŸtur"
+msgstr "Pikselden Yakala"
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Emission Colors"
-msgstr "Yayma Konumları:"
+msgstr "Emisyon Renkleri"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Node does not contain geometry."
@@ -4129,7 +4197,7 @@ msgstr "Düğüm uzambilgisi (yüzler) içermiyor."
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr ""
+msgstr "Bir işlemci malzeme türü 'ParticlesMaterial' gereklidir."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
@@ -4144,14 +4212,12 @@ msgid "Generate AABB"
msgstr "AABB Üret"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Create Emission Points From Mesh"
-msgstr "Örüntüden Yayıcı Oluştur"
+msgstr "Örüntüden Emisyon Noktaları Oluştur"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Create Emission Points From Node"
-msgstr "Düğümden Yayıcı Oluştur"
+msgstr "Düğümden Emisyon Noktaları Oluştur"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Clear Emitter"
@@ -4162,46 +4228,40 @@ msgid "Create Emitter"
msgstr "Yayıcı Oluştur"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Points:"
-msgstr "Yayma Konumları:"
+msgstr "Emisyon Noktaları:"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Surface Points"
-msgstr "Yüzey %d"
+msgstr "Yüzey Noktaları"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points+Normal (Directed)"
-msgstr ""
+msgstr "Yüzey Noktaları+Normal (Yönlendirilmiş)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
msgstr "Oylum"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source: "
-msgstr "Yayma Dolumu:"
+msgstr "Emisyon Kaynağı: "
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Generate Visibility AABB"
-msgstr "AABB Üret"
+msgstr "Görünebilirlik AABB'si Üret"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Noktayı Eğriden Kaldır"
#: editor/plugins/path_2d_editor_plugin.cpp
-#, fuzzy
msgid "Remove Out-Control from Curve"
-msgstr "Eğriye Denetimsiz Taşı"
+msgstr "Çıkış-Kontrolünü Eğriden Kaldır"
#: editor/plugins/path_2d_editor_plugin.cpp
-#, fuzzy
msgid "Remove In-Control from Curve"
-msgstr "Noktayı Eğriden Kaldır"
+msgstr "Giriş-Kontrolünü Eğriden Kaldır"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -4221,35 +4281,62 @@ msgid "Move Out-Control in Curve"
msgstr "Eğriye Denetimsiz Taşı"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Noktaları Seç"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift + Sürükle: Denetim Noktalarını Seç"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Tıkla: Nokta Ekle"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Sağ tıkla: Nokta Sil"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "Denetim Noktalarını Seç (Shift + Sürükle)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Nokta Ekle (boÅŸlukta)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Parçayı Ayır (eğriye göre)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Noktayı Sil"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "EÄŸriyi Kapat"
#: editor/plugins/path_editor_plugin.cpp
msgid "Curve Point #"
-msgstr "EÄŸrisel Nokta #"
+msgstr "Eğri Noktası #"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Point Position"
msgstr "Eğri Noktası Konumu Ayarla"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve In Position"
msgstr "EÄŸriyi Konumda Ayarla"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Out Position"
msgstr "Eğri Çıkış Konumunu Ayarla"
@@ -4262,14 +4349,12 @@ msgid "Remove Path Point"
msgstr "Yol Noktasını Kaldır"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Remove Out-Control Point"
-msgstr "Eğriye Denetimsiz Taşı"
+msgstr "Çıkış-Kontrol Noktasını Kaldır"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Remove In-Control Point"
-msgstr "Eğriye Denetimli Taşı"
+msgstr "Giriş-Kontrol Noktasını Kaldır"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
@@ -4372,26 +4457,26 @@ msgstr "Kaynak Yükle"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
msgstr "Yapıştır"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Clear Recent Files"
-msgstr "Kemikleri Temizle"
+msgstr "En Son Dosyaları Temizle"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
"Close and save changes?\n"
"\""
msgstr ""
+"Kapa ve deÄŸiÅŸiklikleri kaydet?\n"
+"\""
#: editor/plugins/script_editor_plugin.cpp
msgid "Error while saving theme"
-msgstr "Kalıp kaydedilirken sorun oluştu"
+msgstr "Tema kaydedilirken sorun oluÅŸtu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error saving"
@@ -4399,7 +4484,7 @@ msgstr "Kaydetme sorunu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error importing theme"
-msgstr "Kalıp içe aktarılırken sorun oluştu"
+msgstr "Tema içe aktarılırken sorun oluştu"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error importing"
@@ -4411,11 +4496,25 @@ msgstr "Kalıbı İçe Aktar"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As.."
-msgstr "Kalıbı Başkaca Kaydet.."
+msgstr "Temayı Farklı Kaydet.."
#: editor/plugins/script_editor_plugin.cpp
msgid " Class Reference"
-msgstr ""
+msgstr " Sınıf Referansı"
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr "Sırala"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Yukarı Taşı"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Aşağı Taşı"
#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
@@ -4427,7 +4526,7 @@ msgstr "Önceki betik"
#: editor/plugins/script_editor_plugin.cpp
msgid "File"
-msgstr "Dizeç"
+msgstr "Dosya"
#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
msgid "New"
@@ -4459,7 +4558,7 @@ msgstr "Kalıbı Kaydet"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As"
-msgstr "Kalıbı Başkaca Kaydet"
+msgstr "Temayı Farklı Kaydet"
#: editor/plugins/script_editor_plugin.cpp
msgid "Close Docs"
@@ -4469,24 +4568,25 @@ msgstr "Belgeleri Kapat"
msgid "Close All"
msgstr "Tümünü Kapat"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "DiÄŸer Sekmeleri Kapat"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "Çalıştır"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Scripts Panel"
-msgstr "Beğenileni Aç / Kapat"
+msgstr "Betikler Panelini Aç/Kapa"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "Bul.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "Sonraki Bul"
@@ -4509,17 +4609,15 @@ msgstr "Devam Et"
#: editor/plugins/script_editor_plugin.cpp
msgid "Keep Debugger Open"
-msgstr "Kusurayıkları Açık Tut"
+msgstr "Hata Ayıklayıcıyı Açık Tut"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Debug with external editor"
-msgstr "Düzenleyicide Aç"
+msgstr "Harici düzenleyici ile hata ayıkla"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Open Godot online documentation"
-msgstr "BaÅŸvuru belgelerinde arama yap."
+msgstr "Çevrimiçi Godot dökümanlarını aç"
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the class hierarchy."
@@ -4538,9 +4636,8 @@ msgid "Go to next edited document."
msgstr "Düzenlenmiş bir sonraki belgeye git."
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Discard"
-msgstr "Ayrık"
+msgstr "Çıkart"
#: editor/plugins/script_editor_plugin.cpp
msgid "Create Script"
@@ -4551,7 +4648,7 @@ msgid ""
"The following files are newer on disk.\n"
"What action should be taken?:"
msgstr ""
-"Aşağıdaki dizeçler saklakta daha yeni.\n"
+"Aşağıdaki dosyalar diskte daha yeni.\n"
"Hangi eylem yapılsın?:"
#: editor/plugins/script_editor_plugin.cpp
@@ -4564,71 +4661,58 @@ msgstr "Yeniden Kaydet"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Debugger"
-msgstr "Kusurayıklar"
+msgstr "Hata Ayıklayıcı"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
"Built-in scripts can only be edited when the scene they belong to is loaded"
msgstr ""
-"Gömülü betik dizeçleri yalnızca ait oldukları sahne yüklendiğinde "
+"Gömülü betik dosyaları yalnızca ait oldukları sahne yüklendiğinde "
"düzenlenebilirler"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
-msgstr ""
+msgstr "Sadece dosya sisteminden kaynaklar bırakılabilir."
#: editor/plugins/script_text_editor.cpp
msgid "Pick Color"
msgstr "Renk Seç"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Convert Case"
-msgstr "Bedizleri Dönüştürüyor"
+msgstr "Büyük/Küçük Harf Dönüştür"
#: editor/plugins/script_text_editor.cpp
msgid "Uppercase"
-msgstr ""
+msgstr "Büyük harf"
#: editor/plugins/script_text_editor.cpp
msgid "Lowercase"
-msgstr ""
+msgstr "Küçük harf"
#: editor/plugins/script_text_editor.cpp
msgid "Capitalize"
-msgstr ""
+msgstr "Büyük harfe çevirme"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "Kes"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "Tıpkıla"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "Hepsini seç"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "Yukarı Taşı"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "Aşağı Taşı"
-
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Delete Line"
-msgstr "Noktayı Sil"
+msgstr "Satırı Sil"
#: editor/plugins/script_text_editor.cpp
msgid "Indent Left"
@@ -4647,6 +4731,22 @@ msgid "Clone Down"
msgstr "Aşağıya Eşle"
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr "Satırı Katla"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "Satırı Genişlet"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "Tüm Satırları Daralt"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "Tüm Satırları Genişlet"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "Simgeyi Tamamla"
@@ -4656,11 +4756,11 @@ msgstr "İzleyenin Boşluklarını Kırp"
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent To Spaces"
-msgstr ""
+msgstr "Girintileri Boşluklara Dönüştür"
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent To Tabs"
-msgstr ""
+msgstr "Girintileri Sekmelere Dönüştür"
#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
@@ -4684,22 +4784,18 @@ msgid "Goto Previous Breakpoint"
msgstr "Önceki Kesme Noktasına Git"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Convert To Uppercase"
-msgstr "Şuna Dönüştür.."
+msgstr "Büyük Harfe Dönüştür"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Convert To Lowercase"
-msgstr "Şuna Dönüştür.."
+msgstr "Küçük Harfe Dönüştür"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "Öncekini Bul"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "DeÄŸiÅŸtir.."
@@ -4708,7 +4804,6 @@ msgid "Goto Function.."
msgstr "İşleve Git.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "Dizeye Git.."
@@ -4718,7 +4813,7 @@ msgstr "Bağlamsal Yardım"
#: editor/plugins/shader_editor_plugin.cpp
msgid "Shader"
-msgstr ""
+msgstr "Gölgelendirici"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Constant"
@@ -4826,7 +4921,7 @@ msgstr "Gölgelendirici Çizge Düğümünü Taşı"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Duplicate Graph Node(s)"
-msgstr "Çizge Düğüm(lerini) İkile"
+msgstr "Çizge Düğüm(lerini) Çoğalt"
#: editor/plugins/shader_graph_editor_plugin.cpp
msgid "Delete Shader Graph Node(s)"
@@ -4873,6 +4968,14 @@ msgid "View Plane Transform."
msgstr "Düzlem Dönüşümünü Görüntüle."
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "Ölçekleniyor: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr "Çeviriliyor: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "%s Düzey Dönüyor."
@@ -4922,39 +5025,39 @@ msgstr "SaÄŸ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Keying is disabled (no key inserted)."
-msgstr "Açar ekleme devre dışı (eklenmiş açar yok)."
+msgstr "Anahtar ekleme devre dışı (eklenmiş anahtar yok)."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Animation Key Inserted."
-msgstr "Canlandırma Açarı Eklendi."
+msgstr "Animasyon Anahtarı Eklendi."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn"
-msgstr ""
+msgstr "Çizilmiş Nesneler"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes"
-msgstr "Değişiklikleri güncelle"
+msgstr "Materyal DeÄŸiÅŸiklikleri"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes"
-msgstr "Değişiklikleri güncelle"
+msgstr "Shader DeÄŸiÅŸiklikleri"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes"
-msgstr "Değişiklikleri güncelle"
+msgstr "Yüzey Değişiklikleri"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Draw Calls"
-msgstr ""
+msgstr "Çizim Çağrıları"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices"
-msgstr "BaÅŸucu"
+msgstr "Köşenoktalar"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
@@ -4973,85 +5076,86 @@ msgid "Display Overdraw"
msgstr "Abartı Görüntüle"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Display Unshaded"
msgstr "Gölgesiz Görüntüle"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Environment"
-msgstr "Çevre"
+msgstr "Ortamı Göster"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Gizmos"
-msgstr "Zımbırtılar"
+msgstr "Gizmoları Göster"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Information"
-msgstr ""
+msgstr "Bilgi Göster"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "FPS'yi Göster"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr "Yarım Çözünürlük"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "Ses Dinleyici"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Doppler Enable"
-msgstr "Etkin"
+msgstr "Çoğaltıcı Aktif"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
-msgstr ""
+msgstr "Serbestbakış Sola"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Right"
-msgstr ""
+msgstr "Serbestbakış Sağa"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Forward"
-msgstr "İleri Git"
+msgstr "Serbestbakış İleri"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Backwards"
-msgstr "Terse doÄŸru"
+msgstr "Serbestbakış Geriye"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Up"
-msgstr ""
+msgstr "Serbestbakış Yukarı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Down"
-msgstr "Tekerlek Aşağı."
+msgstr "Serbestbakış Aşağı"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Speed Modifier"
-msgstr ""
+msgstr "Serbestbakış Hız Değiştirici"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "preview"
-msgstr "Önizleme"
+msgstr "önizleme"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
msgstr "XForm İletişim Kutusu"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode (Q)\n"
-msgstr "Biçim Seç"
+msgstr "Seçim Kipi (Q)\n"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Drag: Rotate\n"
"Alt+Drag: Move\n"
"Alt+RMB: Depth list selection"
-msgstr "Alt + RMB: Derin dizelge seçimi"
+msgstr ""
+"Sürükle: Döndür\n"
+"Alt+Sürükle: Taşı\n"
+"Alt+RMB: Derin liste seçimi"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Move Mode (W)"
@@ -5095,7 +5199,7 @@ msgstr "Derinlik / Dikey Görünüme Değiştir"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Insert Animation Key"
-msgstr "Canlandırma Açarı Ekle"
+msgstr "Animasyon Anahtarı Ekle"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Focus Origin"
@@ -5110,24 +5214,24 @@ msgid "Align Selection With View"
msgstr "Seçimi Görünüme Ayarla"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Tool Select"
-msgstr "Seç"
+msgstr "Seçim Aracı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Tool Move"
-msgstr "Taşı"
+msgstr "Taşıma Aracı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Tool Rotate"
-msgstr "Ctrl: Döndür"
+msgstr "Döndürme Aracı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Tool Scale"
-msgstr "Ölçekle:"
+msgstr "Ölçek Aracı"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr "Serbestbakış Aç / Kapat"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
@@ -5139,7 +5243,7 @@ msgstr "Yapışmayı Yapılandır.."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Local Coords"
-msgstr "Yerel Konaçlar"
+msgstr "Yerel Koordlar"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Dialog.."
@@ -5264,11 +5368,11 @@ msgstr "BoÅŸ Ekle"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation Loop"
-msgstr "Canlandırma Döngüsünü Değiştir"
+msgstr "Animasyon Döngüsünü Değiştir"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation FPS"
-msgstr "Canlandırma FPS'sini Değiştir"
+msgstr "Animasyon FPS'sini DeÄŸiÅŸtir"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "(empty)"
@@ -5276,7 +5380,7 @@ msgstr "(boÅŸ)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animations"
-msgstr "Canlandırmalar"
+msgstr "Animasyonlar"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed (FPS):"
@@ -5288,7 +5392,7 @@ msgstr "Döngü"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animation Frames"
-msgstr "Canlandırma Çerçeveleri"
+msgstr "Animasyon Çerçeveleri"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
@@ -5299,23 +5403,20 @@ msgid "Insert Empty (After)"
msgstr "BoÅŸ Ekle (Sonra)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (Before)"
-msgstr "Düğümleri Kaldır"
+msgstr "Taşı (Önce)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (After)"
-msgstr "Sola Taşı"
+msgstr "Taşı (Sonra)"
#: editor/plugins/style_box_editor_plugin.cpp
msgid "StyleBox Preview:"
msgstr "StyleBox Önizleme:"
#: editor/plugins/texture_region_editor_plugin.cpp
-#, fuzzy
msgid "Set Region Rect"
-msgstr "Doku Bölgesi"
+msgstr "Dikdörtgen Bölgesini Ayarla"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Snap Mode:"
@@ -5359,7 +5460,7 @@ msgstr "Doku Bölgesi Düzenleyicisi"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Can't save theme to file:"
-msgstr "Kalıbı dizece kaydedemiyoruz:"
+msgstr "Tema dosyaya kaydedilemiyor:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add All Items"
@@ -5375,22 +5476,20 @@ msgid "Remove Item"
msgstr "Öğeyi Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Items"
-msgstr "Bölüt Öğelerini Kaldır"
+msgstr "Bütün Öğeleri Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All"
-msgstr "Kaldır"
+msgstr "Tümünü Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "Tema düzenle.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "Tema düzenleme menüsü."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5402,13 +5501,17 @@ msgstr "Bölüt Öğelerini Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Template"
-msgstr "Boş Kalıp Oluştur"
+msgstr "BoÅŸ Åžablon OluÅŸtur"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
msgstr "Boş Düzenleyici Kalıbı Oluştur"
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr "Mevcut Düzenleyici Temasından Oluştur"
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr "OnayKutusu Radyo1"
@@ -5482,7 +5585,6 @@ msgid "Color"
msgstr "Renk"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Erase Selection"
msgstr "Seçimi Sil"
@@ -5491,18 +5593,16 @@ msgid "Paint TileMap"
msgstr "TileMap'i Boya"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Line Draw"
-msgstr "DoÄŸrusal"
+msgstr "Çizgi Çizimi"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rectangle Paint"
-msgstr ""
+msgstr "Dikdörtgen Boya"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Bucket Fill"
-msgstr "Kova"
+msgstr "Doldurma Kovası"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase TileMap"
@@ -5529,9 +5629,8 @@ msgid "Mirror Y"
msgstr "Y'ye Aynala"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Paint Tile"
-msgstr "TileMap'i Boya"
+msgstr "Karo Boya"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -5582,28 +5681,24 @@ msgid "Error"
msgstr "Sorun"
#: editor/project_export.cpp
-#, fuzzy
msgid "Runnable"
-msgstr "Etkin"
+msgstr "KoÅŸturulabilir"
#: editor/project_export.cpp
-#, fuzzy
-msgid "Delete patch '"
-msgstr "GiriÅŸi Sil"
+msgid "Delete patch '%s' from list?"
+msgstr "'%s' yaması listeden silinsin mi?"
#: editor/project_export.cpp
-#, fuzzy
msgid "Delete preset '%s'?"
-msgstr "Seçili dizeçleri sil?"
+msgstr "'%s' önayarı silinsin mi?"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted: "
-msgstr ""
+msgstr "Bu platform için dışa aktarma şablonları eksik/bozulmuş: "
#: editor/project_export.cpp
-#, fuzzy
msgid "Presets"
-msgstr "Ön ayar.."
+msgstr "Önayarlar"
#: editor/project_export.cpp editor/project_settings_editor.cpp
msgid "Add.."
@@ -5614,179 +5709,162 @@ msgid "Resources"
msgstr "Kaynaklar"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export all resources in the project"
-msgstr "Tasarıdaki tüm kaynakları dışa aktarın."
+msgstr "Projedeki tüm kaynakları dışa aktarın"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export selected scenes (and dependencies)"
-msgstr "Seçilen kaynakları dışa aktar (bağımlılıklar dahil)."
+msgstr "Seçilen kaynakları dışa aktar (bağımlılıklar dahil)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export selected resources (and dependencies)"
-msgstr "Seçilen kaynakları dışa aktar (bağımlılıklar dahil)."
+msgstr "Seçilen kaynakları dışa aktar (bağımlılıklar dahil)"
#: editor/project_export.cpp
msgid "Export Mode:"
msgstr "Dışa Aktarma Biçimi:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Resources to export:"
-msgstr "Dışa Aktarılacak Kaynaklar:"
+msgstr "Dışa aktarılacak kaynaklar:"
#: editor/project_export.cpp
-#, fuzzy
msgid ""
"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
msgstr ""
-"Kaynak olmayan dizeçleri dışa aktarmak için kullanılan süzgeçler (virgülle "
-"ayrılmış, ör. * .json, * .txt):"
+"Kaynak olmayan dosyaları dışa aktarmak için kullanılan süzgeçler (virgülle "
+"ayrılmış, ör. * .json, * .txt)"
#: editor/project_export.cpp
-#, fuzzy
msgid ""
"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
msgstr ""
"Dışa aktarma işleminden hariç tutulacak süzgeçler (virgülle ayrılmış, ör. * ."
-"json, * .txt):"
+"json, * .txt)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Patches"
-msgstr "EÅŸleÅŸmeler:"
+msgstr "Yamalar"
#: editor/project_export.cpp
-#, fuzzy
msgid "Make Patch"
-msgstr "Amaçlanan Dizeç Yolu :"
+msgstr "Yama Yap"
#: editor/project_export.cpp
-#, fuzzy
msgid "Features"
-msgstr "Doku"
+msgstr "Özellikler"
#: editor/project_export.cpp
msgid "Custom (comma-separated):"
-msgstr ""
+msgstr "Özel (virgülle-ayrılmış):"
#: editor/project_export.cpp
-#, fuzzy
msgid "Feature List:"
-msgstr "Yöntem Dizelgesi:"
+msgstr "Özellik Listesi:"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
-msgstr "PCK/Zip Dizecini Dışa Aktar"
+msgstr "PCK/Zip Dışa Aktar"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
-msgstr ""
+msgstr "Bu platform için dışa aktarma şablonu eksik:"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
+msgstr "Bu platform için dışa aktarma şablonu eksik/bozuk:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export With Debug"
-msgstr "Döşenti Dizi Dışa Aktar"
+msgstr "Hata Ayıklama İle Dışa Aktar"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "Dizeç yok."
+msgstr "Yol mevcut deÄŸil."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Please choose a 'project.godot' file."
-msgstr "Lütfen tasarı dizininin dışına aktarın!"
+msgstr "Lütfen bir 'proje.godot' dosyası seçin."
#: editor/project_manager.cpp
msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
msgstr ""
+"Projen boş olmayan bir klasörde oluşturulacak (yeni bir klasör oluşturmak "
+"isteyebilirsin)."
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
-msgstr ""
+msgstr "Lütfen 'proje.godot' dosyası içermeyen bir klasör seçin."
#: editor/project_manager.cpp
msgid "Imported Project"
-msgstr "İçe Aktarılan Tasarı"
+msgstr "İçe Aktarılan Proje"
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "Projenizi isimlendirmek iyi bir fikir olabilir."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
-msgstr "Geçersiz tasarı yolu (bir şey değişti mi?)."
+msgstr "Geçersiz proje yolu (bir şey değişti mi?)."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in project path."
-msgstr "engine.cfg tasarı yolunda oluşturulamadı."
+msgstr "Proje yolunda proje.godot alınamadı."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't edit project.godot in project path."
-msgstr "engine.cfg tasarı yolunda oluşturulamadı."
+msgstr "proje yolundaki proje.godot düzenlenemedi."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't create project.godot in project path."
-msgstr "engine.cfg tasarı yolunda oluşturulamadı."
+msgstr "proje.godot proje yolunda oluşturulamadı."
#: editor/project_manager.cpp
msgid "The following files failed extraction from package:"
-msgstr "Aşağıdaki dizeçlerin, çıkından ayıklanma işlemi başarısız oldu:"
+msgstr "Aşağıdaki dosyaların, çıkından ayıklanma işlemi başarısız oldu:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "Adsız Tasarı"
+msgstr "Projeyi Yeniden Adlandır"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in the project path."
-msgstr "engine.cfg tasarı yolunda oluşturulamadı."
+msgstr "Proje yolunda proje.godot alınamadı."
#: editor/project_manager.cpp
msgid "New Game Project"
-msgstr "Yeni Oyun Tasarısı"
+msgstr "Yeni Oyun Projesi"
#: editor/project_manager.cpp
msgid "Import Existing Project"
-msgstr "Var olan Tasarıyı İçe Aktar"
+msgstr "Var Olan Projeyi İçe Aktar"
#: editor/project_manager.cpp
msgid "Create New Project"
-msgstr "Yeni Tasarı Oluştur"
+msgstr "Yeni Proje OluÅŸtur"
#: editor/project_manager.cpp
msgid "Install Project:"
-msgstr "Tasarıyı Kur:"
+msgstr "Projeyi Kur:"
#: editor/project_manager.cpp
msgid "Project Name:"
-msgstr "Tasarı Adı:"
+msgstr "Proje Adı:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
-msgstr "Dizin OluÅŸtur"
+msgstr "Klasöre Oluştur"
#: editor/project_manager.cpp
msgid "Project Path:"
-msgstr "Tasarı Yolu:"
+msgstr "Proje Yolu:"
#: editor/project_manager.cpp
msgid "Browse"
@@ -5798,60 +5876,62 @@ msgstr "YaÅŸa BE!"
#: editor/project_manager.cpp
msgid "Unnamed Project"
-msgstr "Adsız Tasarı"
+msgstr "Adsız Proje"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "Bağlanamadı."
+msgstr "Proje Açılamadı"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
-msgstr "Birden fazla tasarı açmakta kararlı mısınız?"
+msgstr "Birden fazla proje açmakta kararlı mısınız?"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"Can't run project: no main scene defined.\n"
"Please edit the project and set the main scene in \"Project Settings\" under "
"the \"Application\" category."
msgstr ""
-"Hiçbir ana sahne tanımlanmadı, birini seçiniz?\n"
-"Daha sonra \"uygulama\" kategorisinin altındaki \"Tasarı Ayarları\" ndan "
-"deÄŸiÅŸtirebilirsiniz."
+"Proje çalıştırılamadı: tanımlanmış ana sahne yok.\n"
+"Lütfen projeyi düzenleyin ve \"Uygulama\" kategorisi altındaki \"Proje "
+"Ayarları\" kısmından ana sahneyi belirleyin."
#: editor/project_manager.cpp
msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
+"Proje Çalıştırılamadı: varlıkların içe aktarılmış olması gerekir.\n"
+"Lütfen ilk içe aktarmayı tetiklemek için projeyi düzenleyin."
#: editor/project_manager.cpp
msgid "Are you sure to run more than one project?"
-msgstr "Birden fazla tasarıyı çalıştırmaya kararlı mısınız?"
+msgstr "Birden fazla projeyi çalıştırmaya kararlı mısınız?"
#: editor/project_manager.cpp
msgid "Remove project from the list? (Folder contents will not be modified)"
-msgstr ""
-"Tasarıyı dizelgeden kaldırmak mı istiyorsunuz? (Dizin içeriği değiştirilmez)"
+msgstr "Proje listeden kaldırılsın mı? (Klasör içerikleri değiştirilmeyecek)"
#: editor/project_manager.cpp
msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"Dil deÄŸiÅŸti.\n"
+"Değişiklik düzenleyici veya proje yöneticisi yeniden başladığında etkili "
+"olacak."
#: editor/project_manager.cpp
msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
msgstr ""
-"Var olan Godot tasarıları için %s dizin taraması yapıyorsunuz. Onaylıyor "
+"Var olan Godot projeleri için %s dizin taraması yapıyorsunuz. Onaylıyor "
"musunuz?"
#: editor/project_manager.cpp
msgid "Project List"
-msgstr "Tasarı Dizelgesi"
+msgstr "Proje Listesi"
#: editor/project_manager.cpp
msgid "Scan"
@@ -5863,26 +5943,29 @@ msgstr "Tarama için bir Dizin Seç"
#: editor/project_manager.cpp
msgid "New Project"
-msgstr "Yeni Tasarı"
+msgstr "Yeni Proje"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Templates"
-msgstr "Öğeyi Kaldır"
+msgstr "Åžablonlar"
#: editor/project_manager.cpp
msgid "Exit"
msgstr "Çık"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "Yeniden BaÅŸlat (sn):"
+msgstr "Åžimdi Yeniden BaÅŸlat"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't run project"
-msgstr "Bağlanamadı."
+msgstr "Proje çalıştırılamadı"
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -5910,17 +5993,13 @@ msgstr "İşlem '%s' zaten var!"
#: editor/project_settings_editor.cpp
msgid "Rename Input Action Event"
-msgstr "Giriş İşlem Olayını Yeniden Adlandır"
+msgstr "Girdi Eylem Olayını Yeniden Adlandır"
#: editor/project_settings_editor.cpp
msgid "Add Input Action Event"
msgstr "Giriş İşlem Olayı Ekle"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5982,18 +6061,16 @@ msgid "Change"
msgstr "DeÄŸiÅŸtir"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Joypad Axis Index:"
-msgstr "Oyunçubuğu Ekseni Dizini:"
+msgstr "Oyun kolu Ekseni İndeksi:"
#: editor/project_settings_editor.cpp
msgid "Axis"
msgstr "Eksen"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Joypad Button Index:"
-msgstr "Oyunçubuğu Düğme Dizini:"
+msgstr "Oyun kolu Düğme İndeksi:"
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
@@ -6004,9 +6081,8 @@ msgid "Erase Input Action Event"
msgstr "Giriş Eylemi Olayını Sil"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add Event"
-msgstr "BoÅŸ Ekle"
+msgstr "Olay Ekle"
#: editor/project_settings_editor.cpp
msgid "Device"
@@ -6037,38 +6113,32 @@ msgid "Wheel Down."
msgstr "Tekerlek Aşağı."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add Global Property"
-msgstr "Alıcı Özellik Ekle"
+msgstr "Global Özellik Ekle"
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
-msgstr ""
+msgstr "Önce bir ayar öğesi seçin!"
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "No property '"
-msgstr "Özellik:"
+msgid "No property '%s' exists."
+msgstr "'%s' özelliği mevcut değil."
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "Ayarlar"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "Ayar '%s' dahilidir silinemez."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Delete Item"
-msgstr "GiriÅŸi Sil"
+msgstr "Öğeyi Sil"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "Ana makineye bağlanılamadı:"
+msgstr "'/' veya ':' içeremez"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Already existing"
-msgstr "Sürdürmeyi Aç/Kapat"
+msgstr "Zaten mevcut"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -6080,7 +6150,7 @@ msgstr "Ayarlar kaydedildi TAMAM."
#: editor/project_settings_editor.cpp
msgid "Override for Feature"
-msgstr ""
+msgstr "Özelliğin Üzerine Yaz"
#: editor/project_settings_editor.cpp
msgid "Add Translation"
@@ -6111,18 +6181,16 @@ msgid "Remove Resource Remap Option"
msgstr "Kaynak Yeniden Eşle Seçeneğini Kaldır"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Karışım Süresini Değiştir"
+msgstr "Değiştirilen Yerel Süzgeç"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Değiştirilmiş Yerel Süzgeç Kipi"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Project Settings (project.godot)"
-msgstr "Tasarı Ayarları (engine.cfg)"
+msgstr "Proje Ayarları (proje.godot)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -6134,7 +6202,7 @@ msgstr "Özellik:"
#: editor/project_settings_editor.cpp
msgid "Override For.."
-msgstr ""
+msgstr "Şunun Üzerine Yaz.."
#: editor/project_settings_editor.cpp
msgid "Input Map"
@@ -6181,37 +6249,32 @@ msgid "Locale"
msgstr "Yerel"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales Filter"
-msgstr "Bediz Süzgeci:"
+msgstr "Yereller Süzgeci"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show all locales"
-msgstr "Kemikleri Göster"
+msgstr "Tüm yerelleri göster"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "Sadece seçili yerelleri göster"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "Süzgeçler"
+msgstr "Süzgeç kipi:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "Yerel"
+msgstr "Yereller:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
msgstr "KendindenYükle"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Viewport"
-msgstr "1 Görünüm"
+msgstr "Bir Görünüm Seçin"
#: editor/property_editor.cpp
msgid "Ease In"
@@ -6235,7 +6298,7 @@ msgstr "Kararma Açılma"
#: editor/property_editor.cpp
msgid "File.."
-msgstr "Dizeç.."
+msgstr "Dosya.."
#: editor/property_editor.cpp
msgid "Dir.."
@@ -6246,40 +6309,34 @@ msgid "Assign"
msgstr "Ata"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Select Node"
-msgstr "Bir Düğüm Seç"
+msgstr "Düğüm Seç"
#: editor/property_editor.cpp
msgid "New Script"
msgstr "Yeni Betik"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "Kemik Yap"
+msgstr "Benzersiz Yap"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Show in File System"
-msgstr "DizeçDüzeni"
+msgstr "Dosya Sisteminde Göster"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "Şuna Dönüştür.."
+msgstr "Şuna Dönüştür %s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
-msgstr "Dizeç yüklenirken sorun oluştu: Bir kaynak değil!"
+msgstr "Dosya yüklenirken sorun oluştu: Bir kaynak değil!"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Selected node is not a Viewport!"
-msgstr "Düğüm(leri) içe Aktarmak için Seç"
+msgstr "Seçili düğüm bir Görüntükapısı değil!"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Pick a Node"
msgstr "Bir Düğüm Seç"
@@ -6293,7 +6350,7 @@ msgstr "Açık"
#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
msgid "Set"
-msgstr "Ata"
+msgstr "Ayarla"
#: editor/property_editor.cpp
msgid "Properties:"
@@ -6308,9 +6365,8 @@ msgid "Select Property"
msgstr "Nitelik Seç"
#: editor/property_selector.cpp
-#, fuzzy
msgid "Select Virtual Method"
-msgstr "Yöntem Seç"
+msgstr "Sanal Metod Seç"
#: editor/property_selector.cpp
msgid "Select Method"
@@ -6326,11 +6382,11 @@ msgstr "PVRTC aracını kullanarak dönüştürülen bedizi geri yükleyemiyor:"
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent Node"
-msgstr "Yeniden Ata Düğümü"
+msgstr "Düğümün Ebeveynliğini Değiştir"
#: editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr "Yeniden Ata Konumu (Yeni Ata Seç):"
+msgstr "Ebeveynlik Değiştirme Konumu (Yeni Ebeveyn Seç):"
#: editor/reparent_dialog.cpp
msgid "Keep Global Transform"
@@ -6338,11 +6394,11 @@ msgstr "Bütünsel Dönüşümü Tut"
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent"
-msgstr "Yeniden Ata Yap"
+msgstr "Ebeveynlik DeÄŸiÅŸtir"
#: editor/run_settings_dialog.cpp
msgid "Run Mode:"
-msgstr "Çalışma Biçimi:"
+msgstr "Çalışma Kipi:"
#: editor/run_settings_dialog.cpp
msgid "Current Scene"
@@ -6367,7 +6423,7 @@ msgstr "Tamam"
#: editor/scene_tree_dock.cpp
msgid "No parent to instance the scenes at."
-msgstr "Sahneleri örneklemek için ata yok."
+msgstr "Sahneleri örneklemek için ebeveyn yok."
#: editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
@@ -6403,7 +6459,7 @@ msgstr "Düğümleri Ataya Taşı"
#: editor/scene_tree_dock.cpp
msgid "Duplicate Node(s)"
-msgstr "İkile Düğüm(leri)"
+msgstr "Çoğalt Düğüm(leri)"
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)?"
@@ -6411,7 +6467,7 @@ msgstr "Düğüm(ler) Silinsin mi?"
#: editor/scene_tree_dock.cpp
msgid "Can not perform with the root node."
-msgstr ""
+msgstr "Kök düğüm ile gerçekleştirilemez."
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
@@ -6419,7 +6475,7 @@ msgstr "Bu işlem örneklenmiş sahnelerde yapılamaz."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As.."
-msgstr "Yeni Sahneyi BaÅŸkaca Kaydet .."
+msgstr "Yeni Sahneyi Farklı Kaydet .."
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
@@ -6462,12 +6518,11 @@ msgstr "Sahne kaydedilirken sorun oluÅŸtu."
#: editor/scene_tree_dock.cpp
msgid "Error duplicating scene to save it."
-msgstr "Kaydetmek için sahne ikilenirken sorun oluştu."
+msgstr "Kaydetmek için sahne çoğaltılırken sorun oluştu."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Sub-Resources:"
-msgstr "Kaynaklar:"
+msgstr "Alt Kaynaklar:"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
@@ -6510,9 +6565,8 @@ msgid "Save Branch as Scene"
msgstr "Dalı Sahne olarak Kaydet"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Copy Node Path"
-msgstr "Dizeç Yolunu Tıpkıla"
+msgstr "Düğüm Yolunu Kopyala"
#: editor/scene_tree_dock.cpp
msgid "Delete (No Confirm)"
@@ -6527,13 +6581,12 @@ msgid ""
"Instance a scene file as a Node. Creates an inherited scene if no root node "
"exists."
msgstr ""
-"Sahne dizecini Düğüm olarak örneklendirin. Kök düğüm yoksa kalıtsal bir "
+"Sahne dosyasıni Düğüm olarak örneklendirin. Kök düğüm yoksa kalıtsal bir "
"sahne oluÅŸturur."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Filter nodes"
-msgstr "Süzgeçler"
+msgstr "Düğümleri Süzgeçden Geçir"
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script for the selected node."
@@ -6544,6 +6597,14 @@ msgid "Clear a script for the selected node."
msgstr "Seçilen düğüm için betik temizle."
#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr "Uzak"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr "Yerel"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "Kalıt Silinsin mi? (Geri Alınamaz!)"
@@ -6561,55 +6622,63 @@ msgstr "CanvasItem'ı Görünür Duruma Getir"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
-msgstr ""
+msgstr "Düğüm yapılandırma uyarısı:"
#: editor/scene_tree_editor.cpp
msgid ""
"Node has connection(s) and group(s)\n"
"Click to show signals dock."
msgstr ""
+"Düğüm bağlantı(lar) ve grup(lar)a sahip\n"
+"Sinyaller dokunu göstermek için tıkla."
#: editor/scene_tree_editor.cpp
msgid ""
"Node has connections.\n"
"Click to show signals dock."
msgstr ""
+"Düğüm bağlantılara sahip.\n"
+"Sinyaller dokunu göstermek için tıkla."
#: editor/scene_tree_editor.cpp
msgid ""
"Node is in group(s).\n"
"Click to show groups dock."
msgstr ""
+"Düğüm grup(lar)ın içinde.\n"
+"Gruplar dokunu göstermek için tıkla."
#: editor/scene_tree_editor.cpp
msgid "Instance:"
msgstr "Örnek:"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Open script"
-msgstr "Sonraki betik"
+msgstr "Betik Aç"
#: editor/scene_tree_editor.cpp
msgid ""
"Node is locked.\n"
"Click to unlock"
msgstr ""
+"Düğüm kilitli.\n"
+"Kiliti açmak için tıkla"
#: editor/scene_tree_editor.cpp
msgid ""
"Children are not selectable.\n"
"Click to make selectable"
msgstr ""
+"Çocuklar seçilebilir değil.\n"
+"Seçilebilir yapmak için tıkla"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Toggle Visibility"
-msgstr "Uzaysal Görünürlüğü Aç / Kapat"
+msgstr "Görünebilirliği Aç/Kapa"
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
-msgstr "Geçersiz düğüm adı, aşağıdaki damgalara izin verilmiyor:"
+msgstr "Geçersiz düğüm adı, aşağıdaki karakterlere izin verilmiyor:"
#: editor/scene_tree_editor.cpp
msgid "Rename Node"
@@ -6621,21 +6690,19 @@ msgstr "Sahne Ağacı (Düğümler):"
#: editor/scene_tree_editor.cpp
msgid "Node Configuration Warning!"
-msgstr ""
+msgstr "Düğüm Yapılandırma Uyarısı!"
#: editor/scene_tree_editor.cpp
msgid "Select a Node"
msgstr "Bir Düğüm Seç"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading template '%s'"
-msgstr "Bediz yüklenirken sorun oluştu:"
+msgstr "Şablon '%s' yüklenirken hata"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error - Could not create script in filesystem."
-msgstr "Dizeç düzeninde betik oluşturulamadı."
+msgstr "Hata - dosyasisteminde betik oluşturulamadı."
#: editor/script_create_dialog.cpp
msgid "Error loading script from %s"
@@ -6659,12 +6726,11 @@ msgstr "Geçersiz üst yol"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "Aynı isimde dizin zaten var"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, will be reused"
-msgstr "Dizeç var. Üzerine Yazılsın mı?"
+msgstr "Dosya mevcut, yeniden kullanılacak"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6672,66 +6738,57 @@ msgstr "Geçersiz uzantı"
#: editor/script_create_dialog.cpp
msgid "Wrong extension chosen"
-msgstr ""
+msgstr "Yanlış uzantı seçili"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid Path"
-msgstr "Gecersiz Yol."
+msgstr "Geçersiz Yol"
#: editor/script_create_dialog.cpp
msgid "Invalid class name"
msgstr "Geçersiz bölüt adı"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid inherited parent name or path"
-msgstr "Geçersiz dizin özelliği adı."
+msgstr "Geçersiz miras alınmış ebeveyn ismi veya yolu"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script valid"
-msgstr "Betik"
+msgstr "Betik geçerli"
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9 and _"
-msgstr ""
+msgstr "İzin verilenler: a-z, A-Z, 0-9 ve _"
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)"
-msgstr ""
+msgstr "Gömülü betik (sahne dosyasına)"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Create new script file"
-msgstr "Yeni Betik OluÅŸtur"
+msgstr "Yeni betik dosyası oluştur"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Load existing script file"
-msgstr "Var olan betiği yükle"
+msgstr "Mevcut betik dosyasını yükle"
#: editor/script_create_dialog.cpp
msgid "Language"
msgstr "Dil"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Inherits"
-msgstr "Kalıtçılar:"
+msgstr "Miras Alınmışlar"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Class Name"
-msgstr "Bölüt Adı:"
+msgstr "Sınıf İsmi"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Template"
-msgstr "Öğeyi Kaldır"
+msgstr "Åžablon"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Built-in Script"
msgstr "Gömme Betik"
@@ -6740,6 +6797,10 @@ msgid "Attach Node Script"
msgstr "Düğüm Betiği İliştir"
#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr "Uzak "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "Baytlar:"
@@ -6757,11 +6818,11 @@ msgstr "Kaynak:"
#: editor/script_editor_debugger.cpp
msgid "Function:"
-msgstr "İşlev:"
+msgstr "Fonksiyon:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "Grafiği görüntülemek için listeden bir veya daha fazla öğe seçin."
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6796,18 +6857,6 @@ msgid "Stack Trace (if applicable):"
msgstr "İzi Yığ (uygulanabilirse):"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "Dolaylı Denetçi"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "Canlı Sahne Ağacı:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "Dolaylı Nesne Özellikleri: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "Kesitçi"
@@ -6881,7 +6930,7 @@ msgstr "Işın Çapını Değiştir"
#: editor/spatial_editor_gizmos.cpp
msgid "Change AudioStreamPlayer3D Emission Angle"
-msgstr ""
+msgstr "AudioStreamPlayer3D Emisyon Açısı Değişimi"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
@@ -6917,194 +6966,182 @@ msgstr "Bildirim Kapsamını Değiştir"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Particles AABB"
-msgstr ""
+msgstr "Parçacık AABB Değişimi"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "DeÅŸme GeniÅŸlemesini DeÄŸiÅŸtir"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Library"
-msgstr "MeshLibrary .."
+msgstr "Kütüphane"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Status"
-msgstr "Durum:"
+msgstr "Durum"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Kütüphaneler: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDYerel"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
"convert() için geçersiz türde değiştirgen, TYPE_* sabitlerini kullanın."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr "Geçersiz biçem ya da kod çözmek için yetersiz byte sayısı."
+msgstr "Byte kodu çözmek için yetersiz byte, ya da Geçersiz format."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "adım değiştirgeni sıfır!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "Örneği bulunan bir betik değil"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "Bir betiğe bağlı değil"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
-msgstr "Bir kaynak dizecine bağlı değil"
+msgstr "Bir kaynak dosyasıne bağlı değil"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "Geçersiz örnek sözlük biçemi (@path eksik)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "Geçersiz örnek sözlük biçemi (betik @path 'tan yüklenemiyor)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "Geçersiz örnek sözlük biçemi (@path 'taki kod geçersiz)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Geçersiz örnek sözlüğü (geçersiz altbölütler)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
-msgstr ""
+msgstr "Nesne bir uzunluk saÄŸlayamaz."
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Delete Selection"
-msgstr "Seçilenleri Sil"
+msgstr "IzgaraHaritası Seçimi Sil"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Duplicate Selection"
-msgstr "Seçimi İkile"
+msgstr "IzgaraHaritası Seçimi Çoğalt"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr "Zemin:"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr "Izgara Haritası"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Snap View"
-msgstr "Üstten Görünüm"
+msgstr "Yapışma Görünümü"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
-msgstr ""
+msgid "Previous Floor"
+msgstr "Önceki Zemin"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
-msgstr ""
+msgid "Next Floor"
+msgstr "Sonraki Zemin"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Clip Disabled"
-msgstr "Devre dışı"
+msgstr "Klip Devre dışı"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
-msgstr ""
+msgstr "Klip Üzerine"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Below"
-msgstr ""
+msgstr "Klip Altına"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit X Axis"
-msgstr ""
+msgstr "X Eksenini Düzenle"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit Y Axis"
-msgstr ""
+msgstr "Y Eksenini Düzenle"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit Z Axis"
-msgstr ""
+msgstr "Z Eksenini Düzenle"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Cursor Rotate X"
-msgstr "Ctrl: Döndür"
+msgstr "İmleç Döndür X"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Cursor Rotate Y"
-msgstr "Ctrl: Döndür"
+msgstr "İmleç Döndür Y"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Cursor Rotate Z"
-msgstr "Ctrl: Döndür"
+msgstr "İmleç Döndür Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate X"
-msgstr ""
+msgstr "İmleç Geriye Döndür X"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Y"
-msgstr ""
+msgstr "İmleç Geriye Döndür Y"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Z"
-msgstr ""
+msgstr "İmleç Geriye Döndür Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Clear Rotation"
-msgstr ""
+msgstr "İmleç Döndürme Temizle"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Create Area"
-msgstr "Yeni oluÅŸtur"
+msgstr "Alan OluÅŸtur"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Create Exterior Connector"
-msgstr "Yeni Tasarı Oluştur"
+msgstr "Dış Bağlayıcı Oluştur"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Erase Area"
-msgstr "TileMap'i Sil"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "Yalnızca Seçim"
+msgstr "Alanı Sil"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "Yalnızca Seçim"
+msgid "Clear Selection"
+msgstr "Seçimi Temizle"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Settings"
-msgstr "Yapışma Ayarları"
+msgstr "IzgaraHaritası Ayarları"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Pick Distance:"
-msgstr "Örnek:"
+msgstr "Uzaklık Seç:"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
-msgstr ""
+msgstr "İnşalar"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -7119,7 +7156,7 @@ msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
-"Düğüm yerleştirilmiş, fakat çalışan ilk hafızada bir işlev koşulunu "
+"Düğüm yerleştirilmiş, fakat çalışan ilk hafızada bir fonksiyon koşulunu "
"döndüremedi."
#: modules/visual_script/visual_script.cpp
@@ -7143,29 +7180,24 @@ msgid "Stack overflow with stack depth: "
msgstr "Şu derinlikte yığın taşması: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Signal Arguments"
-msgstr "İşaret Değiştirgenlerini Düzenle:"
+msgstr "Sinyal Argümanlarını Değiştir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument Type"
-msgstr "Dizinin türünü degistir"
+msgstr "Argüman Tipini Seğiştir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Argument name"
-msgstr "Giriş Adını Değiştir"
+msgstr "Argüman ismini değiştir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Set Variable Default Value"
-msgstr "Önyüklü Değeri Değiştir"
+msgstr "Değişken Varsayılan Değerini Ayarla"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Set Variable Type"
-msgstr "Değişkeni Düzenle:"
+msgstr "DeÄŸiÅŸken Tipini Ayarla"
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
@@ -7181,7 +7213,7 @@ msgstr "Ad doÄŸru bir belirleyici deÄŸil:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr "Ad zaten başka bir işlev/değişken/işaret tarafından kullanılıyor:"
+msgstr "Ad zaten başka bir fonk/değişken/sinyal tarafından kullanılıyor:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Function"
@@ -7193,11 +7225,11 @@ msgstr "Değişkeni Yeniden Adlandır"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Signal"
-msgstr "İşareti Yeniden Adlandır"
+msgstr "Sinyali Yeniden Adlandır"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Function"
-msgstr "İşlev Ekle"
+msgstr "Fonksiyon Ekle"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
@@ -7205,7 +7237,7 @@ msgstr "DeÄŸiÅŸken Ekle"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Signal"
-msgstr "İşaret Ekle"
+msgstr "Sinyal Ekle"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Expression"
@@ -7216,38 +7248,36 @@ msgid "Add Node"
msgstr "Düğüm Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Nodes"
-msgstr "Geçersiz açarları kaldır"
+msgstr "GörselBetik Düğümlerini Kaldır"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Duplicate VisualScript Nodes"
-msgstr "Çizge Düğüm(lerini) İkile"
+msgstr "GörselBetik Düğümlerini Çoğalt"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Alıcı işlevini bırakmak için Alt'a basılı tutun. Genelgeçer imzayı bırakmak "
-"için Shift'e basılı tutun."
+"Alıcı bırakmak için %s tuşuna basılı tutun. Genel imza bırakmak için Shift'e "
+"basılı tutun."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Alıcı işlevini bırakmak için Ctrl'e basılı tutun. Genelgeçer imzayı bırakmak "
-"için Shift'e basılı tutun."
+"Alıcı bırakmak için Ctrl'e basılı tutun. Genel imza bırakmak için Shift'e "
+"basılı tutun."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "Bir düğüme basit bir başvuru bırakmak için Alt'a basılı tutun."
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "Bir düğüme basit bir referans bırakmak için %s tuşuna basılı tutun."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Bir düğüme basit bir başvuru bırakmak için Ctrl'e basılı tutun."
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "Bir Değişken Atayıcı bırakmak için Alt'a basılı tutun."
+msgid "Hold %s to drop a Variable Setter."
+msgstr "Bir Değişken Atayıcı bırakmak için %s tuşuna basılı tutun."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7270,24 +7300,20 @@ msgid "Add Setter Property"
msgstr "Düzenleyici Özellik Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Base Type"
-msgstr "Türü Değiştir"
+msgstr "Temel Tipi DeÄŸiÅŸtir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Move Node(s)"
-msgstr "Düğümleri Kaldır"
+msgstr "Düğüm(ler) Taşı"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove VisualScript Node"
-msgstr "Gölgelendirici Çizge Düğümünü Kaldır"
+msgstr "GörselBetik Düğümü Kaldır"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Nodes"
-msgstr "Düğüme Bağlan:"
+msgstr "Düğümleri Bağla"
#: modules/visual_script/visual_script_editor.cpp
msgid "Condition"
@@ -7323,49 +7349,43 @@ msgstr "Al"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr ""
+msgstr "Betik zaten '%s' fonksiyonuna sahip"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Input Value"
-msgstr "Giriş Adını Değiştir"
+msgstr "Girdi DeÄŸerini DeÄŸiÅŸtir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Can't copy the function node."
-msgstr "'..' üzerinde çalışılamıyor"
+msgstr "Fonksiyon düğümü kopyalanamıyor."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Clipboard is empty!"
-msgstr "Kaynak bellemi boÅŸ!"
+msgstr "Pano boÅŸ!"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Paste VisualScript Nodes"
-msgstr "Düğümleri Yapıştır"
+msgstr "GörselBetik Düğümleri Yapıştır"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
msgstr "İşlevi Kaldır"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable"
-msgstr "Değişkeni Düzenle:"
+msgstr "Değişkeni Düzenle"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
msgstr "Değişkeni Kaldır"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal"
-msgstr "İşaret Düzenleniyor:"
+msgstr "Sinyal Düzenle"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
-msgstr "İşareti Kaldır"
+msgstr "Sinyal Kaldır"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
@@ -7373,7 +7393,7 @@ msgstr "Değişken Düzenleniyor:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
-msgstr "İşaret Düzenleniyor:"
+msgstr "Sinyal Düzenleniyor:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Base Type:"
@@ -7381,15 +7401,15 @@ msgstr "Taban Türü:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr "Kullanışlı Düğümler:"
+msgstr "Kullanılabilir Düğümler:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr "Çizgeyi düzenlemek için bir işlev seçin ya da oluşturun"
+msgstr "Çizgeyi düzenlemek için bir fonksiyon seçin ya da oluşturun"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr "İşaret Değiştirgenlerini Düzenle:"
+msgstr "Sinyal Değiştirgenlerini Düzenle:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
@@ -7405,7 +7425,7 @@ msgstr "Düğüm Türü Bul"
#: modules/visual_script/visual_script_editor.cpp
msgid "Copy Nodes"
-msgstr "Düğümleri Tıpkıla"
+msgstr "Düğümleri Kopyala"
#: modules/visual_script/visual_script_editor.cpp
msgid "Cut Nodes"
@@ -7472,28 +7492,32 @@ msgstr ""
"(sorunu) olmalı."
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Run in Browser"
-msgstr "Gözat"
+msgstr "Tarayıcıda Çalıştır"
#: platform/javascript/export/export.cpp
msgid "Run exported HTML in the system's default browser."
-msgstr ""
+msgstr "Dışa aktarılmış HTML'yi sistemin varsayılan tarayıcısında çalıştır."
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not write file:\n"
-msgstr "Karo Bulunamadı:"
+msgstr "Dosya yazılamadı:\n"
#: platform/javascript/export/export.cpp
-#, fuzzy
-msgid "Could not read file:\n"
-msgstr "Karo Bulunamadı:"
+msgid "Could not open template for export:\n"
+msgstr "Dışa aktarma için şablon açılamadı:\n"
#: platform/javascript/export/export.cpp
-#, fuzzy
-msgid "Could not open template for export:\n"
-msgstr "Dizin oluşturulamadı."
+msgid "Invalid export template:\n"
+msgstr "Geçersiz Dışa Aktarım Şablonu:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr "Özel HTML çekirdeği okunamadı:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr "Açılış ekranı resim dosyası okunamadı:\n"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -7592,6 +7616,8 @@ msgid ""
"A material to process the particles is not assigned, so no behavior is "
"imprinted."
msgstr ""
+"Parçacıkları işlemek için bir materyal atanmış değil, bu yüzden etki eden "
+"davranış yok."
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
@@ -7604,63 +7630,53 @@ msgid ""
"by the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
+"Fizik motoru çalışıtığında RigidBody2D (karakter veya rigid kipinde) boyut "
+"değişikliği geçersiz kılınacak\n"
+"Değişikliği bunun yerine çocuk çarpışma şekillerinin içinden yapın."
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
"Yol niteliği çalışması için geçerli bir Node2D düğümüne işaret etmelidir."
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Yol niteliği çalışması için geçerli bir Viewport düğümüne işaret etmelidir. "
-"Bu tür Viewport 'işleyici amacı' biçimine ayarlanmalıdır."
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"Bu sprite'ın çalışması için yol niteliğinde ayarlanan Viewport durumu "
-"'işleyici amacı' olarak ayarlanmalıdır."
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
"as parent."
msgstr ""
-"VisibilityEnable2D düğümü düzenlenmiş sahne kökü doğrudan ata olarak "
+"VisibilityEnable2D düğümü düzenlenmiş sahne kökü doğrudan ebeveyn olarak "
"kullanıldığında çalışır."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRCamera must have an ARVROrigin node as its parent"
-msgstr ""
+msgstr "ARVRCamera ebeveyni olarak ARVROrigin düğümüne sahip olmalı"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRController must have an ARVROrigin node as its parent"
-msgstr ""
+msgstr "ARVRController ebeveyni olarak ARVROrigin düğümüne sahip olmalı"
#: scene/3d/arvr_nodes.cpp
msgid ""
"The controller id must not be 0 or this controller will not be bound to an "
"actual controller"
msgstr ""
+"Deneytleyici kimliği 0 olmamalı aksi taktirde bu denetleyici gerçek bir "
+"denetleyiciye bağlı olmayacak"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRAnchor must have an ARVROrigin node as its parent"
-msgstr ""
+msgstr "ARVRAnchor ebeveyni olarak ARVROrigin düğümüne sahip olmalı"
#: scene/3d/arvr_nodes.cpp
msgid ""
"The anchor id must not be 0 or this anchor will not be bound to an actual "
"anchor"
msgstr ""
+"Çapa kimliği 0 olmamalı aksi halde bu çapa gerçek bir çapaya bağlı olmayacak"
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node"
-msgstr ""
+msgstr "ARVROrigin bir ARVRCamera çocuk düğümü gerektirir"
#: scene/3d/collision_polygon.cpp
msgid ""
@@ -7695,6 +7711,14 @@ msgstr ""
"CollisionShape'in çalışması için bir şekil verilmelidir. Lütfen bunun için "
"bir şekil kaynağı oluşturun!"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "Örüntüler Haritalanıyor"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "Haritalama Bitiriliyor"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7713,6 +7737,7 @@ msgstr ""
msgid ""
"Nothing is visible because meshes have not been assigned to draw passes."
msgstr ""
+"Hiçbirşey görünebilir değil çünkü örüntüler çizim geçişlerine atanmış değil."
#: scene/3d/physics_body.cpp
msgid ""
@@ -7720,6 +7745,9 @@ msgid ""
"the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
+"RigidBody boyut deÄŸiÅŸikliÄŸi(karakter yada rigid kipleri) fizik motoru "
+"çalıştığında geçersiz kılınacak.\n"
+"Boyu değişikliğini bunun yerine çocuk çarpışma şekilleri içinden yapın."
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
@@ -7746,15 +7774,16 @@ msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
msgstr ""
+"VehicleWheel VehicleBody'ye bir tekerlek sistemi sağlaması için hizmet eder. "
+"Lütfen bunu VehicleBody'nin çocuğu olarak kullanın."
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Raw Mode"
-msgstr "Kaydırma Biçimi"
+msgstr "Ham Kip"
#: scene/gui/color_picker.cpp
msgid "Add current color as a preset"
-msgstr ""
+msgstr "Şuanki rengi bir önayar olarak kaydet"
#: scene/gui/dialogs.cpp
msgid "Cancel"
@@ -7768,6 +7797,11 @@ msgstr "Uyarı!"
msgid "Please Confirm..."
msgstr "Lütfen Doğrulayın..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "Yöntem Seç"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7784,12 +7818,21 @@ msgid ""
"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
"minimum size manually."
msgstr ""
+"ScrollContainer tek bir çocuk denetimi ile çalışmak için tasarlanmıştır.\n"
+"Bir kapsayıcı (VBox,HBox, vb) veya bir Control'ü çocuk olarak kullanın ve "
+"özel minimum boyutu elle ayarlayın."
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(DiÄŸer)"
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
"> Default Environment) could not be loaded."
msgstr ""
+"Proje Ayarlarında tanımlanmış Varsayılan Ortam (İşleme -> Görüş Alanı -> "
+"Varsayılan Ortam) Yüklenemedi."
#: scene/main/viewport.cpp
msgid ""
@@ -7798,10 +7841,10 @@ msgid ""
"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
"texture to some node for display."
msgstr ""
-"Bu görüntü alanı, işleyici amacı olarak ayarlanmadı. İçeriğini doğrudan "
-"görüntlükte göstermek istiyorsanız, bir Denetimcinin çocuğu olun ve böylece "
-"bir boyut elde edin. Ya da, onu bir RenderTarget yapın ve iç dokusunu "
-"görüntülemesi için bir düğüme atayın."
+"Bu görüntükapısı bir işleyici hedefi olarak ayarlanmamış. Eğer bunu doğrudan "
+"ekran içeriğini görüntülemek için düşünüyorsanız, bir Control'ün çocuğu "
+"yapın böylece bir boyut elde edebilir. Aksi takdirde, Görüntüleme için bunu "
+"bir RenderTarget yap ve dahili dokusunu herhangi bir düğüme ata."
#: scene/resources/dynamic_font.cpp
msgid "Error initializing FreeType."
@@ -7809,15 +7852,75 @@ msgstr "FreeType başlatılırken sorun oluştu."
#: scene/resources/dynamic_font.cpp
msgid "Unknown font format."
-msgstr "Bilinmeyen yazı türü."
+msgstr "Bilinmeyen yazıtipi formatı."
#: scene/resources/dynamic_font.cpp
msgid "Error loading font."
-msgstr "Yazı türü yüklerken sorun oluştu."
+msgstr "Yazıtipi yükleme hatası."
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
-msgstr "Geçersiz yazı türü boyutu."
+msgstr "Geçersiz yazıtipi boyutu."
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "Kaynak:"
+
+#, fuzzy
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "Noktayı Eğriden Kaldır"
+
+#, fuzzy
+#~ msgid "Add Point to Line2D"
+#~ msgstr "Noktayı Eğriye Ekle"
+
+#, fuzzy
+#~ msgid "Move Point in Line2D"
+#~ msgstr "Noktayı Eğriye Taşı"
+
+#, fuzzy
+#~ msgid "Split Segment (in line)"
+#~ msgstr "Parçayı Ayır (eğriye göre)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "Ayarlar"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "Dolaylı Denetçi"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "Canlı Sahne Ağacı:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "Dolaylı Nesne Özellikleri: "
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "Yalnızca Seçim"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "Yalnızca Seçim"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Yol niteliği çalışması için geçerli bir Viewport düğümüne işaret "
+#~ "etmelidir. Bu tür Viewport 'işleyici amacı' biçimine ayarlanmalıdır."
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "Bu sprite'ın çalışması için yol niteliğinde ayarlanan Viewport durumu "
+#~ "'işleyici amacı' olarak ayarlanmalıdır."
#~ msgid "Filter:"
#~ msgstr "Süzgeç:"
@@ -7840,9 +7943,6 @@ msgstr "Geçersiz yazı türü boyutu."
#~ msgid "Removed:"
#~ msgstr "Silinen:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "Atlas kaydedilirken sorun oluÅŸtu:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "Atlas alt dokusu kaydedilemedi:"
@@ -8224,9 +8324,6 @@ msgstr "Geçersiz yazı türü boyutu."
#~ msgid "Cropping Images"
#~ msgstr "Bedizleri Kırpıyor"
-#~ msgid "Blitting Images"
-#~ msgstr "Bedizleri Blitle"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "Atlas bedizi kaydedilemedi:"
@@ -8597,9 +8694,6 @@ msgstr "Geçersiz yazı türü boyutu."
#~ msgid "Save Translatable Strings"
#~ msgstr "Çevirilebilir Metinleri Kaydet"
-#~ msgid "Install Export Templates"
-#~ msgstr "Dışa Aktarım Kalıplarını Yükle"
-
#~ msgid "Edit Script Options"
#~ msgstr "Betik Seçeneklerini Düzenle"
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
new file mode 100644
index 0000000000..2a078b98dd
--- /dev/null
+++ b/editor/translations/uk.po
@@ -0,0 +1,7637 @@
+# Ukrainian translation of the Godot Engine editor
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
+# This file is distributed under the same license as the Godot source code.
+#
+# Aleksandr <XpycT.TOP@gmail.com>, 2017.
+# ÐœÐ°Ñ€Ñ Ð¯Ð¼Ð±Ð°Ñ€ <mjambarmeta@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2017-11-28 20:31+0000\n"
+"Last-Translator: ÐœÐ°Ñ€Ñ Ð¯Ð¼Ð±Ð°Ñ€ <mjambarmeta@gmail.com>\n"
+"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
+"godot/uk/>\n"
+"Language: uk\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 2.18-dev\n"
+
+#: editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Відключено"
+
+#: editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "УÑÑ– вибранні елементи"
+
+#: editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "ПоÑунути ключ"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Змінити перехід"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Змінити положеннÑ"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Змінити значеннÑ"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "Змінити виклик анімації"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Додати нову доріжку"
+
+#: editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Дублювати ключі"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "ПереÑунути доріжку вгору"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "ПереÑунути доріжку вниз"
+
+#: editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Видалити доріжку"
+
+#: editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "Ð’Ñтановити перехід на:"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Перейменувати доріжку"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Змінити інтерполÑцію"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "Змінити режим значень"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Wrap Mode"
+msgstr "Змінити режим циклу"
+
+#: editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Редагувати криву вузла"
+
+#: editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Редагувати обрану криву"
+
+#: editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Видалити ключі"
+
+#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Дублювати виділене"
+
+#: editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "ПереміÑтити дублікат"
+
+#: editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr "Вилучити виділене"
+
+#: editor/animation_editor.cpp
+msgid "Continuous"
+msgstr "Ðевгаваючий"
+
+#: editor/animation_editor.cpp
+msgid "Discrete"
+msgstr "ПереривчаÑтий"
+
+#: editor/animation_editor.cpp
+msgid "Trigger"
+msgstr "Курок"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Додати ключ анімації"
+
+#: editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "ПереміÑтити ключі анімації"
+
+#: editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Вибір маÑштабу"
+
+#: editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "МаÑштаб від курÑору"
+
+#: editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Перейти до наÑтупного кроку"
+
+#: editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "ПовернутиÑÑ Ð´Ð¾ попереднього кроку"
+
+#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr "Лінійний"
+
+#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Сталий"
+
+#: editor/animation_editor.cpp
+msgid "In"
+msgstr "Ð’"
+
+#: editor/animation_editor.cpp
+msgid "Out"
+msgstr "Із"
+
+#: editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "В-із"
+
+#: editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Із-в"
+
+#: editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Переходи"
+
+#: editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Оптимізувати анімацію"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—"
+
+#: editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Створити нову доріжку Ð´Ð»Ñ %s Ñ– вÑтавте ключ?"
+
+#: editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Створити %d нові треки Ñ– вÑтавити ключі?"
+
+#: editor/animation_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Створити"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Створити Ñ– вÑтавити анімацію"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Ð’Ñтавити доріжку Ñ– ключ анімації"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Ð’Ñтавити ключ анімації"
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Змінити довжину анімації"
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Змінити цикл анімації"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "Створити типовий ключ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—"
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Ð’Ñтавити анімацію"
+
+#: editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "МаÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð² анімації"
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "Додати доріжку виклику анімації"
+
+#: editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "МаÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—."
+
+#: editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Довжина (Ñек.):"
+
+#: editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "ТриваліÑть анімації (в Ñекундах)."
+
+#: editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Крок (Ñек.):"
+
+#: editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "Крок прив'Ñзки курÑору (в Ñекундах)."
+
+#: editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "УвімкненнÑ/Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ñ†Ð¸ÐºÐ»Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñƒ анімації."
+
+#: editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Додати нові доріжки."
+
+#: editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— доріжки вгору."
+
+#: editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "ПереміÑтити поточну доріжку вниз."
+
+#: editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Вилучити обрану доріжку."
+
+#: editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "ІнÑтрументи відÑтеженнÑ"
+
+#: editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Дозволити Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾ÐºÑ€ÐµÐ¼Ð¸Ñ… ключів, клацаючи по ним."
+
+#: editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Оптимізатор Ðнімації"
+
+#: editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr "МакÑимальна лінійна похибка:"
+
+#: editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "МакÑ. Кутові похибки:"
+
+#: editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "МакÑимальний оптимізований кут:"
+
+#: editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Оптимізувати"
+
+#: editor/animation_editor.cpp
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr "Виберіть AnimationPlayer з дерева Ñцен Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—."
+
+#: editor/animation_editor.cpp
+msgid "Key"
+msgstr "Ключ"
+
+#: editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Перехід"
+
+#: editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Ð¡Ð¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ð¼Ð°Ñштабу:"
+
+#: editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "З Ñкого вузла викликати функцію?"
+
+#: editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Вилучити неприпуÑтимі ключі"
+
+#: editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Вилучити невизначені і порожні доріжки"
+
+#: editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… анімації"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—(Ñ–) (не ÑкаÑувати!)"
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "ОчищеннÑ"
+
+#: editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Змінити розмір маÑиву"
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "Змінити тип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñиву"
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "Змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñиву"
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Перейти до Ñ€Ñдка"
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Ðомер Ñ€Ñдка:"
+
+#: editor/code_editor.cpp
+msgid "No Matches"
+msgstr "Ðемає збігів"
+
+#: editor/code_editor.cpp
+msgid "Replaced %d occurrence(s)."
+msgstr "Замінено %d випадок(-ів)."
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr "Замінити"
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Замінити вÑÑ–"
+
+#: editor/code_editor.cpp
+msgid "Match Case"
+msgstr "Враховувати регіÑтр"
+
+#: editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Цілі Ñлова"
+
+#: editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Тільки виділити"
+
+#: editor/code_editor.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Search"
+msgstr "Пошук"
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "Find"
+msgstr "Знайти"
+
+#: editor/code_editor.cpp
+msgid "Next"
+msgstr "Далі"
+
+#: editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Ðе знайдено!"
+
+#: editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Замінити на"
+
+#: editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "ЧутливіÑть регіÑтра"
+
+#: editor/code_editor.cpp
+msgid "Backwards"
+msgstr "Ðазад"
+
+#: editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Запитувати при заміні"
+
+#: editor/code_editor.cpp
+msgid "Skip"
+msgstr "ПропуÑтити"
+
+#: editor/code_editor.cpp
+msgid "Zoom In"
+msgstr "Збільшувати"
+
+#: editor/code_editor.cpp
+msgid "Zoom Out"
+msgstr "ЗменшеннÑ"
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "Скинути маÑштаб"
+
+#: editor/code_editor.cpp editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "РÑдок:"
+
+#: editor/code_editor.cpp
+msgid "Col:"
+msgstr "Колонка:"
+
+#: editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "Метод у цільовому вузлі повинен бути вказаний!"
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Target method not found! Specify a valid method or attach a script to target "
+"Node."
+msgstr ""
+"Цільовий метод не знайдено! Вкажіть дійÑний метод або приєднайте Ñкрипт до "
+"цільового вузла."
+
+#: editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "ПідключитиÑÑ Ð´Ð¾ вузла:"
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr "Додати"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr "Вилучити"
+
+#: editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr "Додати додатковий аргумент виклику:"
+
+#: editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr "Додаткові аргументи виклику:"
+
+#: editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr "ШлÑÑ… до вузла:"
+
+#: editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Створити функцію"
+
+#: editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Відкладені"
+
+#: editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "Один раз"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Закрити"
+
+#: editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "З'єднати"
+
+#: editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ '%s' Ð´Ð»Ñ %s'"
+
+#: editor/connections_dialog.cpp
+msgid "Connecting Signal:"
+msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñигналу:"
+
+#: editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñки"
+
+#: editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Приєднати.."
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Роз'єднати"
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+msgid "Signals"
+msgstr "Сигнали"
+
+#: editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Створити новий"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr "Вибране:"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Ðещодавні:"
+
+#: editor/create_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Пошук:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Збіги:"
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "ОпиÑ:"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Знайти та замінити:"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "ЗалежноÑті длÑ:"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"Сцена \"%s\" зараз редагуєтьÑÑ.\n"
+"Зміни не наберуть Ñили, Ñкщо не перезавантажитиÑÑ."
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"РеÑÑƒÑ€Ñ \"%S \" викориÑтовуєтьÑÑ.\n"
+"Зміни набудуть чинноÑті піÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ."
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "ЗалежноÑті"
+
+#: editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "РеÑурÑ"
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Path"
+msgstr "ШлÑÑ…"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "ЗалежноÑті:"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Виправити зламане"
+
+#: editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Редактор залежноÑтей"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Знайти замінний реÑурÑ:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Відкрити"
+
+#: editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "ВлаÑники:"
+
+#: editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Видалити вибрані файли з проекту? (ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ)"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"Файли, що видалÑютьÑÑ, вимагаютьÑÑ Ñ–Ð½ÑˆÐ¸Ð¼Ð¸ реÑурÑами, щоб вони могли "
+"працювати.\n"
+"Видалити Ñ—Ñ… у будь-Ñкому разі? (ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ)"
+
+#: editor/dependency_editor.cpp
+msgid "Cannot remove:\n"
+msgstr "Ðеможливо вилучити:\n"
+
+#: editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Помилка завантаженнÑ:"
+
+#: editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ у зв'Ñзку з відÑутніми залежноÑÑ‚Ñми Ñцени:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Open Anyway"
+msgstr "Ð’Ñе одно відкрити"
+
+#: editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Які дії Ñлід вжити?"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Виправити залежноÑті"
+
+#: editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Помилки завантаженнÑ!"
+
+#: editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "ОÑтаточно вилучити %d об'єкти (неможливо ÑкаÑувати)"
+
+#: editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "КількіÑть"
+
+#: editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "РеÑурÑи без Ñвної влаÑноÑті:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "ОглÑд підключених реÑурÑів"
+
+#: editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Видалити вибрані файли?"
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr "Вилучити"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "Змінити ключ Ñловника"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "Змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñловника"
+
+#: editor/editor_about.cpp
+msgid "Thanks from the Godot community!"
+msgstr "СпаÑибі від Ñпільноти Godot!"
+
+#: editor/editor_about.cpp
+msgid "Thanks!"
+msgstr "ДÑкую!"
+
+#: editor/editor_about.cpp
+msgid "Godot Engine contributors"
+msgstr "Ðвтори Ñ€ÑƒÑˆÑ–Ñ Godot"
+
+#: editor/editor_about.cpp
+msgid "Project Founders"
+msgstr "ЗаÑновники проекту"
+
+#: editor/editor_about.cpp
+msgid "Lead Developer"
+msgstr "Ведучий розробник"
+
+#: editor/editor_about.cpp editor/project_manager.cpp
+msgid "Project Manager"
+msgstr "Керівник проекту"
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr "Розробники"
+
+#: editor/editor_about.cpp
+msgid "Authors"
+msgstr "Ðвтори"
+
+#: editor/editor_about.cpp
+msgid "Platinum Sponsors"
+msgstr "Платинові ÑпонÑори"
+
+#: editor/editor_about.cpp
+msgid "Gold Sponsors"
+msgstr "Золоті ÑпонÑори"
+
+#: editor/editor_about.cpp
+msgid "Mini Sponsors"
+msgstr "Міні-ÑпонÑори"
+
+#: editor/editor_about.cpp
+msgid "Gold Donors"
+msgstr "Золоті донори"
+
+#: editor/editor_about.cpp
+msgid "Silver Donors"
+msgstr "Срібні донори"
+
+#: editor/editor_about.cpp
+msgid "Bronze Donors"
+msgstr "Бронзові донори"
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr "Донори"
+
+#: editor/editor_about.cpp
+msgid "License"
+msgstr "ЛіцензіÑ"
+
+#: editor/editor_about.cpp
+msgid "Thirdparty License"
+msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ñ‚Ñ€ÐµÑ‚ÑŒÐ¾Ñ— Ñторони"
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of thirdparty free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such thirdparty components with their "
+"respective copyright statements and license terms."
+msgstr ""
+"Рушій Godot ÑпираєтьÑÑ Ð½Ð° Ñ€Ñд Ñторонніх безкоштовних Ñ– відкритих бібліотек, "
+"ÑуміÑних з умовами ліцензії mit. Ðижче наводитьÑÑ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð½Ð¸Ð¹ ÑпиÑок вÑÑ–Ñ… "
+"таких Ñторонніх компонентів з відповідними заÑвами авторÑьких прав Ñ– умов "
+"ліцензійної угоди."
+
+#: editor/editor_about.cpp
+msgid "All Components"
+msgstr "Ð’ÑÑ– компоненти"
+
+#: editor/editor_about.cpp
+msgid "Components"
+msgstr "Компоненти"
+
+#: editor/editor_about.cpp
+msgid "Licenses"
+msgstr "Ліцензії"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Error opening package file, not in zip format."
+msgstr "Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ð° пакунка, не у форматі zip."
+
+#: editor/editor_asset_installer.cpp
+msgid "Uncompressing Assets"
+msgstr "Ð Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ñ–Ð²"
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr "Пакет вÑтановлений уÑпішно!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr "УÑпіх!"
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Ð’Ñтановити"
+
+#: editor/editor_asset_installer.cpp
+msgid "Package Installer"
+msgstr "Ð’Ñтановлювач пакета"
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr "Динаміки"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr "Додати ефект"
+
+#: editor/editor_audio_buses.cpp
+msgid "Rename Audio Bus"
+msgstr "ÐŸÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾ шини"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Solo"
+msgstr "Перемкнути аудіо шину Ñоло"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Mute"
+msgstr "Перемкнути аудіо шину без звуку"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr "Перемкнути ефекти обходу аудіо шини"
+
+#: editor/editor_audio_buses.cpp
+msgid "Select Audio Bus Send"
+msgstr "Вибір передачі аудіо шини"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus Effect"
+msgstr "Додати ефект аудіо шини"
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Bus Effect"
+msgstr "ПереміÑтити ефект шини"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Bus Effect"
+msgstr "Вилучити ефект шини"
+
+#: editor/editor_audio_buses.cpp
+msgid "Audio Bus, Drag and Drop to rearrange."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Solo"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Mute"
+msgstr "Вимкнути звук"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bypass"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Bus options"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr "Видалити ефект"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Master bus can't be deleted!"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Duplicate Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Bus Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save Audio Bus Layout As.."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Location for New Layout.."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Open Audio Bus Layout"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "There is no 'res://default_bus_layout.tres' file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Invalid file, not an audio bus layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Create a new Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Load"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Load an existing Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save this Bus Layout to a file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+msgid "Load Default"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Load the default Bus Layout."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Path:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
+msgid "Name"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Please select a base directory first"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Storing File:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Packing"
+msgstr ""
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+msgid "Template file not found:\n"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "Перейти до батьківÑької теки"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr "Зберегти"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr "ПовертатиÑÑ"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr "Йти вперед"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr "Вгору"
+
+#: editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr "Оновити"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr "Переключати приховані файли"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr "Переключити обране"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr "Режим ПеремиканнÑ"
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr "ФокуÑувати шлÑÑ…"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr "ПереміÑтити обране вгору"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr "ПереміÑтити обране вниз"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder"
+msgstr "Перейти до батьківÑької теки"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Каталоги та файли:"
+
+#: editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Попередній переглÑд:"
+
+#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
+#: scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr "Файл:"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Ðеобхідно викориÑтовувати допуÑтиме розширеннÑ."
+
+#: editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "Сканувати Ñирці"
+
+#: editor/editor_file_system.cpp
+msgid "(Re)Importing Assets"
+msgstr "(Re)Імпорт активів"
+
+#: editor/editor_help.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Пошук довідки"
+
+#: editor/editor_help.cpp
+msgid "Class List:"
+msgstr "СпиÑок клаÑів:"
+
+#: editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Пошук клаÑу"
+
+#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Верхівка"
+
+#: editor/editor_help.cpp editor/property_editor.cpp
+msgid "Class:"
+msgstr "КлаÑ:"
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+msgid "Inherits:"
+msgstr "УÑпадковує:"
+
+#: editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "УÑпадкована:"
+
+#: editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Короткий опиÑ:"
+
+#: editor/editor_help.cpp
+msgid "Members"
+msgstr "УчаÑники"
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Members:"
+msgstr "УчаÑники:"
+
+#: editor/editor_help.cpp
+msgid "Public Methods"
+msgstr "Публічні методи"
+
+#: editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Публічні методи:"
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items"
+msgstr "Елементи графічного інтерфейÑу теми"
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "Елементи графічного інтерфейÑу теми:"
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Signals:"
+msgstr "Сигнали:"
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr "Перелік"
+
+#: editor/editor_help.cpp
+msgid "Enumerations:"
+msgstr "Перелік:"
+
+#: editor/editor_help.cpp
+msgid "enum "
+msgstr "перелік "
+
+#: editor/editor_help.cpp
+msgid "Constants"
+msgstr "КонÑтанти"
+
+#: editor/editor_help.cpp
+msgid "Constants:"
+msgstr "КонÑтанти:"
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr "ОпиÑ"
+
+#: editor/editor_help.cpp
+msgid "Properties"
+msgstr "ВлаÑтивоÑті"
+
+#: editor/editor_help.cpp
+msgid "Property Description:"
+msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑтей:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Methods"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Method Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Search Text"
+msgstr ""
+
+#: editor/editor_log.cpp
+msgid "Output:"
+msgstr ""
+
+#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/property_editor.cpp editor/script_editor_debugger.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Clear"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while saving."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't open '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while parsing '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unexpected end of file '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Missing '%s' or its dependencies."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while loading '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a tree root."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it will not be kept when saving the current scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene was imported, so changes to it will not be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open in Help"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to '%s' before closing?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "No"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a selected node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes the following scene(s) before opening Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Clear Recent Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+msgid "Default"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle distraction-free mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Filter Files.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp
+msgid "Redo"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Help"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Online Docs"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Q&A"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Issue Tracker"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Disable Update Spinner"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Changes may be lost!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Node"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Password:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Script Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid "Select device from the list"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the export menu."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Re-Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Installed)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Missing)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Current)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove template version '%s'?"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Invalid version.txt format inside templates. Revision is not a valid "
+"identifier."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for templates:\n"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Importing:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Installed Versions:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install From File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove Template"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select template file"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
+#: editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a list"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"\n"
+"Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself.\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "A file or folder with this name already exists."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Expand all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Collapse all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Rename.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Folder.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Rename"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid " Files"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Import As:"
+msgstr ""
+
+#: editor/import_dock.cpp editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr ""
+
+#: editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Create a new polygon from scratch"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit existing polygon:\n"
+"LMB: Move Point.\n"
+"Ctrl+LMB: Split Segment.\n"
+"RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "ОпиÑ"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Category:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: editor/plugins/camera_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggles snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to parent"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node sides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to other nodes"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show helpers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show rulers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag pivot from mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set pivot at mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change default type"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat0"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat1"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease in"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Hold Shift to edit tangents individually"
+msgstr ""
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid ""
+"No OccluderPolygon2D resource on this node.\n"
+"Create and assign one?"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake the navigation mesh.\n"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Partitioning..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating contours..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr ""
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Particles"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Close and save changes?\n"
+"\""
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid " Class Reference"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with external editor"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Discard"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Pick Color"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Case"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Cut"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Select All"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Delete Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Replace.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Information"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Doppler Enable"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode (Q)\n"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Drag: Rotate\n"
+"Alt+Drag: Move\n"
+"Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Select"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Move"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Rotate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (After)"
+msgstr ""
+
+#: editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Edit theme.."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme editing menu."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete patch '%s' from list?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted: "
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add.."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Patches"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Make Patch"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The path does not exist."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Your project will be created in a non empty folder (you might want to create "
+"a new folder)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a folder that does not contain a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid " "
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "It would be a good idea to name your project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Rename Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in the project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create folder"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't open project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in \"Project Settings\" under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The UI will update next time the editor or project manager starts."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Restart Now"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't run project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 6"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 7"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 8"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 9"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Can't contain '/' or ':'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Already existing"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override For.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Localization"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show all locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show only selected locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Select Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "New Script"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Show in File System"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Convert To %s"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can not perform with the root node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Copy Node Path"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Filter nodes"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach a new or existing script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear a script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connection(s) and group(s)\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connections.\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Open script"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading template '%s'"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading script from %s"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Directory of the same name exists"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, will be reused"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid Path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script valid"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9 and _"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Create new script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Load existing script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Inherits"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Class Name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Template"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Library"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Status"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Libraries: "
+msgstr ""
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Duplicate Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit X Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Y Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Z Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Exterior Connector"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Erase Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clear Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/mono/editor/mono_bottom_panel.cpp
+msgid "Builds"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Move Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Condition"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Sequence"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Switch"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Iterator"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "While"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Return"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Call"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Get"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Script already has function '%s'"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr "Вилучити вибране"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr "Знайти тип вузла"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr "Копіювати вузли"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr "Вирізати вузли"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr "Ð’Ñтавити вузли"
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ": ÐеприпуÑтимі аргументи: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr "ЗапуÑтити в браузері"
+
+#: platform/javascript/export/export.cpp
+msgid "Run exported HTML in the system's default browser."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file:\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл:\n"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overriden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller id must not be 0 or this controller will not be bound to an "
+"actual controller"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor id must not be 0 or this anchor will not be bound to an actual "
+"anchor"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVROrigin requires an ARVRCamera child node"
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "Побудова Ñітки"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overriden by "
+"the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid "Path property must point to a valid Spatial node to work."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Raw Mode"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Add current color as a preset"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Cancel"
+msgstr "СкаÑувати"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr "СповіщеннÑ!"
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "Будь-лаÑка підтвердіть..."
+
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
+msgstr ""
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Інші)"
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Setings (Rendering -> Viewport -"
+"> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error initializing FreeType."
+msgstr "Помилка ініціалізації FreeType."
+
+#: scene/resources/dynamic_font.cpp
+msgid "Unknown font format."
+msgstr "Ðевідомий формат шрифту."
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error loading font."
+msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñƒ."
+
+#: scene/resources/dynamic_font.cpp
+msgid "Invalid font size."
+msgstr "ÐедійÑний розмір шрифту."
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index 3b624f4c8c..da20b0e26a 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -99,6 +99,7 @@ msgid "Anim Delete Keys"
msgstr ".اینیمیشن کی کیز کو ڈیلیٹ کرو"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr ""
@@ -629,6 +630,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr ""
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -699,6 +707,14 @@ msgstr ""
msgid "Delete"
msgstr ""
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -1111,6 +1127,10 @@ msgid "File Exists, Overwrite?"
msgstr ""
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Select Current Folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr ".سب Ú©Ú†Ú¾ تسلیم Ûوچکا ÛÛ’"
@@ -1118,12 +1138,6 @@ msgstr ".سب Ú©Ú†Ú¾ تسلیم Ûوچکا ÛÛ’"
msgid "All Files (*)"
msgstr ""
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr ""
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr ""
@@ -1192,7 +1206,7 @@ msgstr "Ù¾Ø³Ù†Ø¯ÛŒØ¯Û Ø§ÙˆÙ¾Ø± منتقل کریں"
msgid "Move Favorite Down"
msgstr "Ù¾Ø³Ù†Ø¯ÛŒØ¯Û Ù†ÛŒÚ†Û’ منتقل کریں"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
msgstr ""
@@ -1480,6 +1494,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr ""
@@ -1589,6 +1618,10 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1715,11 +1748,19 @@ msgid "Switch Scene Tab"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
msgstr ""
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
@@ -1731,6 +1772,10 @@ msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr ""
@@ -1795,13 +1840,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr ""
@@ -2059,11 +2103,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2123,7 +2167,7 @@ msgstr ""
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2283,6 +2327,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2317,6 +2365,101 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2341,12 +2484,21 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr ".تمام کا انتخاب"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2364,12 +2516,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2627,8 +2773,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2639,6 +2784,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr ".تمام کا انتخاب"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2783,6 +2933,55 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2973,18 +3172,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -2993,30 +3184,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3045,14 +3220,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr ""
@@ -3165,6 +3332,37 @@ msgid "Move Action"
msgstr "ایکشن منتقل کریں"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr ".تمام کا انتخاب"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3286,10 +3484,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3340,6 +3544,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3528,6 +3736,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3560,6 +3772,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3575,58 +3791,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4024,16 +4188,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4174,7 +4368,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4219,6 +4412,20 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
#, fuzzy
msgid "Next script"
msgstr "سب سکریپشن بنائیں"
@@ -4271,6 +4478,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4281,13 +4492,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4391,33 +4600,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr ""
@@ -4439,6 +4637,22 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4484,12 +4698,10 @@ msgid "Convert To Lowercase"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4498,7 +4710,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4663,6 +4874,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4743,6 +4962,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4775,6 +4998,14 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4905,6 +5136,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5183,6 +5418,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5357,7 +5596,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5619,6 +5858,12 @@ msgstr ""
msgid "Can't run project"
msgstr ""
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5652,10 +5897,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5777,11 +6018,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6251,6 +6492,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr ".تمام کا انتخاب"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6438,6 +6688,11 @@ msgid "Attach Node Script"
msgstr "سب سکریپشن بنائیں"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr ".تمام کا انتخاب"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6494,18 +6749,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6638,50 +6881,50 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
".استمال کیجۓ TYPE_* constants .Ú©Û’ لیے غلط Ûیں convert() دیے گئے ارگمنٹس."
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "یا تو ڈیکوڈ کرنے Ú©Û’ لئے بائیٹس Ú©Ù… Ûیں یا پھر ناقص ÙØ§Ø±Ù…یٹ Ú¾Û’."
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "سٹیپ Ú©Û’ ارگمنٹس Ø³ÙØ± Ûیں!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ".ÛŒÛ Ø§Ù†Ø³Ù¹ÛŒÙ†Ø³ Ú©Û’ بغیر سکرپٹ Ù†ÛÛŒ Ûوتی"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr ".ÛŒÛ Ø³Ú©Ø±Ù¾Ù¹ پر مبنی Ù†ÛÛŒ ÛÛ’"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr ".ÛŒÛ Ø±ÛŒØ³ÙˆØ±Ø³ ÙØ§Ø¦Ù„ پر مبنی Ù†ÛÛŒ ÛÛ’"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6695,15 +6938,23 @@ msgid "GridMap Duplicate Selection"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6771,12 +7022,9 @@ msgid "Erase Area"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr ""
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr ""
+#, fuzzy
+msgid "Clear Selection"
+msgstr ".تمام کا انتخاب"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6898,7 +7146,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6906,7 +7154,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6914,7 +7162,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7143,11 +7391,19 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
msgstr ""
#: scene/2d/animated_sprite.cpp
@@ -7239,18 +7495,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7309,6 +7553,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7372,6 +7624,10 @@ msgstr ""
msgid "Please Confirm..."
msgstr ""
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7386,6 +7642,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
new file mode 100644
index 0000000000..11b923a83a
--- /dev/null
+++ b/editor/translations/vi.po
@@ -0,0 +1,7623 @@
+# Vietnamese translation of the Godot Engine editor
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
+# This file is distributed under the same license as the Godot source code.
+#
+# Hai Le <dark.hades.1102@gmail.com>, 2017.
+# Nguyễn Tuấn Anh <anhnt.fami@gmail.com>, 2017.
+# Tung Le <tungkradle@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2017-11-25 13:51+0000\n"
+"Last-Translator: Hai Le <dark.hades.1102@gmail.com>\n"
+"Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/"
+"godot/vi/>\n"
+"Language: vi\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 2.18-dev\n"
+
+#: editor/animation_editor.cpp
+#, fuzzy
+msgid "Disabled"
+msgstr "Tắt"
+
+#: editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Chá»n tất cả"
+
+#: editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Äổi giá trị"
+
+#: editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Di chuyển Anim Track lên trên"
+
+#: editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Di chuyển Anim Track xuống dưới"
+
+#: editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Xóa Anim Track"
+
+#: editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Äổi tên Anim Track"
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Track Change Wrap Mode"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Sá»­a Node Curve"
+
+#: editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Sá»­a Curve đã chá»n"
+
+#: editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Xóa phím Anim"
+
+#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Continuous"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Discrete"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Trigger"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "In"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Out"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "In-Out"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Out-In"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Transitions"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr ""
+
+#: editor/animation_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Tạo"
+
+#: editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Bước (s):"
+
+#: editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Track tools"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Optimize"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Key"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Transition"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr ""
+
+#: editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "No Matches"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replaced %d occurrence(s)."
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Match Case"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Selection Only"
+msgstr ""
+
+#: editor/code_editor.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "Find"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Next"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Not found!"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace By"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Backwards"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Skip"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Zoom In"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Zoom Out"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr ""
+
+#: editor/code_editor.cpp editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Col:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Target method not found! Specify a valid method or attach a script to target "
+"Node."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connecting Signal:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr ""
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+msgid "Signals"
+msgstr ""
+
+#: editor/create_dialog.cpp
+msgid "Create New"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp
+msgid "Matches:"
+msgstr ""
+
+#: editor/create_dialog.cpp editor/editor_help.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Resource"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Path"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Cannot remove:\n"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Open Anyway"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Owns"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/item_list_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Thanks from the Godot community!"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Thanks!"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Godot Engine contributors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Project Founders"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Lead Developer"
+msgstr ""
+
+#: editor/editor_about.cpp editor/project_manager.cpp
+msgid "Project Manager"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Authors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Platinum Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Gold Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Mini Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Gold Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Silver Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Bronze Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "License"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Thirdparty License"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of thirdparty free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such thirdparty components with their "
+"respective copyright statements and license terms."
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "All Components"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Components"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Licenses"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Error opening package file, not in zip format."
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "Uncompressing Assets"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "Package Installer"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Rename Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Solo"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Mute"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Select Audio Bus Send"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Audio Bus, Drag and Drop to rearrange."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Solo"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Mute"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Bypass"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Bus options"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Master bus can't be deleted!"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Duplicate Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Bus Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Audio Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save Audio Bus Layout As.."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Location for New Layout.."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Open Audio Bus Layout"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "There is no 'res://default_bus_layout.tres' file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Invalid file, not an audio bus layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Create a new Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Load"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Load an existing Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save this Bus Layout to a file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+msgid "Load Default"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Load the default Bus Layout."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Path:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/project_manager.cpp
+msgid "Name"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Please select a base directory first"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Storing File:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Packing"
+msgstr ""
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+msgid "Template file not found:\n"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Select Current Folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Directories & Files:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp
+#: scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid "(Re)Importing Assets"
+msgstr ""
+
+#: editor/editor_help.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Class List:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Search Classes"
+msgstr ""
+
+#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: editor/editor_help.cpp editor/property_editor.cpp
+msgid "Class:"
+msgstr ""
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Members"
+msgstr ""
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Members:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Public Methods"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr ""
+
+#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Signals:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Enumerations:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "enum "
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Constants"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Constants:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Properties"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Property Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Methods"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Method Description:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Search Text"
+msgstr ""
+
+#: editor/editor_log.cpp
+msgid "Output:"
+msgstr ""
+
+#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/property_editor.cpp editor/script_editor_debugger.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Clear"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while saving."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't open '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while parsing '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unexpected end of file '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Missing '%s' or its dependencies."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while loading '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a tree root."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it will not be kept when saving the current scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene was imported, so changes to it will not be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open in Help"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to '%s' before closing?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "No"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a selected node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes the following scene(s) before opening Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Clear Recent Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+msgid "Default"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle distraction-free mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Filter Files.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp
+msgid "Redo"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Help"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Online Docs"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Q&A"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Issue Tracker"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Stop"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Disable Update Spinner"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Changes may be lost!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Node"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Password:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Script Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid "Select device from the list"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the export menu."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Re-Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Installed)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Missing)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "(Current)"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove template version '%s'?"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Invalid version.txt format inside templates. Revision is not a valid "
+"identifier."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for templates:\n"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Importing:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Installed Versions:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install From File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove Template"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select template file"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
+#: editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View items as a list"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"\n"
+"Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself.\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:\n"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "No name provided."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "A file or folder with this name already exists."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Expand all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Collapse all"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Rename.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Folder.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait.."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Rename"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid " Files"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Import As:"
+msgstr ""
+
+#: editor/import_dock.cpp editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr ""
+
+#: editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Create a new polygon from scratch"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit existing polygon:\n"
+"LMB: Move Point.\n"
+"Ctrl+LMB: Split Segment.\n"
+"RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Directions"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/project_settings_editor.cpp
+msgid "Category:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: editor/plugins/camera_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggles snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to parent"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to node sides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to other nodes"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show helpers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show rulers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag pivot from mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set pivot at mouse position"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change default type"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat0"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat1"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease in"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Ease out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Hold Shift to edit tangents individually"
+msgstr ""
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid ""
+"No OccluderPolygon2D resource on this node.\n"
+"Create and assign one?"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Bake the navigation mesh.\n"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Partitioning..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating contours..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr ""
+
+#: editor/plugins/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr ""
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Particles"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Close and save changes?\n"
+"\""
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid " Class Reference"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find.."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with external editor"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Discard"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Pick Color"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Case"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Cut"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Select All"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Delete Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert To Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Replace.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Information"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Doppler Enable"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode (Q)\n"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Drag: Rotate\n"
+"Alt+Drag: Move\n"
+"Alt+RMB: Depth list selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Select"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Move"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Rotate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Tool Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (After)"
+msgstr ""
+
+#: editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Edit theme.."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme editing menu."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete patch '%s' from list?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted: "
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add.."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Patches"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Make Patch"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The path does not exist."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Your project will be created in a non empty folder (you might want to create "
+"a new folder)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a folder that does not contain a 'project.godot' file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid " "
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "It would be a good idea to name your project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Rename Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't get project.godot in the project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create folder"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't open project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in \"Project Settings\" under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The UI will update next time the editor or project manager starts."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Restart Now"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't run project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 6"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 7"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 8"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button 9"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Can't contain '/' or ':'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Already existing"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override For.."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Localization"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show all locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show only selected locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Select Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "New Script"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Show in File System"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Convert To %s"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can not perform with the root node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Copy Node Path"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Filter nodes"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach a new or existing script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear a script for the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connection(s) and group(s)\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has connections.\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Open script"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading template '%s'"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading script from %s"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Directory of the same name exists"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, will be reused"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid Path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script valid"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9 and _"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Create new script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Load existing script file"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Inherits"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Class Name"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Template"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Library"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Status"
+msgstr ""
+
+#: modules/gdnative/gd_native_library_editor.cpp
+msgid "Libraries: "
+msgstr ""
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Duplicate Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit X Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Y Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Z Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Create Exterior Connector"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Erase Area"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clear Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/mono/editor/mono_bottom_panel.cpp
+msgid "Builds"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Move Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Condition"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Sequence"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Switch"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Iterator"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "While"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Return"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Call"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Get"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Script already has function '%s'"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run exported HTML in the system's default browser."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read boot splash image file:\n"
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overriden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller id must not be 0 or this controller will not be bound to an "
+"actual controller"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor id must not be 0 or this anchor will not be bound to an actual "
+"anchor"
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVROrigin requires an ARVRCamera child node"
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overriden by "
+"the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid "Path property must point to a valid Spatial node to work."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Raw Mode"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Add current color as a preset"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Cancel"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr "Cảnh báo!"
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "Xin hãy xác nhận..."
+
+#: scene/gui/file_dialog.cpp
+msgid "Select this Folder"
+msgstr ""
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox,HBox,etc), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr "(Khác)"
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Setings (Rendering -> Viewport -"
+"> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error initializing FreeType."
+msgstr "Lỗi khởi tạo FreeType."
+
+#: scene/resources/dynamic_font.cpp
+msgid "Unknown font format."
+msgstr "Äịnh dạng font không hợp lệ."
+
+#: scene/resources/dynamic_font.cpp
+msgid "Error loading font."
+msgstr "Lỗi tải font."
+
+#: scene/resources/dynamic_font.cpp
+msgid "Invalid font size."
+msgstr "Kích thước font không hợp lệ."
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index 3a67defced..ab00b50a1c 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -8,19 +8,23 @@
# å´äº®å¼Ÿ <wu@liangdi.me>, 2017.
# ageazrael <ageazrael@gmail.com>, 2016.
# Bruce Guo <guoboism@hotmail.com>, 2016.
+# dragonandy <dragonandy@foxmail.com>, 2017.
# Geequlim <geequlim@gmail.com>, 2016-2017.
-# Luo Jun <vipsbpig@gmail.com>, 2016.
+# lalalaring <783482203@qq.com>, 2017.
+# Luo Jun <vipsbpig@gmail.com>, 2016-2017.
# oberon-tonya <360119124@qq.com>, 2016.
+# Qichunren <whyruby@gmail.com>, 2017.
# sersoong <seraphim945@qq.com>, 2017.
# wanfang liu <wanfang.liu@gmail.com>, 2016.
+# WeiXiong Huang <wx_Huang@sina.com>, 2017.
# Youmu <konpaku.w@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2017-09-15 08:55+0000\n"
-"Last-Translator: sersoong <seraphim945@qq.com>\n"
+"PO-Revision-Date: 2017-11-27 10:44+0000\n"
+"Last-Translator: dragonandy <dragonandy@foxmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hans/>\n"
"Language: zh_CN\n"
@@ -28,7 +32,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -44,7 +48,7 @@ msgstr "移动已添加关键帧"
#: editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr "修改过度效果"
+msgstr "动画å˜åŒ–过渡"
#: editor/animation_editor.cpp
msgid "Anim Change Transform"
@@ -111,6 +115,7 @@ msgid "Anim Delete Keys"
msgstr "删除关键帧"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "å¤åˆ¶é€‰ä¸­é¡¹"
@@ -640,6 +645,13 @@ msgstr "ä¾èµ–编辑器"
msgid "Search Replacement Resource:"
msgstr "查找替æ¢èµ„æº:"
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "打开"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr "拥有者:"
@@ -656,9 +668,8 @@ msgid ""
msgstr "è¦åˆ é™¤çš„æ–‡ä»¶è¢«å…¶ä»–èµ„æºæ‰€ä¾èµ–,ä»ç„¶è¦åˆ é™¤å—?(无法撤销)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Cannot remove:\n"
-msgstr "无法解æž."
+msgstr "无法移除:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -711,6 +722,14 @@ msgstr "删除选中的文件?"
msgid "Delete"
msgstr "删除"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr "修改关键字"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr "改å˜å­—典的值"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr "感谢Godot社区!"
@@ -733,7 +752,7 @@ msgstr "主è¦å¼€å‘者"
#: editor/editor_about.cpp editor/project_manager.cpp
msgid "Project Manager"
-msgstr "项目管ç†å™¨"
+msgstr "项目管ç†å‘˜"
#: editor/editor_about.cpp
msgid "Developers"
@@ -745,32 +764,31 @@ msgstr "作者"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "白金赞助商"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "金牌赞助商"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "迷你赞助商"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "黄金æèµ è€…"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "白银æèµ è€…"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Donors"
-msgstr "æ‹·è´åˆ°ä¸‹ä¸€è¡Œ"
+msgstr "é’铜æèµ è€…"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "æåŠ©"
#: editor/editor_about.cpp
msgid "License"
@@ -894,9 +912,8 @@ msgid "Duplicate"
msgstr "æ‹·è´"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Volume"
-msgstr "é‡ç½®ç¼©æ”¾"
+msgstr "é‡ç½®éŸ³é‡"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
@@ -919,9 +936,8 @@ msgid "Duplicate Audio Bus"
msgstr "å¤åˆ¶éŸ³é¢‘总线"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Reset Bus Volume"
-msgstr "é‡ç½®ç¼©æ”¾"
+msgstr "é‡ç½®æ€»çº¿éŸ³é‡"
#: editor/editor_audio_buses.cpp
msgid "Move Audio Bus"
@@ -1124,6 +1140,11 @@ msgid "File Exists, Overwrite?"
msgstr "文件已存在,确定è¦è¦†ç›–它å—?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "新建目录"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "所有å¯ç”¨ç±»åž‹"
@@ -1131,12 +1152,6 @@ msgstr "所有å¯ç”¨ç±»åž‹"
msgid "All Files (*)"
msgstr "所有文件(*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "打开"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "打开文件"
@@ -1203,10 +1218,9 @@ msgstr "å‘上移动收è—"
msgid "Move Favorite Down"
msgstr "å‘下移动收è—"
-#: editor/editor_file_dialog.cpp
-#, fuzzy
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder"
-msgstr "无法创建目录。"
+msgstr "转到上层文件夹"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1267,27 +1281,24 @@ msgid "Brief Description:"
msgstr "简介:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Members"
-msgstr "æˆå‘˜ï¼š"
+msgstr "æˆå‘˜"
#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp
msgid "Members:"
msgstr "æˆå‘˜ï¼š"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Public Methods"
-msgstr "公共方法:"
+msgstr "公共方法"
#: editor/editor_help.cpp
msgid "Public Methods:"
msgstr "公共方法:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "GUI Theme Items"
-msgstr "GUI主题:"
+msgstr "GUI主题项目"
#: editor/editor_help.cpp
msgid "GUI Theme Items:"
@@ -1298,9 +1309,8 @@ msgid "Signals:"
msgstr "事件:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "枚举:"
+msgstr "枚举"
#: editor/editor_help.cpp
msgid "Enumerations:"
@@ -1311,23 +1321,20 @@ msgid "enum "
msgstr "枚举 "
#: editor/editor_help.cpp
-#, fuzzy
msgid "Constants"
-msgstr "常é‡:"
+msgstr "常é‡"
#: editor/editor_help.cpp
msgid "Constants:"
msgstr "常é‡:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "æè¿°:"
+msgstr "æè¿°"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Properties"
-msgstr "属性:"
+msgstr "属性"
#: editor/editor_help.cpp
msgid "Property Description:"
@@ -1338,11 +1345,12 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"当剿²¡æœ‰æ­¤å±žæ€§çš„说明。请帮助我们通过 [color=$color][url=$url] 贡献一个 [/url]"
+"[/color]!"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "方法列表:"
+msgstr "方法"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1353,6 +1361,8 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
+"当剿²¡æœ‰æ­¤æ–¹æ³•的说明。请帮助我们通过 [color=$color] [url=$url] 贡献一个 [/"
+"url][/color]!"
#: editor/editor_help.cpp
msgid "Search Text"
@@ -1394,28 +1404,24 @@ msgid "Error while saving."
msgstr "ä¿å­˜å‡ºé”™ã€‚"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "无法对'..'引用æ“作"
+msgstr "无法打开 \"%s\"。"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "ä¿å­˜å‡ºé”™ã€‚"
+msgstr "åˆ†æž \"%s\" 时出错。"
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr ""
+msgstr "文件 \"%s\" çš„æ„外结æŸã€‚"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Missing '%s' or its dependencies."
-msgstr "场景'%s'çš„ä¾èµ–已被破å:"
+msgstr "缺少 \"%s\" 或其ä¾èµ–项。"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "ä¿å­˜å‡ºé”™ã€‚"
+msgstr "加载 \"%s\" 时出错。"
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1480,18 +1486,23 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"此资æºå±žäºŽå·²å¯¼å…¥çš„场景, 因此它ä¸å¯ç¼–辑。\n"
+"请阅读与导入场景相关的文档, 以便更好地ç†è§£æ­¤å·¥ä½œæµã€‚"
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it will not be kept when saving the current scene."
msgstr ""
+"此资æºå±žäºŽå®žä¾‹æˆ–继承的场景。\n"
+"ä¿å­˜å½“å‰åœºæ™¯æ—¶ä¸ä¼šä¿ç•™å¯¹å®ƒçš„æ›´æ”¹ã€‚"
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
msgstr ""
+"此资æºå·²å¯¼å…¥, 因此无法编辑。在 \"导入\" 颿¿ä¸­æ›´æ”¹å…¶è®¾ç½®, ç„¶åŽé‡æ–°å¯¼å…¥ã€‚"
#: editor/editor_node.cpp
msgid ""
@@ -1500,6 +1511,29 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"场景已被导入, 对它的更改将ä¸ä¼šä¿ç•™ã€‚\n"
+"å…许对它的实例或继承进行更改。\n"
+"请阅读与导入场景相关的文档, 以便更好地ç†è§£æ­¤å·¥ä½œæµã€‚"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+"这是一个远程对象,因此对它的更改将ä¸ä¼šè¢«ä¿ç•™ã€‚\n"
+"请阅读与调试相关的文档,以便更好地ç†è§£è¿™ä¸ªå·¥ä½œæµã€‚"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Expand all properties"
+msgstr "展开所有"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Collapse all properties"
+msgstr "收起所有"
#: editor/editor_node.cpp
msgid "Copy Params"
@@ -1617,6 +1651,10 @@ msgid "Export Mesh Library"
msgstr "导出网格库(Mesh Library)"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr "æ­¤æ“作必须有一个根节点(root node)æ‰èƒ½æ‰§è¡Œã€‚"
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "导出砖å—集(Tile Set)"
@@ -1672,37 +1710,32 @@ msgstr "在打开项目管ç†å™¨ä¹‹å‰ä¿å­˜æ›´æ”¹å—?"
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
-msgstr ""
+msgstr "此选项已弃用。必须强制刷新的情况现在被视为 bug。请报告。"
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
msgstr "选择主场景"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "无法å¯ç”¨æ’ä»¶: '"
+msgstr "无法在: \"%s\" 上å¯ç”¨åŠ è½½é¡¹æ’ä»¶, é…置解æžå¤±è´¥ã€‚"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr "在æ’件目录中没有找到脚本: 'res://addons/"
+msgstr "在æ’件目录中没有找到脚本: 'res://addons/%s'。"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s'."
-msgstr "无法从路径加载æ’件脚本: '"
+msgstr "无法从路径中加载æ’件脚本: \"%s\"。"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "无法从路径加载æ’件脚本: '"
+msgstr "无法从路径加载æ’件脚本: \"%s\" åŸºç±»åž‹ä¸æ˜¯ EditorPlugin 的。"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "无法从路径加载æ’件脚本: '"
+msgstr "无法从路径加载æ’件脚本: \"%s\" 脚本ä¸åœ¨å·¥å…·æ¨¡å¼ä¸‹ã€‚"
#: editor/editor_node.cpp
msgid ""
@@ -1729,9 +1762,8 @@ msgid "Scene '%s' has broken dependencies:"
msgstr "场景'%s'çš„ä¾èµ–已被破å:"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Clear Recent Scenes"
-msgstr "清ç†å½“剿–‡ä»¶"
+msgstr "清除近期的场景"
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -1751,12 +1783,23 @@ msgid "Switch Scene Tab"
msgstr "切æ¢åœºæ™¯æ ‡ç­¾é¡µ"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr "更多的%d个文件"
+#, fuzzy
+msgid "%d more files or folders"
+msgstr "%d个文件或目录未展示"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "更多的%d个文件或目录"
+#, fuzzy
+msgid "%d more folders"
+msgstr "%d个目录未展示"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "%d more files"
+msgstr "%d个文件未展示"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "åœé ä½ç½®"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1767,6 +1810,10 @@ msgid "Toggle distraction-free mode."
msgstr "åˆ‡æ¢æ— å¹²æ‰°æ¨¡å¼ã€‚"
#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "新建场景"
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "场景"
@@ -1831,13 +1878,12 @@ msgid "TileSet.."
msgstr "ç –å—集.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "撤销"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "é‡åš"
@@ -2095,9 +2141,8 @@ msgid "Object properties."
msgstr "对象属性。"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Changes may be lost!"
-msgstr "修改图片分组"
+msgstr "更改å¯èƒ½ä¼šä¸¢å¤±!"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_manager.cpp
@@ -2105,14 +2150,14 @@ msgid "Import"
msgstr "导入"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr "文件系统"
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr "节点"
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "文件系统"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr "输出"
@@ -2168,7 +2213,7 @@ msgstr "打开3D编辑器"
msgid "Open Script Editor"
msgstr "打开脚本编辑器"
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr "打开资æºå•†åº—"
@@ -2181,9 +2226,8 @@ msgid "Open the previous Editor"
msgstr "打开上一个编辑器"
#: editor/editor_plugin.cpp
-#, fuzzy
msgid "Creating Mesh Previews"
-msgstr "创建 Mesh(网格) 库"
+msgstr "创建网格预览"
#: editor/editor_plugin.cpp
msgid "Thumbnail.."
@@ -2235,9 +2279,8 @@ msgid "Frame %"
msgstr "渲染速度"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "固定帧速率 %"
+msgstr "物ç†å¸§é€Ÿçއ %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2332,6 +2375,10 @@ msgid "(Current)"
msgstr "(当å‰)"
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr "正在链接镜åƒåœ°å€ï¼Œè¯·ç¨åŽ.."
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr "移除版本为 '%s' 的模�"
@@ -2366,6 +2413,100 @@ msgid "Importing:"
msgstr "导入:"
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr "当å‰ç‰ˆæœ¬æ²¡æœ‰ä¸‹è½½é“¾æŽ¥ã€‚åªèƒ½é€šè¿‡å®˜æ–¹å‘布下载。"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr "无法解æž."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "无法连接。"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "æ— å“应。"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "请求失败."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr "循环é‡å®šå‘。"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "失败:"
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr "无法写入文件。"
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr "下载完æˆ"
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting url: "
+msgstr "请求链接错误: "
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to Mirror.."
+msgstr "正在连接镜åƒ..."
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr "链接已断开"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr "è§£æžä¸­"
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr "无法解æž"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr "连接中.."
+
+#: editor/export_template_manager.cpp
+msgid "Can't Conect"
+msgstr "无法连接"
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr "已连接"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "正在请求.."
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr "正在下载"
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr "连接错误"
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr "SSL æ¡æ‰‹é”™è¯¯"
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr "当å‰ç‰ˆæœ¬:"
@@ -2389,88 +2530,81 @@ msgstr "åˆ é™¤é€‰ä¸­æ¨¡æ¿æ–‡ä»¶"
msgid "Export Template Manager"
msgstr "模æ¿å¯¼å‡ºå·¥å…·"
+#: editor/export_template_manager.cpp
+msgid "Download Templates"
+msgstr "下载模æ¿"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr "从列表中选择镜åƒ: "
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr "无法以å¯å†™æ–¹å¼æ‰“å¼€file_type_cache.cchï¼"
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
-msgstr "无法导航到 '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
+msgstr "因为文件系统没找到文件,ä¸èƒ½å®šä½åˆ°'%s'ï¼"
#: editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails"
-msgstr ""
+msgstr "将项目作为缩略图的网格查看"
#: editor/filesystem_dock.cpp
msgid "View items as a list"
-msgstr ""
+msgstr "将项目作为列表查看"
#: editor/filesystem_dock.cpp
msgid ""
"\n"
"Status: Import of file failed. Please fix file and reimport manually."
msgstr ""
-
-#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
"\n"
-"æº: "
+"状æ€: å¯¼å…¥æ–‡ä»¶å¤±è´¥ã€‚è¯·æ‰‹åŠ¨ä¿®å¤æ–‡ä»¶å’Œå¯¼å…¥ã€‚"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move/rename resources root."
-msgstr "无法加载/å¤„ç†æºå­—体。"
+msgstr "无法移动/é‡å‘½å根资æºã€‚"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Cannot move a folder into itself.\n"
-msgstr "ä¸å…许导入文件本身:"
+msgstr "无法将文件夹移动到其自身。\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Error moving:\n"
-msgstr "移动目录出错:\n"
+msgstr "移动时出错:\n"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Unable to update dependencies:\n"
-msgstr "场景'%s'çš„ä¾èµ–已被破å:"
+msgstr "无法更新ä¾èµ–关系:\n"
#: editor/filesystem_dock.cpp
msgid "No name provided"
-msgstr ""
+msgstr "未æä¾›åç§°"
#: editor/filesystem_dock.cpp
msgid "Provided name contains invalid characters"
-msgstr ""
+msgstr "æä¾›çš„åç§°åŒ…å«æ— æ•ˆå­—符"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "No name provided."
-msgstr "移动或é‡å‘½å.."
+msgstr "没有æä¾›ä»»ä½•å称。"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Name contains invalid characters."
-msgstr "å­—ç¬¦åˆæ³•:"
+msgstr "åç§°åŒ…å«æ— æ•ˆå­—符。"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "A file or folder with this name already exists."
-msgstr "分组å称已存在ï¼"
+msgstr "åŒå的文件夹已ç»å­˜åœ¨ã€‚"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming file:"
-msgstr "é‡å‘½åå˜é‡"
+msgstr "é‡å‘½å文件:"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Renaming folder:"
-msgstr "é‡å‘½å节点"
+msgstr "é‡å‘½å文件夹:"
#: editor/filesystem_dock.cpp
msgid "Expand all"
@@ -2485,18 +2619,16 @@ msgid "Copy Path"
msgstr "æ‹·è´è·¯å¾„"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Rename.."
-msgstr "é‡å‘½å"
+msgstr "é‡å‘½å为..."
#: editor/filesystem_dock.cpp
msgid "Move To.."
msgstr "移动.."
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "New Folder.."
-msgstr "新建目录"
+msgstr "新建文件夹 .."
#: editor/filesystem_dock.cpp
msgid "Show In File Manager"
@@ -2566,7 +2698,7 @@ msgstr "导入为独立场景"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
msgid "Import with Separate Animations"
-msgstr "导入独立æè´¨"
+msgstr "导入独立动画"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
@@ -2583,17 +2715,17 @@ msgstr "导入独立物体 + æè´¨"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
msgid "Import with Separate Objects+Animations"
-msgstr "导入独立物体 + æè´¨"
+msgstr "导入独立物体 + 动画"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
msgid "Import with Separate Materials+Animations"
-msgstr "导入独立æè´¨"
+msgstr "导入独立æè´¨ + 动画"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "导入独立物体 + æè´¨"
+msgstr "导入独立物体 + æè´¨ + 动画"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
@@ -2680,9 +2812,8 @@ msgid "Edit Poly"
msgstr "编辑多边形"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#, fuzzy
msgid "Insert Point"
-msgstr "æ’入中"
+msgstr "æ’入点"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -2695,9 +2826,8 @@ msgid "Remove Poly And Point"
msgstr "移除多边形åŠé¡¶ç‚¹"
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
-msgstr "从头开始创建一个新的多边形。"
+msgid "Create a new polygon from scratch"
+msgstr "创建一个新的多边形"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid ""
@@ -2711,6 +2841,10 @@ msgstr ""
"Ctrl + LMB: 分离片段。\n"
"人民å¸ï¼š 擦除点。"
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Delete points"
+msgstr "删除点"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr "切æ¢AutoPlay"
@@ -2855,6 +2989,57 @@ msgid "Copy Animation"
msgstr "æ‹·è´åŠ¨ç”»"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "选项:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "粘贴"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Future"
+msgstr "功能"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr "创建新动画"
@@ -3045,18 +3230,10 @@ msgid "Can't resolve hostname:"
msgstr "无法解æžä¸»æœºå:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr "无法解æž."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr "连接错误,请é‡è¯•。"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "无法连接。"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "无法连接到æœåС噍:"
@@ -3065,30 +3242,14 @@ msgid "No response from host:"
msgstr "æœåŠ¡å™¨æ— å“应:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "æ— å“应。"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr "请求失败,错误代ç :"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "请求失败."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "请求失败,é‡å®šå‘次数过多"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr "循环é‡å®šå‘。"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "失败:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr "文件hash值错误,该文件å¯èƒ½è¢«ç¯¡æ”¹ã€‚"
@@ -3117,14 +3278,6 @@ msgid "Resolving.."
msgstr "è§£æžä¸­.."
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Connecting.."
-msgstr "连接中.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "正在请求.."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "请求错误"
@@ -3237,6 +3390,36 @@ msgid "Move Action"
msgstr "移动动作"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Move vertical guide"
+msgstr "移动垂直标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "创建新的垂直标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr "删除垂直标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr "移动水平标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr "创建水平标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove horizontal guide"
+msgstr "移除水平标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr "创建垂直水平标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr "编辑IK链"
@@ -3245,14 +3428,12 @@ msgid "Edit CanvasItem"
msgstr "编辑CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Anchors only"
-msgstr "锚点"
+msgstr "仅锚点"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change Anchors and Margins"
-msgstr "编辑锚点"
+msgstr "更改锚点和边è·"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
@@ -3306,9 +3487,8 @@ msgid "Pan Mode"
msgstr "移动画布"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggles snapping"
-msgstr "设置断点"
+msgstr "切æ¢å¸é™„"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -3316,21 +3496,18 @@ msgid "Use Snap"
msgstr "使用å¸é™„"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snapping options"
-msgstr "动画选项"
+msgstr "å¸é™„选项"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to grid"
-msgstr "å¸é™„模å¼:"
+msgstr "å¸é™„到网格"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
msgstr "使用旋转å¸é™„"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Configure Snap..."
msgstr "设置å¸é™„.."
@@ -3344,30 +3521,35 @@ msgstr "使用åƒç´ å¸é™„"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart snapping"
-msgstr ""
+msgstr "智能å¸é™„"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to parent"
-msgstr "展开父节点"
+msgstr "å¸é™„到父节点"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node anchor"
-msgstr ""
+msgstr "å¸é™„到node锚点"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to node sides"
-msgstr ""
+msgstr "å¸é™„到nodeè¾¹"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to other nodes"
-msgstr ""
+msgstr "å¸é™„到其他node节点"
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr "å¸é™„到标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr "é”定选中对象的ä½ç½®ã€‚"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr "è§£é”选中对象的ä½ç½®ã€‚"
@@ -3412,12 +3594,16 @@ msgstr "显示网格"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
msgid "Show helpers"
-msgstr "显示骨骼"
+msgstr "显示辅助线"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show rulers"
-msgstr "显示骨骼"
+msgstr "显示标尺"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Show guides"
+msgstr "显示标尺"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3428,9 +3614,8 @@ msgid "Frame Selection"
msgstr "最大化显示选中节点"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Layout"
-msgstr "ä¿å­˜å¸ƒå±€"
+msgstr "布局"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
@@ -3454,20 +3639,19 @@ msgstr "清除姿势"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag pivot from mouse position"
-msgstr ""
+msgstr "从鼠标ä½ç½®æ‹–动轴心"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Set pivot at mouse position"
-msgstr "设置曲线输出ä½ç½®ï¼ˆPos)"
+msgstr "在鼠标ä½ç½®è®¾ç½®è½´å¿ƒ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "网格步进乘以2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "网格步进除以2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -3545,26 +3729,27 @@ msgid "Update from Scene"
msgstr "从场景中更新"
#: editor/plugins/curve_editor_plugin.cpp
+#, fuzzy
msgid "Flat0"
-msgstr ""
+msgstr "Flat0"
#: editor/plugins/curve_editor_plugin.cpp
+#, fuzzy
msgid "Flat1"
-msgstr ""
+msgstr "Flat1"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease in"
-msgstr "缓入"
+msgstr "æ¸å…¥"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Ease out"
-msgstr "缓出"
+msgstr "æ¸å‡º"
#: editor/plugins/curve_editor_plugin.cpp
+#, fuzzy
msgid "Smoothstep"
-msgstr ""
+msgstr "圆滑级别"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Point"
@@ -3610,6 +3795,10 @@ msgstr "åˆ‡æ¢æ›²çº¿çº¿æ€§Tangent"
msgid "Hold Shift to edit tangents individually"
msgstr "æŒ‰ä½ Shift å¯å•独编辑切线"
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr "烘焙GI Probe"
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr "添加/删除色彩æ¸å˜ç‚¹"
@@ -3644,6 +3833,10 @@ msgid "Create Occluder Polygon"
msgstr "添加é®å…‰å¤šè¾¹å½¢"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "从头开始创建一个新的多边形。"
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr "编辑已存在的多边形:"
@@ -3659,58 +3852,6 @@ msgstr "Ctrl+鼠标左键:分割视图å—。"
msgid "RMB: Erase Point."
msgstr "é¼ æ ‡å³é”®:移除点。"
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr "从Line2D中移除顶点"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr "å‘Line2D添加顶点"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr "在Line2D中移动顶点"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr "选择顶点"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+拖拽:选择控制点"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr "鼠标左键:添加点"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr "é¼ æ ‡å³é”®:删除点"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr "添加点(在空白处)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr "拆分片段(使用线段)"
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr "删除顶点"
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr "Mesh为空ï¼"
@@ -3892,73 +4033,72 @@ msgid "Bake!"
msgstr "烘培ï¼"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Bake the navigation mesh.\n"
-msgstr "创建导航Mesh(网格)"
+msgstr "烘焙导航网格(mesh).\n"
#: editor/plugins/navigation_mesh_editor_plugin.cpp
-#, fuzzy
msgid "Clear the navigation mesh."
-msgstr "创建导航Mesh(网格)"
+msgstr "清除导航网格(mesh)。"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "正在设置é…ç½®..。"
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "正在计算网格大å°..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Creating heightfield..."
-msgstr "创建光的 Octree(八剿 ‘)"
+msgstr "创建高度图..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Marking walkable triangles..."
-msgstr "å¯ç¿»è¯‘字符串.."
+msgstr "标记å¯ç§»åŠ¨ä¸‰è§’å½¢..."
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "构建紧凑高度图..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "正在计算å¯è¡ŒåŒºåŸŸ..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Partitioning..."
-msgstr "警告"
+msgstr "分区中..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Creating contours..."
-msgstr "创建 Octree (八剿 ‘) 纹ç†"
+msgstr "正在创建轮廓..."
#: editor/plugins/navigation_mesh_generator.cpp
-#, fuzzy
msgid "Creating polymesh..."
-msgstr "创建轮廓网格(Outline Mesh).."
+msgstr "创建多边形网格..."
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Converting to native navigation mesh..."
-msgstr "创建导航Mesh(网格)"
+msgstr "转æ¢ä¸ºå¯¼èˆªç½‘æ ¼(mesh)..."
#: editor/plugins/navigation_mesh_generator.cpp
+#, fuzzy
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "导航网格生æˆè®¾ç½®:"
#: editor/plugins/navigation_mesh_generator.cpp
#, fuzzy
msgid "Parsing Geometry..."
-msgstr "è§£æžå¤šè¾¹å½¢ä¸­"
+msgstr "è§£æžå¤šè¾¹å½¢ä¸­..."
#: editor/plugins/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr ""
+msgstr "å®Œæˆ !"
#: editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
@@ -4117,16 +4257,46 @@ msgid "Move Out-Control in Curve"
msgstr "移动曲线外控制点"
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "选择顶点"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+拖拽:选择控制点"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "鼠标左键:添加点"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "é¼ æ ‡å³é”®:删除点"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr "选择控制点(Shift+拖动)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "添加点(在空白处)"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "拆分(曲线)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "删除顶点"
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr "关闭曲线"
@@ -4142,12 +4312,12 @@ msgstr "è®¾ç½®æ›²çº¿é¡¶ç‚¹åæ ‡"
#: editor/plugins/path_editor_plugin.cpp
#, fuzzy
msgid "Set Curve In Position"
-msgstr "设置的曲线输入ä½ç½®ï¼ˆPos)"
+msgstr "设置的曲线开始ä½ç½®ï¼ˆPos)"
#: editor/plugins/path_editor_plugin.cpp
#, fuzzy
msgid "Set Curve Out Position"
-msgstr "设置曲线输出ä½ç½®ï¼ˆPos)"
+msgstr "设置曲线结æŸä½ç½®ï¼ˆPos)"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Path"
@@ -4266,7 +4436,6 @@ msgstr "加载资æº"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4313,6 +4482,21 @@ msgid " Class Reference"
msgstr " 类引用"
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "排åº:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "å‘上移动"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "å‘下移动"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "下一个脚本"
@@ -4364,6 +4548,11 @@ msgstr "关闭文档"
msgid "Close All"
msgstr "关闭全部"
+#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Close Other Tabs"
+msgstr "关闭其他标签页"
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "è¿è¡Œ"
@@ -4374,13 +4563,11 @@ msgstr "切æ¢è„šæœ¬é¢æ¿"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr "查找.."
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr "查找下一项"
@@ -4486,33 +4673,22 @@ msgstr "å°å†™"
msgid "Capitalize"
msgstr "首字æ¯å¤§å†™"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "剪切"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "å¤åˆ¶"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "全选"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "å‘上移动"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "å‘下移动"
-
#: editor/plugins/script_text_editor.cpp
msgid "Delete Line"
msgstr "删除线"
@@ -4534,6 +4710,23 @@ msgid "Clone Down"
msgstr "æ‹·è´åˆ°ä¸‹ä¸€è¡Œ"
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "折å è¡Œ"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr "å–æ¶ˆæŠ˜å è¡Œ"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr "æŠ˜å æ‰€æœ‰è¡Œ"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr "å–æ¶ˆæŠ˜å æ‰€æœ‰è¡Œ"
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr "代ç è¡¥å…¨"
@@ -4579,12 +4772,10 @@ msgid "Convert To Lowercase"
msgstr "转æ¢ä¸ºå°å†™"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr "查找上一项"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr "替æ¢.."
@@ -4593,7 +4784,6 @@ msgid "Goto Function.."
msgstr "å‰å¾€å‡½æ•°.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr "å‰å¾€è¡Œ.."
@@ -4758,6 +4948,15 @@ msgid "View Plane Transform."
msgstr "视图平é¢å˜æ¢ã€‚"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr "缩放: "
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "语言:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr "旋转%s度。"
@@ -4838,6 +5037,10 @@ msgid "Vertices"
msgstr "顶点"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr "帧数"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr "与视图对é½"
@@ -4870,6 +5073,15 @@ msgid "View Information"
msgstr "查看信æ¯"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr "查看帧率"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "一åŠåˆ†è¾¨çއ"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr "音频监å¬å™¨"
@@ -5000,6 +5212,11 @@ msgid "Tool Scale"
msgstr "缩放工具"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "开关自由观察模å¼"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr "å˜æ¢"
@@ -5054,19 +5271,21 @@ msgstr "设置"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Settings"
-msgstr "æ•æ‰(snap)设置"
+msgstr "å¸é™„设置"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Translate Snap:"
-msgstr "ç§»åŠ¨æ•æ‰ï¼ˆSnap):"
+msgstr "移动å¸é™„:"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Rotate Snap (deg.):"
-msgstr "æ—‹è½¬æ•æ‰(Snap)(度):"
+msgstr "旋转å¸é™„(度):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Snap (%):"
-msgstr "ç¼©æ”¾æ•æ‰ï¼ˆï¼…):"
+msgstr "缩放å¸é™„(%):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Viewport Settings"
@@ -5169,14 +5388,12 @@ msgid "Insert Empty (After)"
msgstr "æ’入空白帧(之åŽï¼‰"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (Before)"
-msgstr "移动节点"
+msgstr "å¾€å‰ç§»åЍ"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Move (After)"
-msgstr "å‘左移动"
+msgstr "å¾€åŽç§»åЍ"
#: editor/plugins/style_box_editor_plugin.cpp
msgid "StyleBox Preview:"
@@ -5253,11 +5470,11 @@ msgstr "移除全部"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Edit theme.."
-msgstr ""
+msgstr "编辑主题.."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme editing menu."
-msgstr ""
+msgstr "主题编辑èœå•。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5273,7 +5490,12 @@ msgstr "创建主题模æ¿"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
-msgstr "创建编辑器主题模æ¿"
+msgstr "创建空编辑器主题模æ¿"
+
+#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
+msgid "Create From Current Editor Theme"
+msgstr "从现有编辑器主题模æ¿åˆ›å»º"
#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
@@ -5393,7 +5615,6 @@ msgid "Mirror Y"
msgstr "沿Y轴翻转"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Paint Tile"
msgstr "绘制砖å—地图"
@@ -5450,17 +5671,17 @@ msgid "Runnable"
msgstr "å¯ç”¨"
#: editor/project_export.cpp
-msgid "Delete patch '"
-msgstr "删除Patch"
+#, fuzzy
+msgid "Delete patch '%s' from list?"
+msgstr "删除Patch''%s'"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
msgstr "删除选中的 '%s'?"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted: "
-msgstr "没有下列平å°çš„导出模æ¿:"
+msgstr "没有下列平å°çš„导出模æ¿: "
#: editor/project_export.cpp
msgid "Presets"
@@ -5533,33 +5754,30 @@ msgid "Export templates for this platform are missing:"
msgstr "没有下列平å°çš„导出模æ¿:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export templates for this platform are missing/corrupted:"
-msgstr "没有下列平å°çš„导出模æ¿:"
+msgstr "没有此平å°çš„导出模æ¿:"
#: editor/project_export.cpp
msgid "Export With Debug"
msgstr "导出为调试"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path does not exist."
-msgstr "文件ä¸å­˜åœ¨ã€‚"
+msgstr "路径ä¸å­˜åœ¨ã€‚"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Please choose a 'project.godot' file."
-msgstr "请导出到项目目录之外ï¼"
+msgstr "请选择一个'project.godot'文件。"
#: editor/project_manager.cpp
msgid ""
"Your project will be created in a non empty folder (you might want to create "
"a new folder)."
-msgstr ""
+msgstr "您的工程在éžç©ºæ–‡ä»¶å¤¹ä¸­åˆ›å»º (您å¯èƒ½éœ€è¦å»ºç«‹ä¸€ä¸ªæ–°æ–‡ä»¶å¤¹)。"
#: editor/project_manager.cpp
msgid "Please choose a folder that does not contain a 'project.godot' file."
-msgstr ""
+msgstr "请选择一个ä¸åŒ…å«'project.godot'文件的文件夹。"
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -5567,25 +5785,23 @@ msgstr "已导入的项目"
#: editor/project_manager.cpp
msgid " "
-msgstr ""
+msgstr " .. "
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "ä¸ºé¡¹ç›®å‘½åæ˜¯ä¸€ä¸ªå¥½ä¸»æ„。"
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
msgstr "é¡¹ç›®è·¯å¾„éžæ³•(被外部修改?)。"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in project path."
-msgstr "无法在项目目录下创建project.godot文件。"
+msgstr "无法在项目目录下找到project.godot文件。"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't edit project.godot in project path."
-msgstr "无法在项目目录下创建project.godot文件。"
+msgstr "无法在项目目录下编辑project.godot文件。"
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
@@ -5596,14 +5812,12 @@ msgid "The following files failed extraction from package:"
msgstr "æå–以下文件失败:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Rename Project"
-msgstr "未命å项目"
+msgstr "é‡å‘½å项目"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Couldn't get project.godot in the project path."
-msgstr "无法在项目目录下创建project.godot文件。"
+msgstr "无法在项目目录下找到project.godot文件。"
#: editor/project_manager.cpp
msgid "New Game Project"
@@ -5626,7 +5840,6 @@ msgid "Project Name:"
msgstr "项目åç§°:"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Create folder"
msgstr "新建目录"
@@ -5647,9 +5860,8 @@ msgid "Unnamed Project"
msgstr "未命å项目"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Can't open project"
-msgstr "无法è¿è¡Œé¡¹ç›®"
+msgstr "无法打开项目"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -5685,6 +5897,8 @@ msgid ""
"Language changed.\n"
"The UI will update next time the editor or project manager starts."
msgstr ""
+"语言已更改。\n"
+"用户界é¢å°†åœ¨ä¸‹æ¬¡ç¼–辑器或项目管ç†å™¨å¯åŠ¨æ—¶æ›´æ–°ã€‚"
#: editor/project_manager.cpp
msgid ""
@@ -5717,14 +5931,19 @@ msgid "Exit"
msgstr "退出"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Restart Now"
-msgstr "釿–°å¼€å§‹ï¼ˆç§’):"
+msgstr "ç«‹å³é‡æ–°å¯åЍ"
#: editor/project_manager.cpp
msgid "Can't run project"
msgstr "无法è¿è¡Œé¡¹ç›®"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr "é”® "
@@ -5758,10 +5977,6 @@ msgid "Add Input Action Event"
msgstr "添加输入事件"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5879,31 +6094,29 @@ msgid "Add Global Property"
msgstr "添加Getter属性"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Select a setting item first!"
-msgstr "首先选择一个设置项目 ï¼"
+msgstr "请先选择一个设置项目 ï¼"
#: editor/project_settings_editor.cpp
-msgid "No property '"
-msgstr "没有属性 '"
+#, fuzzy
+msgid "No property '%s' exists."
+msgstr "没有属性 '%s'"
#: editor/project_settings_editor.cpp
-msgid "Setting '"
-msgstr "设置 '"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr "'%s'是内置设定,ä¸èƒ½åˆ é™¤ã€‚"
#: editor/project_settings_editor.cpp
msgid "Delete Item"
msgstr "删除输入事件"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Can't contain '/' or ':'"
-msgstr "无法连接到æœåС噍:"
+msgstr "ä¸èƒ½åŒ…å« \"/\" 或 \":\""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Already existing"
-msgstr "动作%s已存在ï¼"
+msgstr "å·²ç»å­˜åœ¨"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -5948,11 +6161,11 @@ msgstr "移除资æºé‡å®šå‘选项"
#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Changed Locale Filter"
-msgstr "æ›´æ”¹æ··åˆæ—¶é—´"
+msgstr "更改区域设置筛选模å¼"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "更改了区域设置筛选模å¼"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -6017,26 +6230,24 @@ msgstr "地区"
#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Locales Filter"
-msgstr "纹ç†è¿‡æ»¤:"
+msgstr "区域筛选器"
#: editor/project_settings_editor.cpp
#, fuzzy
msgid "Show all locales"
-msgstr "显示骨骼"
+msgstr "显示所有区域设置"
#: editor/project_settings_editor.cpp
msgid "Show only selected locales"
-msgstr ""
+msgstr "仅显示选定的区域设置"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Filter mode:"
-msgstr "筛选节点"
+msgstr "筛选模å¼ï¼š"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Locales:"
-msgstr "地区"
+msgstr "区域:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -6087,18 +6298,16 @@ msgid "New Script"
msgstr "新建脚本"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "添加骨骼"
+msgstr "转æ¢ä¸ºç‹¬ç«‹èµ„æº"
#: editor/property_editor.cpp
msgid "Show in File System"
msgstr "在资æºç®¡ç†å™¨ä¸­å±•示"
#: editor/property_editor.cpp
-#, fuzzy
msgid "Convert To %s"
-msgstr "转æ¢ä¸º.."
+msgstr "转æ¢ä¸º%s"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
@@ -6139,7 +6348,7 @@ msgstr "选择属性"
#: editor/property_selector.cpp
#, fuzzy
msgid "Select Virtual Method"
-msgstr "选择方å¼"
+msgstr "选择虚拟方法"
#: editor/property_selector.cpp
msgid "Select Method"
@@ -6262,7 +6471,7 @@ msgstr "废弃实例化"
#: editor/scene_tree_dock.cpp
msgid "Makes Sense!"
-msgstr "有é“ç†ï¼"
+msgstr "好的ï¼"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
@@ -6365,6 +6574,16 @@ msgid "Clear a script for the selected node."
msgstr "清除选中节点的脚本。"
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "移除"
+
+#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Local"
+msgstr "地区"
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr "ç¡®å®šè¦æ¸…除继承å—?(无法撤销ï¼ï¼‰"
@@ -6486,12 +6705,12 @@ msgstr "çˆ¶è·¯å¾„éžæ³•"
#: editor/script_create_dialog.cpp
msgid "Directory of the same name exists"
-msgstr ""
+msgstr "存在åŒå目录"
#: editor/script_create_dialog.cpp
#, fuzzy
msgid "File exists, will be reused"
-msgstr "文件已存在,确定è¦è¦†ç›–它å—?"
+msgstr "文件存在, 将被é‡ç”¨"
#: editor/script_create_dialog.cpp
msgid "Invalid extension"
@@ -6558,6 +6777,11 @@ msgid "Attach Node Script"
msgstr "设置节点的脚本"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "远程 "
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr "字节:"
@@ -6579,7 +6803,7 @@ msgstr "函数:"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "从列表中选å–一个或多个项目以显示图形。"
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6614,18 +6838,6 @@ msgid "Stack Trace (if applicable):"
msgstr "调用堆栈:"
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr "è¿œç¨‹å±žæ€§é¢æ¿"
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr "峿—¶åœºæ™¯æ ‘:"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr "远程对象属性: "
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr "性能分æž"
@@ -6719,19 +6931,19 @@ msgstr "æ”¹å˜æ–¹æ¡†å¤§å°"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Radius"
-msgstr "更改胶囊åŠå¾„"
+msgstr "修改胶囊体åŠå¾„"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Height"
-msgstr "更改胶囊高度"
+msgstr "修改胶囊体高度"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Ray Shape Length"
-msgstr "更改射线形状长度"
+msgstr "修改射线形状长度"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Notifier Extents"
-msgstr "更改通知器级别"
+msgstr "修改通知器级别"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Particles AABB"
@@ -6739,69 +6951,68 @@ msgstr "修改粒å­AABB"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
-msgstr "更改探针(Probe)范围"
+msgstr "修改探针(Probe)范围"
#: modules/gdnative/gd_native_library_editor.cpp
#, fuzzy
msgid "Library"
-msgstr "MeshLibrary(网格库).."
+msgstr "库"
#: modules/gdnative/gd_native_library_editor.cpp
-#, fuzzy
msgid "Status"
-msgstr "状æ€ï¼š"
+msgstr "状æ€"
#: modules/gdnative/gd_native_library_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "库: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr ""
+msgstr "GDNative"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr "convertå‡½æ•°å‚æ•°ç±»åž‹éžæ³•,请传入以“TYPE_â€æ‰“头的常é‡ã€‚"
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "没有足够的字节æ¥è§£ç æˆ–æ ¼å¼ä¸æ­£ç¡®ã€‚"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "step傿•°ä¸º0ï¼"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "脚本没有实例化"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr "没有基于脚本"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr "æ²¡æœ‰åŸºäºŽä¸€ä¸ªèµ„æºæ–‡ä»¶"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆç¼ºå°‘@path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆæ— æ³•加载脚本@path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆæ— æ•ˆè„šæœ¬@path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "éžæ³•çš„å­—å…¸å®žä¾‹ï¼ˆæ´¾ç”Ÿç±»éžæ³•)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "对象ä¸èƒ½æä¾›é•¿åº¦ã€‚"
@@ -6814,18 +7025,27 @@ msgid "GridMap Duplicate Selection"
msgstr "å¤åˆ¶é€‰ä¸­é¡¹"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Snap View"
-msgstr "æ•æ‰è§†å›¾"
+#, fuzzy
+msgid "Floor:"
+msgstr "目录:"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Prev Level (%sDown Wheel)"
-msgstr "上一级"
+msgid "Grid Map"
+msgstr "网格å¸é™„"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr "å¸é™„视图"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Next Level (%sUp Wheel)"
-msgstr "下一级"
+msgid "Previous Floor"
+msgstr "上一个目录"
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr "下一个目录"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Disabled"
@@ -6892,12 +7112,9 @@ msgid "Erase Area"
msgstr "擦除区域"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Duplicate"
-msgstr "选择->å¤åˆ¶"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Selection -> Clear"
-msgstr "选择->清空"
+#, fuzzy
+msgid "Clear Selection"
+msgstr "清除选中"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
@@ -6909,7 +7126,7 @@ msgstr "拾å–è·ç¦»:"
#: modules/mono/editor/mono_bottom_panel.cpp
msgid "Builds"
-msgstr ""
+msgstr "构建"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -7019,24 +7236,27 @@ msgid "Duplicate VisualScript Nodes"
msgstr "å¤åˆ¶ VisualScript 节点"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
-msgstr "按ä½Meta键放置一个Getter节点,按ä½Shift键放置一个通用签å。"
+#, fuzzy
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr "按ä½%s放置一个Getter节点,按ä½Shift键放置一个通用签å。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr "按ä½Ctrl键放置一个Getter节点。按ä½Shift键放置一个通用签å。"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
-msgstr "按ä½Meta键放置一个场景节点的引用节点。"
+#, fuzzy
+msgid "Hold %s to drop a simple reference to the node."
+msgstr "按ä½%s放置一个场景节点的引用节点。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "按ä½Ctrl键放置一个场景节点的引用节点。"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
-msgstr "按ä½Meta键放置å˜é‡çš„Setter节点。"
+#, fuzzy
+msgid "Hold %s to drop a Variable Setter."
+msgstr "按ä½%s放置å˜é‡çš„Setter节点。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
@@ -7108,7 +7328,7 @@ msgstr "获å–"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr ""
+msgstr "脚本已存在函数 '%s'"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Input Value"
@@ -7261,13 +7481,23 @@ msgid "Could not write file:\n"
msgstr "无法写入文件:\n"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
-msgstr "æ— æ³•è¯»å–æ–‡ä»¶:\n"
-
-#: platform/javascript/export/export.cpp
msgid "Could not open template for export:\n"
msgstr "无法打开导出模æ¿ï¼š\n"
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:\n"
+msgstr "无效的导出模æ¿ï¼š\n"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
+msgstr "无法读å–自定义HTML命令:\n"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
+msgstr "无法读å–å¯åŠ¨å›¾ç‰‡æ–‡ä»¶:\n"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7372,21 +7602,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr "path属性必须指å‘ä¸€ä¸ªåˆæ³•çš„Node2D节点æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-"Path属性必须指å‘ä¸€ä¸ªåˆæ³•çš„Viewport节点æ‰èƒ½å·¥ä½œï¼ŒåŒæ—¶æ­¤Viewport还需è¦å¯"
-"用'render target'。"
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-"ä¸ºäº†è®©æ­¤ç²¾çµæ­£å¸¸å·¥ä½œï¼Œå®ƒçš„path属性所指å‘çš„Viewport需è¦å¼€å¯'render target'。"
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7451,6 +7666,14 @@ msgstr ""
"CollisionShape节点必须拥有一个形状æ‰èƒ½è¿›è¡Œç¢°æ’žæ£€æµ‹å·¥ä½œï¼Œè¯·ä¸ºå®ƒåˆ›å»ºä¸€ä¸ªå½¢çŠ¶èµ„"
"æºï¼"
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr "正在绘制网格"
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr "正在完æˆåˆ’分"
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr "此节点需è¦è®¾ç½®NavigationMeshèµ„æºæ‰èƒ½å·¥ä½œã€‚"
@@ -7499,6 +7722,7 @@ msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
msgstr ""
+"VehicleWheel 为 VehicleBody æä¾›ä¸€ä¸ªè½¦è½®ç³»ç»Ÿã€‚请将它作为VehicleBodyçš„å­èŠ‚ç‚¹ã€‚"
#: scene/gui/color_picker.cpp
msgid "Raw Mode"
@@ -7520,6 +7744,11 @@ msgstr "æç¤ºï¼"
msgid "Please Confirm..."
msgstr "请确认..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "选择方å¼"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7539,6 +7768,11 @@ msgstr ""
"使用Container(VBox,HBoxç­‰ï¼‰ä½œä¸ºå…¶å­æŽ§ä»¶å¹¶æ‰‹åŠ¨æˆ–è®¾ç½®Control的自定义最å°å°º"
"寸。"
+#: scene/gui/tree.cpp
+#, fuzzy
+msgid "(Other)"
+msgstr "(其它)"
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7572,6 +7806,71 @@ msgstr "加载字体出错。"
msgid "Invalid font size."
msgstr "字体大å°éžæ³•。"
+#~ msgid "Cannot navigate to '"
+#~ msgstr "无法导航到 '"
+
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr ""
+#~ "\n"
+#~ "æº: "
+
+#~ msgid "Remove Point from Line2D"
+#~ msgstr "从Line2D中移除顶点"
+
+#~ msgid "Add Point to Line2D"
+#~ msgstr "å‘Line2D添加顶点"
+
+#~ msgid "Move Point in Line2D"
+#~ msgstr "在Line2D中移动顶点"
+
+#~ msgid "Split Segment (in line)"
+#~ msgstr "拆分片段(使用线段)"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#~ msgid "Setting '"
+#~ msgstr "设置 '"
+
+#~ msgid "Remote Inspector"
+#~ msgstr "è¿œç¨‹å±žæ€§é¢æ¿"
+
+#~ msgid "Live Scene Tree:"
+#~ msgstr "峿—¶åœºæ™¯æ ‘:"
+
+#~ msgid "Remote Object Properties: "
+#~ msgstr "远程对象属性: "
+
+#, fuzzy
+#~ msgid "Prev Level (%sDown Wheel)"
+#~ msgstr "上一级"
+
+#, fuzzy
+#~ msgid "Next Level (%sUp Wheel)"
+#~ msgstr "下一级"
+
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "选择->å¤åˆ¶"
+
+#~ msgid "Selection -> Clear"
+#~ msgstr "选择->清空"
+
+#~ msgid ""
+#~ "Path property must point to a valid Viewport node to work. Such Viewport "
+#~ "must be set to 'render target' mode."
+#~ msgstr ""
+#~ "Path属性必须指å‘ä¸€ä¸ªåˆæ³•çš„Viewport节点æ‰èƒ½å·¥ä½œï¼ŒåŒæ—¶æ­¤Viewport还需è¦å¯"
+#~ "用'render target'。"
+
+#~ msgid ""
+#~ "The Viewport set in the path property must be set as 'render target' in "
+#~ "order for this sprite to work."
+#~ msgstr ""
+#~ "ä¸ºäº†è®©æ­¤ç²¾çµæ­£å¸¸å·¥ä½œï¼Œå®ƒçš„path属性所指å‘çš„Viewport需è¦å¼€å¯'render "
+#~ "target'。"
+
#~ msgid "Filter:"
#~ msgstr "筛选:"
@@ -7596,9 +7895,6 @@ msgstr "字体大å°éžæ³•。"
#~ msgid "Removed:"
#~ msgstr "已移除:"
-#~ msgid "Error saving atlas:"
-#~ msgstr "ä¿å­˜è´´å›¾é›†å‡ºé”™:"
-
#~ msgid "Could not save atlas subtexture:"
#~ msgstr "无法ä¿å­˜ç²¾çµé›†å­è´´å›¾:"
@@ -7983,9 +8279,6 @@ msgstr "字体大å°éžæ³•。"
#~ msgid "Cropping Images"
#~ msgstr "剪è£å›¾ç‰‡"
-#~ msgid "Blitting Images"
-#~ msgstr "Blitting 图片"
-
#~ msgid "Couldn't save atlas image:"
#~ msgstr "无法ä¿å­˜ç²¾çµé›†å›¾ç‰‡:"
@@ -8358,9 +8651,6 @@ msgstr "字体大å°éžæ³•。"
#~ msgid "Save Translatable Strings"
#~ msgstr "ä¿å­˜å¯ç¿»è¯‘字符串"
-#~ msgid "Install Export Templates"
-#~ msgstr "安装导出模æ¿"
-
#~ msgid "Edit Script Options"
#~ msgstr "脚本编辑器选项"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index 3828ea059c..1035e4f6e8 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-07-26 13:45+0000\n"
+"PO-Revision-Date: 2017-11-26 14:45+0000\n"
"Last-Translator: zx-wt <ZX_WT@ymail.com>\n"
"Language-Team: Chinese (Hong Kong) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hant_HK/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.16-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -101,6 +101,7 @@ msgid "Anim Delete Keys"
msgstr "移除動畫幀"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Duplicate Selection"
msgstr "複製 Selection"
@@ -116,7 +117,7 @@ msgstr "移除é¸é …"
#: editor/animation_editor.cpp
msgid "Continuous"
-msgstr ""
+msgstr "連續"
#: editor/animation_editor.cpp
#, fuzzy
@@ -124,8 +125,9 @@ msgid "Discrete"
msgstr "中斷"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Trigger"
-msgstr ""
+msgstr "發動"
#: editor/animation_editor.cpp
msgid "Anim Add Key"
@@ -144,12 +146,14 @@ msgid "Scale From Cursor"
msgstr "由鼠標縮放"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Goto Next Step"
-msgstr ""
+msgstr "跳到下一步"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Goto Prev Step"
-msgstr ""
+msgstr "跳到上一步"
#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp
#: editor/property_editor.cpp
@@ -181,20 +185,23 @@ msgid "Transitions"
msgstr "éŽæ¸¡"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Optimize Animation"
-msgstr ""
+msgstr "優化動畫"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation"
msgstr ""
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Create NEW track for %s and insert key?"
-msgstr ""
+msgstr "為%s新增軌跡廿並æ’入關éµå¹€ï¼Ÿ"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "新增 %d 個新軌跡並æ’入關éµå¹€ï¼Ÿ"
#: editor/animation_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
@@ -202,26 +209,32 @@ msgstr ""
#: editor/plugins/mesh_instance_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
+#, fuzzy
msgid "Create"
msgstr "新增"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "新增並æ’入動畫"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Insert Track & Key"
-msgstr ""
+msgstr "æ’入軌跡和關éµå¹€"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Insert Key"
-msgstr ""
+msgstr "å‹•æ™æ’入關éµå¹€ï¼Ÿ"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Change Anim Len"
-msgstr ""
+msgstr "更改動畫長度"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Change Anim Loop"
msgstr "更改動畫循環"
@@ -230,6 +243,7 @@ msgid "Anim Create Typed Value Key"
msgstr ""
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Insert"
msgstr "æ’入動畫"
@@ -242,16 +256,18 @@ msgid "Anim Add Call Track"
msgstr ""
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Animation zoom."
-msgstr ""
+msgstr "動畫縮放。"
#: editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "時長:"
+msgstr "時長(秒):"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Animation length (in seconds)."
-msgstr "時長(秒):every"
+msgstr "時長(秒)。"
#: editor/animation_editor.cpp
msgid "Step (s):"
@@ -262,76 +278,91 @@ msgid "Cursor step snap (in seconds)."
msgstr ""
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Enable/Disable looping in animation."
-msgstr ""
+msgstr "é–‹ï¼é—œå‹•畫循環。"
#: editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr "新增軌迹"
+msgstr "新增軌迹。"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Move current track up."
-msgstr ""
+msgstr "上移ç¾åœ¨çš„軌迹。"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Move current track down."
-msgstr ""
+msgstr "下移ç¾åœ¨çš„軌迹。"
#: editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr ""
+msgstr "移除被é¸å–的軌迹。"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Track tools"
-msgstr ""
+msgstr "動畫軌迹工具"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Enable editing of individual keys by clicking them."
-msgstr ""
+msgstr "啟用單擊編輯å„個關éµå¹€çš„功能。"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Anim. Optimizer"
-msgstr ""
+msgstr "動畫優化工具"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Max. Linear Error:"
-msgstr ""
+msgstr "最大的線性錯誤:"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Max. Angular Error:"
-msgstr ""
+msgstr "最大的角度錯誤:"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Max Optimizable Angle:"
-msgstr ""
+msgstr "最大的優化角度:"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Optimize"
-msgstr ""
+msgstr "優化"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
-msgstr ""
+msgstr "ç”±Scene Treeé¸å–一個動畫播放器以編輯當中動畫。"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Key"
msgstr "é—œéµå¹€"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Transition"
msgstr "éŽæ¸¡"
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Scale Ratio:"
-msgstr ""
+msgstr "縮放比例:"
#: editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
msgstr ""
#: editor/animation_editor.cpp
+#, fuzzy
msgid "Remove invalid keys"
-msgstr ""
+msgstr "移除無效的關éµå¹€"
#: editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
@@ -374,16 +405,18 @@ msgid "No Matches"
msgstr "沒有相åŒ"
#: editor/code_editor.cpp
+#, fuzzy
msgid "Replaced %d occurrence(s)."
-msgstr ""
+msgstr "å–代了 %d 個。"
#: editor/code_editor.cpp
+#, fuzzy
msgid "Replace"
-msgstr "替æ›"
+msgstr "å–代"
#: editor/code_editor.cpp
msgid "Replace All"
-msgstr "全部替æ›"
+msgstr "全部å–代"
#: editor/code_editor.cpp
msgid "Match Case"
@@ -407,7 +440,7 @@ msgstr "æœå°‹"
#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
-msgstr "查找"
+msgstr "尋找"
#: editor/code_editor.cpp
msgid "Next"
@@ -418,20 +451,24 @@ msgid "Not found!"
msgstr "找ä¸åˆ°!"
#: editor/code_editor.cpp
+#, fuzzy
msgid "Replace By"
-msgstr "替æ›ç‚º"
+msgstr "由這個å–代"
#: editor/code_editor.cpp
+#, fuzzy
msgid "Case Sensitive"
-msgstr "符åˆå¤§å°å¯«"
+msgstr "å€åˆ†å¤§å°å¯«"
#: editor/code_editor.cpp
+#, fuzzy
msgid "Backwards"
-msgstr ""
+msgstr "å‘後"
#: editor/code_editor.cpp
+#, fuzzy
msgid "Prompt On Replace"
-msgstr ""
+msgstr "å–ä»£æ™‚è©¢å•æˆ‘"
#: editor/code_editor.cpp
msgid "Skip"
@@ -586,7 +623,7 @@ msgstr "æè¿°ï¼š"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
-msgstr "æœå°‹å’Œæ›¿ä»£ç‚ºï¼š"
+msgstr "æœå°‹ä¸¦å–代為:"
#: editor/dependency_editor.cpp
msgid "Dependencies For:"
@@ -634,13 +671,21 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "開啟"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
+#, fuzzy
msgid "Remove selected files from the project? (no undo)"
-msgstr ""
+msgstr "從專案中刪除所é¸çš„æª”案?(此動作無法復原)"
#: editor/dependency_editor.cpp
msgid ""
@@ -651,7 +696,7 @@ msgstr ""
#: editor/dependency_editor.cpp
msgid "Cannot remove:\n"
-msgstr ""
+msgstr "無法移除:\n"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -666,8 +711,9 @@ msgid "Open Anyway"
msgstr "照常開啓"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid "Which action should be taken?"
-msgstr ""
+msgstr "採å–以下那項動作?"
#: editor/dependency_editor.cpp
msgid "Fix Dependencies"
@@ -704,9 +750,18 @@ msgstr "è¦åˆªé™¤é¸ä¸­æª”案?"
msgid "Delete"
msgstr "刪除"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+#, fuzzy
+msgid "Change Dictionary Value"
+msgstr "動畫變化數值"
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
-msgstr ""
+msgstr "Godot社å€çš„æ„Ÿè¬ï¼"
#: editor/editor_about.cpp
msgid "Thanks!"
@@ -714,7 +769,7 @@ msgstr "多è¬!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr ""
+msgstr "Godot Engine è²¢ç»è€…"
#: editor/editor_about.cpp
#, fuzzy
@@ -736,43 +791,45 @@ msgstr "開發者"
#: editor/editor_about.cpp
msgid "Authors"
-msgstr ""
+msgstr "作者"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr ""
+msgstr "白金級贊助人"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr ""
+msgstr "黃金級贊助人"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr ""
+msgstr "迷你贊助人"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr ""
+msgstr "é»ƒé‡‘ç´šææ¬¾äºº"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr ""
+msgstr "ç™½éŠ€ç´šææ¬¾äºº"
#: editor/editor_about.cpp
msgid "Bronze Donors"
-msgstr ""
+msgstr "é’éŠ…ææ¬¾äºº"
#: editor/editor_about.cpp
msgid "Donors"
-msgstr ""
+msgstr "ææ¬¾äºº"
#: editor/editor_about.cpp
+#, fuzzy
msgid "License"
-msgstr ""
+msgstr "æŽˆæ¬Šæ¢æ¬¾"
#: editor/editor_about.cpp
+#, fuzzy
msgid "Thirdparty License"
-msgstr ""
+msgstr "ç¬¬ä¸‰æ–¹æŽˆæ¬Šæ¢æ¬¾"
#: editor/editor_about.cpp
msgid ""
@@ -793,8 +850,9 @@ msgid "Components"
msgstr "內容:"
#: editor/editor_about.cpp
+#, fuzzy
msgid "Licenses"
-msgstr ""
+msgstr "æŽˆæ¬Šæ¢æ¬¾"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in zip format."
@@ -824,12 +882,13 @@ msgid "Package Installer"
msgstr ""
#: editor/editor_audio_buses.cpp
+#, fuzzy
msgid "Speakers"
-msgstr ""
+msgstr "å–‡å­"
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
-msgstr ""
+msgstr "新增效果"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -875,11 +934,12 @@ msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "éœéŸ³"
#: editor/editor_audio_buses.cpp
+#, fuzzy
msgid "Bypass"
-msgstr ""
+msgstr "ç•¥éŽ"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -960,7 +1020,7 @@ msgstr ""
#: editor/editor_audio_buses.cpp editor/property_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Load"
-msgstr ""
+msgstr "載入"
#: editor/editor_audio_buses.cpp
#, fuzzy
@@ -1141,6 +1201,11 @@ msgid "File Exists, Overwrite?"
msgstr "檔案已存在, è¦è¦†è“‹å—Ž?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "新增資料夾"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr "所有類型"
@@ -1148,12 +1213,6 @@ msgstr "所有類型"
msgid "All Files (*)"
msgstr "所有檔案(*)"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "開啟"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr "開啟檔案"
@@ -1198,11 +1257,12 @@ msgstr "釿–°æ•´ç†"
#: editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr ""
+msgstr "(ä¸ï¼‰é¡¯ç¤ºéš±è—的文件"
#: editor/editor_file_dialog.cpp
+#, fuzzy
msgid "Toggle Favorite"
-msgstr ""
+msgstr "(ä¸ï¼‰é¡¯ç¤ºæœ€æ„›"
#: editor/editor_file_dialog.cpp
msgid "Toggle Mode"
@@ -1221,7 +1281,7 @@ msgstr "上移最愛"
msgid "Move Favorite Down"
msgstr "下移最愛"
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Go to parent folder"
msgstr "無法新增資料夾"
@@ -1254,8 +1314,9 @@ msgstr "導入中:"
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
msgid "Search Help"
-msgstr ""
+msgstr "在幫助檔æœå°‹"
#: editor/editor_help.cpp
msgid "Class List:"
@@ -1266,8 +1327,9 @@ msgid "Search Classes"
msgstr ""
#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Top"
-msgstr ""
+msgstr "最頂"
#: editor/editor_help.cpp editor/property_editor.cpp
msgid "Class:"
@@ -1282,8 +1344,9 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
+#, fuzzy
msgid "Brief Description:"
-msgstr ""
+msgstr "簡述:"
#: editor/editor_help.cpp
msgid "Members"
@@ -1450,8 +1513,9 @@ msgid "Creating Thumbnail"
msgstr "正在建立縮圖"
#: editor/editor_node.cpp
+#, fuzzy
msgid "This operation can't be done without a tree root."
-msgstr ""
+msgstr "ä¸èƒ½åŸ·è¡Œé€™å€‹å‹•作,因為沒有tree root."
#: editor/editor_node.cpp
msgid ""
@@ -1463,8 +1527,9 @@ msgid "Failed to load resource."
msgstr "資æºåŠ è¼‰å¤±æ•—ã€‚"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Can't load MeshLibrary for merging!"
-msgstr ""
+msgstr "ä¸èƒ½è¼‰å…¥ MeshLibrary 以åˆä½µï¼"
#: editor/editor_node.cpp
msgid "Error saving MeshLibrary!"
@@ -1472,7 +1537,7 @@ msgstr "儲存MeshLibrary時出ç¾éŒ¯èª¤ï¼"
#: editor/editor_node.cpp
msgid "Can't load TileSet for merging!"
-msgstr ""
+msgstr "ä¸èƒ½è¼‰å…¥ TileSet 以åˆä½µï¼"
#: editor/editor_node.cpp
msgid "Error saving TileSet!"
@@ -1524,6 +1589,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
#, fuzzy
msgid "Copy Params"
msgstr "è¤‡è£½åƒæ•¸"
@@ -1542,8 +1622,9 @@ msgid "Copy Resource"
msgstr "貼上資æº"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Make Built-In"
-msgstr ""
+msgstr "設定æˆå…§å»ºçš„"
#: editor/editor_node.cpp
msgid "Make Sub-Resources Unique"
@@ -1559,18 +1640,24 @@ msgid "There is no defined scene to run."
msgstr "沒有å¯ä»¥å·²å®šç¾©çš„場景å¯ä»¥é‹è¡Œã€‚"
#: editor/editor_node.cpp
+#, fuzzy
msgid ""
"No main scene has ever been defined, select one?\n"
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"從未設定主è¦scene,è¦é¸æ“‡å—Žï¼Ÿ\n"
+"ç¨å¾Œä½ å¯ä»¥åœ¨ \"Project Settings\" under the 'application' category å†è¨­å®šã€‚"
#: editor/editor_node.cpp
+#, fuzzy
msgid ""
"Selected scene '%s' does not exist, select a valid one?\n"
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"é¸å–çš„ scene '%s' ä¸å­˜åœ¨ï¼Œè¦é¸æ“‡ä¸€å€‹æœ‰æ•ˆçš„嗎?\n"
+"ç¨å¾Œä½ å¯ä»¥åœ¨ \"Project Settings\" under the 'application' category å†è¨­å®šã€‚"
#: editor/editor_node.cpp
msgid ""
@@ -1578,6 +1665,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"é¸å–çš„ scene '%s'ã€€ä¸æ˜¯ scene 檔案,è¦é¸æ“‡ä¸€å€‹æœ‰æ•ˆçš„嗎?\n"
+"ç¨å¾Œä½ å¯ä»¥åœ¨ \"Project Settings\" under the 'application' category å†è¨­å®šã€‚"
#: editor/editor_node.cpp
msgid "Current scene was never saved, please save it prior to running."
@@ -1609,8 +1698,9 @@ msgid "Save & Close"
msgstr "儲存檔案"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Save changes to '%s' before closing?"
-msgstr ""
+msgstr "關閉å‰è¦å…ˆå„²å­˜å° '%s' 任何更改嗎?"
#: editor/editor_node.cpp
msgid "Save Scene As.."
@@ -1637,6 +1727,10 @@ msgid "Export Mesh Library"
msgstr "匯出Mesh Library"
#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr "匯出Tile Set"
@@ -1673,8 +1767,9 @@ msgid "Exit the editor?"
msgstr "è¦é›¢é–‹ç·¨è¼¯å™¨å—Ž?"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Open Project Manager?"
-msgstr ""
+msgstr "開啟 Project Manager?"
#: editor/editor_node.cpp
#, fuzzy
@@ -1682,12 +1777,14 @@ msgid "Save & Quit"
msgstr "儲存檔案"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Save changes to the following scene(s) before quitting?"
-msgstr ""
+msgstr "離開å‰è¦å…ˆå„²å­˜ä»¥ä¸‹ scene 的任何更改嗎?"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Save changes the following scene(s) before opening Project Manager?"
-msgstr ""
+msgstr "開啟 Project Manager å‰è¦å…ˆå„²å­˜ä»¥ä¸‹ scene 的任何更改嗎?"
#: editor/editor_node.cpp
msgid ""
@@ -1729,8 +1826,9 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+#, fuzzy
msgid "Ugh"
-msgstr ""
+msgstr "å—¯......"
#: editor/editor_node.cpp
msgid ""
@@ -1761,32 +1859,49 @@ msgid "Default"
msgstr "é è¨­"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Switch Scene Tab"
-msgstr ""
+msgstr "切æ›scene tab"
#: editor/editor_node.cpp
-msgid "%d more file(s)"
-msgstr ""
+msgid "%d more files or folders"
+msgstr "多 %d 檔案或資料夾"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "%d more folders"
+msgstr "無法新增資料夾"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
+msgid "%d more files"
+msgstr "多 %d 檔案"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
msgid "Distraction Free Mode"
-msgstr ""
+msgstr "無干擾模å¼"
#: editor/editor_node.cpp
msgid "Toggle distraction-free mode."
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Add a new scene."
+msgstr "新增軌迹"
+
+#: editor/editor_node.cpp
msgid "Scene"
msgstr "場景"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Go to previously opened scene."
-msgstr ""
+msgstr "上一個開啟的scene"
#: editor/editor_node.cpp
#, fuzzy
@@ -1794,12 +1909,14 @@ msgid "Next tab"
msgstr "下一個"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Previous tab"
-msgstr ""
+msgstr "上一個tab"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Filter Files.."
-msgstr ""
+msgstr "ç¯©é¸æª”案.."
#: editor/editor_node.cpp
msgid "Operations with scene files."
@@ -1846,13 +1963,12 @@ msgid "TileSet.."
msgstr "TileSet.."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "復原"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "é‡è£½"
@@ -1996,8 +2112,9 @@ msgid "Online Docs"
msgstr "關閉場景"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Q&A"
-msgstr ""
+msgstr "Q&A"
#: editor/editor_node.cpp
msgid "Issue Tracker"
@@ -2113,24 +2230,25 @@ msgid "Import"
msgstr "å°Žå…¥"
#: editor/editor_node.cpp
-msgid "FileSystem"
-msgstr ""
-
-#: editor/editor_node.cpp editor/node_dock.cpp
msgid "Node"
msgstr ""
#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "檔案系統"
+
+#: editor/editor_node.cpp
msgid "Output"
msgstr ""
#: editor/editor_node.cpp
msgid "Don't Save"
-msgstr ""
+msgstr "ä¸è¦å„²å­˜"
#: editor/editor_node.cpp
+#, fuzzy
msgid "Import Templates From ZIP File"
-msgstr ""
+msgstr "從ZIP檔"
#: editor/editor_node.cpp editor/project_export.cpp
msgid "Export Project"
@@ -2159,11 +2277,11 @@ msgstr "下一個腳本"
#: editor/editor_node.cpp
msgid "Load Errors"
-msgstr ""
+msgstr "載入錯誤"
#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
msgid "Select"
-msgstr ""
+msgstr "é¸å–"
#: editor/editor_node.cpp
#, fuzzy
@@ -2179,7 +2297,7 @@ msgstr "開啟資料夾"
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2197,8 +2315,9 @@ msgid "Creating Mesh Previews"
msgstr ""
#: editor/editor_plugin.cpp
+#, fuzzy
msgid "Thumbnail.."
-msgstr ""
+msgstr "縮圖"
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
@@ -2214,12 +2333,13 @@ msgid "Version:"
msgstr "版本:"
#: editor/editor_plugin_settings.cpp
+#, fuzzy
msgid "Author:"
-msgstr ""
+msgstr "作者:"
#: editor/editor_plugin_settings.cpp
msgid "Status:"
-msgstr ""
+msgstr "狀態:"
#: editor/editor_profiler.cpp
msgid "Stop Profiling"
@@ -2243,15 +2363,15 @@ msgstr ""
#: editor/editor_profiler.cpp
msgid "Frame %"
-msgstr ""
+msgstr "å¹€ %"
#: editor/editor_profiler.cpp
msgid "Physics Frame %"
-msgstr ""
+msgstr "物ç†å¹€ %"
#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp
msgid "Time:"
-msgstr ""
+msgstr "時間:"
#: editor/editor_profiler.cpp
msgid "Inclusive"
@@ -2263,11 +2383,11 @@ msgstr ""
#: editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr ""
+msgstr "幀 #:"
#: editor/editor_run_native.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "從列表é¸å–設備"
#: editor/editor_run_native.cpp
msgid ""
@@ -2288,8 +2408,9 @@ msgid "Couldn't instance script:"
msgstr ""
#: editor/editor_run_script.cpp
+#, fuzzy
msgid "Did you forget the 'tool' keyword?"
-msgstr ""
+msgstr "你是å¦å¿˜äº†é—œéµè©ž 'tool' ?"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
@@ -2300,8 +2421,9 @@ msgid "Did you forget the '_run' method?"
msgstr ""
#: editor/editor_settings.cpp
+#, fuzzy
msgid "Default (Same as Editor)"
-msgstr ""
+msgstr "é è¨­()"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -2316,20 +2438,21 @@ msgid "Import From Node:"
msgstr ""
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Re-Download"
-msgstr ""
+msgstr "釿–°ä¸‹è¼‰"
#: editor/export_template_manager.cpp
msgid "Uninstall"
-msgstr ""
+msgstr "解除安è£"
#: editor/export_template_manager.cpp
msgid "(Installed)"
-msgstr ""
+msgstr "(已安è£ï¼‰"
#: editor/export_template_manager.cpp
msgid "Download"
-msgstr ""
+msgstr "下載"
#: editor/export_template_manager.cpp
msgid "(Missing)"
@@ -2340,6 +2463,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2348,8 +2475,9 @@ msgid "Can't open export templates zip."
msgstr ""
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Invalid version.txt format inside templates."
-msgstr ""
+msgstr "無效的 version.txt æ ¼å¼ inside templates."
#: editor/export_template_manager.cpp
msgid ""
@@ -2358,8 +2486,9 @@ msgid ""
msgstr ""
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "No version.txt found inside templates."
-msgstr ""
+msgstr "找ä¸åˆ°version.txt inside templates."
#: editor/export_template_manager.cpp
msgid "Error creating path for templates:\n"
@@ -2374,6 +2503,111 @@ msgid "Importing:"
msgstr "導入中:"
#: editor/export_template_manager.cpp
+#, fuzzy
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr "找ä¸åˆ°é€™å€‹ç‰ˆæœ¬çš„下載連çµã€‚直接下載åªé©ç”¨æ–¼official releases."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr "ä¸èƒ½é€£æŽ¥ã€‚"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr "沒有回應。"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr "請求失敗。"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr "失敗:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't write file."
+msgstr "無法新增資料夾"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Complete."
+msgstr "下載出ç¾éŒ¯èª¤"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "請求時出ç¾éŒ¯èª¤"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "連到..."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Disconnected"
+msgstr "中斷"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "連到..."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "ä¸èƒ½é€£æŽ¥ã€‚"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "連到"
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr "請求中..."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "下載出ç¾éŒ¯èª¤"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "連到..."
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2383,8 +2617,9 @@ msgid "Installed Versions:"
msgstr "無效副檔å"
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Install From File"
-msgstr ""
+msgstr "從檔案下載"
#: editor/export_template_manager.cpp
#, fuzzy
@@ -2400,12 +2635,21 @@ msgstr "è¦åˆªé™¤é¸ä¸­æª”案?"
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "移除é¸é …"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2423,13 +2667,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-#, fuzzy
-msgid ""
-"\n"
-"Source: "
-msgstr "來æº:"
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2489,12 +2726,14 @@ msgid "Copy Path"
msgstr "複製路徑"
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "Rename.."
-msgstr ""
+msgstr "釿–°å‘½å.."
#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "Move To.."
-msgstr ""
+msgstr "æ¬åˆ°.."
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -2545,12 +2784,12 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid "Move"
-msgstr ""
+msgstr "移動"
#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/project_manager.cpp
msgid "Rename"
-msgstr ""
+msgstr "釿–°å‘½å.."
#: editor/groups_editor.cpp
msgid "Add to Group"
@@ -2628,7 +2867,7 @@ msgstr ""
#: editor/import/resource_importer_scene.cpp
msgid "Saving.."
-msgstr ""
+msgstr "儲存中.."
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
@@ -2695,8 +2934,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2707,48 +2945,55 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "刪除"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr ""
+msgstr "é–‹ï¼é—œè‡ªå‹•播放"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr ""
+msgstr "新的動畫å稱:"
#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
msgid "New Anim"
-msgstr ""
+msgstr "新增動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr ""
+msgstr "更改動畫å稱:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Delete Animation?"
-msgstr ""
+msgstr "刪除動畫?"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr ""
+msgstr "移除動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr ""
+msgstr "錯誤:無效的動畫å稱ï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr ""
+msgstr "錯誤:動畫å稱已存在ï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr ""
+msgstr "釿–°å‘½åå‹•ç•«"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
msgid "Add Animation"
-msgstr ""
+msgstr "新增動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
@@ -2768,23 +3013,23 @@ msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr ""
+msgstr "錯誤:沒有å¯ä»¥è¤‡è£½çš„å‹•ç•«ï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
-msgstr ""
+msgstr "錯誤:剪貼簿沒有動畫ï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
-msgstr ""
+msgstr "貼上的動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr ""
+msgstr "貼上動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr ""
+msgstr "錯誤:沒有å¯ä»¥ç·¨è¼¯çš„å‹•ç•«ï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
@@ -2799,8 +3044,9 @@ msgid "Stop animation playback. (S)"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
msgid "Play selected animation from start. (Shift+D)"
-msgstr ""
+msgstr "從頭開始播放é¸å–中的動畫。(Shift+D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
@@ -2847,7 +3093,58 @@ msgid "Animation Tools"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
msgid "Copy Animation"
+msgstr "複製動畫"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "æè¿°ï¼š"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Past"
+msgstr "貼上"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -3043,18 +3340,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't connect."
-msgstr "ä¸èƒ½é€£æŽ¥ã€‚"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr "ä¸èƒ½é€£åˆ°ä¸»æ©Ÿï¼š"
@@ -3063,31 +3352,15 @@ msgid "No response from host:"
msgstr "主機沒有回應:"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr "沒有回應。"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Request failed, return code:"
msgstr "請求失敗,"
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr "請求失敗。"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr "失敗:"
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3117,15 +3390,6 @@ msgid "Resolving.."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Connecting.."
-msgstr "連到..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr "請求中..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
msgstr "請求時出ç¾éŒ¯èª¤"
@@ -3238,6 +3502,37 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new vertical guide"
+msgstr "新增"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Create new horizontal guide"
+msgstr "新增"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "åªé™é¸ä¸­"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3358,10 +3653,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3412,6 +3713,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3603,6 +3908,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3635,6 +3944,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3650,58 +3963,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4100,16 +4361,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4250,7 +4541,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4295,6 +4585,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "排åºï¼š"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "上移"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "下移"
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr "下一個腳本"
@@ -4348,6 +4653,10 @@ msgstr "關閉場景"
msgid "Close All"
msgstr "關閉"
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr "é‹è¡Œ"
@@ -4358,13 +4667,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4471,33 +4778,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr "剪下"
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr "複製"
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr "å…¨é¸"
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr "上移"
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr "下移"
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4520,6 +4816,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "跳到行"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4567,12 +4880,10 @@ msgid "Convert To Lowercase"
msgstr "轉為..."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4581,7 +4892,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4746,6 +5056,15 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Translating: "
+msgstr "翻譯:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4829,6 +5148,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4861,6 +5184,16 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "檔案"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Half Resolution"
+msgstr "縮放selection"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4994,6 +5327,11 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Toggle Freelook"
+msgstr "全螢幕"
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5271,6 +5609,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5448,7 +5790,7 @@ msgstr "啟用"
#: editor/project_export.cpp
#, fuzzy
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr "刪除"
#: editor/project_export.cpp
@@ -5718,6 +6060,12 @@ msgstr ""
msgid "Can't run project"
msgstr "ä¸èƒ½é€£æŽ¥ã€‚"
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5751,10 +6099,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr "Meta+"
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr "Shift+"
@@ -5878,13 +6222,12 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
-msgid "Setting '"
-msgstr "設定"
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
#: editor/project_settings_editor.cpp
#, fuzzy
@@ -6365,6 +6708,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "移除"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6559,6 +6911,11 @@ msgid "Attach Node Script"
msgstr "下一個腳本"
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "移除"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6615,19 +6972,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-#, fuzzy
-msgid "Live Scene Tree:"
-msgstr "儲存場景"
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6760,49 +7104,49 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a script"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6817,15 +7161,23 @@ msgid "GridMap Duplicate Selection"
msgstr "複製 Selection"
#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Previous Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6896,13 +7248,8 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "åªé™é¸ä¸­"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "åªé™é¸ä¸­"
+msgid "Clear Selection"
+msgstr "縮放selection"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -7028,7 +7375,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7036,7 +7383,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7044,7 +7391,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7284,12 +7631,22 @@ msgstr "無法新增資料夾"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr "無法新增資料夾"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr "管ç†è¼¸å‡ºç¯„本"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read custom HTML shell:\n"
+msgstr "無法新增資料夾"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
msgstr "無法新增資料夾"
#: scene/2d/animated_sprite.cpp
@@ -7381,18 +7738,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7451,6 +7796,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7514,6 +7867,11 @@ msgstr "警告!"
msgid "Please Confirm..."
msgstr "請確èª..."
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "鏿“‡æ¨¡å¼"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7528,6 +7886,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7558,6 +7920,31 @@ msgstr "載入字形出ç¾éŒ¯èª¤"
msgid "Invalid font size."
msgstr "無效字型"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Source: "
+#~ msgstr "來æº:"
+
+#~ msgid "Meta+"
+#~ msgstr "Meta+"
+
+#, fuzzy
+#~ msgid "Setting '"
+#~ msgstr "設定"
+
+#, fuzzy
+#~ msgid "Live Scene Tree:"
+#~ msgstr "儲存場景"
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "åªé™é¸ä¸­"
+
+#, fuzzy
+#~ msgid "Selection -> Clear"
+#~ msgstr "åªé™é¸ä¸­"
+
#~ msgid "Filter:"
#~ msgstr "篩é¸:"
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index 7a392613d2..8a68c1f1a7 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -5,21 +5,23 @@
#
# Allen H <w84miracle@gmail.com>, 2017.
# Chao Yu <casd82@gmail.com>, 2017.
+# Cliffs Dover <bottle@dancingbottle.com>, 2017.
+# Matt <chchwy@gmail.com>, 2017.
# popcade <popcade@gmail.com>, 2016.
# Sam Pan <sampan66@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2017-07-31 15:51+0000\n"
-"Last-Translator: Chao Yu <casd82@gmail.com>\n"
+"PO-Revision-Date: 2017-11-24 10:45+0000\n"
+"Last-Translator: Matt <chchwy@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hant/>\n"
"Language: zh_TW\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.16-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
#: editor/animation_editor.cpp
msgid "Disabled"
@@ -51,39 +53,39 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr ""
+msgstr "添加動畫軌"
#: editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr ""
+msgstr "複製動畫關éµç•«æ ¼"
#: editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr ""
+msgstr "上移動畫軌"
#: editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr ""
+msgstr "動畫軌下移"
#: editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr ""
+msgstr "刪除動畫軌"
#: editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr ""
+msgstr "設定轉場效果為:"
#: editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr ""
+msgstr "釿–°å‘½å動畫軌"
#: editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr ""
+msgstr "改變動畫軌內æ’"
#: editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr ""
+msgstr "動畫軌改變模å¼"
#: editor/animation_editor.cpp
msgid "Anim Track Change Wrap Mode"
@@ -99,9 +101,10 @@ msgstr "ç·¨è¼¯æ‰€é¸æ›²ç·š"
#: editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr ""
+msgstr "刪除動畫關éµç•«æ ¼"
#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Duplicate Selection"
msgstr "複製所é¸"
@@ -115,11 +118,11 @@ msgstr "移除所é¸"
#: editor/animation_editor.cpp
msgid "Continuous"
-msgstr ""
+msgstr "連續"
#: editor/animation_editor.cpp
msgid "Discrete"
-msgstr ""
+msgstr "ä¸é€£çºŒ"
#: editor/animation_editor.cpp
msgid "Trigger"
@@ -127,19 +130,19 @@ msgstr "觸發器"
#: editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr ""
+msgstr "添加動畫關éµç•«æ ¼"
#: editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr ""
+msgstr "移動動畫畫格"
#: editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr ""
+msgstr "縮放所é¸"
#: editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr ""
+msgstr "由游標ä½ç½®ç¸®æ”¾"
#: editor/animation_editor.cpp
msgid "Goto Next Step"
@@ -156,19 +159,19 @@ msgstr "線性"
#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constant"
-msgstr ""
+msgstr "固定"
#: editor/animation_editor.cpp
msgid "In"
-msgstr ""
+msgstr "進"
#: editor/animation_editor.cpp
msgid "Out"
-msgstr ""
+msgstr "出"
#: editor/animation_editor.cpp
msgid "In-Out"
-msgstr ""
+msgstr "進出"
#: editor/animation_editor.cpp
msgid "Out-In"
@@ -176,7 +179,7 @@ msgstr ""
#: editor/animation_editor.cpp
msgid "Transitions"
-msgstr ""
+msgstr "轉場動畫"
#: editor/animation_editor.cpp
msgid "Optimize Animation"
@@ -184,15 +187,15 @@ msgstr "最佳化動畫"
#: editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr ""
+msgstr "清除動畫"
#: editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr ""
+msgstr "%s 新增新軌並æ’入畫格?"
#: editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "創建 %d 個新軌並æ’入畫格?"
#: editor/animation_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp
@@ -205,7 +208,7 @@ msgstr "新增"
#: editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "動畫建立與æ’å…¥"
#: editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
@@ -634,6 +637,13 @@ msgstr ""
msgid "Search Replacement Resource:"
msgstr ""
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
+#: editor/quick_open.cpp scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "開啟"
+
#: editor/dependency_editor.cpp
msgid "Owners Of:"
msgstr ""
@@ -656,7 +666,6 @@ msgid "Cannot remove:\n"
msgstr ""
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Error loading:"
msgstr "載入時發生錯誤:"
@@ -707,6 +716,14 @@ msgstr "ç¢ºå®šåˆªé™¤æ‰€é¸æ“‡çš„æª”案嗎?"
msgid "Delete"
msgstr "刪除"
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
msgstr ""
@@ -720,9 +737,8 @@ msgid "Godot Engine contributors"
msgstr ""
#: editor/editor_about.cpp
-#, fuzzy
msgid "Project Founders"
-msgstr "專案設定"
+msgstr "專案創始人"
#: editor/editor_about.cpp
msgid "Lead Developer"
@@ -972,9 +988,8 @@ msgid "Save this Bus Layout to a file."
msgstr ""
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
-#, fuzzy
msgid "Load Default"
-msgstr "é è¨­"
+msgstr "載入é è¨­å€¼"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
@@ -1066,7 +1081,6 @@ msgid "List:"
msgstr "列表:"
#: editor/editor_data.cpp
-#, fuzzy
msgid "Updating Scene"
msgstr "更新場景"
@@ -1124,6 +1138,11 @@ msgid "File Exists, Overwrite?"
msgstr "檔案已經存在, è¦è¦†å¯«å—Ž?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select Current Folder"
+msgstr "新增資料夾"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Recognized"
msgstr ""
@@ -1131,12 +1150,6 @@ msgstr ""
msgid "All Files (*)"
msgstr "所有類型檔案"
-#: editor/editor_file_dialog.cpp editor/editor_help.cpp editor/editor_node.cpp
-#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
-#: editor/property_selector.cpp editor/quick_open.cpp scene/gui/file_dialog.cpp
-msgid "Open"
-msgstr "開啟"
-
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
msgstr ""
@@ -1203,7 +1216,7 @@ msgstr ""
msgid "Move Favorite Down"
msgstr ""
-#: editor/editor_file_dialog.cpp
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
#, fuzzy
msgid "Go to parent folder"
msgstr "無法新增資料夾"
@@ -1315,7 +1328,6 @@ msgid "Constants:"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
msgstr "æè¿°:"
@@ -1334,9 +1346,8 @@ msgid ""
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
msgid "Methods"
-msgstr "方法:"
+msgstr "方法"
#: editor/editor_help.cpp
msgid "Method Description:"
@@ -1353,9 +1364,8 @@ msgid "Search Text"
msgstr "æœå°‹è©žå½™"
#: editor/editor_log.cpp
-#, fuzzy
msgid "Output:"
-msgstr " 輸出:"
+msgstr "輸出:"
#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp
#: editor/property_editor.cpp editor/script_editor_debugger.cpp
@@ -1389,14 +1399,12 @@ msgid "Error while saving."
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Can't open '%s'."
-msgstr "連接..."
+msgstr "無法開啟 \"%s\"。"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while parsing '%s'."
-msgstr "載入場景時發生錯誤"
+msgstr "åˆ†æž \"%s\" 時發生錯誤。"
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
@@ -1407,9 +1415,8 @@ msgid "Missing '%s' or its dependencies."
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while loading '%s'."
-msgstr "載入場景時發生錯誤"
+msgstr "載入 \"%s\" 時發生錯誤。"
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -1497,6 +1504,21 @@ msgid ""
msgstr ""
#: editor/editor_node.cpp
+msgid ""
+"This is a remote object so changes to it will not be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Collapse all properties"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Copy Params"
msgstr "è¤‡è£½åƒæ•¸"
@@ -1607,6 +1629,11 @@ msgid "Export Mesh Library"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "This operation can't be done without a root node."
+msgstr "æ­¤æ“作無法復原, 確定è¦é‚„原嗎?"
+
+#: editor/editor_node.cpp
msgid "Export Tile Set"
msgstr ""
@@ -1733,12 +1760,23 @@ msgid "Switch Scene Tab"
msgstr "切æ›å ´æ™¯åˆ†é "
#: editor/editor_node.cpp
-msgid "%d more file(s)"
+#, fuzzy
+msgid "%d more files or folders"
+msgstr "還有 %d 個檔案或資料夾"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "%d more folders"
msgstr "還有 %d 個檔案"
#: editor/editor_node.cpp
-msgid "%d more file(s) or folder(s)"
-msgstr "還有 %d 個檔案或資料夾"
+#, fuzzy
+msgid "%d more files"
+msgstr "還有 %d 個檔案"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr ""
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -1750,6 +1788,11 @@ msgstr ""
#: editor/editor_node.cpp
#, fuzzy
+msgid "Add a new scene."
+msgstr "更新場景中.."
+
+#: editor/editor_node.cpp
+#, fuzzy
msgid "Scene"
msgstr "場景"
@@ -1814,13 +1857,12 @@ msgid "TileSet.."
msgstr ""
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
-#: scene/gui/text_edit.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Undo"
msgstr "復原"
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
+#: scene/gui/line_edit.cpp
msgid "Redo"
msgstr "å–æ¶ˆã€Œå¾©åŽŸã€"
@@ -2079,11 +2121,11 @@ msgid "Import"
msgstr ""
#: editor/editor_node.cpp
-msgid "FileSystem"
+msgid "Node"
msgstr ""
-#: editor/editor_node.cpp editor/node_dock.cpp
-msgid "Node"
+#: editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
#: editor/editor_node.cpp
@@ -2142,7 +2184,7 @@ msgstr ""
msgid "Open Script Editor"
msgstr ""
-#: editor/editor_node.cpp
+#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
msgstr ""
@@ -2303,6 +2345,10 @@ msgid "(Current)"
msgstr ""
#: editor/export_template_manager.cpp
+msgid "Retrieving mirrors, please wait.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
msgstr ""
@@ -2337,6 +2383,109 @@ msgid "Importing:"
msgstr ""
#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "連接..."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't write file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download Complete."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Error requesting url: "
+msgstr "載入場景時發生錯誤"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connecting to Mirror.."
+msgstr "連接..."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Disconnected"
+msgstr "æ–·ç·š"
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "連接..."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Can't Conect"
+msgstr "連接..."
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connected"
+msgstr "連接..."
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Downloading"
+msgstr "載入時發生錯誤:"
+
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Connection Error"
+msgstr "連接..."
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
msgid "Current Version:"
msgstr ""
@@ -2360,12 +2509,21 @@ msgstr ""
msgid "Export Template Manager"
msgstr ""
+#: editor/export_template_manager.cpp
+#, fuzzy
+msgid "Download Templates"
+msgstr "載入場景時發生錯誤"
+
+#: editor/export_template_manager.cpp
+msgid "Select mirror from list: "
+msgstr ""
+
#: editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
#: editor/filesystem_dock.cpp
-msgid "Cannot navigate to '"
+msgid "Cannot navigate to '%s' as it has not been found in the file system!"
msgstr ""
#: editor/filesystem_dock.cpp
@@ -2383,12 +2541,6 @@ msgid ""
msgstr ""
#: editor/filesystem_dock.cpp
-msgid ""
-"\n"
-"Source: "
-msgstr ""
-
-#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
msgstr ""
@@ -2651,8 +2803,7 @@ msgid "Remove Poly And Point"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#: editor/plugins/light_occluder_2d_editor_plugin.cpp
-msgid "Create a new polygon from scratch."
+msgid "Create a new polygon from scratch"
msgstr ""
#: editor/plugins/abstract_polygon_2d_editor.cpp
@@ -2663,6 +2814,11 @@ msgid ""
"RMB: Erase Point."
msgstr ""
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
+msgid "Delete points"
+msgstr "刪除"
+
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
msgstr ""
@@ -2807,6 +2963,55 @@ msgid "Copy Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Directions"
+msgstr "æè¿°:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
msgstr ""
@@ -2999,19 +3204,10 @@ msgid "Can't resolve hostname:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Can't resolve."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
-msgid "Can't connect."
-msgstr "連接..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
msgstr ""
@@ -3020,30 +3216,14 @@ msgid "No response from host:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "No response."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Req. Failed."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Redirect Loop."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Failed:"
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
msgstr ""
@@ -3073,15 +3253,6 @@ msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "Connecting.."
-msgstr "連接..."
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-msgid "Requesting.."
-msgstr ""
-
-#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Error making request"
msgstr "載入場景時發生錯誤"
@@ -3194,6 +3365,35 @@ msgid "Move Action"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove vertical guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
+msgid "Remove horizontal guide"
+msgstr "移除"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create new horizontal and vertical guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
msgstr ""
@@ -3314,10 +3514,16 @@ msgid "Snap to other nodes"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
msgstr ""
@@ -3368,6 +3574,10 @@ msgid "Show rulers"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
msgstr ""
@@ -3557,6 +3767,10 @@ msgstr ""
msgid "Hold Shift to edit tangents individually"
msgstr ""
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
msgstr ""
@@ -3589,6 +3803,10 @@ msgid "Create Occluder Polygon"
msgstr ""
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Edit existing polygon:"
msgstr ""
@@ -3604,58 +3822,6 @@ msgstr ""
msgid "RMB: Erase Point."
msgstr ""
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Remove Point from Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Add Point to Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Move Point in Line2D"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Select Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Shift+Drag: Select Control Points"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Click: Add Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Right Click: Delete Point"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Add Point (in empty space)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-msgid "Split Segment (in line)"
-msgstr ""
-
-#: editor/plugins/line_2d_editor_plugin.cpp
-#: editor/plugins/path_2d_editor_plugin.cpp
-#: editor/plugins/path_editor_plugin.cpp
-msgid "Delete Point"
-msgstr ""
-
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
msgstr ""
@@ -4054,16 +4220,46 @@ msgid "Move Out-Control in Curve"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr ""
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
msgstr ""
@@ -4203,7 +4399,6 @@ msgstr ""
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Paste"
@@ -4248,6 +4443,21 @@ msgid " Class Reference"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Sort"
+msgstr "排åº:"
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
msgid "Next script"
msgstr ""
@@ -4299,6 +4509,10 @@ msgstr ""
msgid "Close All"
msgstr ""
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr ""
+
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
msgid "Run"
msgstr ""
@@ -4309,13 +4523,11 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
msgstr ""
@@ -4421,33 +4633,22 @@ msgstr ""
msgid "Capitalize"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Cut"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
msgid "Copy"
msgstr ""
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp scene/gui/line_edit.cpp
+#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Select All"
msgstr ""
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Up"
-msgstr ""
-
-#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
-msgid "Move Down"
-msgstr ""
-
#: editor/plugins/script_text_editor.cpp
#, fuzzy
msgid "Delete Line"
@@ -4470,6 +4671,23 @@ msgid "Clone Down"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+#, fuzzy
+msgid "Fold Line"
+msgstr "å‰å¾€ç¬¬...行"
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
msgstr ""
@@ -4517,12 +4735,10 @@ msgid "Convert To Lowercase"
msgstr "è½‰æ›æˆ.."
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
msgstr ""
@@ -4531,7 +4747,6 @@ msgid "Goto Function.."
msgstr ""
#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
msgstr ""
@@ -4696,6 +4911,14 @@ msgid "View Plane Transform."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
msgstr ""
@@ -4777,6 +5000,10 @@ msgid "Vertices"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
@@ -4809,6 +5036,15 @@ msgid "View Information"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View FPS"
+msgstr "éŽæ¿¾æª”案.."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
@@ -4940,6 +5176,10 @@ msgid "Tool Scale"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
msgstr ""
@@ -5215,6 +5455,10 @@ msgid "Create Empty Editor Template"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
+msgid "Create From Current Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
msgstr ""
@@ -5390,7 +5634,7 @@ msgid "Runnable"
msgstr ""
#: editor/project_export.cpp
-msgid "Delete patch '"
+msgid "Delete patch '%s' from list?"
msgstr ""
#: editor/project_export.cpp
@@ -5657,6 +5901,12 @@ msgstr ""
msgid "Can't run project"
msgstr "連接..."
+#: editor/project_manager.cpp
+msgid ""
+"You don't currently have any projects.\n"
+"Would you like to explore the official example projects in the Asset Library?"
+msgstr ""
+
#: editor/project_settings_editor.cpp
msgid "Key "
msgstr ""
@@ -5690,10 +5940,6 @@ msgid "Add Input Action Event"
msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-msgid "Meta+"
-msgstr ""
-
-#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Shift+"
msgstr ""
@@ -5815,11 +6061,11 @@ msgid "Select a setting item first!"
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "No property '"
+msgid "No property '%s' exists."
msgstr ""
#: editor/project_settings_editor.cpp
-msgid "Setting '"
+msgid "Setting '%s' is internal, and it can't be deleted."
msgstr ""
#: editor/project_settings_editor.cpp
@@ -6292,6 +6538,15 @@ msgid "Clear a script for the selected node."
msgstr ""
#: editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Remote"
+msgstr "移除"
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
msgstr ""
@@ -6479,6 +6734,11 @@ msgid "Attach Node Script"
msgstr ""
#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote "
+msgstr "移除"
+
+#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
@@ -6535,18 +6795,6 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: editor/script_editor_debugger.cpp
-msgid "Remote Inspector"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Live Scene Tree:"
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
-msgid "Remote Object Properties: "
-msgstr ""
-
-#: editor/script_editor_debugger.cpp
msgid "Profiler"
msgstr ""
@@ -6683,54 +6931,54 @@ msgstr ""
msgid "GDNative"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
-#: modules/gdscript/gd_functions.cpp modules/mono/glue/glue_header.h
+#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "解碼字節ä½å…ƒä¸è¶³ï¼Œæˆ–為無效格å¼ã€‚"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "step argument is zero!"
msgstr "step引數為0!"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
msgstr "éžç‚ºå–®ä¸€äº‹ä»¶è…³æœ¬"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Not based on a script"
msgstr "æœªä¾æ“šè…³æœ¬"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Not based on a resource file"
msgstr "æœªä¾æ“šè³‡æºæª”案"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary format (missing @path)"
msgstr "無效的事件詞典格å¼(éºå¤± @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr "無效的事件詞典格å¼(無法載入腳本 @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
#, fuzzy
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr "無效的事件詞典格å¼(無效的腳本 @path)"
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
msgstr ""
-#: modules/gdscript/gd_functions.cpp
+#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr ""
@@ -6745,15 +6993,24 @@ msgid "GridMap Duplicate Selection"
msgstr "複製所é¸"
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Snap View"
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Prev Level (%sDown Wheel)"
+msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-msgid "Next Level (%sUp Wheel)"
+#, fuzzy
+msgid "Previous Floor"
+msgstr "上個分é "
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -6824,13 +7081,8 @@ msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
-msgid "Selection -> Duplicate"
-msgstr "åƒ…é¸æ“‡å€åŸŸ"
-
-#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
-msgid "Selection -> Clear"
-msgstr "åƒ…é¸æ“‡å€åŸŸ"
+msgid "Clear Selection"
+msgstr "æ‰€æœ‰çš„é¸æ“‡"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -6954,7 +7206,7 @@ msgid "Duplicate VisualScript Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6962,7 +7214,7 @@ msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a simple reference to the node."
+msgid "Hold %s to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -6970,7 +7222,7 @@ msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Hold Meta to drop a Variable Setter."
+msgid "Hold %s to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -7198,13 +7450,22 @@ msgid "Could not write file:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:\n"
+msgid "Could not open template for export:\n"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:\n"
+msgid "Invalid export template:\n"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read custom HTML shell:\n"
msgstr ""
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read boot splash image file:\n"
+msgstr "無法新增資料夾"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
@@ -7300,18 +7561,6 @@ msgstr ""
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/sprite.cpp
-msgid ""
-"Path property must point to a valid Viewport node to work. Such Viewport "
-"must be set to 'render target' mode."
-msgstr ""
-
-#: scene/2d/sprite.cpp
-msgid ""
-"The Viewport set in the path property must be set as 'render target' in "
-"order for this sprite to work."
-msgstr ""
-
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
@@ -7370,6 +7619,14 @@ msgid ""
"shape resource for it!"
msgstr ""
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
@@ -7433,6 +7690,11 @@ msgstr ""
msgid "Please Confirm..."
msgstr ""
+#: scene/gui/file_dialog.cpp
+#, fuzzy
+msgid "Select this Folder"
+msgstr "åƒ…é¸æ“‡å€åŸŸ"
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -7447,6 +7709,10 @@ msgid ""
"minimum size manually."
msgstr ""
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Setings (Rendering -> Viewport -"
@@ -7463,19 +7729,23 @@ msgstr ""
#: scene/resources/dynamic_font.cpp
msgid "Error initializing FreeType."
-msgstr ""
+msgstr "åˆå§‹åŒ– FreeType 錯誤。"
#: scene/resources/dynamic_font.cpp
msgid "Unknown font format."
-msgstr ""
+msgstr "未知的字體格å¼ã€‚"
#: scene/resources/dynamic_font.cpp
msgid "Error loading font."
-msgstr ""
+msgstr "讀å–字體錯誤。"
#: scene/resources/dynamic_font.cpp
msgid "Invalid font size."
-msgstr ""
+msgstr "無效的字體大å°ã€‚"
+
+#, fuzzy
+#~ msgid "Selection -> Duplicate"
+#~ msgstr "åƒ…é¸æ“‡å€åŸŸ"
#~ msgid "Filter:"
#~ msgstr "éŽæ¿¾å™¨:"
diff --git a/main/SCsub b/main/SCsub
index ae63b94864..2cc617fc2c 100644
--- a/main/SCsub
+++ b/main/SCsub
@@ -56,6 +56,5 @@ env.Command("#main/app_icon.gen.h", "#main/app_icon.png", make_app_icon)
SConscript('tests/SCsub')
-lib = env.Library("main", env.main_sources)
-
+lib = env.add_library("main", env.main_sources)
env.Prepend(LIBS=[lib])
diff --git a/main/main.cpp b/main/main.cpp
index e74402d7dd..1328807121 100755..100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -168,7 +168,6 @@ static String get_full_version_string() {
}
//#define DEBUG_INIT
-
#ifdef DEBUG_INIT
#define MAIN_PRINT(m_txt) print_line(m_txt)
#else
@@ -743,7 +742,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
#endif
}
- GLOBAL_DEF("logging/file_logging/enable_file_logging", true);
+ GLOBAL_DEF("logging/file_logging/enable_file_logging", false);
GLOBAL_DEF("logging/file_logging/log_path", "user://logs/log.txt");
GLOBAL_DEF("logging/file_logging/max_log_files", 10);
if (FileAccess::get_create_func(FileAccess::ACCESS_USERDATA) && GLOBAL_GET("logging/file_logging/enable_file_logging")) {
@@ -820,7 +819,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
OS::get_singleton()->_allow_hidpi = GLOBAL_DEF("display/window/dpi/allow_hidpi", false);
}
- use_vsync = GLOBAL_DEF("display/window/vsync/use_vsync", true);
+ video_mode.use_vsync = GLOBAL_DEF("display/window/vsync/use_vsync", true);
GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_allocation", 2);
GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_allocation.mobile", 3);
@@ -832,8 +831,6 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
OS::get_singleton()->_keep_screen_on = GLOBAL_DEF("display/window/energy_saving/keep_screen_on", true);
if (rtm == -1) {
rtm = GLOBAL_DEF("rendering/threads/thread_model", OS::RENDER_THREAD_SAFE);
- if (rtm >= 1) //hack for now
- rtm = 1;
}
if (rtm >= 0 && rtm < 3) {
@@ -912,6 +909,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
frame_delay = GLOBAL_DEF("application/run/frame_delay_msec", 0);
}
+ OS::get_singleton()->set_low_processor_usage_mode(GLOBAL_DEF("application/run/low_processor_mode", false));
+ OS::get_singleton()->set_low_processor_usage_mode_sleep_usec(GLOBAL_DEF("application/run/low_processor_mode_sleep_usec", 8000));
+
Engine::get_singleton()->set_frame_delay(frame_delay);
message_queue = memnew(MessageQueue);
@@ -993,8 +993,6 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
// also init our arvr_server from here
arvr_server = memnew(ARVRServer);
- OS::get_singleton()->set_use_vsync(use_vsync);
-
register_core_singletons();
MAIN_PRINT("Main: Setup Logo");
@@ -1775,7 +1773,7 @@ bool Main::iteration() {
return exit;
if (OS::get_singleton()->is_in_low_processor_usage_mode() || !OS::get_singleton()->can_draw())
- OS::get_singleton()->delay_usec(16600); //apply some delay to force idle time (results in about 60 FPS max)
+ OS::get_singleton()->delay_usec(OS::get_singleton()->get_low_processor_usage_mode_sleep_usec()); //apply some delay to force idle time (results in about 60 FPS max)
else {
uint32_t frame_delay = Engine::get_singleton()->get_frame_delay();
if (frame_delay)
diff --git a/main/splash_sponsors.png b/main/splash_sponsors.png
new file mode 100644
index 0000000000..d8677f1749
--- /dev/null
+++ b/main/splash_sponsors.png
Binary files differ
diff --git a/main/tests/SCsub b/main/tests/SCsub
index 03495c0649..26a0819ee8 100644
--- a/main/tests/SCsub
+++ b/main/tests/SCsub
@@ -9,6 +9,5 @@ Export('env')
# SConscript('math/SCsub');
-lib = env.Library("tests", env.tests_sources)
-
+lib = env.add_library("tests", env.tests_sources)
env.Prepend(LIBS=[lib])
diff --git a/main/tests/test_gdscript.cpp b/main/tests/test_gdscript.cpp
index b41b5f6452..f99fd5fd88 100644
--- a/main/tests/test_gdscript.cpp
+++ b/main/tests/test_gdscript.cpp
@@ -1057,7 +1057,7 @@ MainLoop *test(TestType p_type) {
return NULL;
}
-}
+} // namespace TestGDScript
#else
@@ -1067,6 +1067,6 @@ MainLoop *test(TestType p_type) {
return NULL;
}
-}
+} // namespace TestGDScript
#endif
diff --git a/main/tests/test_gdscript.h b/main/tests/test_gdscript.h
index f37b175913..cbbf7f3ef4 100644
--- a/main/tests/test_gdscript.h
+++ b/main/tests/test_gdscript.h
@@ -42,6 +42,6 @@ enum TestType {
};
MainLoop *test(TestType p_type);
-}
+} // namespace TestGDScript
#endif // TEST_GDSCRIPT_H
diff --git a/main/tests/test_image.cpp b/main/tests/test_image.cpp
index b94d93b2b1..0b7ba0edcc 100644
--- a/main/tests/test_image.cpp
+++ b/main/tests/test_image.cpp
@@ -65,4 +65,4 @@ MainLoop *test() {
return memnew(TestMainLoop);
}
-}
+} // namespace TestImage
diff --git a/main/tests/test_io.cpp b/main/tests/test_io.cpp
index f96c5cfe3c..1477df4415 100644
--- a/main/tests/test_io.cpp
+++ b/main/tests/test_io.cpp
@@ -118,7 +118,7 @@ MainLoop *test() {
return memnew(TestMainLoop);
}
-}
+} // namespace TestIO
#else
@@ -128,5 +128,5 @@ MainLoop *test() {
return NULL;
}
-}
+} // namespace TestIO
#endif
diff --git a/main/tests/test_math.cpp b/main/tests/test_math.cpp
index 3ba8ef51b4..7d88372ee6 100644
--- a/main/tests/test_math.cpp
+++ b/main/tests/test_math.cpp
@@ -684,4 +684,4 @@ MainLoop *test() {
return NULL;
}
-}
+} // namespace TestMath
diff --git a/main/tests/test_physics.cpp b/main/tests/test_physics.cpp
index 1c50470544..e374113b67 100644
--- a/main/tests/test_physics.cpp
+++ b/main/tests/test_physics.cpp
@@ -435,4 +435,4 @@ MainLoop *test() {
return memnew(TestPhysicsMainLoop);
}
-}
+} // namespace TestPhysics
diff --git a/main/tests/test_physics_2d.cpp b/main/tests/test_physics_2d.cpp
index 7d596fbda3..41b7893032 100644
--- a/main/tests/test_physics_2d.cpp
+++ b/main/tests/test_physics_2d.cpp
@@ -431,4 +431,4 @@ MainLoop *test() {
return memnew(TestPhysics2DMainLoop);
}
-}
+} // namespace TestPhysics2D
diff --git a/main/tests/test_render.cpp b/main/tests/test_render.cpp
index cbf1a57855..9860a4a447 100644
--- a/main/tests/test_render.cpp
+++ b/main/tests/test_render.cpp
@@ -241,4 +241,4 @@ MainLoop *test() {
return memnew(TestMainLoop);
}
-}
+} // namespace TestRender
diff --git a/main/tests/test_shader_lang.cpp b/main/tests/test_shader_lang.cpp
index ddb2ed5e75..679e54451e 100644
--- a/main/tests/test_shader_lang.cpp
+++ b/main/tests/test_shader_lang.cpp
@@ -339,4 +339,4 @@ MainLoop *test() {
return NULL;
}
-}
+} // namespace TestShaderLang
diff --git a/main/tests/test_string.cpp b/main/tests/test_string.cpp
index 88d7702acc..db57788ade 100644
--- a/main/tests/test_string.cpp
+++ b/main/tests/test_string.cpp
@@ -919,4 +919,4 @@ MainLoop *test() {
return NULL;
}
-}
+} // namespace TestString
diff --git a/methods.py b/methods.py
index 2be73f02d2..e861303e63 100644
--- a/methods.py
+++ b/methods.py
@@ -1495,26 +1495,27 @@ def split_lib(self, libname):
base = string.join(fname.split("/")[:2], "/")
if base != cur_base and len(list) > max_src:
if num > 0:
- lib = env.Library(libname + str(num), list)
+ lib = env.add_library(libname + str(num), list)
lib_list.append(lib)
list = []
num = num + 1
cur_base = base
list.append(f)
- lib = env.Library(libname + str(num), list)
+ lib = env.add_library(libname + str(num), list)
lib_list.append(lib)
if len(lib_list) > 0:
import os, sys
if os.name == 'posix' and sys.platform == 'msys':
env.Replace(ARFLAGS=['rcsT'])
- lib = env.Library(libname + "_collated", lib_list)
+ lib = env.add_library(libname + "_collated", lib_list)
lib_list = [lib]
lib_base = []
env.add_source_files(lib_base, "*.cpp")
- lib_list.insert(0, env.Library(libname, lib_base))
+ lib = env.add_library(libname, lib_base)
+ lib_list.insert(0, lib)
env.Prepend(LIBS=lib_list)
@@ -1752,3 +1753,18 @@ def precious_program(env, program, sources, **args):
program = env.ProgramOriginal(program, sources, **args)
env.Precious(program)
return program
+
+def add_shared_library(env, name, sources, **args):
+ library = env.SharedLibrary(name, sources, **args)
+ env.NoCache(library)
+ return library
+
+def add_library(env, name, sources, **args):
+ library = env.Library(name, sources, **args)
+ env.NoCache(library)
+ return library
+
+def add_program(env, name, sources, **args):
+ program = env.Program(name, sources, **args)
+ env.NoCache(program)
+ return program
diff --git a/misc/hooks/pre-commit-clang-format b/misc/hooks/pre-commit-clang-format
index d2d65a7428..8ef4e27748 100755
--- a/misc/hooks/pre-commit-clang-format
+++ b/misc/hooks/pre-commit-clang-format
@@ -31,7 +31,7 @@ PARSE_EXTS=true
# File types to parse. Only effective when PARSE_EXTS is true.
# FILE_EXTS=".c .h .cpp .hpp"
-FILE_EXTS=".c .h .cpp .hpp .cc .hh .cxx .m .mm .inc"
+FILE_EXTS=".c .h .cpp .hpp .cc .hh .cxx .m .mm .inc *.java"
# Use pygmentize instead of cat to parse diff with highlighting.
# Install it with `pip install pygments` (Linux) or `easy_install Pygments` (Mac)
diff --git a/misc/travis/clang-format.sh b/misc/travis/clang-format.sh
index 741d3bff1b..d1e37cc10e 100755
--- a/misc/travis/clang-format.sh
+++ b/misc/travis/clang-format.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-CLANG_FORMAT=clang-format-3.9
+CLANG_FORMAT=clang-format-5.0
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
# Check the whole commit range against $TRAVIS_BRANCH, the base merge branch
@@ -11,7 +11,7 @@ else
RANGE=HEAD
fi
-FILES=$(git diff-tree --no-commit-id --name-only -r $RANGE | grep -v thirdparty/ | grep -E "\.(c|h|cpp|hpp|cc|hh|cxx|m|mm|inc)$")
+FILES=$(git diff-tree --no-commit-id --name-only -r $RANGE | grep -v thirdparty/ | grep -E "\.(c|h|cpp|hpp|cc|hh|cxx|m|mm|inc|java)$")
echo "Checking files:\n$FILES"
# create a random filename to store our generated patch
diff --git a/modules/SCsub b/modules/SCsub
index c1cf5a6c1a..e3c535e981 100644
--- a/modules/SCsub
+++ b/modules/SCsub
@@ -17,6 +17,6 @@ for x in env.module_list:
env_modules.Append(CPPFLAGS=["-DMODULE_" + x.upper() + "_ENABLED"])
SConscript(x + "/SCsub")
-lib = env_modules.Library("modules", env.modules_sources)
+lib = env_modules.add_library("modules", env.modules_sources)
env.Prepend(LIBS=[lib])
diff --git a/modules/bullet/area_bullet.cpp b/modules/bullet/area_bullet.cpp
index 54024b4f90..fad6f52cea 100644
--- a/modules/bullet/area_bullet.cpp
+++ b/modules/bullet/area_bullet.cpp
@@ -37,19 +37,19 @@
#include "collision_object_bullet.h"
#include "space_bullet.h"
-AreaBullet::AreaBullet()
- : RigidCollisionObjectBullet(CollisionObjectBullet::TYPE_AREA),
- monitorable(true),
- isScratched(false),
- spOv_mode(PhysicsServer::AREA_SPACE_OVERRIDE_DISABLED),
- spOv_gravityPoint(false),
- spOv_gravityPointDistanceScale(0),
- spOv_gravityPointAttenuation(1),
- spOv_gravityVec(0, -1, 0),
- spOv_gravityMag(10),
- spOv_linearDump(0.1),
- spOv_angularDump(1),
- spOv_priority(0) {
+AreaBullet::AreaBullet() :
+ RigidCollisionObjectBullet(CollisionObjectBullet::TYPE_AREA),
+ monitorable(true),
+ isScratched(false),
+ spOv_mode(PhysicsServer::AREA_SPACE_OVERRIDE_DISABLED),
+ spOv_gravityPoint(false),
+ spOv_gravityPointDistanceScale(0),
+ spOv_gravityPointAttenuation(1),
+ spOv_gravityVec(0, -1, 0),
+ spOv_gravityMag(10),
+ spOv_linearDump(0.1),
+ spOv_angularDump(1),
+ spOv_priority(0) {
btGhost = bulletnew(btGhostObject);
btGhost->setCollisionShape(compoundShape);
diff --git a/modules/bullet/area_bullet.h b/modules/bullet/area_bullet.h
index f6e3b7e902..95ce62bfed 100644
--- a/modules/bullet/area_bullet.h
+++ b/modules/bullet/area_bullet.h
@@ -47,8 +47,8 @@ public:
ObjectID event_callback_id;
StringName event_callback_method;
- InOutEventCallback()
- : event_callback_id(0) {}
+ InOutEventCallback() :
+ event_callback_id(0) {}
};
enum OverlapState {
@@ -62,10 +62,12 @@ public:
CollisionObjectBullet *object;
OverlapState state;
- OverlappingObjectData()
- : object(NULL), state(OVERLAP_STATE_ENTER) {}
- OverlappingObjectData(CollisionObjectBullet *p_object, OverlapState p_state)
- : object(p_object), state(p_state) {}
+ OverlappingObjectData() :
+ object(NULL),
+ state(OVERLAP_STATE_ENTER) {}
+ OverlappingObjectData(CollisionObjectBullet *p_object, OverlapState p_state) :
+ object(p_object),
+ state(p_state) {}
OverlappingObjectData(const OverlappingObjectData &other) {
operator=(other);
}
diff --git a/modules/bullet/btRayShape.cpp b/modules/bullet/btRayShape.cpp
index ac95faaac6..bbd2b19677 100644
--- a/modules/bullet/btRayShape.cpp
+++ b/modules/bullet/btRayShape.cpp
@@ -33,9 +33,9 @@
#include "LinearMath/btAabbUtil2.h"
#include "math/math_funcs.h"
-btRayShape::btRayShape(btScalar length)
- : btConvexInternalShape(),
- m_shapeAxis(0, 0, 1) {
+btRayShape::btRayShape(btScalar length) :
+ btConvexInternalShape(),
+ m_shapeAxis(0, 0, 1) {
m_shapeType = CUSTOM_CONVEX_SHAPE_TYPE;
setLength(length);
}
diff --git a/modules/bullet/bullet_physics_server.cpp b/modules/bullet/bullet_physics_server.cpp
index 7f95d16ba6..339dccce33 100644
--- a/modules/bullet/bullet_physics_server.cpp
+++ b/modules/bullet/bullet_physics_server.cpp
@@ -78,10 +78,10 @@ void BulletPhysicsServer::_bind_methods() {
//ClassDB::bind_method(D_METHOD("DoTest"), &BulletPhysicsServer::DoTest);
}
-BulletPhysicsServer::BulletPhysicsServer()
- : PhysicsServer(),
- active(true),
- active_spaces_count(0) {}
+BulletPhysicsServer::BulletPhysicsServer() :
+ PhysicsServer(),
+ active(true),
+ active_spaces_count(0) {}
BulletPhysicsServer::~BulletPhysicsServer() {}
@@ -723,15 +723,15 @@ void BulletPhysicsServer::body_set_axis_velocity(RID p_body, const Vector3 &p_ax
body->set_linear_velocity(v);
}
-void BulletPhysicsServer::body_set_axis_lock(RID p_body, PhysicsServer::BodyAxisLock p_lock) {
+void BulletPhysicsServer::body_set_axis_lock(RID p_body, int axis, bool p_lock) {
RigidBodyBullet *body = rigid_body_owner.get(p_body);
ERR_FAIL_COND(!body);
- body->set_axis_lock(p_lock);
+ body->set_axis_lock(axis, p_lock);
}
-PhysicsServer::BodyAxisLock BulletPhysicsServer::body_get_axis_lock(RID p_body) const {
+bool BulletPhysicsServer::body_get_axis_lock(RID p_body) const {
const RigidBodyBullet *body = rigid_body_owner.get(p_body);
- ERR_FAIL_COND_V(!body, BODY_AXIS_LOCK_DISABLED);
+ ERR_FAIL_COND_V(!body, 0);
return body->get_axis_lock();
}
@@ -798,7 +798,7 @@ bool BulletPhysicsServer::body_is_omitting_force_integration(RID p_body) const {
void BulletPhysicsServer::body_set_force_integration_callback(RID p_body, Object *p_receiver, const StringName &p_method, const Variant &p_udata) {
RigidBodyBullet *body = rigid_body_owner.get(p_body);
ERR_FAIL_COND(!body);
- body->set_force_integration_callback(p_receiver->get_instance_id(), p_method, p_udata);
+ body->set_force_integration_callback(p_receiver ? p_receiver->get_instance_id() : ObjectID(0), p_method, p_udata);
}
void BulletPhysicsServer::body_set_ray_pickable(RID p_body, bool p_enable) {
diff --git a/modules/bullet/bullet_physics_server.h b/modules/bullet/bullet_physics_server.h
index ad8137ee2f..ed5acb9041 100644
--- a/modules/bullet/bullet_physics_server.h
+++ b/modules/bullet/bullet_physics_server.h
@@ -226,8 +226,8 @@ public:
virtual void body_apply_torque_impulse(RID p_body, const Vector3 &p_impulse);
virtual void body_set_axis_velocity(RID p_body, const Vector3 &p_axis_velocity);
- virtual void body_set_axis_lock(RID p_body, BodyAxisLock p_lock);
- virtual BodyAxisLock body_get_axis_lock(RID p_body) const;
+ virtual void body_set_axis_lock(RID p_body, int axis, bool p_lock);
+ virtual bool body_get_axis_lock(RID p_body) const;
virtual void body_add_collision_exception(RID p_body, RID p_body_b);
virtual void body_remove_collision_exception(RID p_body, RID p_body_b);
diff --git a/modules/bullet/collision_object_bullet.cpp b/modules/bullet/collision_object_bullet.cpp
index 91a049b1f3..da3a4b73cf 100644
--- a/modules/bullet/collision_object_bullet.cpp
+++ b/modules/bullet/collision_object_bullet.cpp
@@ -50,8 +50,14 @@ void CollisionObjectBullet::ShapeWrapper::set_transform(const btTransform &p_tra
transform = p_transform;
}
-CollisionObjectBullet::CollisionObjectBullet(Type p_type)
- : RIDBullet(), space(NULL), type(p_type), collisionsEnabled(true), m_isStatic(false), bt_collision_object(NULL), body_scale(1., 1., 1.) {}
+CollisionObjectBullet::CollisionObjectBullet(Type p_type) :
+ RIDBullet(),
+ space(NULL),
+ type(p_type),
+ collisionsEnabled(true),
+ m_isStatic(false),
+ bt_collision_object(NULL),
+ body_scale(1., 1., 1.) {}
CollisionObjectBullet::~CollisionObjectBullet() {
// Remove all overlapping
@@ -165,8 +171,9 @@ const btTransform &CollisionObjectBullet::get_transform__bullet() const {
return bt_collision_object->getWorldTransform();
}
-RigidCollisionObjectBullet::RigidCollisionObjectBullet(Type p_type)
- : CollisionObjectBullet(p_type), compoundShape(bulletnew(btCompoundShape(enableDynamicAabbTree, initialChildCapacity))) {
+RigidCollisionObjectBullet::RigidCollisionObjectBullet(Type p_type) :
+ CollisionObjectBullet(p_type),
+ compoundShape(bulletnew(btCompoundShape(enableDynamicAabbTree, initialChildCapacity))) {
}
RigidCollisionObjectBullet::~RigidCollisionObjectBullet() {
@@ -285,10 +292,10 @@ void RigidCollisionObjectBullet::on_shapes_changed() {
const int size = shapes.size();
for (i = 0; i < size; ++i) {
shpWrapper = &shapes[i];
- if (!shpWrapper->bt_shape) {
- shpWrapper->bt_shape = shpWrapper->shape->create_bt_shape();
- }
if (shpWrapper->active) {
+ if (!shpWrapper->bt_shape) {
+ shpWrapper->bt_shape = shpWrapper->shape->create_bt_shape();
+ }
compoundShape->addChildShape(shpWrapper->transform, shpWrapper->bt_shape);
} else {
compoundShape->addChildShape(shpWrapper->transform, BulletPhysicsServer::get_empty_shape());
diff --git a/modules/bullet/collision_object_bullet.h b/modules/bullet/collision_object_bullet.h
index 153b8ea5bc..51e48909e4 100644
--- a/modules/bullet/collision_object_bullet.h
+++ b/modules/bullet/collision_object_bullet.h
@@ -70,16 +70,22 @@ public:
btTransform transform;
bool active;
- ShapeWrapper()
- : shape(NULL), bt_shape(NULL), active(true) {}
-
- ShapeWrapper(ShapeBullet *p_shape, const btTransform &p_transform, bool p_active)
- : shape(p_shape), bt_shape(NULL), active(p_active) {
+ ShapeWrapper() :
+ shape(NULL),
+ bt_shape(NULL),
+ active(true) {}
+
+ ShapeWrapper(ShapeBullet *p_shape, const btTransform &p_transform, bool p_active) :
+ shape(p_shape),
+ bt_shape(NULL),
+ active(p_active) {
set_transform(p_transform);
}
- ShapeWrapper(ShapeBullet *p_shape, const Transform &p_transform, bool p_active)
- : shape(p_shape), bt_shape(NULL), active(p_active) {
+ ShapeWrapper(ShapeBullet *p_shape, const Transform &p_transform, bool p_active) :
+ shape(p_shape),
+ bt_shape(NULL),
+ active(p_active) {
set_transform(p_transform);
}
~ShapeWrapper();
diff --git a/modules/bullet/cone_twist_joint_bullet.cpp b/modules/bullet/cone_twist_joint_bullet.cpp
index f6ac40e001..7ae5e79645 100644
--- a/modules/bullet/cone_twist_joint_bullet.cpp
+++ b/modules/bullet/cone_twist_joint_bullet.cpp
@@ -35,8 +35,8 @@
#include "bullet_utilities.h"
#include "rigid_body_bullet.h"
-ConeTwistJointBullet::ConeTwistJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Transform &rbAFrame, const Transform &rbBFrame)
- : JointBullet() {
+ConeTwistJointBullet::ConeTwistJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Transform &rbAFrame, const Transform &rbBFrame) :
+ JointBullet() {
btTransform btFrameA;
G_TO_B(rbAFrame, btFrameA);
if (rbB) {
diff --git a/modules/bullet/constraint_bullet.cpp b/modules/bullet/constraint_bullet.cpp
index 08fc36f274..505579ce9b 100644
--- a/modules/bullet/constraint_bullet.cpp
+++ b/modules/bullet/constraint_bullet.cpp
@@ -33,8 +33,9 @@
#include "collision_object_bullet.h"
#include "space_bullet.h"
-ConstraintBullet::ConstraintBullet()
- : space(NULL), constraint(NULL) {}
+ConstraintBullet::ConstraintBullet() :
+ space(NULL),
+ constraint(NULL) {}
void ConstraintBullet::setup(btTypedConstraint *p_constraint) {
constraint = p_constraint;
diff --git a/modules/bullet/doc_classes/BulletPhysicsDirectBodyState.xml b/modules/bullet/doc_classes/BulletPhysicsDirectBodyState.xml
index 831b346942..941a79e8ea 100644
--- a/modules/bullet/doc_classes/BulletPhysicsDirectBodyState.xml
+++ b/modules/bullet/doc_classes/BulletPhysicsDirectBodyState.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BulletPhysicsDirectBodyState" inherits="PhysicsDirectBodyState" category="Core" version="3.0-alpha">
+<class name="BulletPhysicsDirectBodyState" inherits="PhysicsDirectBodyState" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/bullet/doc_classes/BulletPhysicsServer.xml b/modules/bullet/doc_classes/BulletPhysicsServer.xml
index 4b5c2e6d83..515f0e292e 100644
--- a/modules/bullet/doc_classes/BulletPhysicsServer.xml
+++ b/modules/bullet/doc_classes/BulletPhysicsServer.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="BulletPhysicsServer" inherits="PhysicsServer" category="Core" version="3.0-alpha">
+<class name="BulletPhysicsServer" inherits="PhysicsServer" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/bullet/generic_6dof_joint_bullet.cpp b/modules/bullet/generic_6dof_joint_bullet.cpp
index 647396c24c..28928bd861 100644
--- a/modules/bullet/generic_6dof_joint_bullet.cpp
+++ b/modules/bullet/generic_6dof_joint_bullet.cpp
@@ -35,8 +35,8 @@
#include "bullet_utilities.h"
#include "rigid_body_bullet.h"
-Generic6DOFJointBullet::Generic6DOFJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Transform &frameInA, const Transform &frameInB, bool useLinearReferenceFrameA)
- : JointBullet() {
+Generic6DOFJointBullet::Generic6DOFJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Transform &frameInA, const Transform &frameInB, bool useLinearReferenceFrameA) :
+ JointBullet() {
btTransform btFrameA;
G_TO_B(frameInA, btFrameA);
diff --git a/modules/bullet/godot_collision_configuration.cpp b/modules/bullet/godot_collision_configuration.cpp
index 4e4228cc48..136fb2ee74 100644
--- a/modules/bullet/godot_collision_configuration.cpp
+++ b/modules/bullet/godot_collision_configuration.cpp
@@ -34,8 +34,8 @@
#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
#include "godot_ray_world_algorithm.h"
-GodotCollisionConfiguration::GodotCollisionConfiguration(const btDiscreteDynamicsWorld *world, const btDefaultCollisionConstructionInfo &constructionInfo)
- : btDefaultCollisionConfiguration(constructionInfo) {
+GodotCollisionConfiguration::GodotCollisionConfiguration(const btDiscreteDynamicsWorld *world, const btDefaultCollisionConstructionInfo &constructionInfo) :
+ btDefaultCollisionConfiguration(constructionInfo) {
void *mem = NULL;
diff --git a/modules/bullet/godot_collision_dispatcher.cpp b/modules/bullet/godot_collision_dispatcher.cpp
index ea75e4eef4..e0ca29a8f3 100644
--- a/modules/bullet/godot_collision_dispatcher.cpp
+++ b/modules/bullet/godot_collision_dispatcher.cpp
@@ -34,8 +34,8 @@
const int GodotCollisionDispatcher::CASTED_TYPE_AREA = static_cast<int>(CollisionObjectBullet::TYPE_AREA);
-GodotCollisionDispatcher::GodotCollisionDispatcher(btCollisionConfiguration *collisionConfiguration)
- : btCollisionDispatcher(collisionConfiguration) {}
+GodotCollisionDispatcher::GodotCollisionDispatcher(btCollisionConfiguration *collisionConfiguration) :
+ btCollisionDispatcher(collisionConfiguration) {}
bool GodotCollisionDispatcher::needsCollision(const btCollisionObject *body0, const btCollisionObject *body1) {
if (body0->getUserIndex() == CASTED_TYPE_AREA || body1->getUserIndex() == CASTED_TYPE_AREA) {
diff --git a/modules/bullet/godot_motion_state.h b/modules/bullet/godot_motion_state.h
index 5111807394..62ea472446 100644
--- a/modules/bullet/godot_motion_state.h
+++ b/modules/bullet/godot_motion_state.h
@@ -51,10 +51,10 @@ class GodotMotionState : public btMotionState {
RigidBodyBullet *owner;
public:
- GodotMotionState(RigidBodyBullet *p_owner)
- : bodyKinematicWorldTransf(btMatrix3x3(1., 0., 0., 0., 1., 0., 0., 0., 1.), btVector3(0., 0., 0.)),
- bodyCurrentWorldTransform(btMatrix3x3(1., 0., 0., 0., 1., 0., 0., 0., 1.), btVector3(0., 0., 0.)),
- owner(p_owner) {}
+ GodotMotionState(RigidBodyBullet *p_owner) :
+ bodyKinematicWorldTransf(btMatrix3x3(1., 0., 0., 0., 1., 0., 0., 0., 1.), btVector3(0., 0., 0.)),
+ bodyCurrentWorldTransform(btMatrix3x3(1., 0., 0., 0., 1., 0., 0., 0., 1.), btVector3(0., 0., 0.)),
+ owner(p_owner) {}
/// IMPORTANT DON'T USE THIS FUNCTION TO KNOW THE CURRENT BODY TRANSFORM
/// This class is used internally by Bullet
diff --git a/modules/bullet/godot_ray_world_algorithm.cpp b/modules/bullet/godot_ray_world_algorithm.cpp
index 98daf8398e..ba13903548 100644
--- a/modules/bullet/godot_ray_world_algorithm.cpp
+++ b/modules/bullet/godot_ray_world_algorithm.cpp
@@ -34,18 +34,18 @@
#include "btRayShape.h"
#include "collision_object_bullet.h"
-GodotRayWorldAlgorithm::CreateFunc::CreateFunc(const btDiscreteDynamicsWorld *world)
- : m_world(world) {}
-
-GodotRayWorldAlgorithm::SwappedCreateFunc::SwappedCreateFunc(const btDiscreteDynamicsWorld *world)
- : m_world(world) {}
-
-GodotRayWorldAlgorithm::GodotRayWorldAlgorithm(const btDiscreteDynamicsWorld *world, btPersistentManifold *mf, const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
- : btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap),
- m_manifoldPtr(mf),
- m_ownManifold(false),
- m_world(world),
- m_isSwapped(isSwapped) {}
+GodotRayWorldAlgorithm::CreateFunc::CreateFunc(const btDiscreteDynamicsWorld *world) :
+ m_world(world) {}
+
+GodotRayWorldAlgorithm::SwappedCreateFunc::SwappedCreateFunc(const btDiscreteDynamicsWorld *world) :
+ m_world(world) {}
+
+GodotRayWorldAlgorithm::GodotRayWorldAlgorithm(const btDiscreteDynamicsWorld *world, btPersistentManifold *mf, const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped) :
+ btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap),
+ m_manifoldPtr(mf),
+ m_ownManifold(false),
+ m_world(world),
+ m_isSwapped(isSwapped) {}
GodotRayWorldAlgorithm::~GodotRayWorldAlgorithm() {
if (m_ownManifold && m_manifoldPtr) {
diff --git a/modules/bullet/godot_result_callbacks.h b/modules/bullet/godot_result_callbacks.h
index ba5142676b..9d2fb1fce4 100644
--- a/modules/bullet/godot_result_callbacks.h
+++ b/modules/bullet/godot_result_callbacks.h
@@ -50,12 +50,21 @@ struct GodotFilterCallback : public btOverlapFilterCallback {
struct GodotClosestRayResultCallback : public btCollisionWorld::ClosestRayResultCallback {
const Set<RID> *m_exclude;
bool m_pickRay;
+ int m_shapeId;
public:
- GodotClosestRayResultCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, const Set<RID> *p_exclude)
- : btCollisionWorld::ClosestRayResultCallback(rayFromWorld, rayToWorld), m_exclude(p_exclude), m_pickRay(false) {}
+ GodotClosestRayResultCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, const Set<RID> *p_exclude) :
+ btCollisionWorld::ClosestRayResultCallback(rayFromWorld, rayToWorld),
+ m_exclude(p_exclude),
+ m_pickRay(false),
+ m_shapeId(0) {}
virtual bool needsCollision(btBroadphaseProxy *proxy0) const;
+
+ virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace) {
+ m_shapeId = rayResult.m_localShapeInfo->m_triangleIndex; // "m_triangleIndex" Is a odd name but contains the compound shape ID
+ return btCollisionWorld::ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace);
+ }
};
// store all colliding object
@@ -66,8 +75,11 @@ public:
int count;
const Set<RID> *m_exclude;
- GodotAllConvexResultCallback(PhysicsDirectSpaceState::ShapeResult *p_results, int p_resultMax, const Set<RID> *p_exclude)
- : m_results(p_results), m_exclude(p_exclude), m_resultMax(p_resultMax), count(0) {}
+ GodotAllConvexResultCallback(PhysicsDirectSpaceState::ShapeResult *p_results, int p_resultMax, const Set<RID> *p_exclude) :
+ m_results(p_results),
+ m_exclude(p_exclude),
+ m_resultMax(p_resultMax),
+ count(0) {}
virtual bool needsCollision(btBroadphaseProxy *proxy0) const;
@@ -79,8 +91,10 @@ public:
const RigidBodyBullet *m_self_object;
const bool m_ignore_areas;
- GodotKinClosestConvexResultCallback(const btVector3 &convexFromWorld, const btVector3 &convexToWorld, const RigidBodyBullet *p_self_object, bool p_ignore_areas)
- : btCollisionWorld::ClosestConvexResultCallback(convexFromWorld, convexToWorld), m_self_object(p_self_object), m_ignore_areas(p_ignore_areas) {}
+ GodotKinClosestConvexResultCallback(const btVector3 &convexFromWorld, const btVector3 &convexToWorld, const RigidBodyBullet *p_self_object, bool p_ignore_areas) :
+ btCollisionWorld::ClosestConvexResultCallback(convexFromWorld, convexToWorld),
+ m_self_object(p_self_object),
+ m_ignore_areas(p_ignore_areas) {}
virtual bool needsCollision(btBroadphaseProxy *proxy0) const;
};
@@ -90,8 +104,9 @@ public:
const Set<RID> *m_exclude;
int m_shapeId;
- GodotClosestConvexResultCallback(const btVector3 &convexFromWorld, const btVector3 &convexToWorld, const Set<RID> *p_exclude)
- : btCollisionWorld::ClosestConvexResultCallback(convexFromWorld, convexToWorld), m_exclude(p_exclude) {}
+ GodotClosestConvexResultCallback(const btVector3 &convexFromWorld, const btVector3 &convexToWorld, const Set<RID> *p_exclude) :
+ btCollisionWorld::ClosestConvexResultCallback(convexFromWorld, convexToWorld),
+ m_exclude(p_exclude) {}
virtual bool needsCollision(btBroadphaseProxy *proxy0) const;
@@ -106,8 +121,12 @@ public:
int m_count;
const Set<RID> *m_exclude;
- GodotAllContactResultCallback(btCollisionObject *p_self_object, PhysicsDirectSpaceState::ShapeResult *p_results, int p_resultMax, const Set<RID> *p_exclude)
- : m_self_object(p_self_object), m_results(p_results), m_exclude(p_exclude), m_resultMax(p_resultMax), m_count(0) {}
+ GodotAllContactResultCallback(btCollisionObject *p_self_object, PhysicsDirectSpaceState::ShapeResult *p_results, int p_resultMax, const Set<RID> *p_exclude) :
+ m_self_object(p_self_object),
+ m_results(p_results),
+ m_exclude(p_exclude),
+ m_resultMax(p_resultMax),
+ m_count(0) {}
virtual bool needsCollision(btBroadphaseProxy *proxy0) const;
@@ -123,8 +142,12 @@ public:
int m_count;
const Set<RID> *m_exclude;
- GodotContactPairContactResultCallback(btCollisionObject *p_self_object, Vector3 *p_results, int p_resultMax, const Set<RID> *p_exclude)
- : m_self_object(p_self_object), m_results(p_results), m_exclude(p_exclude), m_resultMax(p_resultMax), m_count(0) {}
+ GodotContactPairContactResultCallback(btCollisionObject *p_self_object, Vector3 *p_results, int p_resultMax, const Set<RID> *p_exclude) :
+ m_self_object(p_self_object),
+ m_results(p_results),
+ m_exclude(p_exclude),
+ m_resultMax(p_resultMax),
+ m_count(0) {}
virtual bool needsCollision(btBroadphaseProxy *proxy0) const;
@@ -141,8 +164,12 @@ public:
btVector3 m_rest_info_bt_point;
const Set<RID> *m_exclude;
- GodotRestInfoContactResultCallback(btCollisionObject *p_self_object, PhysicsDirectSpaceState::ShapeRestInfo *p_result, const Set<RID> *p_exclude)
- : m_self_object(p_self_object), m_result(p_result), m_exclude(p_exclude), m_collided(false), m_min_distance(0) {}
+ GodotRestInfoContactResultCallback(btCollisionObject *p_self_object, PhysicsDirectSpaceState::ShapeRestInfo *p_result, const Set<RID> *p_exclude) :
+ m_self_object(p_self_object),
+ m_result(p_result),
+ m_exclude(p_exclude),
+ m_collided(false),
+ m_min_distance(0) {}
virtual bool needsCollision(btBroadphaseProxy *proxy0) const;
@@ -158,12 +185,12 @@ struct GodotDeepPenetrationContactResultCallback : public btManifoldResult {
btScalar m_most_penetrated_distance;
- GodotDeepPenetrationContactResultCallback(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap)
- : btManifoldResult(body0Wrap, body1Wrap),
- m_pointCollisionObject(NULL),
- m_penetration_distance(0),
- m_other_compound_shape_index(0),
- m_most_penetrated_distance(1e20) {}
+ GodotDeepPenetrationContactResultCallback(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap) :
+ btManifoldResult(body0Wrap, body1Wrap),
+ m_pointCollisionObject(NULL),
+ m_penetration_distance(0),
+ m_other_compound_shape_index(0),
+ m_most_penetrated_distance(1e20) {}
void reset() {
m_pointCollisionObject = NULL;
diff --git a/modules/bullet/hinge_joint_bullet.cpp b/modules/bullet/hinge_joint_bullet.cpp
index bb70babd99..d3288807b3 100644
--- a/modules/bullet/hinge_joint_bullet.cpp
+++ b/modules/bullet/hinge_joint_bullet.cpp
@@ -35,8 +35,8 @@
#include "bullet_utilities.h"
#include "rigid_body_bullet.h"
-HingeJointBullet::HingeJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Transform &frameA, const Transform &frameB)
- : JointBullet() {
+HingeJointBullet::HingeJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Transform &frameA, const Transform &frameB) :
+ JointBullet() {
btTransform btFrameA;
G_TO_B(frameA, btFrameA);
@@ -53,8 +53,8 @@ HingeJointBullet::HingeJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, c
setup(hingeConstraint);
}
-HingeJointBullet::HingeJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Vector3 &pivotInA, const Vector3 &pivotInB, const Vector3 &axisInA, const Vector3 &axisInB)
- : JointBullet() {
+HingeJointBullet::HingeJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Vector3 &pivotInA, const Vector3 &pivotInB, const Vector3 &axisInA, const Vector3 &axisInB) :
+ JointBullet() {
btVector3 btPivotA;
btVector3 btAxisA;
diff --git a/modules/bullet/joint_bullet.cpp b/modules/bullet/joint_bullet.cpp
index be544f89bf..c8d91aa257 100644
--- a/modules/bullet/joint_bullet.cpp
+++ b/modules/bullet/joint_bullet.cpp
@@ -32,7 +32,7 @@
#include "joint_bullet.h"
#include "space_bullet.h"
-JointBullet::JointBullet()
- : ConstraintBullet() {}
+JointBullet::JointBullet() :
+ ConstraintBullet() {}
JointBullet::~JointBullet() {}
diff --git a/modules/bullet/pin_joint_bullet.cpp b/modules/bullet/pin_joint_bullet.cpp
index cd9e9a4557..8c74fcbc94 100644
--- a/modules/bullet/pin_joint_bullet.cpp
+++ b/modules/bullet/pin_joint_bullet.cpp
@@ -34,8 +34,8 @@
#include "bullet_types_converter.h"
#include "rigid_body_bullet.h"
-PinJointBullet::PinJointBullet(RigidBodyBullet *p_body_a, const Vector3 &p_pos_a, RigidBodyBullet *p_body_b, const Vector3 &p_pos_b)
- : JointBullet() {
+PinJointBullet::PinJointBullet(RigidBodyBullet *p_body_a, const Vector3 &p_pos_a, RigidBodyBullet *p_body_b, const Vector3 &p_pos_b) :
+ JointBullet() {
if (p_body_b) {
btVector3 btPivotA;
diff --git a/modules/bullet/rigid_body_bullet.cpp b/modules/bullet/rigid_body_bullet.cpp
index 98ae82bc5f..843bdab31f 100644
--- a/modules/bullet/rigid_body_bullet.cpp
+++ b/modules/bullet/rigid_body_bullet.cpp
@@ -176,9 +176,9 @@ PhysicsDirectSpaceState *BulletPhysicsDirectBodyState::get_space_state() {
return body->get_space()->get_direct_state();
}
-RigidBodyBullet::KinematicUtilities::KinematicUtilities(RigidBodyBullet *p_owner)
- : owner(p_owner),
- safe_margin(0.001) {
+RigidBodyBullet::KinematicUtilities::KinematicUtilities(RigidBodyBullet *p_owner) :
+ owner(p_owner),
+ safe_margin(0.001) {
}
RigidBodyBullet::KinematicUtilities::~KinematicUtilities() {
@@ -250,22 +250,22 @@ void RigidBodyBullet::KinematicUtilities::just_delete_shapes(int new_size) {
shapes.resize(new_size);
}
-RigidBodyBullet::RigidBodyBullet()
- : RigidCollisionObjectBullet(CollisionObjectBullet::TYPE_RIGID_BODY),
- kinematic_utilities(NULL),
- gravity_scale(1),
- mass(1),
- linearDamp(0),
- angularDamp(0),
- can_sleep(true),
- force_integration_callback(NULL),
- isTransformChanged(false),
- maxCollisionsDetection(0),
- collisionsCount(0),
- maxAreasWhereIam(10),
- areaWhereIamCount(0),
- countGravityPointSpaces(0),
- isScratchedSpaceOverrideModificator(false) {
+RigidBodyBullet::RigidBodyBullet() :
+ RigidCollisionObjectBullet(CollisionObjectBullet::TYPE_RIGID_BODY),
+ kinematic_utilities(NULL),
+ gravity_scale(1),
+ mass(1),
+ linearDamp(0),
+ angularDamp(0),
+ can_sleep(true),
+ force_integration_callback(NULL),
+ isTransformChanged(false),
+ maxCollisionsDetection(0),
+ collisionsCount(0),
+ maxAreasWhereIam(10),
+ areaWhereIamCount(0),
+ countGravityPointSpaces(0),
+ isScratchedSpaceOverrideModificator(false) {
godotMotionState = bulletnew(GodotMotionState(this));
@@ -277,7 +277,7 @@ RigidBodyBullet::RigidBodyBullet()
setupBulletCollisionObject(btBody);
set_mode(PhysicsServer::BODY_MODE_RIGID);
- set_axis_lock(PhysicsServer::BODY_AXIS_LOCK_DISABLED);
+ set_axis_lock(0, locked_axis[0]);
areasWhereIam.resize(maxAreasWhereIam);
for (int i = areasWhereIam.size() - 1; 0 <= i; --i) {
@@ -498,25 +498,27 @@ void RigidBodyBullet::set_mode(PhysicsServer::BodyMode p_mode) {
switch (p_mode) {
case PhysicsServer::BODY_MODE_KINEMATIC:
mode = PhysicsServer::BODY_MODE_KINEMATIC;
- set_axis_lock(axis_lock); // Reload axis lock
+ set_axis_lock(0, locked_axis[0]); // Reload axis lock
_internal_set_mass(0);
init_kinematic_utilities();
break;
case PhysicsServer::BODY_MODE_STATIC:
mode = PhysicsServer::BODY_MODE_STATIC;
- set_axis_lock(axis_lock); // Reload axis lock
+ set_axis_lock(0, locked_axis[0]); // Reload axis lock
_internal_set_mass(0);
break;
case PhysicsServer::BODY_MODE_RIGID: {
mode = PhysicsServer::BODY_MODE_RIGID;
- set_axis_lock(axis_lock); // Reload axis lock
+ set_axis_lock(0, locked_axis[0]); // Reload axis lock
_internal_set_mass(0 == mass ? 1 : mass);
+ scratch_space_override_modificator();
break;
}
case PhysicsServer::BODY_MODE_CHARACTER: {
mode = PhysicsServer::BODY_MODE_CHARACTER;
- set_axis_lock(axis_lock); // Reload axis lock
+ set_axis_lock(0, locked_axis[0]); // Reload axis lock
_internal_set_mass(0 == mass ? 1 : mass);
+ scratch_space_override_modificator();
break;
}
}
@@ -653,22 +655,14 @@ Vector3 RigidBodyBullet::get_applied_torque() const {
return gTotTorq;
}
-void RigidBodyBullet::set_axis_lock(PhysicsServer::BodyAxisLock p_lock) {
- axis_lock = p_lock;
+void RigidBodyBullet::set_axis_lock(int axis, bool p_lock) {
+ locked_axis[axis] = p_lock;
- if (PhysicsServer::BODY_AXIS_LOCK_DISABLED == axis_lock) {
- btBody->setLinearFactor(btVector3(1., 1., 1.));
+ btBody->setLinearFactor(btVector3(locked_axis[0] ? 0 : 1., locked_axis[1] ? 0 : 1., locked_axis[2] ? 0 : 1.));
+ if (locked_axis[0] || locked_axis[1] || locked_axis[2])
+ btBody->setAngularFactor(btVector3(locked_axis[0] ? 1. : 0, locked_axis[1] ? 1. : 0, locked_axis[2] ? 1. : 0));
+ else
btBody->setAngularFactor(btVector3(1., 1., 1.));
- } else if (PhysicsServer::BODY_AXIS_LOCK_X == axis_lock) {
- btBody->setLinearFactor(btVector3(0., 1., 1.));
- btBody->setAngularFactor(btVector3(1., 0., 0.));
- } else if (PhysicsServer::BODY_AXIS_LOCK_Y == axis_lock) {
- btBody->setLinearFactor(btVector3(1., 0., 1.));
- btBody->setAngularFactor(btVector3(0., 1., 0.));
- } else if (PhysicsServer::BODY_AXIS_LOCK_Z == axis_lock) {
- btBody->setLinearFactor(btVector3(1., 1., 0.));
- btBody->setAngularFactor(btVector3(0., 0., 1.));
- }
if (PhysicsServer::BODY_MODE_CHARACTER == mode) {
/// When character lock angular
@@ -676,17 +670,8 @@ void RigidBodyBullet::set_axis_lock(PhysicsServer::BodyAxisLock p_lock) {
}
}
-PhysicsServer::BodyAxisLock RigidBodyBullet::get_axis_lock() const {
- btVector3 vec = btBody->getLinearFactor();
- if (0. == vec.x()) {
- return PhysicsServer::BODY_AXIS_LOCK_X;
- } else if (0. == vec.y()) {
- return PhysicsServer::BODY_AXIS_LOCK_Y;
- } else if (0. == vec.z()) {
- return PhysicsServer::BODY_AXIS_LOCK_Z;
- } else {
- return PhysicsServer::BODY_AXIS_LOCK_DISABLED;
- }
+bool RigidBodyBullet::get_axis_lock() const {
+ return locked_axis;
}
void RigidBodyBullet::set_continuous_collision_detection(bool p_enable) {
diff --git a/modules/bullet/rigid_body_bullet.h b/modules/bullet/rigid_body_bullet.h
index ab3c3e58b2..fde8b21e17 100644
--- a/modules/bullet/rigid_body_bullet.h
+++ b/modules/bullet/rigid_body_bullet.h
@@ -156,8 +156,8 @@ public:
class btConvexShape *shape;
btTransform transform;
- KinematicShape()
- : shape(NULL) {}
+ KinematicShape() :
+ shape(NULL) {}
const bool is_active() const { return shape; }
};
@@ -184,7 +184,7 @@ private:
KinematicUtilities *kinematic_utilities;
PhysicsServer::BodyMode mode;
- PhysicsServer::BodyAxisLock axis_lock;
+ bool locked_axis[3] = { false, false, false };
GodotMotionState *godotMotionState;
btRigidBody *btBody;
real_t mass;
@@ -269,8 +269,8 @@ public:
void set_applied_torque(const Vector3 &p_torque);
Vector3 get_applied_torque() const;
- void set_axis_lock(PhysicsServer::BodyAxisLock p_lock);
- PhysicsServer::BodyAxisLock get_axis_lock() const;
+ void set_axis_lock(int axis, bool p_lock);
+ bool get_axis_lock() const;
/// Doc:
/// http://www.bulletphysics.org/mediawiki-1.5.8/index.php?title=Anti_tunneling_by_Motion_Clamping
diff --git a/modules/bullet/shape_bullet.cpp b/modules/bullet/shape_bullet.cpp
index 49150484d9..572a3b4476 100644
--- a/modules/bullet/shape_bullet.cpp
+++ b/modules/bullet/shape_bullet.cpp
@@ -45,6 +45,7 @@ ShapeBullet::~ShapeBullet() {}
btCollisionShape *ShapeBullet::prepare(btCollisionShape *p_btShape) const {
p_btShape->setUserPointer(const_cast<ShapeBullet *>(this));
+ p_btShape->setMargin(0.);
return p_btShape;
}
@@ -129,8 +130,8 @@ btRayShape *ShapeBullet::create_shape_ray(real_t p_length) {
/* PLANE */
-PlaneShapeBullet::PlaneShapeBullet()
- : ShapeBullet() {}
+PlaneShapeBullet::PlaneShapeBullet() :
+ ShapeBullet() {}
void PlaneShapeBullet::set_data(const Variant &p_data) {
setup(p_data);
@@ -157,8 +158,8 @@ btCollisionShape *PlaneShapeBullet::create_bt_shape() {
/* Sphere */
-SphereShapeBullet::SphereShapeBullet()
- : ShapeBullet() {}
+SphereShapeBullet::SphereShapeBullet() :
+ ShapeBullet() {}
void SphereShapeBullet::set_data(const Variant &p_data) {
setup(p_data);
@@ -182,8 +183,8 @@ btCollisionShape *SphereShapeBullet::create_bt_shape() {
}
/* Box */
-BoxShapeBullet::BoxShapeBullet()
- : ShapeBullet() {}
+BoxShapeBullet::BoxShapeBullet() :
+ ShapeBullet() {}
void BoxShapeBullet::set_data(const Variant &p_data) {
setup(p_data);
@@ -210,8 +211,8 @@ btCollisionShape *BoxShapeBullet::create_bt_shape() {
/* Capsule */
-CapsuleShapeBullet::CapsuleShapeBullet()
- : ShapeBullet() {}
+CapsuleShapeBullet::CapsuleShapeBullet() :
+ ShapeBullet() {}
void CapsuleShapeBullet::set_data(const Variant &p_data) {
Dictionary d = p_data;
@@ -243,8 +244,8 @@ btCollisionShape *CapsuleShapeBullet::create_bt_shape() {
/* Convex polygon */
-ConvexPolygonShapeBullet::ConvexPolygonShapeBullet()
- : ShapeBullet() {}
+ConvexPolygonShapeBullet::ConvexPolygonShapeBullet() :
+ ShapeBullet() {}
void ConvexPolygonShapeBullet::set_data(const Variant &p_data) {
setup(p_data);
@@ -285,8 +286,9 @@ btCollisionShape *ConvexPolygonShapeBullet::create_bt_shape() {
/* Concave polygon */
-ConcavePolygonShapeBullet::ConcavePolygonShapeBullet()
- : ShapeBullet(), meshShape(NULL) {}
+ConcavePolygonShapeBullet::ConcavePolygonShapeBullet() :
+ ShapeBullet(),
+ meshShape(NULL) {}
ConcavePolygonShapeBullet::~ConcavePolygonShapeBullet() {
if (meshShape) {
@@ -358,8 +360,8 @@ btCollisionShape *ConcavePolygonShapeBullet::create_bt_shape() {
/* Height map shape */
-HeightMapShapeBullet::HeightMapShapeBullet()
- : ShapeBullet() {}
+HeightMapShapeBullet::HeightMapShapeBullet() :
+ ShapeBullet() {}
void HeightMapShapeBullet::set_data(const Variant &p_data) {
ERR_FAIL_COND(p_data.get_type() != Variant::DICTIONARY);
@@ -410,8 +412,9 @@ btCollisionShape *HeightMapShapeBullet::create_bt_shape() {
}
/* Ray shape */
-RayShapeBullet::RayShapeBullet()
- : ShapeBullet(), length(1) {}
+RayShapeBullet::RayShapeBullet() :
+ ShapeBullet(),
+ length(1) {}
void RayShapeBullet::set_data(const Variant &p_data) {
setup(p_data);
diff --git a/modules/bullet/slider_joint_bullet.cpp b/modules/bullet/slider_joint_bullet.cpp
index 2da65677f5..f1d60679ec 100644
--- a/modules/bullet/slider_joint_bullet.cpp
+++ b/modules/bullet/slider_joint_bullet.cpp
@@ -35,8 +35,8 @@
#include "bullet_utilities.h"
#include "rigid_body_bullet.h"
-SliderJointBullet::SliderJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Transform &frameInA, const Transform &frameInB)
- : JointBullet() {
+SliderJointBullet::SliderJointBullet(RigidBodyBullet *rbA, RigidBodyBullet *rbB, const Transform &frameInA, const Transform &frameInB) :
+ JointBullet() {
btTransform btFrameA;
G_TO_B(frameInA, btFrameA);
if (rbB) {
diff --git a/modules/bullet/soft_body_bullet.cpp b/modules/bullet/soft_body_bullet.cpp
index 64ef7bfad2..ef5c8cac6f 100644
--- a/modules/bullet/soft_body_bullet.cpp
+++ b/modules/bullet/soft_body_bullet.cpp
@@ -36,8 +36,18 @@
#include "scene/3d/immediate_geometry.h"
-SoftBodyBullet::SoftBodyBullet()
- : CollisionObjectBullet(CollisionObjectBullet::TYPE_SOFT_BODY), mass(1), simulation_precision(5), stiffness(0.5f), pressure_coefficient(50), damping_coefficient(0.005), drag_coefficient(0.005), bt_soft_body(NULL), soft_shape_type(SOFT_SHAPETYPE_NONE), isScratched(false), soft_body_shape_data(NULL) {
+SoftBodyBullet::SoftBodyBullet() :
+ CollisionObjectBullet(CollisionObjectBullet::TYPE_SOFT_BODY),
+ mass(1),
+ simulation_precision(5),
+ stiffness(0.5f),
+ pressure_coefficient(50),
+ damping_coefficient(0.005),
+ drag_coefficient(0.005),
+ bt_soft_body(NULL),
+ soft_shape_type(SOFT_SHAPETYPE_NONE),
+ isScratched(false),
+ soft_body_shape_data(NULL) {
test_geometry = memnew(ImmediateGeometry);
diff --git a/modules/bullet/space_bullet.cpp b/modules/bullet/space_bullet.cpp
index 853906063b..3ce4b294db 100644
--- a/modules/bullet/space_bullet.cpp
+++ b/modules/bullet/space_bullet.cpp
@@ -50,10 +50,11 @@
#include "ustring.h"
#include <assert.h>
-BulletPhysicsDirectSpaceState::BulletPhysicsDirectSpaceState(SpaceBullet *p_space)
- : PhysicsDirectSpaceState(), space(p_space) {}
+BulletPhysicsDirectSpaceState::BulletPhysicsDirectSpaceState(SpaceBullet *p_space) :
+ PhysicsDirectSpaceState(),
+ space(p_space) {}
-int BulletPhysicsDirectSpaceState::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) {
+int BulletPhysicsDirectSpaceState::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
if (p_result_max <= 0)
return 0;
@@ -68,15 +69,15 @@ int BulletPhysicsDirectSpaceState::intersect_point(const Vector3 &p_point, Shape
// Setup query
GodotAllContactResultCallback btResult(&collision_object_point, r_results, p_result_max, &p_exclude);
- btResult.m_collisionFilterGroup = p_collision_layer;
- btResult.m_collisionFilterMask = p_object_type_mask;
+ btResult.m_collisionFilterGroup = 0;
+ btResult.m_collisionFilterMask = p_collision_mask;
space->dynamicsWorld->contactTest(&collision_object_point, btResult);
// The results is already populated by GodotAllConvexResultCallback
return btResult.m_count;
}
-bool BulletPhysicsDirectSpaceState::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask, bool p_pick_ray) {
+bool BulletPhysicsDirectSpaceState::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_pick_ray) {
btVector3 btVec_from;
btVector3 btVec_to;
@@ -86,8 +87,8 @@ bool BulletPhysicsDirectSpaceState::intersect_ray(const Vector3 &p_from, const V
// setup query
GodotClosestRayResultCallback btResult(btVec_from, btVec_to, &p_exclude);
- btResult.m_collisionFilterGroup = p_collision_layer;
- btResult.m_collisionFilterMask = p_object_type_mask;
+ btResult.m_collisionFilterGroup = 0;
+ btResult.m_collisionFilterMask = p_collision_mask;
btResult.m_pickRay = p_pick_ray;
space->dynamicsWorld->rayTest(btVec_from, btVec_to, btResult);
@@ -96,7 +97,7 @@ bool BulletPhysicsDirectSpaceState::intersect_ray(const Vector3 &p_from, const V
B_TO_G(btResult.m_hitNormalWorld.normalize(), r_result.normal);
CollisionObjectBullet *gObj = static_cast<CollisionObjectBullet *>(btResult.m_collisionObject->getUserPointer());
if (gObj) {
- r_result.shape = 0;
+ r_result.shape = btResult.m_shapeId;
r_result.rid = gObj->get_self();
r_result.collider_id = gObj->get_instance_id();
r_result.collider = 0 == r_result.collider_id ? NULL : ObjectDB::get_instance(r_result.collider_id);
@@ -109,7 +110,7 @@ bool BulletPhysicsDirectSpaceState::intersect_ray(const Vector3 &p_from, const V
}
}
-int BulletPhysicsDirectSpaceState::intersect_shape(const RID &p_shape, const Transform &p_xform, float p_margin, ShapeResult *p_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) {
+int BulletPhysicsDirectSpaceState::intersect_shape(const RID &p_shape, const Transform &p_xform, float p_margin, ShapeResult *p_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
if (p_result_max <= 0)
return 0;
@@ -135,8 +136,8 @@ int BulletPhysicsDirectSpaceState::intersect_shape(const RID &p_shape, const Tra
collision_object.setWorldTransform(bt_xform);
GodotAllContactResultCallback btQuery(&collision_object, p_results, p_result_max, &p_exclude);
- btQuery.m_collisionFilterGroup = p_collision_layer;
- btQuery.m_collisionFilterMask = p_object_type_mask;
+ btQuery.m_collisionFilterGroup = 0;
+ btQuery.m_collisionFilterMask = p_collision_mask;
btQuery.m_closestDistanceThreshold = p_margin;
space->dynamicsWorld->contactTest(&collision_object, btQuery);
@@ -145,7 +146,7 @@ int BulletPhysicsDirectSpaceState::intersect_shape(const RID &p_shape, const Tra
return btQuery.m_count;
}
-bool BulletPhysicsDirectSpaceState::cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, float p_margin, float &p_closest_safe, float &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask, ShapeRestInfo *r_info) {
+bool BulletPhysicsDirectSpaceState::cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, float p_margin, float &p_closest_safe, float &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, ShapeRestInfo *r_info) {
ShapeBullet *shape = space->get_physics_server()->get_shape_owner()->get(p_shape);
btCollisionShape *btShape = shape->create_bt_shape();
@@ -170,8 +171,8 @@ bool BulletPhysicsDirectSpaceState::cast_motion(const RID &p_shape, const Transf
bt_xform_to.getOrigin() += bt_motion;
GodotClosestConvexResultCallback btResult(bt_xform_from.getOrigin(), bt_xform_to.getOrigin(), &p_exclude);
- btResult.m_collisionFilterGroup = p_collision_layer;
- btResult.m_collisionFilterMask = p_object_type_mask;
+ btResult.m_collisionFilterGroup = 0;
+ btResult.m_collisionFilterMask = p_collision_mask;
space->dynamicsWorld->convexSweepTest(bt_convex_shape, bt_xform_from, bt_xform_to, btResult, 0.002);
@@ -195,7 +196,7 @@ bool BulletPhysicsDirectSpaceState::cast_motion(const RID &p_shape, const Transf
}
/// Returns the list of contacts pairs in this order: Local contact, other body contact
-bool BulletPhysicsDirectSpaceState::collide_shape(RID p_shape, const Transform &p_shape_xform, float p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) {
+bool BulletPhysicsDirectSpaceState::collide_shape(RID p_shape, const Transform &p_shape_xform, float p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
if (p_result_max <= 0)
return 0;
@@ -221,8 +222,8 @@ bool BulletPhysicsDirectSpaceState::collide_shape(RID p_shape, const Transform &
collision_object.setWorldTransform(bt_xform);
GodotContactPairContactResultCallback btQuery(&collision_object, r_results, p_result_max, &p_exclude);
- btQuery.m_collisionFilterGroup = p_collision_layer;
- btQuery.m_collisionFilterMask = p_object_type_mask;
+ btQuery.m_collisionFilterGroup = 0;
+ btQuery.m_collisionFilterMask = p_collision_mask;
btQuery.m_closestDistanceThreshold = p_margin;
space->dynamicsWorld->contactTest(&collision_object, btQuery);
@@ -232,7 +233,7 @@ bool BulletPhysicsDirectSpaceState::collide_shape(RID p_shape, const Transform &
return btQuery.m_count;
}
-bool BulletPhysicsDirectSpaceState::rest_info(RID p_shape, const Transform &p_shape_xform, float p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) {
+bool BulletPhysicsDirectSpaceState::rest_info(RID p_shape, const Transform &p_shape_xform, float p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
ShapeBullet *shape = space->get_physics_server()->get_shape_owner()->get(p_shape);
@@ -256,8 +257,8 @@ bool BulletPhysicsDirectSpaceState::rest_info(RID p_shape, const Transform &p_sh
collision_object.setWorldTransform(bt_xform);
GodotRestInfoContactResultCallback btQuery(&collision_object, r_info, &p_exclude);
- btQuery.m_collisionFilterGroup = p_collision_layer;
- btQuery.m_collisionFilterMask = p_object_type_mask;
+ btQuery.m_collisionFilterGroup = 0;
+ btQuery.m_collisionFilterMask = p_collision_mask;
btQuery.m_closestDistanceThreshold = p_margin;
space->dynamicsWorld->contactTest(&collision_object, btQuery);
@@ -330,18 +331,18 @@ Vector3 BulletPhysicsDirectSpaceState::get_closest_point_to_object_volume(RID p_
}
}
-SpaceBullet::SpaceBullet(bool p_create_soft_world)
- : broadphase(NULL),
- dispatcher(NULL),
- solver(NULL),
- collisionConfiguration(NULL),
- dynamicsWorld(NULL),
- soft_body_world_info(NULL),
- ghostPairCallback(NULL),
- godotFilterCallback(NULL),
- gravityDirection(0, -1, 0),
- gravityMagnitude(10),
- contactDebugCount(0) {
+SpaceBullet::SpaceBullet(bool p_create_soft_world) :
+ broadphase(NULL),
+ dispatcher(NULL),
+ solver(NULL),
+ collisionConfiguration(NULL),
+ dynamicsWorld(NULL),
+ soft_body_world_info(NULL),
+ ghostPairCallback(NULL),
+ godotFilterCallback(NULL),
+ gravityDirection(0, -1, 0),
+ gravityMagnitude(10),
+ contactDebugCount(0) {
create_empty_world(p_create_soft_world);
direct_access = memnew(BulletPhysicsDirectSpaceState(this));
@@ -467,6 +468,7 @@ void SpaceBullet::add_rigid_body(RigidBodyBullet *p_body) {
dynamicsWorld->addCollisionObject(p_body->get_bt_rigid_body(), p_body->get_collision_layer(), p_body->get_collision_mask());
} else {
dynamicsWorld->addRigidBody(p_body->get_bt_rigid_body(), p_body->get_collision_layer(), p_body->get_collision_mask());
+ p_body->scratch_space_override_modificator();
}
}
@@ -938,14 +940,14 @@ bool SpaceBullet::test_body_motion(RigidBodyBullet *p_body, const Transform &p_f
r_result->collider_shape = r_recover_result.other_compound_shape_index;
r_result->collision_local_shape = r_recover_result.local_shape_most_recovered;
-//{ /// Add manifold point to manage collisions
-// btPersistentManifold* manifold = dynamicsWorld->getDispatcher()->getNewManifold(p_body->getBtBody(), btRigid);
-// btManifoldPoint manifoldPoint(result_callabck.m_pointWorld, result_callabck.m_pointWorld, result_callabck.m_pointNormalWorld, result_callabck.m_penetration_distance);
-// manifoldPoint.m_index0 = r_result->collision_local_shape;
-// manifoldPoint.m_index1 = r_result->collider_shape;
-// manifold->addManifoldPoint(manifoldPoint);
-// p_body->get_kinematic_utilities()->m_generatedManifold.push_back(manifold);
-//}
+ //{ /// Add manifold point to manage collisions
+ // btPersistentManifold* manifold = dynamicsWorld->getDispatcher()->getNewManifold(p_body->getBtBody(), btRigid);
+ // btManifoldPoint manifoldPoint(result_callabck.m_pointWorld, result_callabck.m_pointWorld, result_callabck.m_pointNormalWorld, result_callabck.m_penetration_distance);
+ // manifoldPoint.m_index0 = r_result->collision_local_shape;
+ // manifoldPoint.m_index1 = r_result->collider_shape;
+ // manifold->addManifoldPoint(manifoldPoint);
+ // p_body->get_kinematic_utilities()->m_generatedManifold.push_back(manifold);
+ //}
#if debug_test_motion
Vector3 sup_line2;
@@ -978,10 +980,10 @@ public:
Vector<btCollisionObject *> result_collision_objects;
public:
- RecoverPenetrationBroadPhaseCallback(const btCollisionObject *p_self_collision_object, uint32_t p_collision_layer, uint32_t p_collision_mask)
- : self_collision_object(p_self_collision_object),
- collision_layer(p_collision_layer),
- collision_mask(p_collision_mask) {}
+ RecoverPenetrationBroadPhaseCallback(const btCollisionObject *p_self_collision_object, uint32_t p_collision_layer, uint32_t p_collision_mask) :
+ self_collision_object(p_self_collision_object),
+ collision_layer(p_collision_layer),
+ collision_mask(p_collision_mask) {}
virtual ~RecoverPenetrationBroadPhaseCallback() {}
diff --git a/modules/bullet/space_bullet.h b/modules/bullet/space_bullet.h
index 9acac9a7d6..e5267c01a9 100644
--- a/modules/bullet/space_bullet.h
+++ b/modules/bullet/space_bullet.h
@@ -69,13 +69,13 @@ private:
public:
BulletPhysicsDirectSpaceState(SpaceBullet *p_space);
- virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_ray = false);
- virtual int intersect_shape(const RID &p_shape, const Transform &p_xform, float p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, float p_margin, float &p_closest_safe, float &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, ShapeRestInfo *r_info = NULL);
+ virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_pick_ray = false);
+ virtual int intersect_shape(const RID &p_shape, const Transform &p_xform, float p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, float p_margin, float &p_closest_safe, float &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, ShapeRestInfo *r_info = NULL);
/// Returns the list of contacts pairs in this order: Local contact, other body contact
- virtual bool collide_shape(RID p_shape, const Transform &p_shape_xform, float p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool rest_info(RID p_shape, const Transform &p_shape_xform, float p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
+ virtual bool collide_shape(RID p_shape, const Transform &p_shape_xform, float p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool rest_info(RID p_shape, const Transform &p_shape_xform, float p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
virtual Vector3 get_closest_point_to_object_volume(RID p_object, const Vector3 p_point) const;
};
@@ -185,8 +185,8 @@ private:
const btCollisionObject *other_collision_object;
int local_shape_most_recovered;
- RecoverResult()
- : hasPenetration(false) {}
+ RecoverResult() :
+ hasPenetration(false) {}
};
bool recover_from_penetration(RigidBodyBullet *p_body, const btTransform &p_from, btVector3 &r_recover_position, RecoverResult *r_recover_result = NULL);
diff --git a/modules/enet/doc_classes/NetworkedMultiplayerENet.xml b/modules/enet/doc_classes/NetworkedMultiplayerENet.xml
index 70ef6aef20..25d17542ea 100644
--- a/modules/enet/doc_classes/NetworkedMultiplayerENet.xml
+++ b/modules/enet/doc_classes/NetworkedMultiplayerENet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NetworkedMultiplayerENet" inherits="NetworkedMultiplayerPeer" category="Core" version="3.0-alpha">
+<class name="NetworkedMultiplayerENet" inherits="NetworkedMultiplayerPeer" category="Core" version="3.0-beta">
<brief_description>
PacketPeer implementation using the ENet library.
</brief_description>
@@ -71,15 +71,15 @@
</method>
</methods>
<constants>
- <constant name="COMPRESS_NONE" value="0">
+ <constant name="COMPRESS_NONE" value="0" enum="CompressionMode">
</constant>
- <constant name="COMPRESS_RANGE_CODER" value="1">
+ <constant name="COMPRESS_RANGE_CODER" value="1" enum="CompressionMode">
</constant>
- <constant name="COMPRESS_FASTLZ" value="2">
+ <constant name="COMPRESS_FASTLZ" value="2" enum="CompressionMode">
</constant>
- <constant name="COMPRESS_ZLIB" value="3">
+ <constant name="COMPRESS_ZLIB" value="3" enum="CompressionMode">
</constant>
- <constant name="COMPRESS_ZSTD" value="4">
+ <constant name="COMPRESS_ZSTD" value="4" enum="CompressionMode">
</constant>
</constants>
</class>
diff --git a/modules/enet/networked_multiplayer_enet.cpp b/modules/enet/networked_multiplayer_enet.cpp
index 1e18ec0d18..ce485956b4 100644
--- a/modules/enet/networked_multiplayer_enet.cpp
+++ b/modules/enet/networked_multiplayer_enet.cpp
@@ -585,7 +585,7 @@ size_t NetworkedMultiplayerENet::enet_compress(void *context, const ENetBuffer *
if (enet->dst_compressor_mem.size() < req_size) {
enet->dst_compressor_mem.resize(req_size);
}
- int ret = Compression::compress(enet->dst_compressor_mem.ptr(), enet->src_compressor_mem.ptr(), ofs, mode);
+ int ret = Compression::compress(enet->dst_compressor_mem.ptrw(), enet->src_compressor_mem.ptr(), ofs, mode);
if (ret < 0)
return 0;
diff --git a/modules/freetype/SCsub b/modules/freetype/SCsub
index 19e384af73..f69b632e76 100644
--- a/modules/freetype/SCsub
+++ b/modules/freetype/SCsub
@@ -68,7 +68,7 @@ if env['builtin_freetype']:
if env['builtin_libpng']:
env.Append(CPPPATH=["#thirdparty/libpng"])
- lib = env.Library("freetype_builtin", thirdparty_sources)
+ lib = env.add_library("freetype_builtin", thirdparty_sources)
# Needs to be appended to arrive after libscene in the linker call,
# but we don't want it to arrive *after* system libs, so manual hack
# LIBS contains first SCons Library objects ("SCons.Node.FS.File object")
diff --git a/modules/gdnative/SCsub b/modules/gdnative/SCsub
index 485bf4b9df..fd11c8d094 100644
--- a/modules/gdnative/SCsub
+++ b/modules/gdnative/SCsub
@@ -19,19 +19,27 @@ def _spaced(e):
return e if e[-1] == '*' else e + ' '
def _build_gdnative_api_struct_header(api):
- ext_wrappers = ''
+ gdnative_api_init_macro = [
+ '\textern const godot_gdnative_core_api_struct *_gdnative_wrapper_api_struct;'
+ ]
for name in api['extensions']:
- ext_wrappers += ' extern const godot_gdnative_ext_' + name + '_api_struct *_gdnative_wrapper_' + name + '_api_struct;'
+ gdnative_api_init_macro.append(
+ '\textern const godot_gdnative_ext_{0}_api_struct *_gdnative_wrapper_{0}_api_struct;'.format(name))
- ext_init = 'for (int i = 0; i < _gdnative_wrapper_api_struct->num_extensions; i++) { '
- ext_init += 'switch (_gdnative_wrapper_api_struct->extensions[i]->type) {'
+ gdnative_api_init_macro.append('\t_gdnative_wrapper_api_struct = options->api_struct;')
+ gdnative_api_init_macro.append('\tfor (int i = 0; i < _gdnative_wrapper_api_struct->num_extensions; i++) { ')
+ gdnative_api_init_macro.append('\t\tswitch (_gdnative_wrapper_api_struct->extensions[i]->type) {')
for name in api['extensions']:
- ext_init += 'case GDNATIVE_EXT_' + api['extensions'][name]['type'] + ': '
- ext_init += '_gdnative_wrapper_' + name + '_api_struct = (' + 'godot_gdnative_ext_' + name + '_api_struct *) _gdnative_wrapper_api_struct->extensions[i]; break;'
-
- ext_init += '}'
+ gdnative_api_init_macro.append(
+ '\t\t\tcase GDNATIVE_EXT_%s:' % api['extensions'][name]['type'])
+ gdnative_api_init_macro.append(
+ '\t\t\t\t_gdnative_wrapper_{0}_api_struct = (godot_gdnative_ext_{0}_api_struct *)'
+ ' _gdnative_wrapper_api_struct->extensions[i];'.format(name))
+ gdnative_api_init_macro.append('\t\t\t\tbreak;')
+ gdnative_api_init_macro.append('\t\t}')
+ gdnative_api_init_macro.append('\t}')
out = [
'/* THIS FILE IS GENERATED DO NOT EDIT */',
@@ -43,7 +51,7 @@ def _build_gdnative_api_struct_header(api):
'#include <nativescript/godot_nativescript.h>',
'#include <pluginscript/godot_pluginscript.h>',
'',
- '#define GDNATIVE_API_INIT(options) do { extern const godot_gdnative_api_struct *_gdnative_wrapper_api_struct;' + ext_wrappers + ' _gdnative_wrapper_api_struct = options->api_struct; ' + ext_init + ' } while (0)',
+ '#define GDNATIVE_API_INIT(options) do { \\\n' + ' \\\n'.join(gdnative_api_init_macro) + ' \\\n } while (0)',
'',
'#ifdef __cplusplus',
'extern "C" {',
@@ -179,7 +187,7 @@ def _build_gdnative_wrapper_code(api):
]
for name in api['extensions']:
- out.append('godot_gdnative_ext_' + name + '_api_struct *_gdnative_wrapper_' + name + '_api_struct;')
+ out.append('godot_gdnative_ext_' + name + '_api_struct *_gdnative_wrapper_' + name + '_api_struct = 0;')
out += ['']
@@ -237,7 +245,7 @@ if ARGUMENTS.get('gdnative_wrapper', False):
gd_wrapper_env = env.Clone()
gd_wrapper_env.Append(CPPPATH=['#modules/gdnative/include/'])
- # I think this doesn't work on MSVC yet...
- gd_wrapper_env.Append(CCFLAGS=['-fPIC'])
+ if not env.msvc:
+ gd_wrapper_env.Append(CCFLAGS=['-fPIC'])
- gd_wrapper_env.Library("#bin/gdnative_wrapper_code", [gensource])
+ lib = gd_wrapper_env.add_library("#bin/gdnative_wrapper_code", [gensource])
diff --git a/modules/gdnative/arvr/arvr_interface_gdnative.cpp b/modules/gdnative/arvr/arvr_interface_gdnative.cpp
index 02f2ee7424..29e4775e62 100644
--- a/modules/gdnative/arvr/arvr_interface_gdnative.cpp
+++ b/modules/gdnative/arvr/arvr_interface_gdnative.cpp
@@ -219,7 +219,7 @@ extern "C" {
void GDAPI godot_arvr_register_interface(const godot_arvr_interface_gdnative *p_interface) {
Ref<ARVRInterfaceGDNative> new_interface;
new_interface.instance();
- new_interface->set_interface((godot_arvr_interface_gdnative * const)p_interface);
+ new_interface->set_interface((godot_arvr_interface_gdnative *const)p_interface);
ARVRServer::get_singleton()->add_interface(new_interface);
}
@@ -344,7 +344,7 @@ void GDAPI godot_arvr_set_controller_transform(godot_int p_controller_id, godot_
tracker->set_orientation(transform->basis);
}
if (p_tracks_position) {
- tracker->set_position(transform->origin);
+ tracker->set_rw_position(transform->origin);
}
}
}
diff --git a/modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml b/modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml
index 10957a3394..e4ffa76d36 100644
--- a/modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml
+++ b/modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ARVRInterfaceGDNative" inherits="ARVRInterface" category="Core" version="3.0-alpha">
+<class name="ARVRInterfaceGDNative" inherits="ARVRInterface" category="Core" version="3.0-beta">
<brief_description>
GDNative wrapper for an ARVR interface
</brief_description>
diff --git a/modules/gdnative/doc_classes/GDNative.xml b/modules/gdnative/doc_classes/GDNative.xml
index 7a36d09aec..83953cef49 100644
--- a/modules/gdnative/doc_classes/GDNative.xml
+++ b/modules/gdnative/doc_classes/GDNative.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GDNative" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="GDNative" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -21,26 +21,12 @@
<description>
</description>
</method>
- <method name="get_library">
- <return type="GDNativeLibrary">
- </return>
- <description>
- </description>
- </method>
<method name="initialize">
<return type="bool">
</return>
<description>
</description>
</method>
- <method name="set_library">
- <return type="void">
- </return>
- <argument index="0" name="library" type="GDNativeLibrary">
- </argument>
- <description>
- </description>
- </method>
<method name="terminate">
<return type="bool">
</return>
diff --git a/modules/gdnative/doc_classes/GDNativeLibrary.xml b/modules/gdnative/doc_classes/GDNativeLibrary.xml
index e271665fd4..647d27929f 100644
--- a/modules/gdnative/doc_classes/GDNativeLibrary.xml
+++ b/modules/gdnative/doc_classes/GDNativeLibrary.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GDNativeLibrary" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="GDNativeLibrary" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -27,54 +27,6 @@
<description>
</description>
</method>
- <method name="get_symbol_prefix" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="is_current_library_statically_linked" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="is_singleton" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_load_once">
- <return type="void">
- </return>
- <argument index="0" name="load_once" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_singleton">
- <return type="void">
- </return>
- <argument index="0" name="singleton" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_symbol_prefix">
- <return type="void">
- </return>
- <argument index="0" name="symbol_prefix" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="should_load_once" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="load_once" type="bool" setter="set_load_once" getter="should_load_once">
diff --git a/modules/gdnative/doc_classes/NativeScript.xml b/modules/gdnative/doc_classes/NativeScript.xml
index eb4e13f748..3f6025d02f 100644
--- a/modules/gdnative/doc_classes/NativeScript.xml
+++ b/modules/gdnative/doc_classes/NativeScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="NativeScript" inherits="Script" category="Core" version="3.0-alpha">
+<class name="NativeScript" inherits="Script" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,40 +9,12 @@
<demos>
</demos>
<methods>
- <method name="get_class_name" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_library" qualifiers="const">
- <return type="GDNativeLibrary">
- </return>
- <description>
- </description>
- </method>
<method name="new" qualifiers="vararg">
<return type="Object">
</return>
<description>
</description>
</method>
- <method name="set_class_name">
- <return type="void">
- </return>
- <argument index="0" name="class_name" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_library">
- <return type="void">
- </return>
- <argument index="0" name="library" type="GDNativeLibrary">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="class_name" type="String" setter="set_class_name" getter="get_class_name">
diff --git a/modules/gdnative/doc_classes/PluginScript.xml b/modules/gdnative/doc_classes/PluginScript.xml
index a5ab422d3c..1a2141247a 100644
--- a/modules/gdnative/doc_classes/PluginScript.xml
+++ b/modules/gdnative/doc_classes/PluginScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="PluginScript" inherits="Script" category="Core" version="3.0-alpha">
+<class name="PluginScript" inherits="Script" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp
index de118043ca..9c0041cbe0 100644
--- a/modules/gdnative/gdnative.cpp
+++ b/modules/gdnative/gdnative.cpp
@@ -123,7 +123,13 @@ bool GDNative::initialize() {
return false;
}
#ifdef IPHONE_ENABLED
+ // on iOS we use static linking
String path = "";
+#elif defined(ANDROID_ENABLED)
+ // On Android dynamic libraries are located separately from resource assets,
+ // we should pass library name to dlopen(). The library name is flattened
+ // during export.
+ String path = lib_path.get_file();
#else
String path = ProjectSettings::get_singleton()->globalize_path(lib_path);
#endif
@@ -138,7 +144,7 @@ bool GDNative::initialize() {
}
}
- Error err = OS::get_singleton()->open_dynamic_library(path, native_handle);
+ Error err = OS::get_singleton()->open_dynamic_library(path, native_handle, true);
if (err != OK) {
return false;
}
diff --git a/modules/gdnative/gdnative.h b/modules/gdnative/gdnative.h
index bb260bdd1b..993cd0ece7 100644
--- a/modules/gdnative/gdnative.h
+++ b/modules/gdnative/gdnative.h
@@ -106,8 +106,8 @@ struct GDNativeCallRegistry {
return singleton;
}
- inline GDNativeCallRegistry()
- : native_calls() {}
+ inline GDNativeCallRegistry() :
+ native_calls() {}
Map<StringName, native_call_cb> native_calls;
diff --git a/modules/gdnative/gdnative/basis.cpp b/modules/gdnative/gdnative/basis.cpp
index 39ca754dc7..7a65996036 100644
--- a/modules/gdnative/gdnative/basis.cpp
+++ b/modules/gdnative/gdnative/basis.cpp
@@ -221,7 +221,7 @@ godot_basis GDAPI godot_basis_operator_add(const godot_basis *p_self, const godo
return raw_dest;
}
-godot_basis GDAPI godot_basis_operator_substract(const godot_basis *p_self, const godot_basis *p_b) {
+godot_basis GDAPI godot_basis_operator_subtract(const godot_basis *p_self, const godot_basis *p_b) {
godot_basis raw_dest;
Basis *dest = (Basis *)&raw_dest;
const Basis *self = (const Basis *)p_self;
diff --git a/modules/gdnative/gdnative/node_path.cpp b/modules/gdnative/gdnative/node_path.cpp
index 2bd278e050..8dfe151f91 100644
--- a/modules/gdnative/gdnative/node_path.cpp
+++ b/modules/gdnative/gdnative/node_path.cpp
@@ -91,10 +91,10 @@ godot_string GDAPI godot_node_path_get_subname(const godot_node_path *p_self, co
return dest;
}
-godot_string GDAPI godot_node_path_get_property(const godot_node_path *p_self) {
+godot_string GDAPI godot_node_path_get_concatenated_subnames(const godot_node_path *p_self) {
godot_string dest;
const NodePath *self = (const NodePath *)p_self;
- memnew_placement(&dest, String(self->get_property()));
+ memnew_placement(&dest, String(self->get_concatenated_subnames()));
return dest;
}
diff --git a/modules/gdnative/gdnative/quat.cpp b/modules/gdnative/gdnative/quat.cpp
index 2d012c069f..c308e5973d 100644
--- a/modules/gdnative/gdnative/quat.cpp
+++ b/modules/gdnative/gdnative/quat.cpp
@@ -181,7 +181,7 @@ godot_quat GDAPI godot_quat_operator_add(const godot_quat *p_self, const godot_q
return raw_dest;
}
-godot_quat GDAPI godot_quat_operator_substract(const godot_quat *p_self, const godot_quat *p_b) {
+godot_quat GDAPI godot_quat_operator_subtract(const godot_quat *p_self, const godot_quat *p_b) {
godot_quat raw_dest;
Quat *dest = (Quat *)&raw_dest;
const Quat *self = (const Quat *)p_self;
diff --git a/modules/gdnative/gdnative/vector2.cpp b/modules/gdnative/gdnative/vector2.cpp
index 7a5b29e0c4..7be08929b1 100644
--- a/modules/gdnative/gdnative/vector2.cpp
+++ b/modules/gdnative/gdnative/vector2.cpp
@@ -207,7 +207,7 @@ godot_vector2 GDAPI godot_vector2_operator_add(const godot_vector2 *p_self, cons
return raw_dest;
}
-godot_vector2 GDAPI godot_vector2_operator_substract(const godot_vector2 *p_self, const godot_vector2 *p_b) {
+godot_vector2 GDAPI godot_vector2_operator_subtract(const godot_vector2 *p_self, const godot_vector2 *p_b) {
godot_vector2 raw_dest;
Vector2 *dest = (Vector2 *)&raw_dest;
const Vector2 *self = (const Vector2 *)p_self;
diff --git a/modules/gdnative/gdnative/vector3.cpp b/modules/gdnative/gdnative/vector3.cpp
index 11ffb3320b..0027d236f2 100644
--- a/modules/gdnative/gdnative/vector3.cpp
+++ b/modules/gdnative/gdnative/vector3.cpp
@@ -224,7 +224,7 @@ godot_vector3 GDAPI godot_vector3_operator_add(const godot_vector3 *p_self, cons
return raw_dest;
}
-godot_vector3 GDAPI godot_vector3_operator_substract(const godot_vector3 *p_self, const godot_vector3 *p_b) {
+godot_vector3 GDAPI godot_vector3_operator_subtract(const godot_vector3 *p_self, const godot_vector3 *p_b) {
godot_vector3 raw_dest;
Vector3 *dest = (Vector3 *)&raw_dest;
Vector3 *self = (Vector3 *)p_self;
diff --git a/modules/gdnative/gdnative_api.json b/modules/gdnative/gdnative_api.json
index 0438a196cf..31f3b0b77b 100644
--- a/modules/gdnative/gdnative_api.json
+++ b/modules/gdnative/gdnative_api.json
@@ -387,7 +387,7 @@
]
},
{
- "name": "godot_vector2_operator_substract",
+ "name": "godot_vector2_operator_subtract",
"return_type": "godot_vector2",
"arguments": [
["const godot_vector2 *", "p_self"],
@@ -663,7 +663,7 @@
]
},
{
- "name": "godot_quat_operator_substract",
+ "name": "godot_quat_operator_subtract",
"return_type": "godot_quat",
"arguments": [
["const godot_quat *", "p_self"],
@@ -907,7 +907,7 @@
]
},
{
- "name": "godot_basis_operator_substract",
+ "name": "godot_basis_operator_subtract",
"return_type": "godot_basis",
"arguments": [
["const godot_basis *", "p_self"],
@@ -1142,7 +1142,7 @@
]
},
{
- "name": "godot_vector3_operator_substract",
+ "name": "godot_vector3_operator_subtract",
"return_type": "godot_vector3",
"arguments": [
["const godot_vector3 *", "p_self"],
@@ -2918,7 +2918,7 @@
]
},
{
- "name": "godot_node_path_get_property",
+ "name": "godot_node_path_get_concatenated_subnames",
"return_type": "godot_string",
"arguments": [
["const godot_node_path *", "p_self"]
diff --git a/modules/gdnative/include/gdnative/basis.h b/modules/gdnative/include/gdnative/basis.h
index 49ca765a01..4898eab24c 100644
--- a/modules/gdnative/include/gdnative/basis.h
+++ b/modules/gdnative/include/gdnative/basis.h
@@ -111,7 +111,7 @@ godot_bool GDAPI godot_basis_operator_equal(const godot_basis *p_self, const god
godot_basis GDAPI godot_basis_operator_add(const godot_basis *p_self, const godot_basis *p_b);
-godot_basis GDAPI godot_basis_operator_substract(const godot_basis *p_self, const godot_basis *p_b);
+godot_basis GDAPI godot_basis_operator_subtract(const godot_basis *p_self, const godot_basis *p_b);
godot_basis GDAPI godot_basis_operator_multiply_vector(const godot_basis *p_self, const godot_basis *p_b);
diff --git a/modules/gdnative/include/gdnative/gdnative.h b/modules/gdnative/include/gdnative/gdnative.h
index 6e69d43469..f7f5606428 100644
--- a/modules/gdnative/include/gdnative/gdnative.h
+++ b/modules/gdnative/include/gdnative/gdnative.h
@@ -115,8 +115,6 @@ typedef enum {
GODOT_ERR_HELP, ///< user requested help!!
GODOT_ERR_BUG, ///< a bug in the software certainly happened, due to a double check failing or unexpected behavior.
GODOT_ERR_PRINTER_ON_FIRE, /// the parallel port printer is engulfed in flames
- GODOT_ERR_OMFG_THIS_IS_VERY_VERY_BAD, ///< shit happens, has never been used, though
- GODOT_ERR_WTF = GODOT_ERR_OMFG_THIS_IS_VERY_VERY_BAD ///< short version of the above
} godot_error;
////// bool
diff --git a/modules/gdnative/include/gdnative/node_path.h b/modules/gdnative/include/gdnative/node_path.h
index 42446175d8..b5a59fd325 100644
--- a/modules/gdnative/include/gdnative/node_path.h
+++ b/modules/gdnative/include/gdnative/node_path.h
@@ -73,7 +73,7 @@ godot_int GDAPI godot_node_path_get_subname_count(const godot_node_path *p_self)
godot_string GDAPI godot_node_path_get_subname(const godot_node_path *p_self, const godot_int p_idx);
-godot_string GDAPI godot_node_path_get_property(const godot_node_path *p_self);
+godot_string GDAPI godot_node_path_get_concatenated_subnames(const godot_node_path *p_self);
godot_bool GDAPI godot_node_path_is_empty(const godot_node_path *p_self);
diff --git a/modules/gdnative/include/gdnative/quat.h b/modules/gdnative/include/gdnative/quat.h
index acae6e3e90..2be9d8849d 100644
--- a/modules/gdnative/include/gdnative/quat.h
+++ b/modules/gdnative/include/gdnative/quat.h
@@ -98,7 +98,7 @@ godot_quat GDAPI godot_quat_operator_multiply(const godot_quat *p_self, const go
godot_quat GDAPI godot_quat_operator_add(const godot_quat *p_self, const godot_quat *p_b);
-godot_quat GDAPI godot_quat_operator_substract(const godot_quat *p_self, const godot_quat *p_b);
+godot_quat GDAPI godot_quat_operator_subtract(const godot_quat *p_self, const godot_quat *p_b);
godot_quat GDAPI godot_quat_operator_divide(const godot_quat *p_self, const godot_real p_b);
diff --git a/modules/gdnative/include/gdnative/vector2.h b/modules/gdnative/include/gdnative/vector2.h
index 07105abaf2..4d1117e3aa 100644
--- a/modules/gdnative/include/gdnative/vector2.h
+++ b/modules/gdnative/include/gdnative/vector2.h
@@ -106,7 +106,7 @@ godot_vector2 GDAPI godot_vector2_clamped(const godot_vector2 *p_self, const god
godot_vector2 GDAPI godot_vector2_operator_add(const godot_vector2 *p_self, const godot_vector2 *p_b);
-godot_vector2 GDAPI godot_vector2_operator_substract(const godot_vector2 *p_self, const godot_vector2 *p_b);
+godot_vector2 GDAPI godot_vector2_operator_subtract(const godot_vector2 *p_self, const godot_vector2 *p_b);
godot_vector2 GDAPI godot_vector2_operator_multiply_vector(const godot_vector2 *p_self, const godot_vector2 *p_b);
diff --git a/modules/gdnative/include/gdnative/vector3.h b/modules/gdnative/include/gdnative/vector3.h
index 3ed23778ec..135a13acc8 100644
--- a/modules/gdnative/include/gdnative/vector3.h
+++ b/modules/gdnative/include/gdnative/vector3.h
@@ -117,7 +117,7 @@ godot_vector3 GDAPI godot_vector3_reflect(const godot_vector3 *p_self, const god
godot_vector3 GDAPI godot_vector3_operator_add(const godot_vector3 *p_self, const godot_vector3 *p_b);
-godot_vector3 GDAPI godot_vector3_operator_substract(const godot_vector3 *p_self, const godot_vector3 *p_b);
+godot_vector3 GDAPI godot_vector3_operator_subtract(const godot_vector3 *p_self, const godot_vector3 *p_b);
godot_vector3 GDAPI godot_vector3_operator_multiply_vector(const godot_vector3 *p_self, const godot_vector3 *p_b);
diff --git a/modules/gdnative/nativescript/api_generator.cpp b/modules/gdnative/nativescript/api_generator.cpp
index f9d699fb59..653445c2db 100644
--- a/modules/gdnative/nativescript/api_generator.cpp
+++ b/modules/gdnative/nativescript/api_generator.cpp
@@ -468,8 +468,6 @@ static List<String> generate_c_api_json(const List<ClassAPI> &p_api) {
return source;
}
-//
-
#endif
/*
diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp
index c2c7c27f25..965de062e3 100644
--- a/modules/gdnative/nativescript/nativescript.cpp
+++ b/modules/gdnative/nativescript/nativescript.cpp
@@ -437,11 +437,11 @@ NativeScript::~NativeScript() {
#endif
}
-//
-//
-// ScriptInstance stuff
-//
-//
+ //
+ //
+ // ScriptInstance stuff
+ //
+ //
#define GET_SCRIPT_DESC() script->get_script_desc()
diff --git a/modules/gdnative/nativescript/nativescript.h b/modules/gdnative/nativescript/nativescript.h
index f0f14e2f30..30fa400cb0 100644
--- a/modules/gdnative/nativescript/nativescript.h
+++ b/modules/gdnative/nativescript/nativescript.h
@@ -76,12 +76,12 @@ struct NativeScriptDesc {
bool is_tool;
- inline NativeScriptDesc()
- : methods(),
- properties(),
- signals_(),
- base(),
- base_native_type() {
+ inline NativeScriptDesc() :
+ methods(),
+ properties(),
+ signals_(),
+ base(),
+ base_native_type() {
zeromem(&create_func, sizeof(godot_instance_create_func));
zeromem(&destroy_func, sizeof(godot_instance_destroy_func));
}
diff --git a/modules/gdnative/pluginscript/pluginscript_language.cpp b/modules/gdnative/pluginscript/pluginscript_language.cpp
index 40feb5ae43..e358c2fb69 100644
--- a/modules/gdnative/pluginscript/pluginscript_language.cpp
+++ b/modules/gdnative/pluginscript/pluginscript_language.cpp
@@ -410,8 +410,8 @@ void PluginScriptLanguage::unlock() {
#endif
}
-PluginScriptLanguage::PluginScriptLanguage(const godot_pluginscript_language_desc *desc)
- : _desc(*desc) {
+PluginScriptLanguage::PluginScriptLanguage(const godot_pluginscript_language_desc *desc) :
+ _desc(*desc) {
_resource_loader = memnew(ResourceFormatLoaderPluginScript(this));
_resource_saver = memnew(ResourceFormatSaverPluginScript(this));
diff --git a/modules/gdnative/pluginscript/pluginscript_script.cpp b/modules/gdnative/pluginscript/pluginscript_script.cpp
index 4169b07f63..0b71b3b10d 100644
--- a/modules/gdnative/pluginscript/pluginscript_script.cpp
+++ b/modules/gdnative/pluginscript/pluginscript_script.cpp
@@ -423,8 +423,11 @@ ScriptInstance::RPCMode PluginScript::get_rset_mode(const StringName &p_variable
}
}
-PluginScript::PluginScript()
- : _data(NULL), _tool(false), _valid(false), _script_list(this) {
+PluginScript::PluginScript() :
+ _data(NULL),
+ _tool(false),
+ _valid(false),
+ _script_list(this) {
}
void PluginScript::init(PluginScriptLanguage *language) {
diff --git a/modules/gdnative/register_types.cpp b/modules/gdnative/register_types.cpp
index 34099bf528..1cb35ec006 100644
--- a/modules/gdnative/register_types.cpp
+++ b/modules/gdnative/register_types.cpp
@@ -99,20 +99,41 @@ static Set<String> get_gdnative_singletons(EditorFileSystemDirectory *p_dir) {
}
static void actual_discoverer_handler() {
+
EditorFileSystemDirectory *dir = EditorFileSystem::get_singleton()->get_filesystem();
Set<String> file_paths = get_gdnative_singletons(dir);
+ bool changed = false;
+ Array current_files;
+ if (ProjectSettings::get_singleton()->has_setting("gdnative/singletons")) {
+ current_files = ProjectSettings::get_singleton()->get("gdnative/singletons");
+ }
Array files;
files.resize(file_paths.size());
int i = 0;
for (Set<String>::Element *E = file_paths.front(); E; i++, E = E->next()) {
+ if (!current_files.has(E->get())) {
+ changed = true;
+ }
files.set(i, E->get());
}
- ProjectSettings::get_singleton()->set("gdnative/singletons", files);
+ // Check for removed files
+ if (!changed) {
+ for (int i = 0; i < current_files.size(); i++) {
+ if (!file_paths.has(current_files[i])) {
+ changed = true;
+ break;
+ }
+ }
+ }
- ProjectSettings::get_singleton()->save();
+ if (changed) {
+
+ ProjectSettings::get_singleton()->set("gdnative/singletons", files);
+ ProjectSettings::get_singleton()->save();
+ }
}
static GDNativeSingletonDiscover *discoverer = NULL;
diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml
index 13d45aa520..cc617c5c67 100644
--- a/modules/gdscript/doc_classes/GDScript.xml
+++ b/modules/gdscript/doc_classes/GDScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GDScript" inherits="Script" category="Core" version="3.0-alpha">
+<class name="GDScript" inherits="Script" category="Core" version="3.0-beta">
<brief_description>
A script implemented in the GDScript programming language.
</brief_description>
diff --git a/modules/gdscript/doc_classes/GDScriptFunctionState.xml b/modules/gdscript/doc_classes/GDScriptFunctionState.xml
index 2df4e7c217..465a4f438b 100644
--- a/modules/gdscript/doc_classes/GDScriptFunctionState.xml
+++ b/modules/gdscript/doc_classes/GDScriptFunctionState.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GDScriptFunctionState" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="GDScriptFunctionState" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
State of a function call after yielding.
</brief_description>
diff --git a/modules/gdscript/doc_classes/GDScriptNativeClass.xml b/modules/gdscript/doc_classes/GDScriptNativeClass.xml
index 4514a78469..948254e0ad 100644
--- a/modules/gdscript/doc_classes/GDScriptNativeClass.xml
+++ b/modules/gdscript/doc_classes/GDScriptNativeClass.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GDScriptNativeClass" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="GDScriptNativeClass" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp
index 41a810ff00..b75f670906 100644
--- a/modules/gdscript/gdscript.cpp
+++ b/modules/gdscript/gdscript.cpp
@@ -738,7 +738,7 @@ Error GDScript::load_byte_code(const String &p_path) {
Error err = fae->open_and_parse(fa, key, FileAccessEncrypted::MODE_READ);
ERR_FAIL_COND_V(err, err);
bytecode.resize(fae->get_len());
- fae->get_buffer(bytecode.ptr(), bytecode.size());
+ fae->get_buffer(bytecode.ptrw(), bytecode.size());
memdelete(fae);
} else {
@@ -876,8 +876,8 @@ void GDScript::get_script_signal_list(List<MethodInfo> *r_signals) const {
#endif
}
-GDScript::GDScript()
- : script_list(this) {
+GDScript::GDScript() :
+ script_list(this) {
_static_ref = this;
valid = false;
@@ -1324,7 +1324,7 @@ void GDScriptLanguage::_add_global(const StringName &p_name, const Variant &p_va
}
globals[p_name] = global_array.size();
global_array.push_back(p_value);
- _global_array = global_array.ptr();
+ _global_array = global_array.ptrw();
}
void GDScriptLanguage::add_global_constant(const StringName &p_variable, const Variant &p_value) {
diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp
index 4cd6472b7f..f9385d7a11 100644
--- a/modules/gdscript/gdscript_compiler.cpp
+++ b/modules/gdscript/gdscript_compiler.cpp
@@ -806,8 +806,8 @@ int GDScriptCompiler::_parse_expression(CodeGen &codegen, const GDScriptParser::
ERR_FAIL_COND_V(on->arguments.size() != 2, -1);
if (on->arguments[0]->type == GDScriptParser::Node::TYPE_OPERATOR && (static_cast<GDScriptParser::OperatorNode *>(on->arguments[0])->op == GDScriptParser::OperatorNode::OP_INDEX || static_cast<GDScriptParser::OperatorNode *>(on->arguments[0])->op == GDScriptParser::OperatorNode::OP_INDEX_NAMED)) {
-//SET (chained) MODE!!
+ // SET (chained) MODE!
#ifdef DEBUG_ENABLED
if (static_cast<GDScriptParser::OperatorNode *>(on->arguments[0])->op == GDScriptParser::OperatorNode::OP_INDEX_NAMED) {
const GDScriptParser::OperatorNode *inon = static_cast<GDScriptParser::OperatorNode *>(on->arguments[0]);
diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp
index 5a76acea6e..adf6780278 100644
--- a/modules/gdscript/gdscript_editor.cpp
+++ b/modules/gdscript/gdscript_editor.cpp
@@ -29,11 +29,11 @@
/*************************************************************************/
#include "gdscript.h"
+#include "core/engine.h"
#include "editor/editor_settings.h"
#include "gdscript_compiler.h"
#include "global_constants.h"
#include "os/file_access.h"
-#include "core/engine.h"
#ifdef TOOLS_ENABLED
#include "editor/editor_file_system.h"
@@ -791,7 +791,7 @@ static bool _guess_expression_type(GDScriptCompletionContext &context, const GDS
}
Variant::CallError ce;
- Variant ret = mb->call(baseptr, argptr.ptr(), argptr.size(), ce);
+ Variant ret = mb->call(baseptr, (const Variant **)argptr.ptr(), argptr.size(), ce);
if (ce.error == Variant::CallError::CALL_OK && ret.get_type() != Variant::NIL) {
@@ -1795,8 +1795,8 @@ static void _find_type_arguments(GDScriptCompletionContext &context, const GDScr
}
} else {
- //regular method
+ //regular method
#if defined(DEBUG_METHODS_ENABLED) && defined(TOOLS_ENABLED)
if (p_argidx < m->get_argument_count()) {
PropertyInfo pi = m->get_argument_info(p_argidx);
diff --git a/modules/gdscript/gdscript_function.cpp b/modules/gdscript/gdscript_function.cpp
index 765a76fec4..ee23f0ea0f 100644
--- a/modules/gdscript/gdscript_function.cpp
+++ b/modules/gdscript/gdscript_function.cpp
@@ -250,7 +250,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
#ifdef DEBUG_ENABLED
-//GDScriptLanguage::get_singleton()->calls++;
+ //GDScriptLanguage::get_singleton()->calls++;
#endif
@@ -515,7 +515,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
} else {
v = "of type '" + _get_var_type(index) + "'";
}
- err_text = "Invalid set index " + v + " (on base: '" + _get_var_type(dst) + "').";
+ err_text = "Invalid set index " + v + " (on base: '" + _get_var_type(dst) + "') with value of type '" + _get_var_type(value) + "'";
OPCODE_BREAK;
}
#endif
@@ -574,7 +574,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
#ifdef DEBUG_ENABLED
if (!valid) {
String err_type;
- err_text = "Invalid set index '" + String(*index) + "' (on base: '" + _get_var_type(dst) + "').";
+ err_text = "Invalid set index '" + String(*index) + "' (on base: '" + _get_var_type(dst) + "') with value of type '" + _get_var_type(value) + "'.";
OPCODE_BREAK;
}
#endif
@@ -1432,8 +1432,8 @@ void GDScriptFunction::debug_get_stack_member_state(int p_line, List<Pair<String
}
}
-GDScriptFunction::GDScriptFunction()
- : function_list(this) {
+GDScriptFunction::GDScriptFunction() :
+ function_list(this) {
_stack_size = 0;
_call_size = 0;
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp
index bee9ef1998..599f204184 100644
--- a/modules/gdscript/gdscript_parser.cpp
+++ b/modules/gdscript/gdscript_parser.cpp
@@ -2976,10 +2976,9 @@ void GDScriptParser::_parse_extends(ClassNode *p_class) {
case GDScriptTokenizer::TK_IDENTIFIER: {
- StringName identifier = tokenizer->get_token_identifier();
- p_class->extends_class.push_back(identifier);
- }
- break;
+ StringName identifier = tokenizer->get_token_identifier();
+ p_class->extends_class.push_back(identifier);
+ } break;
case GDScriptTokenizer::TK_PERIOD:
break;
@@ -3390,6 +3389,10 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
_set_error("Can't export null type.");
return;
}
+ if (type == Variant::OBJECT) {
+ _set_error("Can't export raw object type.");
+ return;
+ }
current_export.type = type;
current_export.usage |= PROPERTY_USAGE_SCRIPT_VARIABLE;
tokenizer->advance();
diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml
index ee8ecfff66..8c862b52e8 100644
--- a/modules/gridmap/doc_classes/GridMap.xml
+++ b/modules/gridmap/doc_classes/GridMap.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GridMap" inherits="Spatial" category="Core" version="3.0-alpha">
+<class name="GridMap" inherits="Spatial" category="Core" version="3.0-beta">
<brief_description>
Node for 3D tile-based maps.
</brief_description>
@@ -220,7 +220,7 @@
</method>
</methods>
<constants>
- <constant name="INVALID_CELL_ITEM" value="-1" enum="">
+ <constant name="INVALID_CELL_ITEM" value="-1">
Invalid cell item that can be used in [method set_cell_item] to clear cells (or represent an empty cell in [method get_cell_item]).
</constant>
</constants>
diff --git a/modules/mobile_vr/doc_classes/MobileVRInterface.xml b/modules/mobile_vr/doc_classes/MobileVRInterface.xml
index c99934aea9..5d3da0672e 100644
--- a/modules/mobile_vr/doc_classes/MobileVRInterface.xml
+++ b/modules/mobile_vr/doc_classes/MobileVRInterface.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="MobileVRInterface" inherits="ARVRInterface" category="Core" version="3.0-alpha">
+<class name="MobileVRInterface" inherits="ARVRInterface" category="Core" version="3.0-beta">
<brief_description>
Generic mobile VR implementation
</brief_description>
@@ -12,102 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_display_to_lens" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the distance between the display and the lens.
- </description>
- </method>
- <method name="get_display_width" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Return the width of the LCD screen of the device.
- </description>
- </method>
- <method name="get_iod" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the interocular distance.
- </description>
- </method>
- <method name="get_k1" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the k1 lens constant.
- </description>
- </method>
- <method name="get_k2" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Retuns the k2 lens constant
- </description>
- </method>
- <method name="get_oversample" qualifiers="const">
- <return type="float">
- </return>
- <description>
- Returns the oversampling setting.
- </description>
- </method>
- <method name="set_display_to_lens">
- <return type="void">
- </return>
- <argument index="0" name="display_to_lens" type="float">
- </argument>
- <description>
- Sets the distance between display and the lens.
- </description>
- </method>
- <method name="set_display_width">
- <return type="void">
- </return>
- <argument index="0" name="display_width" type="float">
- </argument>
- <description>
- Sets the width of the LCD screen of the device.
- </description>
- </method>
- <method name="set_iod">
- <return type="void">
- </return>
- <argument index="0" name="iod" type="float">
- </argument>
- <description>
- Sets the interocular distance.
- </description>
- </method>
- <method name="set_k1">
- <return type="void">
- </return>
- <argument index="0" name="k" type="float">
- </argument>
- <description>
- Sets the k1 lens constant.
- </description>
- </method>
- <method name="set_k2">
- <return type="void">
- </return>
- <argument index="0" name="k" type="float">
- </argument>
- <description>
- Sets the k2 lens constant.
- </description>
- </method>
- <method name="set_oversample">
- <return type="void">
- </return>
- <argument index="0" name="oversample" type="float">
- </argument>
- <description>
- Sets the oversampling setting.
- </description>
- </method>
</methods>
<members>
<member name="display_to_lens" type="float" setter="set_display_to_lens" getter="get_display_to_lens">
diff --git a/modules/mobile_vr/mobile_interface.cpp b/modules/mobile_vr/mobile_interface.cpp
index 3a0b83d534..35253d5a77 100644
--- a/modules/mobile_vr/mobile_interface.cpp
+++ b/modules/mobile_vr/mobile_interface.cpp
@@ -461,6 +461,7 @@ MobileVRInterface::MobileVRInterface() {
glGenBuffers(1, &half_screen_quad);
glBindBuffer(GL_ARRAY_BUFFER, half_screen_quad);
{
+ /* clang-format off */
const float qv[16] = {
0, -1,
-1, -1,
@@ -471,6 +472,7 @@ MobileVRInterface::MobileVRInterface() {
1, -1,
1, -1,
};
+ /* clang-format on */
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 16, qv, GL_STATIC_DRAW);
}
diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp
index dfa5e720ae..af5a0334c3 100644
--- a/modules/mono/csharp_script.cpp
+++ b/modules/mono/csharp_script.cpp
@@ -1332,7 +1332,7 @@ bool CSharpScript::_update_exports() {
while (top && top != native) {
const Vector<GDMonoField *> &fields = top->get_all_fields();
- for (int i = 0; i < fields.size(); i++) {
+ for (int i = fields.size() - 1; i >= 0; i--) {
GDMonoField *field = fields[i];
if (field->is_static()) {
@@ -1382,7 +1382,7 @@ bool CSharpScript::_update_exports() {
PropertyInfo prop_info = PropertyInfo(type, name, hint, hint_string, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE);
member_info[cname] = prop_info;
- exported_members_cache.push_back(prop_info);
+ exported_members_cache.push_front(prop_info);
if (tmp_object) {
exported_members_defval_cache[cname] = GDMonoMarshal::mono_object_to_variant(field->get_value(tmp_object));
@@ -1885,8 +1885,8 @@ StringName CSharpScript::get_script_name() const {
return name;
}
-CSharpScript::CSharpScript()
- : script_list(this) {
+CSharpScript::CSharpScript() :
+ script_list(this) {
_clear();
diff --git a/modules/mono/doc_classes/@C#.xml b/modules/mono/doc_classes/@C#.xml
index 5d27b32200..5fcbf36a2b 100644
--- a/modules/mono/doc_classes/@C#.xml
+++ b/modules/mono/doc_classes/@C#.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="@C#" category="Core" version="3.0-alpha">
+<class name="@C#" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/mono/doc_classes/CSharpScript.xml b/modules/mono/doc_classes/CSharpScript.xml
index ccc24b832c..853ef28731 100644
--- a/modules/mono/doc_classes/CSharpScript.xml
+++ b/modules/mono/doc_classes/CSharpScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="CSharpScript" inherits="Script" category="Core" version="3.0-alpha">
+<class name="CSharpScript" inherits="Script" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/mono/doc_classes/GodotSharp.xml b/modules/mono/doc_classes/GodotSharp.xml
index 9edbd18fc1..2696a0bb4b 100644
--- a/modules/mono/doc_classes/GodotSharp.xml
+++ b/modules/mono/doc_classes/GodotSharp.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="GodotSharp" inherits="Object" category="Core" version="3.0-alpha">
+<class name="GodotSharp" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp
index 59a2b73dbc..fbb9b2ed14 100644
--- a/modules/mono/editor/bindings_generator.cpp
+++ b/modules/mono/editor/bindings_generator.cpp
@@ -370,7 +370,7 @@ Error BindingsGenerator::generate_cs_core_project(const String &p_output_dir, bo
Vector<uint8_t> data;
data.resize(file_data.uncompressed_size);
- Compression::decompress(data.ptr(), file_data.uncompressed_size, file_data.data, file_data.compressed_size, Compression::MODE_DEFLATE);
+ Compression::decompress(data.ptrw(), file_data.uncompressed_size, file_data.data, file_data.compressed_size, Compression::MODE_DEFLATE);
if (file_name.get_basename() == BINDINGS_GLOBAL_SCOPE_CLASS) {
// GD.cs must be formatted to include the generated global constants
@@ -382,7 +382,7 @@ Error BindingsGenerator::generate_cs_core_project(const String &p_output_dir, bo
CharString data_utf8 = data_str.utf8();
data.resize(data_utf8.length());
- copymem(data.ptr(), reinterpret_cast<const uint8_t *>(data_utf8.get_data()), data_utf8.length());
+ copymem(data.ptrw(), reinterpret_cast<const uint8_t *>(data_utf8.get_data()), data_utf8.length());
}
FileAccessRef file = FileAccess::open(output_file, FileAccess::WRITE);
diff --git a/modules/mono/editor/csharp_project.cpp b/modules/mono/editor/csharp_project.cpp
index bde5f0fd0b..9a1efb4423 100644
--- a/modules/mono/editor/csharp_project.cpp
+++ b/modules/mono/editor/csharp_project.cpp
@@ -117,4 +117,4 @@ void add_item(const String &p_project_path, const String &p_item_type, const Str
ERR_FAIL();
}
}
-} // CSharpProject
+} // namespace CSharpProject
diff --git a/modules/mono/editor/csharp_project.h b/modules/mono/editor/csharp_project.h
index 4832d2251e..44e8325a59 100644
--- a/modules/mono/editor/csharp_project.h
+++ b/modules/mono/editor/csharp_project.h
@@ -39,6 +39,6 @@ String generate_editor_api_project(const String &p_dir, const String &p_core_dll
String generate_game_project(const String &p_dir, const String &p_name, const Vector<String> &p_files = Vector<String>());
void add_item(const String &p_project_path, const String &p_item_type, const String &p_include);
-}
+} // namespace CSharpProject
#endif // CSHARP_PROJECT_H
diff --git a/modules/mono/glue/cs_files/AABB.cs b/modules/mono/glue/cs_files/AABB.cs
index 6ee3bbe53a..e6e12f7ba3 100644
--- a/modules/mono/glue/cs_files/AABB.cs
+++ b/modules/mono/glue/cs_files/AABB.cs
@@ -38,7 +38,7 @@ namespace Godot
}
}
- public bool encloses(AABB with)
+ public bool Encloses(AABB with)
{
Vector3 src_min = position;
Vector3 src_max = position + size;
@@ -53,7 +53,7 @@ namespace Godot
(src_max.z > dst_max.z));
}
- public AABB expand(Vector3 to_point)
+ public AABB Expand(Vector3 to_point)
{
Vector3 begin = position;
Vector3 end = position + size;
@@ -75,12 +75,12 @@ namespace Godot
return new AABB(begin, end - begin);
}
- public float get_area()
+ public float GetArea()
{
return size.x * size.y * size.z;
}
- public Vector3 get_endpoint(int idx)
+ public Vector3 GetEndpoint(int idx)
{
switch (idx)
{
@@ -105,7 +105,7 @@ namespace Godot
}
}
- public Vector3 get_longest_axis()
+ public Vector3 GetLongestAxis()
{
Vector3 axis = new Vector3(1f, 0f, 0f);
float max_size = size.x;
@@ -125,7 +125,7 @@ namespace Godot
return axis;
}
- public Vector3.Axis get_longest_axis_index()
+ public Vector3.Axis GetLongestAxisIndex()
{
Vector3.Axis axis = Vector3.Axis.X;
float max_size = size.x;
@@ -145,7 +145,7 @@ namespace Godot
return axis;
}
- public float get_longest_axis_size()
+ public float GetLongestAxisSize()
{
float max_size = size.x;
@@ -158,7 +158,7 @@ namespace Godot
return max_size;
}
- public Vector3 get_shortest_axis()
+ public Vector3 GetShortestAxis()
{
Vector3 axis = new Vector3(1f, 0f, 0f);
float max_size = size.x;
@@ -178,7 +178,7 @@ namespace Godot
return axis;
}
- public Vector3.Axis get_shortest_axis_index()
+ public Vector3.Axis GetShortestAxisIndex()
{
Vector3.Axis axis = Vector3.Axis.X;
float max_size = size.x;
@@ -198,7 +198,7 @@ namespace Godot
return axis;
}
- public float get_shortest_axis_size()
+ public float GetShortestAxisSize()
{
float max_size = size.x;
@@ -211,7 +211,7 @@ namespace Godot
return max_size;
}
- public Vector3 get_support(Vector3 dir)
+ public Vector3 GetSupport(Vector3 dir)
{
Vector3 half_extents = size * 0.5f;
Vector3 ofs = position + half_extents;
@@ -222,7 +222,7 @@ namespace Godot
(dir.z > 0f) ? -half_extents.z : half_extents.z);
}
- public AABB grow(float by)
+ public AABB Grow(float by)
{
AABB res = this;
@@ -236,17 +236,17 @@ namespace Godot
return res;
}
- public bool has_no_area()
+ public bool HasNoArea()
{
return size.x <= 0f || size.y <= 0f || size.z <= 0f;
}
- public bool has_no_surface()
+ public bool HasNoSurface()
{
return size.x <= 0f && size.y <= 0f && size.z <= 0f;
}
- public bool has_point(Vector3 point)
+ public bool HasPoint(Vector3 point)
{
if (point.x < position.x)
return false;
@@ -264,7 +264,7 @@ namespace Godot
return true;
}
- public AABB intersection(AABB with)
+ public AABB Intersection(AABB with)
{
Vector3 src_min = position;
Vector3 src_max = position + size;
@@ -306,7 +306,7 @@ namespace Godot
return new AABB(min, max - min);
}
- public bool intersects(AABB with)
+ public bool Intersects(AABB with)
{
if (position.x >= (with.position.x + with.size.x))
return false;
@@ -324,7 +324,7 @@ namespace Godot
return true;
}
- public bool intersects_plane(Plane plane)
+ public bool IntersectsPlane(Plane plane)
{
Vector3[] points =
{
@@ -343,7 +343,7 @@ namespace Godot
for (int i = 0; i < 8; i++)
{
- if (plane.distance_to(points[i]) > 0)
+ if (plane.DistanceTo(points[i]) > 0)
over = true;
else
under = true;
@@ -352,7 +352,7 @@ namespace Godot
return under && over;
}
- public bool intersects_segment(Vector3 from, Vector3 to)
+ public bool IntersectsSegment(Vector3 from, Vector3 to)
{
float min = 0f;
float max = 1f;
@@ -398,7 +398,7 @@ namespace Godot
return true;
}
- public AABB merge(AABB with)
+ public AABB Merge(AABB with)
{
Vector3 beg_1 = position;
Vector3 beg_2 = with.position;
diff --git a/modules/mono/glue/cs_files/Basis.cs b/modules/mono/glue/cs_files/Basis.cs
index c50e783349..ea92b1641b 100644
--- a/modules/mono/glue/cs_files/Basis.cs
+++ b/modules/mono/glue/cs_files/Basis.cs
@@ -56,9 +56,9 @@ namespace Godot
{
return new Vector3
(
- new Vector3(this[0, 0], this[1, 0], this[2, 0]).length(),
- new Vector3(this[0, 1], this[1, 1], this[2, 1]).length(),
- new Vector3(this[0, 2], this[1, 2], this[2, 2]).length()
+ new Vector3(this[0, 0], this[1, 0], this[2, 0]).Length(),
+ new Vector3(this[0, 1], this[1, 1], this[2, 1]).Length(),
+ new Vector3(this[0, 2], this[1, 2], this[2, 2]).Length()
);
}
}
@@ -133,7 +133,7 @@ namespace Godot
}
}
- internal static Basis create_from_axes(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis)
+ internal static Basis CreateFromAxes(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis)
{
return new Basis
(
@@ -143,21 +143,21 @@ namespace Godot
);
}
- public float determinant()
+ public float Determinant()
{
return this[0, 0] * (this[1, 1] * this[2, 2] - this[2, 1] * this[1, 2]) -
this[1, 0] * (this[0, 1] * this[2, 2] - this[2, 1] * this[0, 2]) +
this[2, 0] * (this[0, 1] * this[1, 2] - this[1, 1] * this[0, 2]);
}
- public Vector3 get_axis(int axis)
+ public Vector3 GetAxis(int axis)
{
return new Vector3(this[0, axis], this[1, axis], this[2, axis]);
}
- public Vector3 get_euler()
+ public Vector3 GetEuler()
{
- Basis m = this.orthonormalized();
+ Basis m = this.Orthonormalized();
Vector3 euler;
euler.z = 0.0f;
@@ -169,26 +169,26 @@ namespace Godot
{
if (mxy > -1.0f)
{
- euler.x = Mathf.asin(-mxy);
- euler.y = Mathf.atan2(m.x[2], m.z[2]);
- euler.z = Mathf.atan2(m.y[0], m.y[1]);
+ euler.x = Mathf.Asin(-mxy);
+ euler.y = Mathf.Atan2(m.x[2], m.z[2]);
+ euler.z = Mathf.Atan2(m.y[0], m.y[1]);
}
else
{
euler.x = Mathf.PI * 0.5f;
- euler.y = -Mathf.atan2(-m.x[1], m.x[0]);
+ euler.y = -Mathf.Atan2(-m.x[1], m.x[0]);
}
}
else
{
euler.x = -Mathf.PI * 0.5f;
- euler.y = -Mathf.atan2(m.x[1], m.x[0]);
+ euler.y = -Mathf.Atan2(m.x[1], m.x[0]);
}
return euler;
}
- public int get_orthogonal_index()
+ public int GetOrthogonalIndex()
{
Basis orth = this;
@@ -218,7 +218,7 @@ namespace Godot
return 0;
}
- public Basis inverse()
+ public Basis Inverse()
{
Basis inv = this;
@@ -259,27 +259,27 @@ namespace Godot
return inv;
}
- public Basis orthonormalized()
+ public Basis Orthonormalized()
{
- Vector3 xAxis = get_axis(0);
- Vector3 yAxis = get_axis(1);
- Vector3 zAxis = get_axis(2);
+ Vector3 xAxis = GetAxis(0);
+ Vector3 yAxis = GetAxis(1);
+ Vector3 zAxis = GetAxis(2);
- xAxis.normalize();
- yAxis = (yAxis - xAxis * (xAxis.dot(yAxis)));
- yAxis.normalize();
- zAxis = (zAxis - xAxis * (xAxis.dot(zAxis)) - yAxis * (yAxis.dot(zAxis)));
- zAxis.normalize();
+ xAxis.Normalize();
+ yAxis = (yAxis - xAxis * (xAxis.Dot(yAxis)));
+ yAxis.Normalize();
+ zAxis = (zAxis - xAxis * (xAxis.Dot(zAxis)) - yAxis * (yAxis.Dot(zAxis)));
+ zAxis.Normalize();
- return Basis.create_from_axes(xAxis, yAxis, zAxis);
+ return Basis.CreateFromAxes(xAxis, yAxis, zAxis);
}
- public Basis rotated(Vector3 axis, float phi)
+ public Basis Rotated(Vector3 axis, float phi)
{
return new Basis(axis, phi) * this;
}
- public Basis scaled(Vector3 scale)
+ public Basis Scaled(Vector3 scale)
{
Basis m = this;
@@ -296,22 +296,22 @@ namespace Godot
return m;
}
- public float tdotx(Vector3 with)
+ public float Tdotx(Vector3 with)
{
return this[0, 0] * with[0] + this[1, 0] * with[1] + this[2, 0] * with[2];
}
- public float tdoty(Vector3 with)
+ public float Tdoty(Vector3 with)
{
return this[0, 1] * with[0] + this[1, 1] * with[1] + this[2, 1] * with[2];
}
- public float tdotz(Vector3 with)
+ public float Tdotz(Vector3 with)
{
return this[0, 2] * with[0] + this[1, 2] * with[1] + this[2, 2] * with[2];
}
- public Basis transposed()
+ public Basis Transposed()
{
Basis tr = this;
@@ -330,17 +330,17 @@ namespace Godot
return tr;
}
- public Vector3 xform(Vector3 v)
+ public Vector3 Xform(Vector3 v)
{
return new Vector3
(
- this[0].dot(v),
- this[1].dot(v),
- this[2].dot(v)
+ this[0].Dot(v),
+ this[1].Dot(v),
+ this[2].Dot(v)
);
}
- public Vector3 xform_inv(Vector3 v)
+ public Vector3 XformInv(Vector3 v)
{
return new Vector3
(
@@ -354,7 +354,7 @@ namespace Godot
float trace = x[0] + y[1] + z[2];
if (trace > 0.0f) {
- float s = Mathf.sqrt(trace + 1.0f) * 2f;
+ float s = Mathf.Sqrt(trace + 1.0f) * 2f;
float inv_s = 1f / s;
return new Quat(
(z[1] - y[2]) * inv_s,
@@ -363,7 +363,7 @@ namespace Godot
s * 0.25f
);
} else if (x[0] > y[1] && x[0] > z[2]) {
- float s = Mathf.sqrt(x[0] - y[1] - z[2] + 1.0f) * 2f;
+ float s = Mathf.Sqrt(x[0] - y[1] - z[2] + 1.0f) * 2f;
float inv_s = 1f / s;
return new Quat(
s * 0.25f,
@@ -372,7 +372,7 @@ namespace Godot
(z[1] - y[2]) * inv_s
);
} else if (y[1] > z[2]) {
- float s = Mathf.sqrt(-x[0] + y[1] - z[2] + 1.0f) * 2f;
+ float s = Mathf.Sqrt(-x[0] + y[1] - z[2] + 1.0f) * 2f;
float inv_s = 1f / s;
return new Quat(
(x[1] + y[0]) * inv_s,
@@ -381,7 +381,7 @@ namespace Godot
(x[2] - z[0]) * inv_s
);
} else {
- float s = Mathf.sqrt(-x[0] - y[1] + z[2] + 1.0f) * 2f;
+ float s = Mathf.Sqrt(-x[0] - y[1] + z[2] + 1.0f) * 2f;
float inv_s = 1f / s;
return new Quat(
(x[2] + z[0]) * inv_s,
@@ -394,7 +394,7 @@ namespace Godot
public Basis(Quat quat)
{
- float s = 2.0f / quat.length_squared();
+ float s = 2.0f / quat.LengthSquared();
float xs = quat.x * s;
float ys = quat.y * s;
@@ -418,8 +418,8 @@ namespace Godot
{
Vector3 axis_sq = new Vector3(axis.x * axis.x, axis.y * axis.y, axis.z * axis.z);
- float cosine = Mathf.cos(phi);
- float sine = Mathf.sin(phi);
+ float cosine = Mathf.Cos(phi);
+ float sine = Mathf.Sin(phi);
this.x = new Vector3
(
@@ -461,9 +461,9 @@ namespace Godot
{
return new Basis
(
- right.tdotx(left[0]), right.tdoty(left[0]), right.tdotz(left[0]),
- right.tdotx(left[1]), right.tdoty(left[1]), right.tdotz(left[1]),
- right.tdotx(left[2]), right.tdoty(left[2]), right.tdotz(left[2])
+ right.Tdotx(left[0]), right.Tdoty(left[0]), right.Tdotz(left[0]),
+ right.Tdotx(left[1]), right.Tdoty(left[1]), right.Tdotz(left[1]),
+ right.Tdotx(left[2]), right.Tdoty(left[2]), right.Tdotz(left[2])
);
}
diff --git a/modules/mono/glue/cs_files/Color.cs b/modules/mono/glue/cs_files/Color.cs
index 0a00f83d47..db0e1fb744 100644
--- a/modules/mono/glue/cs_files/Color.cs
+++ b/modules/mono/glue/cs_files/Color.cs
@@ -45,8 +45,8 @@ namespace Godot
{
get
{
- float max = Mathf.max(r, Mathf.max(g, b));
- float min = Mathf.min(r, Mathf.min(g, b));
+ float max = Mathf.Max(r, Mathf.Max(g, b));
+ float min = Mathf.Min(r, Mathf.Min(g, b));
float delta = max - min;
@@ -71,7 +71,7 @@ namespace Godot
}
set
{
- this = from_hsv(value, s, v);
+ this = FromHsv(value, s, v);
}
}
@@ -79,8 +79,8 @@ namespace Godot
{
get
{
- float max = Mathf.max(r, Mathf.max(g, b));
- float min = Mathf.min(r, Mathf.min(g, b));
+ float max = Mathf.Max(r, Mathf.Max(g, b));
+ float min = Mathf.Min(r, Mathf.Min(g, b));
float delta = max - min;
@@ -88,7 +88,7 @@ namespace Godot
}
set
{
- this = from_hsv(h, value, v);
+ this = FromHsv(h, value, v);
}
}
@@ -96,11 +96,11 @@ namespace Godot
{
get
{
- return Mathf.max(r, Mathf.max(g, b));
+ return Mathf.Max(r, Mathf.Max(g, b));
}
set
{
- this = from_hsv(h, s, value);
+ this = FromHsv(h, s, value);
}
}
@@ -154,10 +154,10 @@ namespace Godot
}
}
- public static void to_hsv(Color color, out float hue, out float saturation, out float value)
+ public static void ToHsv(Color color, out float hue, out float saturation, out float value)
{
- int max = Mathf.max(color.r8, Mathf.max(color.g8, color.b8));
- int min = Mathf.min(color.r8, Mathf.min(color.g8, color.b8));
+ int max = Mathf.Max(color.r8, Mathf.Max(color.g8, color.b8));
+ int min = Mathf.Min(color.r8, Mathf.Min(color.g8, color.b8));
float delta = max - min;
@@ -184,7 +184,7 @@ namespace Godot
value = max / 255f;
}
- public static Color from_hsv(float hue, float saturation, float value, float alpha = 1.0f)
+ public static Color FromHsv(float hue, float saturation, float value, float alpha = 1.0f)
{
if (saturation == 0)
{
@@ -221,7 +221,7 @@ namespace Godot
}
}
- public Color blend(Color over)
+ public Color Blend(Color over)
{
Color res;
@@ -242,7 +242,7 @@ namespace Godot
return res;
}
- public Color contrasted()
+ public Color Contrasted()
{
return new Color(
(r + 0.5f) % 1.0f,
@@ -251,12 +251,12 @@ namespace Godot
);
}
- public float gray()
+ public float Gray()
{
return (r + g + b) / 3.0f;
}
- public Color inverted()
+ public Color Inverted()
{
return new Color(
1.0f - r,
@@ -265,7 +265,7 @@ namespace Godot
);
}
- public Color linear_interpolate(Color b, float t)
+ public Color LinearInterpolate(Color b, float t)
{
Color res = this;
@@ -277,7 +277,7 @@ namespace Godot
return res;
}
- public int to_32()
+ public int To32()
{
int c = (byte)(a * 255);
c <<= 8;
@@ -290,7 +290,7 @@ namespace Godot
return c;
}
- public int to_ARGB32()
+ public int ToArgb32()
{
int c = (byte)(a * 255);
c <<= 8;
@@ -303,7 +303,7 @@ namespace Godot
return c;
}
- public string to_html(bool include_alpha = true)
+ public string ToHtml(bool include_alpha = true)
{
String txt = string.Empty;
@@ -375,7 +375,7 @@ namespace Godot
private String _to_hex(float val)
{
- int v = (int)Mathf.clamp(val * 255.0f, 0, 255);
+ int v = (int)Mathf.Clamp(val * 255.0f, 0, 255);
string ret = string.Empty;
@@ -396,7 +396,7 @@ namespace Godot
return ret;
}
- internal static bool html_is_valid(string color)
+ internal static bool HtmlIsValid(string color)
{
if (color.Length == 0)
return false;
diff --git a/modules/mono/glue/cs_files/Error.cs b/modules/mono/glue/cs_files/Error.cs
index 3f4a92603d..dee4b88f74 100644
--- a/modules/mono/glue/cs_files/Error.cs
+++ b/modules/mono/glue/cs_files/Error.cs
@@ -42,7 +42,6 @@ namespace Godot
ERR_CYCLIC_LINK = 40,
ERR_BUSY = 44,
ERR_HELP = 46,
- ERR_BUG = 47,
- ERR_WTF = 49
+ ERR_BUG = 47
}
}
diff --git a/modules/mono/glue/cs_files/GD.cs b/modules/mono/glue/cs_files/GD.cs
index 40a42d23b4..99fc289161 100644
--- a/modules/mono/glue/cs_files/GD.cs
+++ b/modules/mono/glue/cs_files/GD.cs
@@ -6,32 +6,32 @@ namespace Godot
{
/*{GodotGlobalConstants}*/
- public static object bytes2var(byte[] bytes)
+ public static object Bytes2Var(byte[] bytes)
{
return NativeCalls.godot_icall_Godot_bytes2var(bytes);
}
- public static object convert(object what, int type)
+ public static object Convert(object what, int type)
{
return NativeCalls.godot_icall_Godot_convert(what, type);
}
- public static float db2linear(float db)
+ public static float Db2Linear(float db)
{
return (float)Math.Exp(db * 0.11512925464970228420089957273422);
}
- public static float dectime(float value, float amount, float step)
+ public static float Dectime(float value, float amount, float step)
{
float sgn = value < 0 ? -1.0f : 1.0f;
- float val = Mathf.abs(value);
+ float val = Mathf.Abs(value);
val -= amount * step;
if (val < 0.0f)
val = 0.0f;
return val * sgn;
}
- public static FuncRef funcref(Object instance, string funcname)
+ public static FuncRef Funcref(Object instance, string funcname)
{
var ret = new FuncRef();
ret.SetInstance(instance);
@@ -39,57 +39,57 @@ namespace Godot
return ret;
}
- public static int hash(object var)
+ public static int Hash(object var)
{
return NativeCalls.godot_icall_Godot_hash(var);
}
- public static Object instance_from_id(int instance_id)
+ public static Object InstanceFromId(int instanceId)
{
- return NativeCalls.godot_icall_Godot_instance_from_id(instance_id);
+ return NativeCalls.godot_icall_Godot_instance_from_id(instanceId);
}
- public static double linear2db(double linear)
+ public static double Linear2Db(double linear)
{
return Math.Log(linear) * 8.6858896380650365530225783783321;
}
- public static Resource load(string path)
+ public static Resource Load(string path)
{
return ResourceLoader.Load(path);
}
- public static void print(params object[] what)
+ public static void Print(params object[] what)
{
NativeCalls.godot_icall_Godot_print(what);
}
- public static void print_stack()
+ public static void PrintStack()
{
- print(System.Environment.StackTrace);
+ Print(System.Environment.StackTrace);
}
- public static void printerr(params object[] what)
+ public static void Printerr(params object[] what)
{
NativeCalls.godot_icall_Godot_printerr(what);
}
- public static void printraw(params object[] what)
+ public static void Printraw(params object[] what)
{
NativeCalls.godot_icall_Godot_printraw(what);
}
- public static void prints(params object[] what)
+ public static void Prints(params object[] what)
{
NativeCalls.godot_icall_Godot_prints(what);
}
- public static void printt(params object[] what)
+ public static void Printt(params object[] what)
{
NativeCalls.godot_icall_Godot_printt(what);
}
- public static int[] range(int length)
+ public static int[] Range(int length)
{
int[] ret = new int[length];
@@ -101,7 +101,7 @@ namespace Godot
return ret;
}
- public static int[] range(int from, int to)
+ public static int[] Range(int from, int to)
{
if (to < from)
return new int[0];
@@ -116,7 +116,7 @@ namespace Godot
return ret;
}
- public static int[] range(int from, int to, int increment)
+ public static int[] Range(int from, int to, int increment)
{
if (to < from && increment > 0)
return new int[0];
@@ -153,37 +153,37 @@ namespace Godot
return ret;
}
- public static void seed(int seed)
+ public static void Seed(int seed)
{
NativeCalls.godot_icall_Godot_seed(seed);
}
- public static string str(params object[] what)
+ public static string Str(params object[] what)
{
return NativeCalls.godot_icall_Godot_str(what);
}
- public static object str2var(string str)
+ public static object Str2Var(string str)
{
return NativeCalls.godot_icall_Godot_str2var(str);
}
- public static bool type_exists(string type)
+ public static bool TypeExists(string type)
{
return NativeCalls.godot_icall_Godot_type_exists(type);
}
- public static byte[] var2bytes(object var)
+ public static byte[] Var2Bytes(object var)
{
return NativeCalls.godot_icall_Godot_var2bytes(var);
}
- public static string var2str(object var)
+ public static string Var2Str(object var)
{
return NativeCalls.godot_icall_Godot_var2str(var);
}
- public static WeakRef weakref(Object obj)
+ public static WeakRef Weakref(Object obj)
{
return NativeCalls.godot_icall_Godot_weakref(Object.GetPtr(obj));
}
diff --git a/modules/mono/glue/cs_files/Mathf.cs b/modules/mono/glue/cs_files/Mathf.cs
index 37e6e5bbe3..6951ace4fc 100644
--- a/modules/mono/glue/cs_files/Mathf.cs
+++ b/modules/mono/glue/cs_files/Mathf.cs
@@ -10,42 +10,42 @@ namespace Godot
private const float Deg2RadConst = 0.0174532924f;
private const float Rad2DegConst = 57.29578f;
- public static float abs(float s)
+ public static float Abs(float s)
{
return Math.Abs(s);
}
- public static float acos(float s)
+ public static float Acos(float s)
{
return (float)Math.Acos(s);
}
- public static float asin(float s)
+ public static float Asin(float s)
{
return (float)Math.Asin(s);
}
- public static float atan(float s)
+ public static float Atan(float s)
{
return (float)Math.Atan(s);
}
- public static float atan2(float x, float y)
+ public static float Atan2(float x, float y)
{
return (float)Math.Atan2(x, y);
}
- public static Vector2 cartesian2polar(float x, float y)
+ public static Vector2 Cartesian2Polar(float x, float y)
{
- return new Vector2(sqrt(x * x + y * y), atan2(y, x));
+ return new Vector2(Sqrt(x * x + y * y), Atan2(y, x));
}
- public static float ceil(float s)
+ public static float Ceil(float s)
{
return (float)Math.Ceiling(s);
}
- public static float clamp(float val, float min, float max)
+ public static float Clamp(float val, float min, float max)
{
if (val < min)
{
@@ -59,32 +59,32 @@ namespace Godot
return val;
}
- public static float cos(float s)
+ public static float Cos(float s)
{
return (float)Math.Cos(s);
}
- public static float cosh(float s)
+ public static float Cosh(float s)
{
return (float)Math.Cosh(s);
}
- public static int decimals(float step)
+ public static int Decimals(float step)
{
- return decimals(step);
+ return Decimals(step);
}
- public static int decimals(decimal step)
+ public static int Decimals(decimal step)
{
return BitConverter.GetBytes(decimal.GetBits(step)[3])[2];
}
- public static float deg2rad(float deg)
+ public static float Deg2Rad(float deg)
{
return deg * Deg2RadConst;
}
- public static float ease(float s, float curve)
+ public static float Ease(float s, float curve)
{
if (s < 0f)
{
@@ -99,35 +99,35 @@ namespace Godot
{
if (curve < 1.0f)
{
- return 1.0f - pow(1.0f - s, 1.0f / curve);
+ return 1.0f - Pow(1.0f - s, 1.0f / curve);
}
- return pow(s, curve);
+ return Pow(s, curve);
}
else if (curve < 0f)
{
if (s < 0.5f)
{
- return pow(s * 2.0f, -curve) * 0.5f;
+ return Pow(s * 2.0f, -curve) * 0.5f;
}
- return (1.0f - pow(1.0f - (s - 0.5f) * 2.0f, -curve)) * 0.5f + 0.5f;
+ return (1.0f - Pow(1.0f - (s - 0.5f) * 2.0f, -curve)) * 0.5f + 0.5f;
}
return 0f;
}
- public static float exp(float s)
+ public static float Exp(float s)
{
return (float)Math.Exp(s);
}
- public static float floor(float s)
+ public static float Floor(float s)
{
return (float)Math.Floor(s);
}
- public static float fposmod(float x, float y)
+ public static float Fposmod(float x, float y)
{
if (x >= 0f)
{
@@ -139,37 +139,37 @@ namespace Godot
}
}
- public static float lerp(float from, float to, float weight)
+ public static float Lerp(float from, float to, float weight)
{
- return from + (to - from) * clamp(weight, 0f, 1f);
+ return from + (to - from) * Clamp(weight, 0f, 1f);
}
- public static float log(float s)
+ public static float Log(float s)
{
return (float)Math.Log(s);
}
- public static int max(int a, int b)
+ public static int Max(int a, int b)
{
return (a > b) ? a : b;
}
- public static float max(float a, float b)
+ public static float Max(float a, float b)
{
return (a > b) ? a : b;
}
- public static int min(int a, int b)
+ public static int Min(int a, int b)
{
return (a < b) ? a : b;
}
- public static float min(float a, float b)
+ public static float Min(float a, float b)
{
return (a < b) ? a : b;
}
- public static int nearest_po2(int val)
+ public static int NearestPo2(int val)
{
val--;
val |= val >> 1;
@@ -181,62 +181,62 @@ namespace Godot
return val;
}
- public static Vector2 polar2cartesian(float r, float th)
+ public static Vector2 Polar2Cartesian(float r, float th)
{
- return new Vector2(r * cos(th), r * sin(th));
+ return new Vector2(r * Cos(th), r * Sin(th));
}
- public static float pow(float x, float y)
+ public static float Pow(float x, float y)
{
return (float)Math.Pow(x, y);
}
- public static float rad2deg(float rad)
+ public static float Rad2Deg(float rad)
{
return rad * Rad2DegConst;
}
- public static float round(float s)
+ public static float Round(float s)
{
return (float)Math.Round(s);
}
- public static float sign(float s)
+ public static float Sign(float s)
{
return (s < 0f) ? -1f : 1f;
}
- public static float sin(float s)
+ public static float Sin(float s)
{
return (float)Math.Sin(s);
}
- public static float sinh(float s)
+ public static float Sinh(float s)
{
return (float)Math.Sinh(s);
}
- public static float sqrt(float s)
+ public static float Sqrt(float s)
{
return (float)Math.Sqrt(s);
}
- public static float stepify(float s, float step)
+ public static float Stepify(float s, float step)
{
if (step != 0f)
{
- s = floor(s / step + 0.5f) * step;
+ s = Floor(s / step + 0.5f) * step;
}
return s;
}
- public static float tan(float s)
+ public static float Tan(float s)
{
return (float)Math.Tan(s);
}
- public static float tanh(float s)
+ public static float Tanh(float s)
{
return (float)Math.Tanh(s);
}
diff --git a/modules/mono/glue/cs_files/Plane.cs b/modules/mono/glue/cs_files/Plane.cs
index 37f70aca1e..6365e71826 100644
--- a/modules/mono/glue/cs_files/Plane.cs
+++ b/modules/mono/glue/cs_files/Plane.cs
@@ -52,44 +52,44 @@ namespace Godot
}
}
- public float distance_to(Vector3 point)
+ public float DistanceTo(Vector3 point)
{
- return normal.dot(point) - d;
+ return normal.Dot(point) - d;
}
- public Vector3 get_any_point()
+ public Vector3 GetAnyPoint()
{
return normal * d;
}
- public bool has_point(Vector3 point, float epsilon = Mathf.Epsilon)
+ public bool HasPoint(Vector3 point, float epsilon = Mathf.Epsilon)
{
- float dist = normal.dot(point) - d;
- return Mathf.abs(dist) <= epsilon;
+ float dist = normal.Dot(point) - d;
+ return Mathf.Abs(dist) <= epsilon;
}
- public Vector3 intersect_3(Plane b, Plane c)
+ public Vector3 Intersect3(Plane b, Plane c)
{
- float denom = normal.cross(b.normal).dot(c.normal);
+ float denom = normal.Cross(b.normal).Dot(c.normal);
- if (Mathf.abs(denom) <= Mathf.Epsilon)
+ if (Mathf.Abs(denom) <= Mathf.Epsilon)
return new Vector3();
- Vector3 result = (b.normal.cross(c.normal) * this.d) +
- (c.normal.cross(normal) * b.d) +
- (normal.cross(b.normal) * c.d);
+ Vector3 result = (b.normal.Cross(c.normal) * this.d) +
+ (c.normal.Cross(normal) * b.d) +
+ (normal.Cross(b.normal) * c.d);
return result / denom;
}
- public Vector3 intersect_ray(Vector3 from, Vector3 dir)
+ public Vector3 IntersectRay(Vector3 from, Vector3 dir)
{
- float den = normal.dot(dir);
+ float den = normal.Dot(dir);
- if (Mathf.abs(den) <= Mathf.Epsilon)
+ if (Mathf.Abs(den) <= Mathf.Epsilon)
return new Vector3();
- float dist = (normal.dot(from) - d) / den;
+ float dist = (normal.Dot(from) - d) / den;
// This is a ray, before the emiting pos (from) does not exist
if (dist > Mathf.Epsilon)
@@ -98,15 +98,15 @@ namespace Godot
return from + dir * -dist;
}
- public Vector3 intersect_segment(Vector3 begin, Vector3 end)
+ public Vector3 IntersectSegment(Vector3 begin, Vector3 end)
{
Vector3 segment = begin - end;
- float den = normal.dot(segment);
+ float den = normal.Dot(segment);
- if (Mathf.abs(den) <= Mathf.Epsilon)
+ if (Mathf.Abs(den) <= Mathf.Epsilon)
return new Vector3();
- float dist = (normal.dot(begin) - d) / den;
+ float dist = (normal.Dot(begin) - d) / den;
if (dist < -Mathf.Epsilon || dist > (1.0f + Mathf.Epsilon))
return new Vector3();
@@ -114,14 +114,14 @@ namespace Godot
return begin + segment * -dist;
}
- public bool is_point_over(Vector3 point)
+ public bool IsPointOver(Vector3 point)
{
- return normal.dot(point) > d;
+ return normal.Dot(point) > d;
}
- public Plane normalized()
+ public Plane Normalized()
{
- float len = normal.length();
+ float len = normal.Length();
if (len == 0)
return new Plane(0, 0, 0, 0);
@@ -129,9 +129,9 @@ namespace Godot
return new Plane(normal / len, d / len);
}
- public Vector3 project(Vector3 point)
+ public Vector3 Project(Vector3 point)
{
- return point - normal * distance_to(point);
+ return point - normal * DistanceTo(point);
}
public Plane(float a, float b, float c, float d)
@@ -148,9 +148,9 @@ namespace Godot
public Plane(Vector3 v1, Vector3 v2, Vector3 v3)
{
- normal = (v1 - v3).cross(v1 - v2);
- normal.normalize();
- d = normal.dot(v1);
+ normal = (v1 - v3).Cross(v1 - v2);
+ normal.Normalize();
+ d = normal.Dot(v1);
}
public static Plane operator -(Plane plane)
diff --git a/modules/mono/glue/cs_files/Quat.cs b/modules/mono/glue/cs_files/Quat.cs
index 9b4b7fb297..c0ac41c5d7 100644
--- a/modules/mono/glue/cs_files/Quat.cs
+++ b/modules/mono/glue/cs_files/Quat.cs
@@ -58,40 +58,40 @@ namespace Godot
}
}
- public Quat cubic_slerp(Quat b, Quat preA, Quat postB, float t)
+ public Quat CubicSlerp(Quat b, Quat preA, Quat postB, float t)
{
float t2 = (1.0f - t) * t * 2f;
- Quat sp = slerp(b, t);
- Quat sq = preA.slerpni(postB, t);
- return sp.slerpni(sq, t2);
+ Quat sp = Slerp(b, t);
+ Quat sq = preA.Slerpni(postB, t);
+ return sp.Slerpni(sq, t2);
}
- public float dot(Quat b)
+ public float Dot(Quat b)
{
return x * b.x + y * b.y + z * b.z + w * b.w;
}
- public Quat inverse()
+ public Quat Inverse()
{
return new Quat(-x, -y, -z, w);
}
- public float length()
+ public float Length()
{
- return Mathf.sqrt(length_squared());
+ return Mathf.Sqrt(LengthSquared());
}
- public float length_squared()
+ public float LengthSquared()
{
- return dot(this);
+ return Dot(this);
}
- public Quat normalized()
+ public Quat Normalized()
{
- return this / length();
+ return this / Length();
}
- public void set(float x, float y, float z, float w)
+ public void Set(float x, float y, float z, float w)
{
this.x = x;
this.y = y;
@@ -99,7 +99,7 @@ namespace Godot
this.w = w;
}
- public Quat slerp(Quat b, float t)
+ public Quat Slerp(Quat b, float t)
{
// Calculate cosine
float cosom = x * b.x + y * b.y + z * b.z + w * b.w;
@@ -128,10 +128,10 @@ namespace Godot
if ((1.0 - cosom) > Mathf.Epsilon)
{
// Standard case (Slerp)
- float omega = Mathf.acos(cosom);
- sinom = Mathf.sin(omega);
- scale0 = Mathf.sin((1.0f - t) * omega) / sinom;
- scale1 = Mathf.sin(t * omega) / sinom;
+ float omega = Mathf.Acos(cosom);
+ sinom = Mathf.Sin(omega);
+ scale0 = Mathf.Sin((1.0f - t) * omega) / sinom;
+ scale1 = Mathf.Sin(t * omega) / sinom;
}
else
{
@@ -150,19 +150,19 @@ namespace Godot
);
}
- public Quat slerpni(Quat b, float t)
+ public Quat Slerpni(Quat b, float t)
{
- float dot = this.dot(b);
+ float dot = this.Dot(b);
- if (Mathf.abs(dot) > 0.9999f)
+ if (Mathf.Abs(dot) > 0.9999f)
{
return this;
}
- float theta = Mathf.acos(dot);
- float sinT = 1.0f / Mathf.sin(theta);
- float newFactor = Mathf.sin(t * theta) * sinT;
- float invFactor = Mathf.sin((1.0f - t) * theta) * sinT;
+ float theta = Mathf.Acos(dot);
+ float sinT = 1.0f / Mathf.Sin(theta);
+ float newFactor = Mathf.Sin(t * theta) * sinT;
+ float invFactor = Mathf.Sin((1.0f - t) * theta) * sinT;
return new Quat
(
@@ -173,10 +173,10 @@ namespace Godot
);
}
- public Vector3 xform(Vector3 v)
+ public Vector3 Xform(Vector3 v)
{
Quat q = this * v;
- q *= this.inverse();
+ q *= this.Inverse();
return new Vector3(q.x, q.y, q.z);
}
@@ -190,7 +190,7 @@ namespace Godot
public Quat(Vector3 axis, float angle)
{
- float d = axis.length();
+ float d = axis.Length();
if (d == 0f)
{
@@ -201,12 +201,12 @@ namespace Godot
}
else
{
- float s = Mathf.sin(angle * 0.5f) / d;
+ float s = Mathf.Sin(angle * 0.5f) / d;
x = axis.x * s;
y = axis.y * s;
z = axis.z * s;
- w = Mathf.cos(angle * 0.5f);
+ w = Mathf.Cos(angle * 0.5f);
}
}
diff --git a/modules/mono/glue/cs_files/Rect2.cs b/modules/mono/glue/cs_files/Rect2.cs
index 019342134a..f2718d7b7a 100644
--- a/modules/mono/glue/cs_files/Rect2.cs
+++ b/modules/mono/glue/cs_files/Rect2.cs
@@ -28,36 +28,36 @@ namespace Godot
public float Area
{
- get { return get_area(); }
+ get { return GetArea(); }
}
- public Rect2 clip(Rect2 b)
+ public Rect2 Clip(Rect2 b)
{
Rect2 newRect = b;
- if (!intersects(newRect))
+ if (!Intersects(newRect))
return new Rect2();
- newRect.position.x = Mathf.max(b.position.x, position.x);
- newRect.position.y = Mathf.max(b.position.y, position.y);
+ newRect.position.x = Mathf.Max(b.position.x, position.x);
+ newRect.position.y = Mathf.Max(b.position.y, position.y);
Vector2 bEnd = b.position + b.size;
Vector2 end = position + size;
- newRect.size.x = Mathf.min(bEnd.x, end.x) - newRect.position.x;
- newRect.size.y = Mathf.min(bEnd.y, end.y) - newRect.position.y;
+ newRect.size.x = Mathf.Min(bEnd.x, end.x) - newRect.position.x;
+ newRect.size.y = Mathf.Min(bEnd.y, end.y) - newRect.position.y;
return newRect;
}
- public bool encloses(Rect2 b)
+ public bool Encloses(Rect2 b)
{
return (b.position.x >= position.x) && (b.position.y >= position.y) &&
((b.position.x + b.size.x) < (position.x + size.x)) &&
((b.position.y + b.size.y) < (position.y + size.y));
}
- public Rect2 expand(Vector2 to)
+ public Rect2 Expand(Vector2 to)
{
Rect2 expanded = this;
@@ -80,12 +80,12 @@ namespace Godot
return expanded;
}
- public float get_area()
+ public float GetArea()
{
return size.x * size.y;
}
- public Rect2 grow(float by)
+ public Rect2 Grow(float by)
{
Rect2 g = this;
@@ -97,7 +97,7 @@ namespace Godot
return g;
}
- public Rect2 grow_individual(float left, float top, float right, float bottom)
+ public Rect2 GrowIndividual(float left, float top, float right, float bottom)
{
Rect2 g = this;
@@ -109,11 +109,11 @@ namespace Godot
return g;
}
- public Rect2 grow_margin(int margin, float by)
+ public Rect2 GrowMargin(int margin, float by)
{
Rect2 g = this;
- g.grow_individual((GD.MARGIN_LEFT == margin) ? by : 0,
+ g.GrowIndividual((GD.MARGIN_LEFT == margin) ? by : 0,
(GD.MARGIN_TOP == margin) ? by : 0,
(GD.MARGIN_RIGHT == margin) ? by : 0,
(GD.MARGIN_BOTTOM == margin) ? by : 0);
@@ -121,12 +121,12 @@ namespace Godot
return g;
}
- public bool has_no_area()
+ public bool HasNoArea()
{
return size.x <= 0 || size.y <= 0;
}
- public bool has_point(Vector2 point)
+ public bool HasPoint(Vector2 point)
{
if (point.x < position.x)
return false;
@@ -141,7 +141,7 @@ namespace Godot
return true;
}
- public bool intersects(Rect2 b)
+ public bool Intersects(Rect2 b)
{
if (position.x > (b.position.x + b.size.x))
return false;
@@ -155,15 +155,15 @@ namespace Godot
return true;
}
- public Rect2 merge(Rect2 b)
+ public Rect2 Merge(Rect2 b)
{
Rect2 newRect;
- newRect.position.x = Mathf.min(b.position.x, position.x);
- newRect.position.y = Mathf.min(b.position.y, position.y);
+ newRect.position.x = Mathf.Min(b.position.x, position.x);
+ newRect.position.y = Mathf.Min(b.position.y, position.y);
- newRect.size.x = Mathf.max(b.position.x + b.size.x, position.x + size.x);
- newRect.size.y = Mathf.max(b.position.y + b.size.y, position.y + size.y);
+ newRect.size.x = Mathf.Max(b.position.x + b.size.x, position.x + size.x);
+ newRect.size.y = Mathf.Max(b.position.y + b.size.y, position.y + size.y);
newRect.size = newRect.size - newRect.position; // Make relative again
diff --git a/modules/mono/glue/cs_files/StringExtensions.cs b/modules/mono/glue/cs_files/StringExtensions.cs
index 96041827aa..5c3ceff97d 100644
--- a/modules/mono/glue/cs_files/StringExtensions.cs
+++ b/modules/mono/glue/cs_files/StringExtensions.cs
@@ -10,15 +10,15 @@ namespace Godot
{
public static class StringExtensions
{
- private static int get_slice_count(this string instance, string splitter)
+ private static int GetSliceCount(this string instance, string splitter)
{
- if (instance.empty() || splitter.empty())
+ if (instance.Empty() || splitter.Empty())
return 0;
int pos = 0;
int slices = 1;
- while ((pos = instance.find(splitter, pos)) >= 0)
+ while ((pos = instance.Find(splitter, pos)) >= 0)
{
slices++;
pos += splitter.Length;
@@ -27,9 +27,9 @@ namespace Godot
return slices;
}
- private static string get_slicec(this string instance, char splitter, int slice)
+ private static string GetSlicec(this string instance, char splitter, int slice)
{
- if (!instance.empty() && slice >= 0)
+ if (!instance.Empty() && slice >= 0)
{
int i = 0;
int prev = 0;
@@ -60,7 +60,7 @@ namespace Godot
// <summary>
// If the string is a path to a file, return the path to the file without the extension.
// </summary>
- public static string basename(this string instance)
+ public static string Basename(this string instance)
{
int index = instance.LastIndexOf('.');
@@ -73,7 +73,7 @@ namespace Godot
// <summary>
// Return true if the strings begins with the given string.
// </summary>
- public static bool begins_with(this string instance, string text)
+ public static bool BeginsWith(this string instance, string text)
{
return instance.StartsWith(text);
}
@@ -81,7 +81,7 @@ namespace Godot
// <summary>
// Return the bigrams (pairs of consecutive letters) of this string.
// </summary>
- public static string[] bigrams(this string instance)
+ public static string[] Bigrams(this string instance)
{
string[] b = new string[instance.Length - 1];
@@ -96,7 +96,7 @@ namespace Godot
// <summary>
// Return a copy of the string with special characters escaped using the C language standard.
// </summary>
- public static string c_escape(this string instance)
+ public static string CEscape(this string instance)
{
StringBuilder sb = new StringBuilder(string.Copy(instance));
@@ -118,7 +118,7 @@ namespace Godot
// <summary>
// Return a copy of the string with escaped characters replaced by their meanings according to the C language standard.
// </summary>
- public static string c_unescape(this string instance)
+ public static string CUnescape(this string instance)
{
StringBuilder sb = new StringBuilder(string.Copy(instance));
@@ -140,14 +140,14 @@ namespace Godot
// <summary>
// Change the case of some letters. Replace underscores with spaces, convert all letters to lowercase then capitalize first and every letter following the space character. For [code]capitalize camelCase mixed_with_underscores[/code] it will return [code]Capitalize Camelcase Mixed With Underscores[/code].
// </summary>
- public static string capitalize(this string instance)
+ public static string Capitalize(this string instance)
{
string aux = instance.Replace("_", " ").ToLower();
string cap = string.Empty;
- for (int i = 0; i < aux.get_slice_count(" "); i++)
+ for (int i = 0; i < aux.GetSliceCount(" "); i++)
{
- string slice = aux.get_slicec(' ', i);
+ string slice = aux.GetSlicec(' ', i);
if (slice.Length > 0)
{
slice = char.ToUpper(slice[0]) + slice.Substring(1);
@@ -163,12 +163,12 @@ namespace Godot
// <summary>
// Perform a case-sensitive comparison to another string, return -1 if less, 0 if equal and +1 if greater.
// </summary>
- public static int casecmp_to(this string instance, string to)
+ public static int CasecmpTo(this string instance, string to)
{
- if (instance.empty())
- return to.empty() ? 0 : -1;
+ if (instance.Empty())
+ return to.Empty() ? 0 : -1;
- if (to.empty())
+ if (to.Empty())
return 1;
int instance_idx = 0;
@@ -195,7 +195,7 @@ namespace Godot
// <summary>
// Return true if the string is empty.
// </summary>
- public static bool empty(this string instance)
+ public static bool Empty(this string instance)
{
return string.IsNullOrEmpty(instance);
}
@@ -203,7 +203,7 @@ namespace Godot
// <summary>
// Return true if the strings ends with the given string.
// </summary>
- public static bool ends_with(this string instance, string text)
+ public static bool EndsWith(this string instance, string text)
{
return instance.EndsWith(text);
}
@@ -211,7 +211,7 @@ namespace Godot
// <summary>
// Erase [code]chars[/code] characters from the string starting from [code]pos[/code].
// </summary>
- public static void erase(this StringBuilder instance, int pos, int chars)
+ public static void Erase(this StringBuilder instance, int pos, int chars)
{
instance.Remove(pos, chars);
}
@@ -219,9 +219,9 @@ namespace Godot
// <summary>
// If the string is a path to a file, return the extension.
// </summary>
- public static string extension(this string instance)
+ public static string Extension(this string instance)
{
- int pos = instance.find_last(".");
+ int pos = instance.FindLast(".");
if (pos < 0)
return instance;
@@ -232,7 +232,7 @@ namespace Godot
// <summary>
// Find the first occurrence of a substring, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed.
// </summary>
- public static int find(this string instance, string what, int from = 0)
+ public static int Find(this string instance, string what, int from = 0)
{
return instance.IndexOf(what, StringComparison.OrdinalIgnoreCase);
}
@@ -240,7 +240,7 @@ namespace Godot
// <summary>
// Find the last occurrence of a substring, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed.
// </summary>
- public static int find_last(this string instance, string what)
+ public static int FindLast(this string instance, string what)
{
return instance.LastIndexOf(what, StringComparison.OrdinalIgnoreCase);
}
@@ -248,7 +248,7 @@ namespace Godot
// <summary>
// Find the first occurrence of a substring but search as case-insensitive, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed.
// </summary>
- public static int findn(this string instance, string what, int from = 0)
+ public static int FindN(this string instance, string what, int from = 0)
{
return instance.IndexOf(what, StringComparison.Ordinal);
}
@@ -256,9 +256,9 @@ namespace Godot
// <summary>
// If the string is a path to a file, return the base directory.
// </summary>
- public static string get_base_dir(this string instance)
+ public static string GetBaseDir(this string instance)
{
- int basepos = instance.find("://");
+ int basepos = instance.Find("://");
string rs = string.Empty;
string @base = string.Empty;
@@ -271,7 +271,7 @@ namespace Godot
}
else
{
- if (instance.begins_with("/"))
+ if (instance.BeginsWith("/"))
{
rs = instance.Substring(1, instance.Length);
@base = "/";
@@ -282,7 +282,7 @@ namespace Godot
}
}
- int sep = Mathf.max(rs.find_last("/"), rs.find_last("\\"));
+ int sep = Mathf.Max(rs.FindLast("/"), rs.FindLast("\\"));
if (sep == -1)
return @base;
@@ -293,9 +293,9 @@ namespace Godot
// <summary>
// If the string is a path to a file, return the file and ignore the base directory.
// </summary>
- public static string get_file(this string instance)
+ public static string GetFile(this string instance)
{
- int sep = Mathf.max(instance.find_last("/"), instance.find_last("\\"));
+ int sep = Mathf.Max(instance.FindLast("/"), instance.FindLast("\\"));
if (sep == -1)
return instance;
@@ -306,7 +306,7 @@ namespace Godot
// <summary>
// Hash the string and return a 32 bits integer.
// </summary>
- public static int hash(this string instance)
+ public static int Hash(this string instance)
{
int index = 0;
int hashv = 5381;
@@ -321,7 +321,7 @@ namespace Godot
// <summary>
// Convert a string containing an hexadecimal number into an int.
// </summary>
- public static int hex_to_int(this string instance)
+ public static int HexToInt(this string instance)
{
int sign = 1;
@@ -340,7 +340,7 @@ namespace Godot
// <summary>
// Insert a substring at a given position.
// </summary>
- public static string insert(this string instance, int pos, string what)
+ public static string Insert(this string instance, int pos, string what)
{
return instance.Insert(pos, what);
}
@@ -348,7 +348,7 @@ namespace Godot
// <summary>
// If the string is a path to a file or directory, return true if the path is absolute.
// </summary>
- public static bool is_abs_path(this string instance)
+ public static bool IsAbsPath(this string instance)
{
return System.IO.Path.IsPathRooted(instance);
}
@@ -356,7 +356,7 @@ namespace Godot
// <summary>
// If the string is a path to a file or directory, return true if the path is relative.
// </summary>
- public static bool is_rel_path(this string instance)
+ public static bool IsRelPath(this string instance)
{
return !System.IO.Path.IsPathRooted(instance);
}
@@ -364,7 +364,7 @@ namespace Godot
// <summary>
// Check whether this string is a subsequence of the given string.
// </summary>
- public static bool is_subsequence_of(this string instance, string text, bool case_insensitive)
+ public static bool IsSubsequenceOf(this string instance, string text, bool case_insensitive)
{
int len = instance.Length;
@@ -407,23 +407,23 @@ namespace Godot
// <summary>
// Check whether this string is a subsequence of the given string, considering case.
// </summary>
- public static bool is_subsequence_of(this string instance, string text)
+ public static bool IsSubsequenceOf(this string instance, string text)
{
- return instance.is_subsequence_of(text, false);
+ return instance.IsSubsequenceOf(text, false);
}
// <summary>
// Check whether this string is a subsequence of the given string, without considering case.
// </summary>
- public static bool is_subsequence_ofi(this string instance, string text)
+ public static bool IsSubsequenceOfI(this string instance, string text)
{
- return instance.is_subsequence_of(text, true);
+ return instance.IsSubsequenceOf(text, true);
}
// <summary>
// Check whether the string contains a valid float.
// </summary>
- public static bool is_valid_float(this string instance)
+ public static bool IsValidFloat(this string instance)
{
float f;
return float.TryParse(instance, out f);
@@ -432,15 +432,15 @@ namespace Godot
// <summary>
// Check whether the string contains a valid color in HTML notation.
// </summary>
- public static bool is_valid_html_color(this string instance)
+ public static bool IsValidHtmlColor(this string instance)
{
- return Color.html_is_valid(instance);
+ return Color.HtmlIsValid(instance);
}
// <summary>
// Check whether the string is a valid identifier. As is common in programming languages, a valid identifier may contain only letters, digits and underscores (_) and the first character may not be a digit.
// </summary>
- public static bool is_valid_identifier(this string instance)
+ public static bool IsValidIdentifier(this string instance)
{
int len = instance.Length;
@@ -467,7 +467,7 @@ namespace Godot
// <summary>
// Check whether the string contains a valid integer.
// </summary>
- public static bool is_valid_integer(this string instance)
+ public static bool IsValidInteger(this string instance)
{
int f;
return int.TryParse(instance, out f);
@@ -476,7 +476,7 @@ namespace Godot
// <summary>
// Check whether the string contains a valid IP address.
// </summary>
- public static bool is_valid_ip_address(this string instance)
+ public static bool IsValidIpAddress(this string instance)
{
string[] ip = instance.split(".");
@@ -486,7 +486,7 @@ namespace Godot
for (int i = 0; i < ip.Length; i++)
{
string n = ip[i];
- if (!n.is_valid_integer())
+ if (!n.IsValidInteger())
return false;
int val = n.to_int();
@@ -500,7 +500,7 @@ namespace Godot
// <summary>
// Return a copy of the string with special characters escaped using the JSON standard.
// </summary>
- public static string json_escape(this string instance)
+ public static string JsonEscape(this string instance)
{
StringBuilder sb = new StringBuilder(string.Copy(instance));
@@ -519,7 +519,7 @@ namespace Godot
// <summary>
// Return an amount of characters from the left of the string.
// </summary>
- public static string left(this string instance, int pos)
+ public static string Left(this string instance, int pos)
{
if (pos <= 0)
return string.Empty;
@@ -533,7 +533,7 @@ namespace Godot
/// <summary>
/// Return the length of the string in characters.
/// </summary>
- public static int length(this string instance)
+ public static int Length(this string instance)
{
return instance.Length;
}
@@ -541,7 +541,7 @@ namespace Godot
// <summary>
// Do a simple expression match, where '*' matches zero or more arbitrary characters and '?' matches any single character except '.'.
// </summary>
- public static bool expr_match(this string instance, string expr, bool case_sensitive)
+ public static bool ExprMatch(this string instance, string expr, bool caseSensitive)
{
if (expr.Length == 0 || instance.Length == 0)
return false;
@@ -551,21 +551,21 @@ namespace Godot
case '\0':
return instance[0] == 0;
case '*':
- return expr_match(expr + 1, instance, case_sensitive) || (instance[0] != 0 && expr_match(expr, instance + 1, case_sensitive));
+ return ExprMatch(expr + 1, instance, caseSensitive) || (instance[0] != 0 && ExprMatch(expr, instance + 1, caseSensitive));
case '?':
- return instance[0] != 0 && instance[0] != '.' && expr_match(expr + 1, instance + 1, case_sensitive);
+ return instance[0] != 0 && instance[0] != '.' && ExprMatch(expr + 1, instance + 1, caseSensitive);
default:
- return (case_sensitive ? instance[0] == expr[0] : char.ToUpper(instance[0]) == char.ToUpper(expr[0])) &&
- expr_match(expr + 1, instance + 1, case_sensitive);
+ return (caseSensitive ? instance[0] == expr[0] : char.ToUpper(instance[0]) == char.ToUpper(expr[0])) &&
+ ExprMatch(expr + 1, instance + 1, caseSensitive);
}
}
// <summary>
// Do a simple case sensitive expression match, using ? and * wildcards (see [method expr_match]).
// </summary>
- public static bool match(this string instance, string expr)
+ public static bool Match(this string instance, string expr)
{
- return instance.expr_match(expr, true);
+ return instance.ExprMatch(expr, true);
}
// <summary>
@@ -573,13 +573,13 @@ namespace Godot
// </summary>
public static bool matchn(this string instance, string expr)
{
- return instance.expr_match(expr, false);
+ return instance.ExprMatch(expr, false);
}
// <summary>
// Return the MD5 hash of the string as an array of bytes.
// </summary>
- public static byte[] md5_buffer(this string instance)
+ public static byte[] Md5Buffer(this string instance)
{
return NativeCalls.godot_icall_String_md5_buffer(instance);
}
@@ -587,7 +587,7 @@ namespace Godot
// <summary>
// Return the MD5 hash of the string as a string.
// </summary>
- public static string md5_text(this string instance)
+ public static string Md5Text(this string instance)
{
return NativeCalls.godot_icall_String_md5_text(instance);
}
@@ -595,12 +595,12 @@ namespace Godot
// <summary>
// Perform a case-insensitive comparison to another string, return -1 if less, 0 if equal and +1 if greater.
// </summary>
- public static int nocasecmp_to(this string instance, string to)
+ public static int NocasecmpTo(this string instance, string to)
{
- if (instance.empty())
- return to.empty() ? 0 : -1;
+ if (instance.Empty())
+ return to.Empty() ? 0 : -1;
- if (to.empty())
+ if (to.Empty())
return 1;
int instance_idx = 0;
@@ -627,7 +627,7 @@ namespace Godot
// <summary>
// Return the character code at position [code]at[/code].
// </summary>
- public static int ord_at(this string instance, int at)
+ public static int OrdAt(this string instance, int at)
{
return instance[at];
}
@@ -635,9 +635,9 @@ namespace Godot
// <summary>
// Format a number to have an exact number of [code]digits[/code] after the decimal point.
// </summary>
- public static string pad_decimals(this string instance, int digits)
+ public static string PadDecimals(this string instance, int digits)
{
- int c = instance.find(".");
+ int c = instance.Find(".");
if (c == -1)
{
@@ -671,10 +671,10 @@ namespace Godot
// <summary>
// Format a number to have an exact number of [code]digits[/code] before the decimal point.
// </summary>
- public static string pad_zeros(this string instance, int digits)
+ public static string PadZeros(this string instance, int digits)
{
string s = instance;
- int end = s.find(".");
+ int end = s.Find(".");
if (end == -1)
end = s.Length;
@@ -704,7 +704,7 @@ namespace Godot
// <summary>
// Decode a percent-encoded string. See [method percent_encode].
// </summary>
- public static string percent_decode(this string instance)
+ public static string PercentDecode(this string instance)
{
return Uri.UnescapeDataString(instance);
}
@@ -712,7 +712,7 @@ namespace Godot
// <summary>
// Percent-encode a string. This is meant to encode parameters in a URL when sending a HTTP GET request and bodies of form-urlencoded POST request.
// </summary>
- public static string percent_encode(this string instance)
+ public static string PercentEncode(this string instance)
{
return Uri.EscapeDataString(instance);
}
@@ -720,7 +720,7 @@ namespace Godot
// <summary>
// If the string is a path, this concatenates [code]file[/code] at the end of the string as a subpath. E.g. [code]"this/is".plus_file("path") == "this/is/path"[/code].
// </summary>
- public static string plus_file(this string instance, string file)
+ public static string PlusFile(this string instance, string file)
{
if (instance.Length > 0 && instance[instance.Length - 1] == '/')
return instance + file;
@@ -731,7 +731,7 @@ namespace Godot
// <summary>
// Replace occurrences of a substring for different ones inside the string.
// </summary>
- public static string replace(this string instance, string what, string forwhat)
+ public static string Replace(this string instance, string what, string forwhat)
{
return instance.Replace(what, forwhat);
}
@@ -739,7 +739,7 @@ namespace Godot
// <summary>
// Replace occurrences of a substring for different ones inside the string, but search case-insensitive.
// </summary>
- public static string replacen(this string instance, string what, string forwhat)
+ public static string Replacen(this string instance, string what, string forwhat)
{
return Regex.Replace(instance, what, forwhat, RegexOptions.IgnoreCase);
}
@@ -747,7 +747,7 @@ namespace Godot
// <summary>
// Perform a search for a substring, but start from the end of the string instead of the beginning.
// </summary>
- public static int rfind(this string instance, string what, int from = -1)
+ public static int Rfind(this string instance, string what, int from = -1)
{
return NativeCalls.godot_icall_String_rfind(instance, what, from);
}
@@ -755,7 +755,7 @@ namespace Godot
// <summary>
// Perform a search for a substring, but start from the end of the string instead of the beginning. Also search case-insensitive.
// </summary>
- public static int rfindn(this string instance, string what, int from = -1)
+ public static int Rfindn(this string instance, string what, int from = -1)
{
return NativeCalls.godot_icall_String_rfindn(instance, what, from);
}
@@ -763,7 +763,7 @@ namespace Godot
// <summary>
// Return the right side of the string from a given position.
// </summary>
- public static string right(this string instance, int pos)
+ public static string Right(this string instance, int pos)
{
if (pos >= instance.Length)
return instance;
@@ -774,7 +774,7 @@ namespace Godot
return instance.Substring(pos, (instance.Length - pos));
}
- public static byte[] sha256_buffer(this string instance)
+ public static byte[] Sha256Buffer(this string instance)
{
return NativeCalls.godot_icall_String_sha256_buffer(instance);
}
@@ -782,7 +782,7 @@ namespace Godot
// <summary>
// Return the SHA-256 hash of the string as a string.
// </summary>
- public static string sha256_text(this string instance)
+ public static string Sha256Text(this string instance)
{
return NativeCalls.godot_icall_String_sha256_text(instance);
}
@@ -790,7 +790,7 @@ namespace Godot
// <summary>
// Return the similarity index of the text compared to this string. 1 means totally similar and 0 means totally dissimilar.
// </summary>
- public static float similarity(this string instance, string text)
+ public static float Similarity(this string instance, string text)
{
if (instance == text)
{
@@ -803,11 +803,11 @@ namespace Godot
return 0.0f;
}
- string[] src_bigrams = instance.bigrams();
- string[] tgt_bigrams = text.bigrams();
+ string[] srcBigrams = instance.Bigrams();
+ string[] tgtBigrams = text.Bigrams();
- int src_size = src_bigrams.Length;
- int tgt_size = tgt_bigrams.Length;
+ int src_size = srcBigrams.Length;
+ int tgt_size = tgtBigrams.Length;
float sum = src_size + tgt_size;
float inter = 0;
@@ -816,7 +816,7 @@ namespace Godot
{
for (int j = 0; j < tgt_size; j++)
{
- if (src_bigrams[i] == tgt_bigrams[j])
+ if (srcBigrams[i] == tgtBigrams[j])
{
inter++;
break;
@@ -846,7 +846,7 @@ namespace Godot
while (true)
{
- int end = instance.find(divisor, from);
+ int end = instance.Find(divisor, from);
if (end < 0)
end = len;
if (allow_empty || (end > from))
diff --git a/modules/mono/glue/cs_files/Transform.cs b/modules/mono/glue/cs_files/Transform.cs
index 74271e758b..5214100d36 100644
--- a/modules/mono/glue/cs_files/Transform.cs
+++ b/modules/mono/glue/cs_files/Transform.cs
@@ -9,38 +9,38 @@ namespace Godot
public Basis basis;
public Vector3 origin;
- public Transform affine_inverse()
+ public Transform AffineInverse()
{
- Basis basisInv = basis.inverse();
- return new Transform(basisInv, basisInv.xform(-origin));
+ Basis basisInv = basis.Inverse();
+ return new Transform(basisInv, basisInv.Xform(-origin));
}
- public Transform inverse()
+ public Transform Inverse()
{
- Basis basisTr = basis.transposed();
- return new Transform(basisTr, basisTr.xform(-origin));
+ Basis basisTr = basis.Transposed();
+ return new Transform(basisTr, basisTr.Xform(-origin));
}
- public Transform looking_at(Vector3 target, Vector3 up)
+ public Transform LookingAt(Vector3 target, Vector3 up)
{
Transform t = this;
t.set_look_at(origin, target, up);
return t;
}
- public Transform orthonormalized()
+ public Transform Orthonormalized()
{
- return new Transform(basis.orthonormalized(), origin);
+ return new Transform(basis.Orthonormalized(), origin);
}
- public Transform rotated(Vector3 axis, float phi)
+ public Transform Rotated(Vector3 axis, float phi)
{
return new Transform(new Basis(axis, phi), new Vector3()) * this;
}
- public Transform scaled(Vector3 scale)
+ public Transform Scaled(Vector3 scale)
{
- return new Transform(basis.scaled(scale), origin * scale);
+ return new Transform(basis.Scaled(scale), origin * scale);
}
public void set_look_at(Vector3 eye, Vector3 target, Vector3 up)
@@ -49,44 +49,44 @@ namespace Godot
// Z vector
Vector3 zAxis = eye - target;
- zAxis.normalize();
+ zAxis.Normalize();
Vector3 yAxis = up;
- Vector3 xAxis = yAxis.cross(zAxis);
+ Vector3 xAxis = yAxis.Cross(zAxis);
// Recompute Y = Z cross X
- yAxis = zAxis.cross(xAxis);
+ yAxis = zAxis.Cross(xAxis);
- xAxis.normalize();
- yAxis.normalize();
+ xAxis.Normalize();
+ yAxis.Normalize();
- basis = Basis.create_from_axes(xAxis, yAxis, zAxis);
+ basis = Basis.CreateFromAxes(xAxis, yAxis, zAxis);
origin = eye;
}
- public Transform translated(Vector3 ofs)
+ public Transform Translated(Vector3 ofs)
{
return new Transform(basis, new Vector3
(
- origin[0] += basis[0].dot(ofs),
- origin[1] += basis[1].dot(ofs),
- origin[2] += basis[2].dot(ofs)
+ origin[0] += basis[0].Dot(ofs),
+ origin[1] += basis[1].Dot(ofs),
+ origin[2] += basis[2].Dot(ofs)
));
}
- public Vector3 xform(Vector3 v)
+ public Vector3 Xform(Vector3 v)
{
return new Vector3
(
- basis[0].dot(v) + origin.x,
- basis[1].dot(v) + origin.y,
- basis[2].dot(v) + origin.z
+ basis[0].Dot(v) + origin.x,
+ basis[1].Dot(v) + origin.y,
+ basis[2].Dot(v) + origin.z
);
}
- public Vector3 xform_inv(Vector3 v)
+ public Vector3 XformInv(Vector3 v)
{
Vector3 vInv = v - origin;
@@ -100,7 +100,7 @@ namespace Godot
public Transform(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis, Vector3 origin)
{
- this.basis = Basis.create_from_axes(xAxis, yAxis, zAxis);
+ this.basis = Basis.CreateFromAxes(xAxis, yAxis, zAxis);
this.origin = origin;
}
@@ -118,7 +118,7 @@ namespace Godot
public static Transform operator *(Transform left, Transform right)
{
- left.origin = left.xform(right.origin);
+ left.origin = left.Xform(right.origin);
left.basis *= right.basis;
return left;
}
diff --git a/modules/mono/glue/cs_files/Transform2D.cs b/modules/mono/glue/cs_files/Transform2D.cs
index 526dc767c6..fe7c5b5706 100644
--- a/modules/mono/glue/cs_files/Transform2D.cs
+++ b/modules/mono/glue/cs_files/Transform2D.cs
@@ -29,12 +29,12 @@ namespace Godot
public float Rotation
{
- get { return Mathf.atan2(y.x, o.y); }
+ get { return Mathf.Atan2(y.x, o.y); }
}
public Vector2 Scale
{
- get { return new Vector2(x.length(), y.length()); }
+ get { return new Vector2(x.Length(), y.Length()); }
}
public Vector2 this[int index]
@@ -103,7 +103,7 @@ namespace Godot
}
}
- public Transform2D affine_inverse()
+ public Transform2D AffineInverse()
{
Transform2D inv = this;
@@ -128,22 +128,22 @@ namespace Godot
this[0] *= new Vector2(idet, -idet);
this[1] *= new Vector2(-idet, idet);
- this[2] = basis_xform(-this[2]);
+ this[2] = BasisXform(-this[2]);
return inv;
}
- public Vector2 basis_xform(Vector2 v)
+ public Vector2 BasisXform(Vector2 v)
{
- return new Vector2(tdotx(v), tdoty(v));
+ return new Vector2(Tdotx(v), Tdoty(v));
}
- public Vector2 basis_xform_inv(Vector2 v)
+ public Vector2 BasisXformInv(Vector2 v)
{
- return new Vector2(x.dot(v), y.dot(v));
+ return new Vector2(x.Dot(v), y.Dot(v));
}
- public Transform2D interpolate_with(Transform2D m, float c)
+ public Transform2D InterpolateWith(Transform2D m, float c)
{
float r1 = Rotation;
float r2 = m.Rotation;
@@ -152,10 +152,10 @@ namespace Godot
Vector2 s2 = m.Scale;
// Slerp rotation
- Vector2 v1 = new Vector2(Mathf.cos(r1), Mathf.sin(r1));
- Vector2 v2 = new Vector2(Mathf.cos(r2), Mathf.sin(r2));
+ Vector2 v1 = new Vector2(Mathf.Cos(r1), Mathf.Sin(r1));
+ Vector2 v2 = new Vector2(Mathf.Cos(r2), Mathf.Sin(r2));
- float dot = v1.dot(v2);
+ float dot = v1.Dot(v2);
// Clamp dot to [-1, 1]
dot = (dot < -1.0f) ? -1.0f : ((dot > 1.0f) ? 1.0f : dot);
@@ -165,13 +165,13 @@ namespace Godot
if (dot > 0.9995f)
{
// Linearly interpolate to avoid numerical precision issues
- v = v1.linear_interpolate(v2, c).normalized();
+ v = v1.LinearInterpolate(v2, c).Normalized();
}
else
{
- float angle = c * Mathf.acos(dot);
- Vector2 v3 = (v2 - v1 * dot).normalized();
- v = v1 * Mathf.cos(angle) + v3 * Mathf.sin(angle);
+ float angle = c * Mathf.Acos(dot);
+ Vector2 v3 = (v2 - v1 * dot).Normalized();
+ v = v1 * Mathf.Cos(angle) + v3 * Mathf.Sin(angle);
}
// Extract parameters
@@ -179,15 +179,15 @@ namespace Godot
Vector2 p2 = m.Origin;
// Construct matrix
- Transform2D res = new Transform2D(Mathf.atan2(v.y, v.x), p1.linear_interpolate(p2, c));
- Vector2 scale = s1.linear_interpolate(s2, c);
+ Transform2D res = new Transform2D(Mathf.Atan2(v.y, v.x), p1.LinearInterpolate(p2, c));
+ Vector2 scale = s1.LinearInterpolate(s2, c);
res.x *= scale;
res.y *= scale;
return res;
}
- public Transform2D inverse()
+ public Transform2D Inverse()
{
Transform2D inv = this;
@@ -196,21 +196,21 @@ namespace Godot
inv.x.y = inv.y.x;
inv.y.x = temp;
- inv.o = inv.basis_xform(-inv.o);
+ inv.o = inv.BasisXform(-inv.o);
return inv;
}
- public Transform2D orthonormalized()
+ public Transform2D Orthonormalized()
{
Transform2D on = this;
Vector2 onX = on.x;
Vector2 onY = on.y;
- onX.normalize();
- onY = onY - onX * (onX.dot(onY));
- onY.normalize();
+ onX.Normalize();
+ onY = onY - onX * (onX.Dot(onY));
+ onY.Normalize();
on.x = onX;
on.y = onY;
@@ -218,12 +218,12 @@ namespace Godot
return on;
}
- public Transform2D rotated(float phi)
+ public Transform2D Rotated(float phi)
{
return this * new Transform2D(phi, new Vector2());
}
- public Transform2D scaled(Vector2 scale)
+ public Transform2D Scaled(Vector2 scale)
{
Transform2D copy = this;
copy.x *= scale;
@@ -232,32 +232,32 @@ namespace Godot
return copy;
}
- private float tdotx(Vector2 with)
+ private float Tdotx(Vector2 with)
{
return this[0, 0] * with[0] + this[1, 0] * with[1];
}
- private float tdoty(Vector2 with)
+ private float Tdoty(Vector2 with)
{
return this[0, 1] * with[0] + this[1, 1] * with[1];
}
- public Transform2D translated(Vector2 offset)
+ public Transform2D Translated(Vector2 offset)
{
Transform2D copy = this;
- copy.o += copy.basis_xform(offset);
+ copy.o += copy.BasisXform(offset);
return copy;
}
- public Vector2 xform(Vector2 v)
+ public Vector2 Xform(Vector2 v)
{
- return new Vector2(tdotx(v), tdoty(v)) + o;
+ return new Vector2(Tdotx(v), Tdoty(v)) + o;
}
- public Vector2 xform_inv(Vector2 v)
+ public Vector2 XformInv(Vector2 v)
{
Vector2 vInv = v - o;
- return new Vector2(x.dot(vInv), y.dot(vInv));
+ return new Vector2(x.Dot(vInv), y.Dot(vInv));
}
public Transform2D(Vector2 xAxis, Vector2 yAxis, Vector2 origin)
@@ -275,8 +275,8 @@ namespace Godot
public Transform2D(float rot, Vector2 pos)
{
- float cr = Mathf.cos(rot);
- float sr = Mathf.sin(rot);
+ float cr = Mathf.Cos(rot);
+ float sr = Mathf.Sin(rot);
x.x = cr;
y.y = cr;
x.y = -sr;
@@ -286,14 +286,14 @@ namespace Godot
public static Transform2D operator *(Transform2D left, Transform2D right)
{
- left.o = left.xform(right.o);
+ left.o = left.Xform(right.o);
float x0, x1, y0, y1;
- x0 = left.tdotx(right.x);
- x1 = left.tdoty(right.x);
- y0 = left.tdotx(right.y);
- y1 = left.tdoty(right.y);
+ x0 = left.Tdotx(right.x);
+ x1 = left.Tdoty(right.x);
+ y0 = left.Tdotx(right.y);
+ y1 = left.Tdoty(right.y);
left.x.x = x0;
left.x.y = x1;
diff --git a/modules/mono/glue/cs_files/Vector2.cs b/modules/mono/glue/cs_files/Vector2.cs
index 28fedc365b..238775bda2 100644
--- a/modules/mono/glue/cs_files/Vector2.cs
+++ b/modules/mono/glue/cs_files/Vector2.cs
@@ -46,57 +46,57 @@ namespace Godot
}
}
- internal void normalize()
+ internal void Normalize()
{
float length = x * x + y * y;
if (length != 0f)
{
- length = Mathf.sqrt(length);
+ length = Mathf.Sqrt(length);
x /= length;
y /= length;
}
}
- private float cross(Vector2 b)
+ private float Cross(Vector2 b)
{
return x * b.y - y * b.x;
}
- public Vector2 abs()
+ public Vector2 Abs()
{
- return new Vector2(Mathf.abs(x), Mathf.abs(y));
+ return new Vector2(Mathf.Abs(x), Mathf.Abs(y));
}
- public float angle()
+ public float Angle()
{
- return Mathf.atan2(y, x);
+ return Mathf.Atan2(y, x);
}
- public float angle_to(Vector2 to)
+ public float AngleTo(Vector2 to)
{
- return Mathf.atan2(cross(to), dot(to));
+ return Mathf.Atan2(Cross(to), Dot(to));
}
- public float angle_to_point(Vector2 to)
+ public float AngleToPoint(Vector2 to)
{
- return Mathf.atan2(x - to.x, y - to.y);
+ return Mathf.Atan2(x - to.x, y - to.y);
}
- public float aspect()
+ public float Aspect()
{
return x / y;
}
- public Vector2 bounce(Vector2 n)
+ public Vector2 Bounce(Vector2 n)
{
- return -reflect(n);
+ return -Reflect(n);
}
- public Vector2 clamped(float length)
+ public Vector2 Clamped(float length)
{
Vector2 v = this;
- float l = this.length();
+ float l = this.Length();
if (l > 0 && length < l)
{
@@ -107,7 +107,7 @@ namespace Godot
return v;
}
- public Vector2 cubic_interpolate(Vector2 b, Vector2 preA, Vector2 postB, float t)
+ public Vector2 CubicInterpolate(Vector2 b, Vector2 preA, Vector2 postB, float t)
{
Vector2 p0 = preA;
Vector2 p1 = this;
@@ -123,42 +123,42 @@ namespace Godot
(-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3);
}
- public float distance_squared_to(Vector2 to)
+ public float DistanceSquaredTo(Vector2 to)
{
return (x - to.x) * (x - to.x) + (y - to.y) * (y - to.y);
}
- public float distance_to(Vector2 to)
+ public float DistanceTo(Vector2 to)
{
- return Mathf.sqrt((x - to.x) * (x - to.x) + (y - to.y) * (y - to.y));
+ return Mathf.Sqrt((x - to.x) * (x - to.x) + (y - to.y) * (y - to.y));
}
- public float dot(Vector2 with)
+ public float Dot(Vector2 with)
{
return x * with.x + y * with.y;
}
- public Vector2 floor()
+ public Vector2 Floor()
{
- return new Vector2(Mathf.floor(x), Mathf.floor(y));
+ return new Vector2(Mathf.Floor(x), Mathf.Floor(y));
}
- public bool is_normalized()
+ public bool IsNormalized()
{
- return Mathf.abs(length_squared() - 1.0f) < Mathf.Epsilon;
+ return Mathf.Abs(LengthSquared() - 1.0f) < Mathf.Epsilon;
}
- public float length()
+ public float Length()
{
- return Mathf.sqrt(x * x + y * y);
+ return Mathf.Sqrt(x * x + y * y);
}
- public float length_squared()
+ public float LengthSquared()
{
return x * x + y * y;
}
- public Vector2 linear_interpolate(Vector2 b, float t)
+ public Vector2 LinearInterpolate(Vector2 b, float t)
{
Vector2 res = this;
@@ -168,35 +168,35 @@ namespace Godot
return res;
}
- public Vector2 normalized()
+ public Vector2 Normalized()
{
Vector2 result = this;
- result.normalize();
+ result.Normalize();
return result;
}
- public Vector2 reflect(Vector2 n)
+ public Vector2 Reflect(Vector2 n)
{
- return 2.0f * n * dot(n) - this;
+ return 2.0f * n * Dot(n) - this;
}
- public Vector2 rotated(float phi)
+ public Vector2 Rotated(float phi)
{
- float rads = angle() + phi;
- return new Vector2(Mathf.cos(rads), Mathf.sin(rads)) * length();
+ float rads = Angle() + phi;
+ return new Vector2(Mathf.Cos(rads), Mathf.Sin(rads)) * Length();
}
- public Vector2 slide(Vector2 n)
+ public Vector2 Slide(Vector2 n)
{
- return this - n * dot(n);
+ return this - n * Dot(n);
}
- public Vector2 snapped(Vector2 by)
+ public Vector2 Snapped(Vector2 by)
{
- return new Vector2(Mathf.stepify(x, by.x), Mathf.stepify(y, by.y));
+ return new Vector2(Mathf.Stepify(x, by.x), Mathf.Stepify(y, by.y));
}
- public Vector2 tangent()
+ public Vector2 Tangent()
{
return new Vector2(y, -x);
}
diff --git a/modules/mono/glue/cs_files/Vector3.cs b/modules/mono/glue/cs_files/Vector3.cs
index c023cd83cf..190caa4b53 100644
--- a/modules/mono/glue/cs_files/Vector3.cs
+++ b/modules/mono/glue/cs_files/Vector3.cs
@@ -59,9 +59,9 @@ namespace Godot
}
}
- internal void normalize()
+ internal void Normalize()
{
- float length = this.length();
+ float length = this.Length();
if (length == 0f)
{
@@ -75,27 +75,27 @@ namespace Godot
}
}
- public Vector3 abs()
+ public Vector3 Abs()
{
- return new Vector3(Mathf.abs(x), Mathf.abs(y), Mathf.abs(z));
+ return new Vector3(Mathf.Abs(x), Mathf.Abs(y), Mathf.Abs(z));
}
- public float angle_to(Vector3 to)
+ public float AngleTo(Vector3 to)
{
- return Mathf.atan2(cross(to).length(), dot(to));
+ return Mathf.Atan2(Cross(to).Length(), Dot(to));
}
- public Vector3 bounce(Vector3 n)
+ public Vector3 Bounce(Vector3 n)
{
- return -reflect(n);
+ return -Reflect(n);
}
- public Vector3 ceil()
+ public Vector3 Ceil()
{
- return new Vector3(Mathf.ceil(x), Mathf.ceil(y), Mathf.ceil(z));
+ return new Vector3(Mathf.Ceil(x), Mathf.Ceil(y), Mathf.Ceil(z));
}
- public Vector3 cross(Vector3 b)
+ public Vector3 Cross(Vector3 b)
{
return new Vector3
(
@@ -105,7 +105,7 @@ namespace Godot
);
}
- public Vector3 cubic_interpolate(Vector3 b, Vector3 preA, Vector3 postB, float t)
+ public Vector3 CubicInterpolate(Vector3 b, Vector3 preA, Vector3 postB, float t)
{
Vector3 p0 = preA;
Vector3 p1 = this;
@@ -122,46 +122,46 @@ namespace Godot
);
}
- public float distance_squared_to(Vector3 b)
+ public float DistanceSquaredTo(Vector3 b)
{
- return (b - this).length_squared();
+ return (b - this).LengthSquared();
}
- public float distance_to(Vector3 b)
+ public float DistanceTo(Vector3 b)
{
- return (b - this).length();
+ return (b - this).Length();
}
- public float dot(Vector3 b)
+ public float Dot(Vector3 b)
{
return x * b.x + y * b.y + z * b.z;
}
- public Vector3 floor()
+ public Vector3 Floor()
{
- return new Vector3(Mathf.floor(x), Mathf.floor(y), Mathf.floor(z));
+ return new Vector3(Mathf.Floor(x), Mathf.Floor(y), Mathf.Floor(z));
}
- public Vector3 inverse()
+ public Vector3 Inverse()
{
return new Vector3(1.0f / x, 1.0f / y, 1.0f / z);
}
- public bool is_normalized()
+ public bool IsNormalized()
{
- return Mathf.abs(length_squared() - 1.0f) < Mathf.Epsilon;
+ return Mathf.Abs(LengthSquared() - 1.0f) < Mathf.Epsilon;
}
- public float length()
+ public float Length()
{
float x2 = x * x;
float y2 = y * y;
float z2 = z * z;
- return Mathf.sqrt(x2 + y2 + z2);
+ return Mathf.Sqrt(x2 + y2 + z2);
}
- public float length_squared()
+ public float LengthSquared()
{
float x2 = x * x;
float y2 = y * y;
@@ -170,7 +170,7 @@ namespace Godot
return x2 + y2 + z2;
}
- public Vector3 linear_interpolate(Vector3 b, float t)
+ public Vector3 LinearInterpolate(Vector3 b, float t)
{
return new Vector3
(
@@ -180,24 +180,24 @@ namespace Godot
);
}
- public Axis max_axis()
+ public Axis MaxAxis()
{
return x < y ? (y < z ? Axis.Z : Axis.Y) : (x < z ? Axis.Z : Axis.X);
}
- public Axis min_axis()
+ public Axis MinAxis()
{
return x < y ? (x < z ? Axis.X : Axis.Z) : (y < z ? Axis.Y : Axis.Z);
}
- public Vector3 normalized()
+ public Vector3 Normalized()
{
Vector3 v = this;
- v.normalize();
+ v.Normalize();
return v;
}
- public Basis outer(Vector3 b)
+ public Basis Outer(Vector3 b)
{
return new Basis(
new Vector3(x * b.x, x * b.y, x * b.z),
@@ -206,36 +206,36 @@ namespace Godot
);
}
- public Vector3 reflect(Vector3 n)
+ public Vector3 Reflect(Vector3 n)
{
#if DEBUG
- if (!n.is_normalized())
+ if (!n.IsNormalized())
throw new ArgumentException(String.Format("{0} is not normalized", n), nameof(n));
#endif
- return 2.0f * n * dot(n) - this;
+ return 2.0f * n * Dot(n) - this;
}
- public Vector3 rotated(Vector3 axis, float phi)
+ public Vector3 Rotated(Vector3 axis, float phi)
{
- return new Basis(axis, phi).xform(this);
+ return new Basis(axis, phi).Xform(this);
}
- public Vector3 slide(Vector3 n)
+ public Vector3 Slide(Vector3 n)
{
- return this - n * dot(n);
+ return this - n * Dot(n);
}
- public Vector3 snapped(Vector3 by)
+ public Vector3 Snapped(Vector3 by)
{
return new Vector3
(
- Mathf.stepify(x, by.x),
- Mathf.stepify(y, by.y),
- Mathf.stepify(z, by.z)
+ Mathf.Stepify(x, by.x),
+ Mathf.Stepify(y, by.y),
+ Mathf.Stepify(z, by.z)
);
}
- public Basis to_diagonal_matrix()
+ public Basis ToDiagonalMatrix()
{
return new Basis(
x, 0f, 0f,
diff --git a/modules/mono/godotsharp_dirs.cpp b/modules/mono/godotsharp_dirs.cpp
index a0c2508b0d..0f6245a37c 100644
--- a/modules/mono/godotsharp_dirs.cpp
+++ b/modules/mono/godotsharp_dirs.cpp
@@ -192,4 +192,4 @@ String get_project_csproj_path() {
return _GodotSharpDirs::get_singleton().csproj_filepath;
}
#endif
-}
+} // namespace GodotSharpDirs
diff --git a/modules/mono/godotsharp_dirs.h b/modules/mono/godotsharp_dirs.h
index ba2c065210..914df40629 100644
--- a/modules/mono/godotsharp_dirs.h
+++ b/modules/mono/godotsharp_dirs.h
@@ -53,6 +53,6 @@ String get_custom_project_settings_dir();
String get_project_sln_path();
String get_project_csproj_path();
-}
+} // namespace GodotSharpDirs
#endif // GODOTSHARP_DIRS_H
diff --git a/modules/mono/mono_gc_handle.cpp b/modules/mono/mono_gc_handle.cpp
index e10e06df0e..121392b3f8 100644
--- a/modules/mono/mono_gc_handle.cpp
+++ b/modules/mono/mono_gc_handle.cpp
@@ -36,7 +36,7 @@ uint32_t MonoGCHandle::make_strong_handle(MonoObject *p_object) {
return mono_gchandle_new(
p_object,
false /* do not pin the object */
- );
+ );
}
uint32_t MonoGCHandle::make_weak_handle(MonoObject *p_object) {
@@ -44,7 +44,7 @@ uint32_t MonoGCHandle::make_weak_handle(MonoObject *p_object) {
return mono_gchandle_new_weakref(
p_object,
true /* track_resurrection: allows us to invoke _notification(NOTIFICATION_PREDELETE) while disposing */
- );
+ );
}
Ref<MonoGCHandle> MonoGCHandle::create_strong(MonoObject *p_object) {
diff --git a/modules/mono/mono_gd/gd_mono_internals.cpp b/modules/mono/mono_gd/gd_mono_internals.cpp
index cfe2148b80..56e8a01567 100644
--- a/modules/mono/mono_gd/gd_mono_internals.cpp
+++ b/modules/mono/mono_gd/gd_mono_internals.cpp
@@ -63,4 +63,4 @@ void tie_managed_to_unmanaged(MonoObject *managed, Object *unmanaged) {
return;
}
-}
+} // namespace GDMonoInternals
diff --git a/modules/mono/signal_awaiter_utils.cpp b/modules/mono/signal_awaiter_utils.cpp
index 7e99df29a1..47cc11cc0a 100644
--- a/modules/mono/signal_awaiter_utils.cpp
+++ b/modules/mono/signal_awaiter_utils.cpp
@@ -62,7 +62,7 @@ Error connect_signal_awaiter(Object *p_source, const String &p_signal, Object *p
return err;
}
-}
+} // namespace SignalAwaiterUtils
Variant SignalAwaiterHandle::_signal_callback(const Variant **p_args, int p_argcount, Variant::CallError &r_error) {
@@ -116,8 +116,8 @@ void SignalAwaiterHandle::_bind_methods() {
ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "_signal_callback", &SignalAwaiterHandle::_signal_callback, MethodInfo("_signal_callback"));
}
-SignalAwaiterHandle::SignalAwaiterHandle(uint32_t p_managed_handle)
- : MonoGCHandle(p_managed_handle) {
+SignalAwaiterHandle::SignalAwaiterHandle(uint32_t p_managed_handle) :
+ MonoGCHandle(p_managed_handle) {
#ifdef DEBUG_ENABLED
conn_target_id = 0;
diff --git a/modules/mono/utils/mono_reg_utils.h b/modules/mono/utils/mono_reg_utils.h
index 4cc4965acb..599828aa80 100644
--- a/modules/mono/utils/mono_reg_utils.h
+++ b/modules/mono/utils/mono_reg_utils.h
@@ -47,7 +47,7 @@ namespace MonoRegUtils {
MonoRegInfo find_mono();
String find_msbuild_tools_path();
-} // MonoRegUtils
+} // namespace MonoRegUtils
#endif // WINDOWS_ENABLED
diff --git a/modules/mono/utils/string_utils.cpp b/modules/mono/utils/string_utils.cpp
index f26663ea11..8f817771ac 100644
--- a/modules/mono/utils/string_utils.cpp
+++ b/modules/mono/utils/string_utils.cpp
@@ -78,7 +78,7 @@ int sfind(const String &p_text, int p_from) {
return -1;
}
-}
+} // namespace
String sformat(const String &p_text, const Variant &p1, const Variant &p2, const Variant &p3, const Variant &p4, const Variant &p5) {
if (p_text.length() < 2)
diff --git a/modules/opus/audio_stream_opus.cpp b/modules/opus/audio_stream_opus.cpp
index 06eab4c94d..5742102dae 100644
--- a/modules/opus/audio_stream_opus.cpp
+++ b/modules/opus/audio_stream_opus.cpp
@@ -62,7 +62,7 @@ int AudioStreamPlaybackOpus::_op_seek_func(void *_stream, opus_int64 _offset, in
fa->seek_end(_offset);
} break;
default: {
- ERR_PRINT("BUG, wtf was whence set to?\n");
+ ERR_PRINT("Opus seek function failure: Unexpected value in _whence\n");
}
}
int ret = fa->eof_reached() ? -1 : 0;
diff --git a/modules/pvr/texture_loader_pvr.cpp b/modules/pvr/texture_loader_pvr.cpp
index 03592047ad..4415c888a4 100644
--- a/modules/pvr/texture_loader_pvr.cpp
+++ b/modules/pvr/texture_loader_pvr.cpp
@@ -239,11 +239,11 @@ ResourceFormatPVR::ResourceFormatPVR() {
Image::_image_compress_pvrtc2_func = _compress_pvrtc4;
}
-/////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////
-//PVRTC decompressor, Based on PVRTC decompressor by IMGTEC.
+ //PVRTC decompressor, Based on PVRTC decompressor by IMGTEC.
-/////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////
#define PT_INDEX 2
#define BLK_Y_SIZE 4
diff --git a/modules/recast/SCsub b/modules/recast/SCsub
index 500c0ec055..530df9a37c 100644
--- a/modules/recast/SCsub
+++ b/modules/recast/SCsub
@@ -24,7 +24,7 @@ if env['builtin_recast']:
env.Append(CPPPATH=[thirdparty_dir, thirdparty_dir + "/Include"])
- lib = env.Library("recast_builtin", thirdparty_sources)
+ lib = env.add_library("recast_builtin", thirdparty_sources)
env.Append(LIBS=[lib])
# Godot source files
diff --git a/modules/regex/doc_classes/RegEx.xml b/modules/regex/doc_classes/RegEx.xml
index 4cf272fe8c..8cd163b0c8 100644
--- a/modules/regex/doc_classes/RegEx.xml
+++ b/modules/regex/doc_classes/RegEx.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RegEx" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="RegEx" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Class for searching text for patterns using regular expressions.
</brief_description>
diff --git a/modules/regex/doc_classes/RegExMatch.xml b/modules/regex/doc_classes/RegExMatch.xml
index 8c6951fea2..0217099ce6 100644
--- a/modules/regex/doc_classes/RegExMatch.xml
+++ b/modules/regex/doc_classes/RegExMatch.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="RegExMatch" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="RegExMatch" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
Contains the results of a regex search.
</brief_description>
diff --git a/modules/squish/image_compress_squish.cpp b/modules/squish/image_compress_squish.cpp
index 072f18b990..ac436c3c26 100644
--- a/modules/squish/image_compress_squish.cpp
+++ b/modules/squish/image_compress_squish.cpp
@@ -64,7 +64,7 @@ void image_decompress_squish(Image *p_image) {
} else if (p_image->get_format() == Image::FORMAT_RGTC_RG) {
squish_flags = squish::kBc5;
} else {
- print_line("wtf askd to decompress.. " + itos(p_image->get_format()));
+ print_line("Can't decompress unknown format: " + itos(p_image->get_format()));
ERR_FAIL_COND(true);
return;
}
diff --git a/modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml b/modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml
index ee6c28c36a..4533d59cae 100644
--- a/modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml
+++ b/modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="AudioStreamOGGVorbis" inherits="AudioStream" category="Core" version="3.0-alpha">
+<class name="AudioStreamOGGVorbis" inherits="AudioStream" category="Core" version="3.0-beta">
<brief_description>
OGG Vorbis audio stream driver.
</brief_description>
@@ -54,17 +54,6 @@
</description>
</method>
</methods>
- <members>
- <member name="data" type="PoolByteArray" setter="set_data" getter="get_data">
- Raw audio data.
- </member>
- <member name="loop" type="bool" setter="set_loop" getter="has_loop">
- If [code]true[/code], audio will loop continuously. Default value: [code]false[/code].
- </member>
- <member name="loop_offset" type="float" setter="set_loop_offset" getter="get_loop_offset">
- If loop is [code]true[/code], loop starts from this position, in seconds.
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/modules/stb_vorbis/doc_classes/ResourceImporterOGGVorbis.xml b/modules/stb_vorbis/doc_classes/ResourceImporterOGGVorbis.xml
index ce16632d6e..9d541cda58 100644
--- a/modules/stb_vorbis/doc_classes/ResourceImporterOGGVorbis.xml
+++ b/modules/stb_vorbis/doc_classes/ResourceImporterOGGVorbis.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ResourceImporterOGGVorbis" inherits="ResourceImporter" category="Core" version="3.0-alpha">
+<class name="ResourceImporterOGGVorbis" inherits="ResourceImporter" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/svg/SCsub b/modules/svg/SCsub
index 5be9367808..e12abac8c1 100644
--- a/modules/svg/SCsub
+++ b/modules/svg/SCsub
@@ -12,7 +12,8 @@ thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
# env.add_source_files(env.modules_sources, thirdparty_sources)
-lib = env.Library("svg_builtin", thirdparty_sources)
+lib = env.add_library("svg_builtin", thirdparty_sources)
+
# Needs to be appended to arrive after libscene in the linker call,
# but we don't want it to arrive *after* system libs, so manual hack
# LIBS contains first SCons Library objects ("SCons.Node.FS.File object")
diff --git a/modules/thekla_unwrap/SCsub b/modules/thekla_unwrap/SCsub
new file mode 100644
index 0000000000..1d4b086848
--- /dev/null
+++ b/modules/thekla_unwrap/SCsub
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+Import('env')
+Import('env_modules')
+
+env_thekla_unwrap = env_modules.Clone()
+
+# Thirdparty source files
+if env['builtin_thekla_atlas']:
+ thirdparty_dir = "#thirdparty/thekla_atlas/"
+ thirdparty_sources = [
+ "nvcore/Memory.cpp",
+ "nvcore/Debug.cpp",
+ "nvcore/StrLib.cpp",
+ "nvcore/FileSystem.cpp",
+ "nvcore/RadixSort.cpp",
+ "nvmath/Basis.cpp",
+ "nvmath/ConvexHull.cpp",
+ "nvmath/Fitting.cpp",
+ "nvmath/Plane.cpp",
+ "nvmath/ProximityGrid.cpp",
+ "nvmath/Random.cpp",
+ "nvmath/Solver.cpp",
+ "nvmath/Sparse.cpp",
+ "nvmath/TypeSerialization.cpp",
+ "poshlib/posh.c",
+ "nvimage/BitMap.cpp",
+ "nvimage/Image.cpp",
+ "nvmesh/BaseMesh.cpp",
+ "nvmesh/MeshBuilder.cpp",
+ "nvmesh/TriMesh.cpp",
+ "nvmesh/QuadTriMesh.cpp",
+ "nvmesh/MeshTopology.cpp",
+ "nvmesh/halfedge/Edge.cpp",
+ "nvmesh/halfedge/Mesh.cpp",
+ "nvmesh/halfedge/Face.cpp",
+ "nvmesh/halfedge/Vertex.cpp",
+ "nvmesh/geometry/Bounds.cpp",
+ "nvmesh/geometry/Measurements.cpp",
+ "nvmesh/raster/Raster.cpp",
+ "nvmesh/param/Atlas.cpp",
+ "nvmesh/param/AtlasBuilder.cpp",
+ "nvmesh/param/AtlasPacker.cpp",
+ "nvmesh/param/LeastSquaresConformalMap.cpp",
+ "nvmesh/param/OrthogonalProjectionMap.cpp",
+ "nvmesh/param/ParameterizationQuality.cpp",
+ "nvmesh/param/SingleFaceMap.cpp",
+ "nvmesh/param/Util.cpp",
+ "nvmesh/weld/VertexWeld.cpp",
+ "nvmesh/weld/Snap.cpp",
+ "thekla/thekla_atlas.cpp"
+ ]
+ thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
+
+ env_thekla_unwrap.add_source_files(env.modules_sources, thirdparty_sources)
+ env_thekla_unwrap.Append(CPPPATH=[thirdparty_dir, thirdparty_dir + "/poshlib", thirdparty_dir + "/nvcore", thirdparty_dir + "/nvmesh"])
+
+ # upstream uses c++11
+ env_thekla_unwrap.Append(CXXFLAGS="-std=gnu++11")
+
+ if env["platform"] == 'x11':
+ env_thekla_unwrap.Append(CCFLAGS=["-DNV_OS_LINUX"])
+ elif env["platform"] == 'osx':
+ env_thekla_unwrap.Append(CCFLAGS=["-DNV_OS_DARWIN"])
+ elif env["platform"] == 'windows':
+ env_thekla_unwrap.Append(CCFLAGS=["-DNV_OS_WIN32"])
+
+# Godot source files
+env_thekla_unwrap.add_source_files(env.modules_sources, "*.cpp")
diff --git a/modules/thekla_unwrap/config.py b/modules/thekla_unwrap/config.py
new file mode 100644
index 0000000000..b1ce7d4b91
--- /dev/null
+++ b/modules/thekla_unwrap/config.py
@@ -0,0 +1,7 @@
+def can_build(platform):
+ return platform != "android" and platform != "ios"
+
+def configure(env):
+ if not env['tools']:
+ env['builtin_thekla_atlas'] = False
+ env.disabled_modules.append("thekla_unwrap")
diff --git a/modules/thekla_unwrap/register_types.cpp b/modules/thekla_unwrap/register_types.cpp
new file mode 100644
index 0000000000..01b834f8cb
--- /dev/null
+++ b/modules/thekla_unwrap/register_types.cpp
@@ -0,0 +1,115 @@
+/*************************************************************************/
+/* register_types.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+#include "register_types.h"
+#include "thirdparty/thekla_atlas/thekla/thekla_atlas.h"
+#include <stdio.h>
+#include <stdlib.h>
+extern bool (*array_mesh_lightmap_unwrap_callback)(float p_texel_size, const float *p_vertices, const float *p_normals, int p_vertex_count, const int *p_indices, const int *p_face_materials, int p_index_count, float **r_uv, int **r_vertex, int *r_vertex_count, int **r_index, int *r_index_count, int *r_size_hint_x, int *r_size_hint_y);
+
+bool thekla_mesh_lightmap_unwrap_callback(float p_texel_size, const float *p_vertices, const float *p_normals, int p_vertex_count, const int *p_indices, const int *p_face_materials, int p_index_count, float **r_uv, int **r_vertex, int *r_vertex_count, int **r_index, int *r_index_count, int *r_size_hint_x, int *r_size_hint_y) {
+
+ //set up input mesh
+ Thekla::Atlas_Input_Mesh input_mesh;
+ input_mesh.face_array = new Thekla::Atlas_Input_Face[p_index_count / 3];
+ for (int i = 0; i < p_index_count / 3; i++) {
+ input_mesh.face_array[i].vertex_index[0] = p_indices[i * 3 + 0];
+ input_mesh.face_array[i].vertex_index[1] = p_indices[i * 3 + 1];
+ input_mesh.face_array[i].vertex_index[2] = p_indices[i * 3 + 2];
+ printf("face %i - %i, %i, %i - mat %i\n", i, input_mesh.face_array[i].vertex_index[0], input_mesh.face_array[i].vertex_index[1], input_mesh.face_array[i].vertex_index[2], p_face_materials[i]);
+ input_mesh.face_array[i].material_index = p_face_materials[i];
+ }
+ input_mesh.vertex_array = new Thekla::Atlas_Input_Vertex[p_vertex_count];
+ for (int i = 0; i < p_vertex_count; i++) {
+ input_mesh.vertex_array[i].first_colocal = i; //wtf
+ for (int j = 0; j < 3; j++) {
+ input_mesh.vertex_array[i].position[j] = p_vertices[i * 3 + j];
+ input_mesh.vertex_array[i].normal[j] = p_normals[i * 3 + j];
+ }
+ input_mesh.vertex_array[i].uv[0] = 0;
+ input_mesh.vertex_array[i].uv[1] = 0;
+ printf("vertex %i - %f, %f, %f\n", i, input_mesh.vertex_array[i].position[0], input_mesh.vertex_array[i].position[1], input_mesh.vertex_array[i].position[2]);
+ printf("normal %i - %f, %f, %f\n", i, input_mesh.vertex_array[i].normal[0], input_mesh.vertex_array[i].normal[1], input_mesh.vertex_array[i].normal[2]);
+ }
+ input_mesh.face_count = p_index_count / 3;
+ input_mesh.vertex_count = p_vertex_count;
+
+ //set up options
+ Thekla::Atlas_Options options;
+ Thekla::atlas_set_default_options(&options);
+ options.packer_options.witness.packing_quality = 1;
+ options.packer_options.witness.texel_area = 1.0 / p_texel_size;
+
+ //generate
+ Thekla::Atlas_Error err;
+ Thekla::Atlas_Output_Mesh *output = atlas_generate(&input_mesh, &options, &err);
+
+ delete[] input_mesh.face_array;
+ delete[] input_mesh.vertex_array;
+
+ if (err != Thekla::Atlas_Error_Success) {
+ printf("error with atlas\n");
+ } else {
+ *r_vertex = (int *)malloc(sizeof(int) * output->vertex_count);
+ *r_uv = (float *)malloc(sizeof(float) * output->vertex_count * 3);
+ *r_index = (int *)malloc(sizeof(int) * output->index_count);
+
+ // printf("w: %i, h: %i\n", output->atlas_width, output->atlas_height);
+ for (int i = 0; i < output->vertex_count; i++) {
+ (*r_vertex)[i] = output->vertex_array[i].xref;
+ (*r_uv)[i * 2 + 0] = output->vertex_array[i].uv[0] / output->atlas_width;
+ (*r_uv)[i * 2 + 1] = output->vertex_array[i].uv[1] / output->atlas_height;
+ // printf("uv: %f,%f\n", (*r_uv)[i * 2 + 0], (*r_uv)[i * 2 + 1]);
+ }
+ *r_vertex_count = output->vertex_count;
+
+ for (int i = 0; i < output->index_count; i++) {
+ (*r_index)[i] = output->index_array[i];
+ }
+
+ *r_index_count = output->index_count;
+
+ *r_size_hint_x = output->atlas_height;
+ *r_size_hint_y = output->atlas_width;
+ }
+
+ if (output) {
+ atlas_free(output);
+ }
+
+ return err == Thekla::Atlas_Error_Success;
+}
+
+void register_thekla_unwrap_types() {
+
+ array_mesh_lightmap_unwrap_callback = thekla_mesh_lightmap_unwrap_callback;
+}
+
+void unregister_thekla_unwrap_types() {
+}
diff --git a/modules/thekla_unwrap/register_types.h b/modules/thekla_unwrap/register_types.h
new file mode 100644
index 0000000000..2bc3d16c64
--- /dev/null
+++ b/modules/thekla_unwrap/register_types.h
@@ -0,0 +1,31 @@
+/*************************************************************************/
+/* register_types.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+void register_thekla_unwrap_types();
+void unregister_thekla_unwrap_types();
diff --git a/modules/theora/doc_classes/ResourceImporterTheora.xml b/modules/theora/doc_classes/ResourceImporterTheora.xml
index 497c938826..85c7c6bf89 100644
--- a/modules/theora/doc_classes/ResourceImporterTheora.xml
+++ b/modules/theora/doc_classes/ResourceImporterTheora.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ResourceImporterTheora" inherits="ResourceImporter" category="Core" version="3.0-alpha">
+<class name="ResourceImporterTheora" inherits="ResourceImporter" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/theora/doc_classes/VideoStreamTheora.xml b/modules/theora/doc_classes/VideoStreamTheora.xml
index 8f155b786f..6c8806ed72 100644
--- a/modules/theora/doc_classes/VideoStreamTheora.xml
+++ b/modules/theora/doc_classes/VideoStreamTheora.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VideoStreamTheora" inherits="VideoStream" category="Core" version="3.0-alpha">
+<class name="VideoStreamTheora" inherits="VideoStream" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -24,10 +24,6 @@
</description>
</method>
</methods>
- <members>
- <member name="file" type="String" setter="set_file" getter="get_file">
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/modules/tinyexr/image_loader_tinyexr.cpp b/modules/tinyexr/image_loader_tinyexr.cpp
index 49a4db237a..c88662454c 100644
--- a/modules/tinyexr/image_loader_tinyexr.cpp
+++ b/modules/tinyexr/image_loader_tinyexr.cpp
@@ -47,6 +47,11 @@ Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_f
f->close();
+ // Re-implementation of tinyexr's LoadEXRFromMemory using Godot types to store the Image data
+ // and Godot's error codes.
+ // When debugging after updating the thirdparty library, check that we're still in sync with
+ // their API usage in LoadEXRFromMemory.
+
EXRVersion exr_version;
EXRImage exr_image;
EXRHeader exr_header;
@@ -68,6 +73,13 @@ Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_f
return ERR_FILE_CORRUPT;
}
+ // Read HALF channel as FLOAT. (GH-13490)
+ for (int i = 0; i < exr_header.num_channels; i++) {
+ if (exr_header.pixel_types[i] == TINYEXR_PIXELTYPE_HALF) {
+ exr_header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT;
+ }
+ }
+
InitEXRImage(&exr_image);
ret = LoadEXRImageFromMemory(&exr_image, &exr_header, w.ptr(), src_image_len, &err);
if (ret != TINYEXR_SUCCESS) {
@@ -95,23 +107,25 @@ Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_f
}
if (idxR == -1) {
- ERR_PRINT("R channel not found");
+ ERR_PRINT("TinyEXR: R channel not found.");
// @todo { free exr_image }
return ERR_FILE_CORRUPT;
}
if (idxG == -1) {
- ERR_PRINT("G channel not found\n")
+ ERR_PRINT("TinyEXR: G channel not found.")
// @todo { free exr_image }
return ERR_FILE_CORRUPT;
}
if (idxB == -1) {
- ERR_PRINT("B channel not found\n")
+ ERR_PRINT("TinyEXR: B channel not found.")
// @todo { free exr_image }
return ERR_FILE_CORRUPT;
}
+ // EXR image data loaded, now parse it into Godot-friendly image data
+
PoolVector<uint8_t> imgdata;
Image::Format format;
@@ -126,7 +140,6 @@ Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_f
}
{
-
PoolVector<uint8_t>::Write wd = imgdata.write();
uint16_t *iw = (uint16_t *)wd.ptr();
@@ -151,11 +164,13 @@ Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_f
}
}
- print_line("EXR w: " + itos(exr_image.width) + " h:" + itos(exr_image.height) + " format " + Image::get_format_name(format));
p_image->create(exr_image.width, exr_image.height, false, format, imgdata);
w = PoolVector<uint8_t>::Write();
+ FreeEXRHeader(&exr_header);
+ FreeEXRImage(&exr_image);
+
return OK;
}
diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml
index 80b1ed86d7..46bd35dd73 100644
--- a/modules/visual_script/doc_classes/VisualScript.xml
+++ b/modules/visual_script/doc_classes/VisualScript.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScript" inherits="Script" category="Core" version="3.0-alpha">
+<class name="VisualScript" inherits="Script" category="Core" version="3.0-beta">
<brief_description>
A script implemented in the Visual Script programming environment.
</brief_description>
@@ -495,10 +495,6 @@
</description>
</method>
</methods>
- <members>
- <member name="data" type="Dictionary" setter="_set_data" getter="_get_data">
- </member>
- </members>
<signals>
<signal name="node_ports_changed">
<argument index="0" name="function" type="String">
diff --git a/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml b/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml
index 6c028e5f28..e602214a66 100644
--- a/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptBasicTypeConstant" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptBasicTypeConstant" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
A Visual Script node representing a constant from the base types.
</brief_description>
@@ -11,34 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_basic_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="get_basic_type_constant" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_basic_type">
- <return type="void">
- </return>
- <argument index="0" name="name" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_basic_type_constant">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="basic_type" type="int" setter="set_basic_type" getter="get_basic_type" enum="Variant.Type">
diff --git a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
index c45c8d2b64..9f7d38e957 100644
--- a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
+++ b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptBuiltinFunc" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptBuiltinFunc" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
A Visual Script node used to call built-in functions.
</brief_description>
@@ -12,20 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_func">
- <return type="int" enum="VisualScriptBuiltinFunc.BuiltinFunc">
- </return>
- <description>
- </description>
- </method>
- <method name="set_func">
- <return type="void">
- </return>
- <argument index="0" name="which" type="int" enum="VisualScriptBuiltinFunc.BuiltinFunc">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="function" type="int" setter="set_func" getter="get_func" enum="VisualScriptBuiltinFunc.BuiltinFunc">
@@ -33,192 +19,192 @@
</member>
</members>
<constants>
- <constant name="MATH_SIN" value="0">
+ <constant name="MATH_SIN" value="0" enum="BuiltinFunc">
Return the sine of the input.
</constant>
- <constant name="MATH_COS" value="1">
+ <constant name="MATH_COS" value="1" enum="BuiltinFunc">
Return the cosine of the input.
</constant>
- <constant name="MATH_TAN" value="2">
+ <constant name="MATH_TAN" value="2" enum="BuiltinFunc">
Return the tangent of the input.
</constant>
- <constant name="MATH_SINH" value="3">
+ <constant name="MATH_SINH" value="3" enum="BuiltinFunc">
Return the hyperbolic sine of the input.
</constant>
- <constant name="MATH_COSH" value="4">
+ <constant name="MATH_COSH" value="4" enum="BuiltinFunc">
Return the hyperbolic cosine of the input.
</constant>
- <constant name="MATH_TANH" value="5">
+ <constant name="MATH_TANH" value="5" enum="BuiltinFunc">
Return the hyperbolic tangent of the input.
</constant>
- <constant name="MATH_ASIN" value="6">
+ <constant name="MATH_ASIN" value="6" enum="BuiltinFunc">
Return the arc sine of the input.
</constant>
- <constant name="MATH_ACOS" value="7">
+ <constant name="MATH_ACOS" value="7" enum="BuiltinFunc">
Return the arc cosine of the input.
</constant>
- <constant name="MATH_ATAN" value="8">
+ <constant name="MATH_ATAN" value="8" enum="BuiltinFunc">
Return the arc tangent of the input.
</constant>
- <constant name="MATH_ATAN2" value="9">
+ <constant name="MATH_ATAN2" value="9" enum="BuiltinFunc">
Return the arc tangent of the input, using the signs of both parameters to determine the exact angle.
</constant>
- <constant name="MATH_SQRT" value="10">
+ <constant name="MATH_SQRT" value="10" enum="BuiltinFunc">
Return the square root of the input.
</constant>
- <constant name="MATH_FMOD" value="11">
+ <constant name="MATH_FMOD" value="11" enum="BuiltinFunc">
Return the remainder of one input divided by the other, using floating-point numbers.
</constant>
- <constant name="MATH_FPOSMOD" value="12">
+ <constant name="MATH_FPOSMOD" value="12" enum="BuiltinFunc">
Return the positive remainder of one input divided by the other, using floating-point numbers.
</constant>
- <constant name="MATH_FLOOR" value="13">
+ <constant name="MATH_FLOOR" value="13" enum="BuiltinFunc">
Return the input rounded down.
</constant>
- <constant name="MATH_CEIL" value="14">
+ <constant name="MATH_CEIL" value="14" enum="BuiltinFunc">
Return the input rounded up.
</constant>
- <constant name="MATH_ROUND" value="15">
+ <constant name="MATH_ROUND" value="15" enum="BuiltinFunc">
Return the input rounded to the nearest integer.
</constant>
- <constant name="MATH_ABS" value="16">
+ <constant name="MATH_ABS" value="16" enum="BuiltinFunc">
Return the absolute value of the input.
</constant>
- <constant name="MATH_SIGN" value="17">
+ <constant name="MATH_SIGN" value="17" enum="BuiltinFunc">
Return the sign of the input, turning it into 1, -1, or 0. Useful to determine if the input is positive or negative.
</constant>
- <constant name="MATH_POW" value="18">
+ <constant name="MATH_POW" value="18" enum="BuiltinFunc">
Return the input raised to a given power.
</constant>
- <constant name="MATH_LOG" value="19">
+ <constant name="MATH_LOG" value="19" enum="BuiltinFunc">
Return the natural logarithm of the input. Note that this is not the typical base-10 logarithm function calculators use.
</constant>
- <constant name="MATH_EXP" value="20">
+ <constant name="MATH_EXP" value="20" enum="BuiltinFunc">
Return [b]e[/b] raised to the power of the input. [b]e[/b] sometimes called "Euler's number" is a mathematical constant whose value is approximately 2.71828.
</constant>
- <constant name="MATH_ISNAN" value="21">
+ <constant name="MATH_ISNAN" value="21" enum="BuiltinFunc">
Return whether the input is NaN (Not a Number) or not. NaN is usually produced by dividing 0 by 0, though other ways exist.
</constant>
- <constant name="MATH_ISINF" value="22">
+ <constant name="MATH_ISINF" value="22" enum="BuiltinFunc">
Return whether the input is an infinite floating-point number or not. Infinity is usually produced by dividing a number by 0, though other ways exist.
</constant>
- <constant name="MATH_EASE" value="23">
+ <constant name="MATH_EASE" value="23" enum="BuiltinFunc">
Easing function, based on exponent. 0 is constant, 1 is linear, 0 to 1 is ease-in, 1+ is ease out. Negative values are in-out/out in.
</constant>
- <constant name="MATH_DECIMALS" value="24">
+ <constant name="MATH_DECIMALS" value="24" enum="BuiltinFunc">
Return the number of digit places after the decimal that the first non-zero digit occurs.
</constant>
- <constant name="MATH_STEPIFY" value="25">
+ <constant name="MATH_STEPIFY" value="25" enum="BuiltinFunc">
Return the input snapped to a given step.
</constant>
- <constant name="MATH_LERP" value="26">
+ <constant name="MATH_LERP" value="26" enum="BuiltinFunc">
Return a number linearly interpolated between the first two inputs, based on the third input. Uses the formula [code]a + (a - b) * t[/code].
</constant>
- <constant name="MATH_INVERSE_LERP" value="27">
+ <constant name="MATH_INVERSE_LERP" value="27" enum="BuiltinFunc">
</constant>
- <constant name="MATH_RANGE_LERP" value="28">
+ <constant name="MATH_RANGE_LERP" value="28" enum="BuiltinFunc">
</constant>
- <constant name="MATH_DECTIME" value="29">
+ <constant name="MATH_DECTIME" value="29" enum="BuiltinFunc">
Return the result of 'value' decreased by 'step' * 'amount'.
</constant>
- <constant name="MATH_RANDOMIZE" value="30">
+ <constant name="MATH_RANDOMIZE" value="30" enum="BuiltinFunc">
Randomize the seed (or the internal state) of the random number generator. Current implementation reseeds using a number based on time.
</constant>
- <constant name="MATH_RAND" value="31">
+ <constant name="MATH_RAND" value="31" enum="BuiltinFunc">
Return a random 32 bits integer value. To obtain a random value between 0 to N (where N is smaller than 2^32 - 1), you can use it with the remainder function.
</constant>
- <constant name="MATH_RANDF" value="32">
+ <constant name="MATH_RANDF" value="32" enum="BuiltinFunc">
Return a random floating-point value between 0 and 1. To obtain a random value between 0 to N, you can use it with multiplication.
</constant>
- <constant name="MATH_RANDOM" value="33">
+ <constant name="MATH_RANDOM" value="33" enum="BuiltinFunc">
Return a random floating-point value between the two inputs.
</constant>
- <constant name="MATH_SEED" value="34">
+ <constant name="MATH_SEED" value="34" enum="BuiltinFunc">
Set the seed for the random number generator.
</constant>
- <constant name="MATH_RANDSEED" value="35">
+ <constant name="MATH_RANDSEED" value="35" enum="BuiltinFunc">
Return a random value from the given seed, along with the new seed.
</constant>
- <constant name="MATH_DEG2RAD" value="36">
+ <constant name="MATH_DEG2RAD" value="36" enum="BuiltinFunc">
Convert the input from degrees to radians.
</constant>
- <constant name="MATH_RAD2DEG" value="37">
+ <constant name="MATH_RAD2DEG" value="37" enum="BuiltinFunc">
Convert the input from radians to degrees.
</constant>
- <constant name="MATH_LINEAR2DB" value="38">
+ <constant name="MATH_LINEAR2DB" value="38" enum="BuiltinFunc">
Convert the input from linear volume to decibel volume.
</constant>
- <constant name="MATH_DB2LINEAR" value="39">
+ <constant name="MATH_DB2LINEAR" value="39" enum="BuiltinFunc">
Convert the input from decibel volume to linear volume.
</constant>
- <constant name="MATH_POLAR2CARTESIAN" value="40">
+ <constant name="MATH_POLAR2CARTESIAN" value="40" enum="BuiltinFunc">
Converts a 2D point expressed in the polar coordinate system (a distance from the origin [code]r[/code] and an angle [code]th[/code]) to the cartesian coordinate system (x and y axis).
</constant>
- <constant name="MATH_CARTESIAN2POLAR" value="41">
+ <constant name="MATH_CARTESIAN2POLAR" value="41" enum="BuiltinFunc">
Converts a 2D point expressed in the cartesian coordinate system (x and y axis) to the polar coordinate system (a distance from the origin and an angle).
</constant>
- <constant name="MATH_WRAP" value="42">
+ <constant name="MATH_WRAP" value="42" enum="BuiltinFunc">
</constant>
- <constant name="MATH_WRAPF" value="43">
+ <constant name="MATH_WRAPF" value="43" enum="BuiltinFunc">
</constant>
- <constant name="LOGIC_MAX" value="44">
+ <constant name="LOGIC_MAX" value="44" enum="BuiltinFunc">
Return the greater of the two numbers, also known as their maximum.
</constant>
- <constant name="LOGIC_MIN" value="45">
+ <constant name="LOGIC_MIN" value="45" enum="BuiltinFunc">
Return the lesser of the two numbers, also known as their minimum.
</constant>
- <constant name="LOGIC_CLAMP" value="46">
+ <constant name="LOGIC_CLAMP" value="46" enum="BuiltinFunc">
Return the input clamped inside the given range, ensuring the result is never outside it. Equivalent to `min(max(input, range_low), range_high)`
</constant>
- <constant name="LOGIC_NEAREST_PO2" value="46">
+ <constant name="LOGIC_NEAREST_PO2" value="47" enum="BuiltinFunc">
Return the nearest power of 2 to the input.
</constant>
- <constant name="OBJ_WEAKREF" value="47">
+ <constant name="OBJ_WEAKREF" value="48" enum="BuiltinFunc">
Create a [WeakRef] from the input.
</constant>
- <constant name="FUNC_FUNCREF" value="48">
+ <constant name="FUNC_FUNCREF" value="49" enum="BuiltinFunc">
Create a [FuncRef] from the input.
</constant>
- <constant name="TYPE_CONVERT" value="49">
+ <constant name="TYPE_CONVERT" value="50" enum="BuiltinFunc">
Convert between types.
</constant>
- <constant name="TYPE_OF" value="50">
+ <constant name="TYPE_OF" value="51" enum="BuiltinFunc">
Return the type of the input as an integer. Check [enum Variant.Type] for the integers that might be returned.
</constant>
- <constant name="TYPE_EXISTS" value="51">
+ <constant name="TYPE_EXISTS" value="52" enum="BuiltinFunc">
Checks if a type is registered in the [ClassDB].
</constant>
- <constant name="TEXT_CHAR" value="52">
+ <constant name="TEXT_CHAR" value="53" enum="BuiltinFunc">
Return a character with the given ascii value.
</constant>
- <constant name="TEXT_STR" value="53">
+ <constant name="TEXT_STR" value="54" enum="BuiltinFunc">
Convert the input to a string.
</constant>
- <constant name="TEXT_PRINT" value="54">
+ <constant name="TEXT_PRINT" value="55" enum="BuiltinFunc">
Print the given string to the output window.
</constant>
- <constant name="TEXT_PRINTERR" value="55">
+ <constant name="TEXT_PRINTERR" value="56" enum="BuiltinFunc">
Print the given string to the standard error output.
</constant>
- <constant name="TEXT_PRINTRAW" value="56">
+ <constant name="TEXT_PRINTRAW" value="57" enum="BuiltinFunc">
Print the given string to the standard output, without adding a newline.
</constant>
- <constant name="VAR_TO_STR" value="57">
+ <constant name="VAR_TO_STR" value="58" enum="BuiltinFunc">
Serialize a [Variant] to a string.
</constant>
- <constant name="STR_TO_VAR" value="58">
+ <constant name="STR_TO_VAR" value="59" enum="BuiltinFunc">
Deserialize a [Variant] from a string serialized using [VAR_TO_STR].
</constant>
- <constant name="VAR_TO_BYTES" value="59">
+ <constant name="VAR_TO_BYTES" value="60" enum="BuiltinFunc">
Serialize a [Variant] to a [PoolByteArray].
</constant>
- <constant name="BYTES_TO_VAR" value="60">
+ <constant name="BYTES_TO_VAR" value="61" enum="BuiltinFunc">
Deserialize a [Variant] from a [PoolByteArray] serialized using [VAR_TO_BYTES].
</constant>
- <constant name="COLORN" value="61">
+ <constant name="COLORN" value="62" enum="BuiltinFunc">
Return the [Color] with the given name and alpha ranging from 0 to 1. Note: names are defined in color_names.inc.
</constant>
- <constant name="FUNC_MAX" value="62">
+ <constant name="FUNC_MAX" value="63" enum="BuiltinFunc">
The maximum value the [member function] property can have.
</constant>
</constants>
diff --git a/modules/visual_script/doc_classes/VisualScriptClassConstant.xml b/modules/visual_script/doc_classes/VisualScriptClassConstant.xml
index e6498e92ad..78757843cd 100644
--- a/modules/visual_script/doc_classes/VisualScriptClassConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptClassConstant.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptClassConstant" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptClassConstant" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Gets a constant from a given class.
</brief_description>
@@ -15,34 +15,6 @@
<demos>
</demos>
<methods>
- <method name="get_base_type">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_class_constant">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_base_type">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_class_constant">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="base_type" type="String" setter="set_base_type" getter="get_base_type">
diff --git a/modules/visual_script/doc_classes/VisualScriptComment.xml b/modules/visual_script/doc_classes/VisualScriptComment.xml
index ea4545f8ef..c21a082362 100644
--- a/modules/visual_script/doc_classes/VisualScriptComment.xml
+++ b/modules/visual_script/doc_classes/VisualScriptComment.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptComment" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptComment" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
A Visual Script node used to annotate the script.
</brief_description>
@@ -12,48 +12,6 @@
<demos>
</demos>
<methods>
- <method name="get_description" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_size" qualifiers="const">
- <return type="Vector2">
- </return>
- <description>
- </description>
- </method>
- <method name="get_title" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_description">
- <return type="void">
- </return>
- <argument index="0" name="description" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_size">
- <return type="void">
- </return>
- <argument index="0" name="size" type="Vector2">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_title">
- <return type="void">
- </return>
- <argument index="0" name="title" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="description" type="String" setter="set_description" getter="get_description">
diff --git a/modules/visual_script/doc_classes/VisualScriptCondition.xml b/modules/visual_script/doc_classes/VisualScriptCondition.xml
index 2a30c604a5..f1f87c010d 100644
--- a/modules/visual_script/doc_classes/VisualScriptCondition.xml
+++ b/modules/visual_script/doc_classes/VisualScriptCondition.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptCondition" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptCondition" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
A Visual Script node which branches the flow.
</brief_description>
diff --git a/modules/visual_script/doc_classes/VisualScriptConstant.xml b/modules/visual_script/doc_classes/VisualScriptConstant.xml
index 51c6d19238..39a1e5eba8 100644
--- a/modules/visual_script/doc_classes/VisualScriptConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptConstant.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptConstant" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptConstant" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Gets a contant's value.
</brief_description>
@@ -15,34 +15,6 @@
<demos>
</demos>
<methods>
- <method name="get_constant_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="get_constant_value" qualifiers="const">
- <return type="Variant">
- </return>
- <description>
- </description>
- </method>
- <method name="set_constant_type">
- <return type="void">
- </return>
- <argument index="0" name="type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_constant_value">
- <return type="void">
- </return>
- <argument index="0" name="value" type="Variant">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="type" type="int" setter="set_constant_type" getter="get_constant_type" enum="Variant.Type">
diff --git a/modules/visual_script/doc_classes/VisualScriptConstructor.xml b/modules/visual_script/doc_classes/VisualScriptConstructor.xml
index 91df52e893..cbe8c6c096 100644
--- a/modules/visual_script/doc_classes/VisualScriptConstructor.xml
+++ b/modules/visual_script/doc_classes/VisualScriptConstructor.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptConstructor" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptConstructor" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
A Visual Script node which calls a base type constructor.
</brief_description>
@@ -40,30 +40,6 @@
</description>
</method>
</methods>
- <members>
- <member name="constructor" type="Dictionary" setter="set_constructor" getter="get_constructor">
- The constructor function's method info. Has roughly the following structure:
- [codeblock]
- {
- name = "string",
- args = [{
- name = "string"
- class_name = "string"
- type = TYPE_*
- hint = PROPERTY_HINT_*
- hint_string = "string"
- }]
- default_args = [] # Array of variants
- flags = METHOD_FLAG_*
- id = 0
- return = {type = TYPE_*}
- }
- [/codeblock]
- </member>
- <member name="type" type="int" setter="set_constructor_type" getter="get_constructor_type" enum="Variant.Type">
- The type to be constructed.
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptCustomNode.xml b/modules/visual_script/doc_classes/VisualScriptCustomNode.xml
index 38c325cfb7..c321c616af 100644
--- a/modules/visual_script/doc_classes/VisualScriptCustomNode.xml
+++ b/modules/visual_script/doc_classes/VisualScriptCustomNode.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptCustomNode" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptCustomNode" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
A scripted Visual Script node.
</brief_description>
@@ -136,28 +136,28 @@
</method>
</methods>
<constants>
- <constant name="START_MODE_BEGIN_SEQUENCE" value="0">
+ <constant name="START_MODE_BEGIN_SEQUENCE" value="0" enum="StartMode">
The start mode used the first time when [method _step] is called.
</constant>
- <constant name="START_MODE_CONTINUE_SEQUENCE" value="1">
+ <constant name="START_MODE_CONTINUE_SEQUENCE" value="1" enum="StartMode">
The start mode used when [method _step] is called after coming back from a STEP_PUSH_STACK_BIT.
</constant>
- <constant name="START_MODE_RESUME_YIELD" value="2">
+ <constant name="START_MODE_RESUME_YIELD" value="2" enum="StartMode">
The start mode used when [method _step] is called after resuming from STEP_YIELD_BIT.
</constant>
- <constant name="STEP_PUSH_STACK_BIT" value="16777216" enum="">
+ <constant name="STEP_PUSH_STACK_BIT" value="16777216">
Hint used by [method _step] to tell that control should return to it when there is no other node left to execute.
This is used by [VisualScriptCondition] to redirect the sequence to the "Done" port after the true/false branch has finished execution.
</constant>
- <constant name="STEP_GO_BACK_BIT" value="33554432" enum="">
+ <constant name="STEP_GO_BACK_BIT" value="33554432">
Hint used by [method _step] to tell that control should return back, either hitting a previous STEP_PUSH_STACK_BIT or exiting the function.
</constant>
- <constant name="STEP_NO_ADVANCE_BIT" value="67108864" enum="">
+ <constant name="STEP_NO_ADVANCE_BIT" value="67108864">
</constant>
- <constant name="STEP_EXIT_FUNCTION_BIT" value="134217728" enum="">
+ <constant name="STEP_EXIT_FUNCTION_BIT" value="134217728">
Hint used by [method _step] to tell that control should stop and exit the function.
</constant>
- <constant name="STEP_YIELD_BIT" value="268435456" enum="">
+ <constant name="STEP_YIELD_BIT" value="268435456">
Hint used by [method _step] to tell that the function should be yielded.
Using this requires you to have at least one working memory slot, which is used for the [VisualScriptFunctionState].
</constant>
diff --git a/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml b/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml
index cbed3ba22c..0f396564e2 100644
--- a/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml
+++ b/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptDeconstruct" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptDeconstruct" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
A Visual Script node which deconstructs a base type instance into its parts.
</brief_description>
@@ -11,24 +11,8 @@
<demos>
</demos>
<methods>
- <method name="get_deconstruct_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="set_deconstruct_type">
- <return type="void">
- </return>
- <argument index="0" name="type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
- <member name="elem_cache" type="Array" setter="_set_elem_cache" getter="_get_elem_cache">
- </member>
<member name="type" type="int" setter="set_deconstruct_type" getter="get_deconstruct_type" enum="Variant.Type">
The type to deconstruct.
</member>
diff --git a/modules/visual_script/doc_classes/VisualScriptEditor.xml b/modules/visual_script/doc_classes/VisualScriptEditor.xml
index 70d52b2bd7..b433f132c1 100644
--- a/modules/visual_script/doc_classes/VisualScriptEditor.xml
+++ b/modules/visual_script/doc_classes/VisualScriptEditor.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptEditor" inherits="Object" category="Core" version="3.0.alpha.custom_build">
+<class name="VisualScriptEditor" inherits="Object" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml b/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml
index 669276f0d0..71e8c7d93c 100644
--- a/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml
+++ b/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptEmitSignal" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptEmitSignal" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Emits a specified signal.
</brief_description>
@@ -15,20 +15,6 @@
<demos>
</demos>
<methods>
- <method name="get_signal" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_signal">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="signal" type="String" setter="set_signal" getter="get_signal">
diff --git a/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml b/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml
index 6703ff4eda..b9f356412d 100644
--- a/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml
+++ b/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptEngineSingleton" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptEngineSingleton" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
A Visual Script node returning a singleton from [@GlobalScope]
</brief_description>
@@ -11,20 +11,6 @@
<demos>
</demos>
<methods>
- <method name="get_singleton">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_singleton">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="constant" type="String" setter="set_singleton" getter="get_singleton">
diff --git a/modules/visual_script/doc_classes/VisualScriptExpression.xml b/modules/visual_script/doc_classes/VisualScriptExpression.xml
index fb3b6ef19d..91c107e069 100644
--- a/modules/visual_script/doc_classes/VisualScriptExpression.xml
+++ b/modules/visual_script/doc_classes/VisualScriptExpression.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptExpression" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptExpression" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptFunction.xml b/modules/visual_script/doc_classes/VisualScriptFunction.xml
index d77169679b..2c63b98b22 100644
--- a/modules/visual_script/doc_classes/VisualScriptFunction.xml
+++ b/modules/visual_script/doc_classes/VisualScriptFunction.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptFunction" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptFunction" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml b/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
index 7a0a7c9f55..03c47dca7c 100644
--- a/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
+++ b/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptFunctionCall" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptFunctionCall" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,150 +9,8 @@
<demos>
</demos>
<methods>
- <method name="get_base_path" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_script" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_type" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_basic_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="get_call_mode" qualifiers="const">
- <return type="int" enum="VisualScriptFunctionCall.CallMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_function" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_rpc_call_mode" qualifiers="const">
- <return type="int" enum="VisualScriptFunctionCall.RPCCallMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_singleton" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_use_default_args" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_validate" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_base_path">
- <return type="void">
- </return>
- <argument index="0" name="base_path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_script">
- <return type="void">
- </return>
- <argument index="0" name="base_script" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_type">
- <return type="void">
- </return>
- <argument index="0" name="base_type" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_basic_type">
- <return type="void">
- </return>
- <argument index="0" name="basic_type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_call_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="VisualScriptFunctionCall.CallMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_function">
- <return type="void">
- </return>
- <argument index="0" name="function" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_rpc_call_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="VisualScriptFunctionCall.RPCCallMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_singleton">
- <return type="void">
- </return>
- <argument index="0" name="singleton" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_use_default_args">
- <return type="void">
- </return>
- <argument index="0" name="amount" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_validate">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
- <member name="argument_cache" type="Dictionary" setter="_set_argument_cache" getter="_get_argument_cache">
- </member>
<member name="base_script" type="String" setter="set_base_script" getter="get_base_script">
</member>
<member name="base_type" type="String" setter="set_base_type" getter="get_base_type">
@@ -175,25 +33,25 @@
</member>
</members>
<constants>
- <constant name="CALL_MODE_SELF" value="0">
+ <constant name="CALL_MODE_SELF" value="0" enum="CallMode">
</constant>
- <constant name="CALL_MODE_NODE_PATH" value="1">
+ <constant name="CALL_MODE_NODE_PATH" value="1" enum="CallMode">
</constant>
- <constant name="CALL_MODE_INSTANCE" value="2">
+ <constant name="CALL_MODE_INSTANCE" value="2" enum="CallMode">
</constant>
- <constant name="CALL_MODE_BASIC_TYPE" value="3">
+ <constant name="CALL_MODE_BASIC_TYPE" value="3" enum="CallMode">
</constant>
- <constant name="CALL_MODE_SINGLETON" value="4">
+ <constant name="CALL_MODE_SINGLETON" value="4" enum="CallMode">
</constant>
- <constant name="RPC_DISABLED" value="0">
+ <constant name="RPC_DISABLED" value="0" enum="RPCCallMode">
</constant>
- <constant name="RPC_RELIABLE" value="1">
+ <constant name="RPC_RELIABLE" value="1" enum="RPCCallMode">
</constant>
- <constant name="RPC_UNRELIABLE" value="2">
+ <constant name="RPC_UNRELIABLE" value="2" enum="RPCCallMode">
</constant>
- <constant name="RPC_RELIABLE_TO_ID" value="3">
+ <constant name="RPC_RELIABLE_TO_ID" value="3" enum="RPCCallMode">
</constant>
- <constant name="RPC_UNRELIABLE_TO_ID" value="4">
+ <constant name="RPC_UNRELIABLE_TO_ID" value="4" enum="RPCCallMode">
</constant>
</constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptFunctionState.xml b/modules/visual_script/doc_classes/VisualScriptFunctionState.xml
index 9b30f62236..90ec85e4f4 100644
--- a/modules/visual_script/doc_classes/VisualScriptFunctionState.xml
+++ b/modules/visual_script/doc_classes/VisualScriptFunctionState.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptFunctionState" inherits="Reference" category="Core" version="3.0-alpha">
+<class name="VisualScriptFunctionState" inherits="Reference" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml b/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml
index 961244fe88..4417c8a533 100644
--- a/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptGlobalConstant" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptGlobalConstant" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,20 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_global_constant">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_global_constant">
- <return type="void">
- </return>
- <argument index="0" name="index" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="constant" type="int" setter="set_global_constant" getter="get_global_constant">
diff --git a/modules/visual_script/doc_classes/VisualScriptIndexGet.xml b/modules/visual_script/doc_classes/VisualScriptIndexGet.xml
index c5229f7678..c0a83f186a 100644
--- a/modules/visual_script/doc_classes/VisualScriptIndexGet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptIndexGet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptIndexGet" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptIndexGet" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptIndexSet.xml b/modules/visual_script/doc_classes/VisualScriptIndexSet.xml
index 27646b4a5f..8661341919 100644
--- a/modules/visual_script/doc_classes/VisualScriptIndexSet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptIndexSet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptIndexSet" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptIndexSet" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptInputAction.xml b/modules/visual_script/doc_classes/VisualScriptInputAction.xml
index 7f6d13264e..afe72ba564 100644
--- a/modules/visual_script/doc_classes/VisualScriptInputAction.xml
+++ b/modules/visual_script/doc_classes/VisualScriptInputAction.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptInputAction" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptInputAction" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,34 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_action_mode" qualifiers="const">
- <return type="int" enum="VisualScriptInputAction.Mode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_action_name" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_action_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="VisualScriptInputAction.Mode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_action_name">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="action" type="String" setter="set_action_name" getter="get_action_name">
@@ -45,13 +17,13 @@
</member>
</members>
<constants>
- <constant name="MODE_PRESSED" value="0">
+ <constant name="MODE_PRESSED" value="0" enum="Mode">
</constant>
- <constant name="MODE_RELEASED" value="1">
+ <constant name="MODE_RELEASED" value="1" enum="Mode">
</constant>
- <constant name="MODE_JUST_PRESSED" value="2">
+ <constant name="MODE_JUST_PRESSED" value="2" enum="Mode">
</constant>
- <constant name="MODE_JUST_RELEASED" value="3">
+ <constant name="MODE_JUST_RELEASED" value="3" enum="Mode">
</constant>
</constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptIterator.xml b/modules/visual_script/doc_classes/VisualScriptIterator.xml
index fc905d6c39..08dfad5acb 100644
--- a/modules/visual_script/doc_classes/VisualScriptIterator.xml
+++ b/modules/visual_script/doc_classes/VisualScriptIterator.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptIterator" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptIterator" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Steps through items in a given input.
</brief_description>
diff --git a/modules/visual_script/doc_classes/VisualScriptLocalVar.xml b/modules/visual_script/doc_classes/VisualScriptLocalVar.xml
index ff77dfac0d..a4293adaae 100644
--- a/modules/visual_script/doc_classes/VisualScriptLocalVar.xml
+++ b/modules/visual_script/doc_classes/VisualScriptLocalVar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptLocalVar" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptLocalVar" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Gets a local variable's value.
</brief_description>
@@ -15,34 +15,6 @@
<demos>
</demos>
<methods>
- <method name="get_var_name" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_var_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="set_var_name">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_var_type">
- <return type="void">
- </return>
- <argument index="0" name="type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="type" type="int" setter="set_var_type" getter="get_var_type" enum="Variant.Type">
diff --git a/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml b/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml
index 07b01d4576..c1a279bdb2 100644
--- a/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptLocalVarSet" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptLocalVarSet" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Changes a local variable's value.
</brief_description>
@@ -17,34 +17,6 @@
<demos>
</demos>
<methods>
- <method name="get_var_name" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_var_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="set_var_name">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_var_type">
- <return type="void">
- </return>
- <argument index="0" name="type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="type" type="int" setter="set_var_type" getter="get_var_type" enum="Variant.Type">
diff --git a/modules/visual_script/doc_classes/VisualScriptMathConstant.xml b/modules/visual_script/doc_classes/VisualScriptMathConstant.xml
index 817bcb5ce2..2cb053ee5f 100644
--- a/modules/visual_script/doc_classes/VisualScriptMathConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptMathConstant.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptMathConstant" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptMathConstant" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Commonly used mathematical constants.
</brief_description>
@@ -15,20 +15,6 @@
<demos>
</demos>
<methods>
- <method name="get_math_constant">
- <return type="int" enum="VisualScriptMathConstant.MathConstant">
- </return>
- <description>
- </description>
- </method>
- <method name="set_math_constant">
- <return type="void">
- </return>
- <argument index="0" name="which" type="int" enum="VisualScriptMathConstant.MathConstant">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="constant" type="int" setter="set_math_constant" getter="get_math_constant" enum="VisualScriptMathConstant.MathConstant">
@@ -36,31 +22,31 @@
</member>
</members>
<constants>
- <constant name="MATH_CONSTANT_ONE" value="0">
+ <constant name="MATH_CONSTANT_ONE" value="0" enum="MathConstant">
Unity: [code]1[/code]
</constant>
- <constant name="MATH_CONSTANT_PI" value="1">
+ <constant name="MATH_CONSTANT_PI" value="1" enum="MathConstant">
Pi: [code]3.141593[/code]
</constant>
- <constant name="MATH_CONSTANT_HALF_PI" value="2">
+ <constant name="MATH_CONSTANT_HALF_PI" value="2" enum="MathConstant">
Pi divided by two: [code]1.570796[/code]
</constant>
- <constant name="MATH_CONSTANT_TAU" value="3">
+ <constant name="MATH_CONSTANT_TAU" value="3" enum="MathConstant">
Tau: [code]6.283185[/code]
</constant>
- <constant name="MATH_CONSTANT_E" value="4">
+ <constant name="MATH_CONSTANT_E" value="4" enum="MathConstant">
Natural log: [code]2.718282[/code]
</constant>
- <constant name="MATH_CONSTANT_SQRT2" value="5">
+ <constant name="MATH_CONSTANT_SQRT2" value="5" enum="MathConstant">
Square root of two: [code]1.414214[/code]
</constant>
- <constant name="MATH_CONSTANT_INF" value="6">
+ <constant name="MATH_CONSTANT_INF" value="6" enum="MathConstant">
Infinity: [code]inf[/code]
</constant>
- <constant name="MATH_CONSTANT_NAN" value="7">
+ <constant name="MATH_CONSTANT_NAN" value="7" enum="MathConstant">
Not a number: [code]nan[/code]
</constant>
- <constant name="MATH_CONSTANT_MAX" value="8">
+ <constant name="MATH_CONSTANT_MAX" value="8" enum="MathConstant">
</constant>
</constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptNode.xml b/modules/visual_script/doc_classes/VisualScriptNode.xml
index f6f2867172..ef7cf7c3b8 100644
--- a/modules/visual_script/doc_classes/VisualScriptNode.xml
+++ b/modules/visual_script/doc_classes/VisualScriptNode.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptNode" inherits="Resource" category="Core" version="3.0-alpha">
+<class name="VisualScriptNode" inherits="Resource" category="Core" version="3.0-beta">
<brief_description>
A node which is part of a [VisualScript].
</brief_description>
@@ -46,10 +46,6 @@
</description>
</method>
</methods>
- <members>
- <member name="_default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values">
- </member>
- </members>
<signals>
<signal name="ports_changed">
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptOperator.xml b/modules/visual_script/doc_classes/VisualScriptOperator.xml
index bf4032c09c..b7819592d9 100644
--- a/modules/visual_script/doc_classes/VisualScriptOperator.xml
+++ b/modules/visual_script/doc_classes/VisualScriptOperator.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptOperator" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptOperator" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -14,34 +14,6 @@
<demos>
</demos>
<methods>
- <method name="get_operator" qualifiers="const">
- <return type="int" enum="Variant.Operator">
- </return>
- <description>
- </description>
- </method>
- <method name="get_typed" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="set_operator">
- <return type="void">
- </return>
- <argument index="0" name="op" type="int" enum="Variant.Operator">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_typed">
- <return type="void">
- </return>
- <argument index="0" name="type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="Variant.Operator">
diff --git a/modules/visual_script/doc_classes/VisualScriptPreload.xml b/modules/visual_script/doc_classes/VisualScriptPreload.xml
index 4a71e23809..712ec99fdb 100644
--- a/modules/visual_script/doc_classes/VisualScriptPreload.xml
+++ b/modules/visual_script/doc_classes/VisualScriptPreload.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptPreload" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptPreload" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Creates a new [Resource] or loads one from the filesystem.
</brief_description>
@@ -15,20 +15,6 @@
<demos>
</demos>
<methods>
- <method name="get_preload" qualifiers="const">
- <return type="Resource">
- </return>
- <description>
- </description>
- </method>
- <method name="set_preload">
- <return type="void">
- </return>
- <argument index="0" name="resource" type="Resource">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="resource" type="Resource" setter="set_preload" getter="get_preload">
diff --git a/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml b/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml
index eb5c52f4be..11c50f2b97 100644
--- a/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptPropertyGet" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptPropertyGet" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,104 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_base_path" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_script" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_type" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_basic_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="get_call_mode" qualifiers="const">
- <return type="int" enum="VisualScriptPropertyGet.CallMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_index" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_property" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_base_path">
- <return type="void">
- </return>
- <argument index="0" name="base_path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_script">
- <return type="void">
- </return>
- <argument index="0" name="base_script" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_type">
- <return type="void">
- </return>
- <argument index="0" name="base_type" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_basic_type">
- <return type="void">
- </return>
- <argument index="0" name="basic_type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_call_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="VisualScriptPropertyGet.CallMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_index">
- <return type="void">
- </return>
- <argument index="0" name="index" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_property">
- <return type="void">
- </return>
- <argument index="0" name="property" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="base_script" type="String" setter="set_base_script" getter="get_base_script">
@@ -123,15 +25,13 @@
</member>
<member name="set_mode" type="int" setter="set_call_mode" getter="get_call_mode" enum="VisualScriptPropertyGet.CallMode">
</member>
- <member name="type_cache" type="int" setter="_set_type_cache" getter="_get_type_cache" enum="Variant.Type">
- </member>
</members>
<constants>
- <constant name="CALL_MODE_SELF" value="0">
+ <constant name="CALL_MODE_SELF" value="0" enum="CallMode">
</constant>
- <constant name="CALL_MODE_NODE_PATH" value="1">
+ <constant name="CALL_MODE_NODE_PATH" value="1" enum="CallMode">
</constant>
- <constant name="CALL_MODE_INSTANCE" value="2">
+ <constant name="CALL_MODE_INSTANCE" value="2" enum="CallMode">
</constant>
</constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptPropertySet.xml b/modules/visual_script/doc_classes/VisualScriptPropertySet.xml
index 794caa2518..2e96ccc1f6 100644
--- a/modules/visual_script/doc_classes/VisualScriptPropertySet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptPropertySet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptPropertySet" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptPropertySet" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,118 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_assign_op" qualifiers="const">
- <return type="int" enum="VisualScriptPropertySet.AssignOp">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_path" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_script" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_type" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_basic_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="get_call_mode" qualifiers="const">
- <return type="int" enum="VisualScriptPropertySet.CallMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_index" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_property" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_assign_op">
- <return type="void">
- </return>
- <argument index="0" name="assign_op" type="int" enum="VisualScriptPropertySet.AssignOp">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_path">
- <return type="void">
- </return>
- <argument index="0" name="base_path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_script">
- <return type="void">
- </return>
- <argument index="0" name="base_script" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_type">
- <return type="void">
- </return>
- <argument index="0" name="base_type" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_basic_type">
- <return type="void">
- </return>
- <argument index="0" name="basic_type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_call_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="VisualScriptPropertySet.CallMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_index">
- <return type="void">
- </return>
- <argument index="0" name="index" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_property">
- <return type="void">
- </return>
- <argument index="0" name="property" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="assign_op" type="int" setter="set_assign_op" getter="get_assign_op" enum="VisualScriptPropertySet.AssignOp">
@@ -139,39 +27,37 @@
</member>
<member name="set_mode" type="int" setter="set_call_mode" getter="get_call_mode" enum="VisualScriptPropertySet.CallMode">
</member>
- <member name="type_cache" type="Dictionary" setter="_set_type_cache" getter="_get_type_cache">
- </member>
</members>
<constants>
- <constant name="CALL_MODE_SELF" value="0">
+ <constant name="CALL_MODE_SELF" value="0" enum="CallMode">
</constant>
- <constant name="CALL_MODE_NODE_PATH" value="1">
+ <constant name="CALL_MODE_NODE_PATH" value="1" enum="CallMode">
</constant>
- <constant name="CALL_MODE_INSTANCE" value="2">
+ <constant name="CALL_MODE_INSTANCE" value="2" enum="CallMode">
</constant>
- <constant name="CALL_MODE_BASIC_TYPE" value="3">
+ <constant name="CALL_MODE_BASIC_TYPE" value="3" enum="CallMode">
</constant>
- <constant name="ASSIGN_OP_NONE" value="0">
+ <constant name="ASSIGN_OP_NONE" value="0" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_ADD" value="1">
+ <constant name="ASSIGN_OP_ADD" value="1" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_SUB" value="2">
+ <constant name="ASSIGN_OP_SUB" value="2" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_MUL" value="3">
+ <constant name="ASSIGN_OP_MUL" value="3" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_DIV" value="4">
+ <constant name="ASSIGN_OP_DIV" value="4" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_MOD" value="5">
+ <constant name="ASSIGN_OP_MOD" value="5" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_SHIFT_LEFT" value="6">
+ <constant name="ASSIGN_OP_SHIFT_LEFT" value="6" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_SHIFT_RIGHT" value="7">
+ <constant name="ASSIGN_OP_SHIFT_RIGHT" value="7" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_BIT_AND" value="8">
+ <constant name="ASSIGN_OP_BIT_AND" value="8" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_BIT_OR" value="9">
+ <constant name="ASSIGN_OP_BIT_OR" value="9" enum="AssignOp">
</constant>
- <constant name="ASSIGN_OP_BIT_XOR" value="10">
+ <constant name="ASSIGN_OP_BIT_XOR" value="10" enum="AssignOp">
</constant>
</constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptResourcePath.xml b/modules/visual_script/doc_classes/VisualScriptResourcePath.xml
index 274a852c3e..36bcf2a460 100644
--- a/modules/visual_script/doc_classes/VisualScriptResourcePath.xml
+++ b/modules/visual_script/doc_classes/VisualScriptResourcePath.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptResourcePath" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptResourcePath" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,20 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_resource_path">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_resource_path">
- <return type="void">
- </return>
- <argument index="0" name="path" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="path" type="String" setter="set_resource_path" getter="get_resource_path">
diff --git a/modules/visual_script/doc_classes/VisualScriptReturn.xml b/modules/visual_script/doc_classes/VisualScriptReturn.xml
index 4ac586a02c..a05c1076a4 100644
--- a/modules/visual_script/doc_classes/VisualScriptReturn.xml
+++ b/modules/visual_script/doc_classes/VisualScriptReturn.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptReturn" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptReturn" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Exits a function and returns an optional value.
</brief_description>
@@ -16,34 +16,6 @@
<demos>
</demos>
<methods>
- <method name="get_return_type" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="is_return_value_enabled" qualifiers="const">
- <return type="bool">
- </return>
- <description>
- </description>
- </method>
- <method name="set_enable_return_value">
- <return type="void">
- </return>
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_return_type">
- <return type="void">
- </return>
- <argument index="0" name="type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="return_enabled" type="bool" setter="set_enable_return_value" getter="is_return_value_enabled">
diff --git a/modules/visual_script/doc_classes/VisualScriptSceneNode.xml b/modules/visual_script/doc_classes/VisualScriptSceneNode.xml
index e8fdb69c6a..1a73faaf67 100644
--- a/modules/visual_script/doc_classes/VisualScriptSceneNode.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSceneNode.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptSceneNode" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptSceneNode" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Node reference.
</brief_description>
@@ -15,20 +15,6 @@
<demos>
</demos>
<methods>
- <method name="get_node_path">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="set_node_path">
- <return type="void">
- </return>
- <argument index="0" name="path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="node_path" type="NodePath" setter="set_node_path" getter="get_node_path">
diff --git a/modules/visual_script/doc_classes/VisualScriptSceneTree.xml b/modules/visual_script/doc_classes/VisualScriptSceneTree.xml
index e74c330623..25ae9c26ac 100644
--- a/modules/visual_script/doc_classes/VisualScriptSceneTree.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSceneTree.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptSceneTree" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptSceneTree" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptSelect.xml b/modules/visual_script/doc_classes/VisualScriptSelect.xml
index 6a62e364f3..45ac505110 100644
--- a/modules/visual_script/doc_classes/VisualScriptSelect.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSelect.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptSelect" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptSelect" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Chooses between two input values.
</brief_description>
@@ -17,20 +17,6 @@
<demos>
</demos>
<methods>
- <method name="get_typed" qualifiers="const">
- <return type="int" enum="Variant.Type">
- </return>
- <description>
- </description>
- </method>
- <method name="set_typed">
- <return type="void">
- </return>
- <argument index="0" name="type" type="int" enum="Variant.Type">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="type" type="int" setter="set_typed" getter="get_typed" enum="Variant.Type">
diff --git a/modules/visual_script/doc_classes/VisualScriptSelf.xml b/modules/visual_script/doc_classes/VisualScriptSelf.xml
index f39a02bf84..2b0c46a4bb 100644
--- a/modules/visual_script/doc_classes/VisualScriptSelf.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSelf.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptSelf" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptSelf" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Outputs a reference to the current instance.
</brief_description>
diff --git a/modules/visual_script/doc_classes/VisualScriptSequence.xml b/modules/visual_script/doc_classes/VisualScriptSequence.xml
index 51238070d5..624663b0d3 100644
--- a/modules/visual_script/doc_classes/VisualScriptSequence.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSequence.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptSequence" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptSequence" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Executes a series of Sequence ports.
</brief_description>
@@ -17,20 +17,6 @@
<demos>
</demos>
<methods>
- <method name="get_steps" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="set_steps">
- <return type="void">
- </return>
- <argument index="0" name="steps" type="int">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="steps" type="int" setter="set_steps" getter="get_steps">
diff --git a/modules/visual_script/doc_classes/VisualScriptSubCall.xml b/modules/visual_script/doc_classes/VisualScriptSubCall.xml
index 381095f49b..b7dc5ad65f 100644
--- a/modules/visual_script/doc_classes/VisualScriptSubCall.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSubCall.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptSubCall" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptSubCall" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/visual_script/doc_classes/VisualScriptSwitch.xml b/modules/visual_script/doc_classes/VisualScriptSwitch.xml
index 3c8a79f686..a34754b596 100644
--- a/modules/visual_script/doc_classes/VisualScriptSwitch.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSwitch.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptSwitch" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptSwitch" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Branches program flow based on a given input's value.
</brief_description>
diff --git a/modules/visual_script/doc_classes/VisualScriptTypeCast.xml b/modules/visual_script/doc_classes/VisualScriptTypeCast.xml
index 417c0a5159..e61e81c397 100644
--- a/modules/visual_script/doc_classes/VisualScriptTypeCast.xml
+++ b/modules/visual_script/doc_classes/VisualScriptTypeCast.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptTypeCast" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptTypeCast" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,34 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_base_script" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_type" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_base_script">
- <return type="void">
- </return>
- <argument index="0" name="path" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_type">
- <return type="void">
- </return>
- <argument index="0" name="type" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="base_script" type="String" setter="set_base_script" getter="get_base_script">
diff --git a/modules/visual_script/doc_classes/VisualScriptVariableGet.xml b/modules/visual_script/doc_classes/VisualScriptVariableGet.xml
index 1cad4480a6..7122d2d3f6 100644
--- a/modules/visual_script/doc_classes/VisualScriptVariableGet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptVariableGet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptVariableGet" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptVariableGet" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Gets a variable's value.
</brief_description>
@@ -15,20 +15,6 @@
<demos>
</demos>
<methods>
- <method name="get_variable" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_variable">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="var_name" type="String" setter="set_variable" getter="get_variable">
diff --git a/modules/visual_script/doc_classes/VisualScriptVariableSet.xml b/modules/visual_script/doc_classes/VisualScriptVariableSet.xml
index fa3befa21d..3c39da0a8d 100644
--- a/modules/visual_script/doc_classes/VisualScriptVariableSet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptVariableSet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptVariableSet" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptVariableSet" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Changes a variable's value.
</brief_description>
@@ -16,20 +16,6 @@
<demos>
</demos>
<methods>
- <method name="get_variable" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_variable">
- <return type="void">
- </return>
- <argument index="0" name="name" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="var_name" type="String" setter="set_variable" getter="get_variable">
diff --git a/modules/visual_script/doc_classes/VisualScriptWhile.xml b/modules/visual_script/doc_classes/VisualScriptWhile.xml
index f948660997..d8e59a7576 100644
--- a/modules/visual_script/doc_classes/VisualScriptWhile.xml
+++ b/modules/visual_script/doc_classes/VisualScriptWhile.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptWhile" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptWhile" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
Conditional loop.
</brief_description>
diff --git a/modules/visual_script/doc_classes/VisualScriptYield.xml b/modules/visual_script/doc_classes/VisualScriptYield.xml
index 5474ee8b78..72ef586c1f 100644
--- a/modules/visual_script/doc_classes/VisualScriptYield.xml
+++ b/modules/visual_script/doc_classes/VisualScriptYield.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptYield" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptYield" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,26 +9,12 @@
<demos>
</demos>
<methods>
- <method name="get_wait_time">
- <return type="float">
- </return>
- <description>
- </description>
- </method>
<method name="get_yield_mode">
<return type="int" enum="VisualScriptYield.YieldMode">
</return>
<description>
</description>
</method>
- <method name="set_wait_time">
- <return type="void">
- </return>
- <argument index="0" name="sec" type="float">
- </argument>
- <description>
- </description>
- </method>
<method name="set_yield_mode">
<return type="void">
</return>
@@ -39,17 +25,15 @@
</method>
</methods>
<members>
- <member name="mode" type="int" setter="set_yield_mode" getter="get_yield_mode" enum="VisualScriptYield.YieldMode">
- </member>
<member name="wait_time" type="float" setter="set_wait_time" getter="get_wait_time">
</member>
</members>
<constants>
- <constant name="YIELD_FRAME" value="1">
+ <constant name="YIELD_FRAME" value="1" enum="YieldMode">
</constant>
- <constant name="YIELD_PHYSICS_FRAME" value="2">
+ <constant name="YIELD_PHYSICS_FRAME" value="2" enum="YieldMode">
</constant>
- <constant name="YIELD_WAIT" value="3">
+ <constant name="YIELD_WAIT" value="3" enum="YieldMode">
</constant>
</constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml b/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml
index a3b6982075..f69043a685 100644
--- a/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml
+++ b/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VisualScriptYieldSignal" inherits="VisualScriptNode" category="Core" version="3.0-alpha">
+<class name="VisualScriptYieldSignal" inherits="VisualScriptNode" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -9,62 +9,6 @@
<demos>
</demos>
<methods>
- <method name="get_base_path" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_type" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="get_call_mode" qualifiers="const">
- <return type="int" enum="VisualScriptYieldSignal.CallMode">
- </return>
- <description>
- </description>
- </method>
- <method name="get_signal" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_base_path">
- <return type="void">
- </return>
- <argument index="0" name="base_path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_type">
- <return type="void">
- </return>
- <argument index="0" name="base_type" type="String">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_call_mode">
- <return type="void">
- </return>
- <argument index="0" name="mode" type="int" enum="VisualScriptYieldSignal.CallMode">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_signal">
- <return type="void">
- </return>
- <argument index="0" name="signal" type="String">
- </argument>
- <description>
- </description>
- </method>
</methods>
<members>
<member name="base_type" type="String" setter="set_base_type" getter="get_base_type">
@@ -77,11 +21,11 @@
</member>
</members>
<constants>
- <constant name="CALL_MODE_SELF" value="0">
+ <constant name="CALL_MODE_SELF" value="0" enum="CallMode">
</constant>
- <constant name="CALL_MODE_NODE_PATH" value="1">
+ <constant name="CALL_MODE_NODE_PATH" value="1" enum="CallMode">
</constant>
- <constant name="CALL_MODE_INSTANCE" value="2">
+ <constant name="CALL_MODE_INSTANCE" value="2" enum="CallMode">
</constant>
</constants>
</class>
diff --git a/modules/visual_script/register_types.cpp b/modules/visual_script/register_types.cpp
index b6ce10381d..ecdca7eb42 100644
--- a/modules/visual_script/register_types.cpp
+++ b/modules/visual_script/register_types.cpp
@@ -53,7 +53,7 @@ void register_visual_script_types() {
ClassDB::register_class<VisualScript>();
ClassDB::register_virtual_class<VisualScriptNode>();
- ClassDB::register_virtual_class<VisualScriptFunctionState>();
+ ClassDB::register_class<VisualScriptFunctionState>();
ClassDB::register_class<VisualScriptFunction>();
ClassDB::register_class<VisualScriptOperator>();
ClassDB::register_class<VisualScriptVariableSet>();
diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp
index 0834bc81d9..53d93798d9 100644
--- a/modules/visual_script/visual_script.cpp
+++ b/modules/visual_script/visual_script.cpp
@@ -1434,7 +1434,7 @@ void VisualScriptInstance::_dependency_step(VisualScriptNodeInstance *node, int
if (!node->dependencies.empty()) {
int dc = node->dependencies.size();
- VisualScriptNodeInstance **deps = node->dependencies.ptr();
+ VisualScriptNodeInstance **deps = node->dependencies.ptrw();
for (int i = 0; i < dc; i++) {
@@ -1526,7 +1526,7 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p
if (!node->dependencies.empty()) {
int dc = node->dependencies.size();
- VisualScriptNodeInstance **deps = node->dependencies.ptr();
+ VisualScriptNodeInstance **deps = node->dependencies.ptrw();
for (int i = 0; i < dc; i++) {
@@ -1626,7 +1626,7 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p
state->flow_stack_pos = flow_stack_pos;
state->stack.resize(p_stack_size);
state->pass = p_pass;
- copymem(state->stack.ptr(), p_stack, p_stack_size);
+ copymem(state->stack.ptrw(), p_stack, p_stack_size);
//step 2, run away, return directly
r_error.error = Variant::CallError::CALL_OK;
@@ -2047,6 +2047,7 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o
function.argument_count = func_node->get_argument_count();
function.max_stack += function.argument_count;
function.flow_stack_size = func_node->is_stack_less() ? 0 : func_node->get_stack_size();
+ max_input_args = MAX(max_input_args, function.argument_count);
}
//multiple passes are required to set up this complex thing..
@@ -2277,7 +2278,7 @@ Variant VisualScriptFunctionState::_signal_callback(const Variant **p_args, int
*working_mem = args; //arguments go to working mem.
- Variant ret = instance->_call_internal(function, stack.ptr(), stack.size(), node, flow_stack_pos, pass, true, r_error);
+ Variant ret = instance->_call_internal(function, stack.ptrw(), stack.size(), node, flow_stack_pos, pass, true, r_error);
function = StringName(); //invalidate
return ret;
}
@@ -2289,7 +2290,7 @@ void VisualScriptFunctionState::connect_to_signal(Object *p_obj, const String &p
binds.push_back(p_binds[i]);
}
binds.push_back(Ref<VisualScriptFunctionState>(this)); //add myself on the back to avoid dying from unreferencing
- p_obj->connect(p_signal, this, "_signal_callback", binds);
+ p_obj->connect(p_signal, this, "_signal_callback", binds, CONNECT_ONESHOT);
}
bool VisualScriptFunctionState::is_valid() const {
@@ -2319,7 +2320,7 @@ Variant VisualScriptFunctionState::resume(Array p_args) {
*working_mem = p_args; //arguments go to working mem.
- Variant ret = instance->_call_internal(function, stack.ptr(), stack.size(), node, flow_stack_pos, pass, true, r_error);
+ Variant ret = instance->_call_internal(function, stack.ptrw(), stack.size(), node, flow_stack_pos, pass, true, r_error);
function = StringName(); //invalidate
return ret;
}
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp
index 83b8d8da2d..6c58de8a5a 100644
--- a/modules/visual_script/visual_script_editor.cpp
+++ b/modules/visual_script/visual_script_editor.cpp
@@ -1389,7 +1389,7 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2 &p_point, const Variant &
if (String(d["type"]) == "obj_property") {
#ifdef OSX_ENABLED
- const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Meta to drop a Getter. Hold Shift to drop a generic signature."));
+ const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a Getter. Hold Shift to drop a generic signature."), find_keycode_name(KEY_META)));
#else
const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."));
#endif
@@ -1398,7 +1398,7 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2 &p_point, const Variant &
if (String(d["type"]) == "nodes") {
#ifdef OSX_ENABLED
- const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Meta to drop a simple reference to the node."));
+ const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a simple reference to the node."), find_keycode_name(KEY_META)));
#else
const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Ctrl to drop a simple reference to the node."));
#endif
@@ -1407,7 +1407,7 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2 &p_point, const Variant &
if (String(d["type"]) == "visual_script_variable_drag") {
#ifdef OSX_ENABLED
- const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Meta to drop a Variable Setter."));
+ const_cast<VisualScriptEditor *>(this)->_show_hint(vformat(TTR("Hold %s to drop a Variable Setter."), find_keycode_name(KEY_META)));
#else
const_cast<VisualScriptEditor *>(this)->_show_hint(TTR("Hold Ctrl to drop a Variable Setter."));
#endif
@@ -2466,7 +2466,7 @@ VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_port_ac
in_guesses.push_back(g);
}
- return node->guess_output_type(in_guesses.ptr(), p_port_action_output);
+ return node->guess_output_type(in_guesses.ptrw(), p_port_action_output);
}
void VisualScriptEditor::_port_action_menu(int p_option) {
diff --git a/modules/visual_script/visual_script_expression.cpp b/modules/visual_script/visual_script_expression.cpp
index 07dca4b904..ba58a8e1c0 100644
--- a/modules/visual_script/visual_script_expression.cpp
+++ b/modules/visual_script/visual_script_expression.cpp
@@ -1378,7 +1378,7 @@ public:
argp[i] = &arr[i];
}
- r_ret = Variant::construct(constructor->data_type, argp.ptr(), argp.size(), ce);
+ r_ret = Variant::construct(constructor->data_type, (const Variant **)argp.ptr(), argp.size(), ce);
if (ce.error != Variant::CallError::CALL_OK) {
r_error_str = "Invalid arguments to construct '" + Variant::get_type_name(constructor->data_type) + "'.";
@@ -1405,7 +1405,7 @@ public:
argp[i] = &arr[i];
}
- VisualScriptBuiltinFunc::exec_func(bifunc->func, argp.ptr(), &r_ret, ce, r_error_str);
+ VisualScriptBuiltinFunc::exec_func(bifunc->func, (const Variant **)argp.ptr(), &r_ret, ce, r_error_str);
if (ce.error != Variant::CallError::CALL_OK) {
r_error_str = "Builtin Call Failed. " + r_error_str;
@@ -1437,7 +1437,7 @@ public:
argp[i] = &arr[i];
}
- r_ret = base.call(call->method, argp.ptr(), argp.size(), ce);
+ r_ret = base.call(call->method, (const Variant **)argp.ptr(), argp.size(), ce);
if (ce.error != Variant::CallError::CALL_OK) {
r_error_str = "On call to '" + String(call->method) + "':";
diff --git a/modules/visual_script/visual_script_flow_control.cpp b/modules/visual_script/visual_script_flow_control.cpp
index 59d9540239..a38266acc0 100644
--- a/modules/visual_script/visual_script_flow_control.cpp
+++ b/modules/visual_script/visual_script_flow_control.cpp
@@ -731,9 +731,9 @@ void VisualScriptSwitch::_bind_methods() {
VisualScriptSwitch::VisualScriptSwitch() {
}
-//////////////////////////////////////////
-////////////////EVENT ACTION FILTER///////////
-//////////////////////////////////////////
+ //////////////////////////////////////////
+ ////////////////EVENT ACTION FILTER///////////
+ //////////////////////////////////////////
#if 0
int VisualScriptInputFilter::get_output_sequence_port_count() const {
diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp
index 05ff629d1b..5f98951bec 100644
--- a/modules/visual_script/visual_script_nodes.cpp
+++ b/modules/visual_script/visual_script_nodes.cpp
@@ -390,7 +390,7 @@ PropertyInfo VisualScriptOperator::get_input_value_port_info(int p_idx) const {
{ Variant::NIL, Variant::NIL }, //OP_GREATER_EQUAL,
//mathematic
{ Variant::NIL, Variant::NIL }, //OP_ADD,
- { Variant::NIL, Variant::NIL }, //OP_SUBSTRACT,
+ { Variant::NIL, Variant::NIL }, //OP_SUBTRACT,
{ Variant::NIL, Variant::NIL }, //OP_MULTIPLY,
{ Variant::NIL, Variant::NIL }, //OP_DIVIDE,
{ Variant::NIL, Variant::NIL }, //OP_NEGATE,
@@ -433,7 +433,7 @@ PropertyInfo VisualScriptOperator::get_output_value_port_info(int p_idx) const {
Variant::BOOL, //OP_GREATER_EQUAL,
//mathematic
Variant::NIL, //OP_ADD,
- Variant::NIL, //OP_SUBSTRACT,
+ Variant::NIL, //OP_SUBTRACT,
Variant::NIL, //OP_MULTIPLY,
Variant::NIL, //OP_DIVIDE,
Variant::NIL, //OP_NEGATE,
@@ -474,7 +474,7 @@ static const char *op_names[] = {
"GreaterEq", //OP_GREATER_EQUAL,
//mathematic
"Add", //OP_ADD,
- "Subtract", //OP_SUBSTRACT,
+ "Subtract", //OP_SUBTRACT,
"Multiply", //OP_MULTIPLY,
"Divide", //OP_DIVIDE,
"Negate", //OP_NEGATE,
@@ -514,7 +514,7 @@ String VisualScriptOperator::get_text() const {
L"A \u2265 B", //OP_GREATER_EQUAL,
//mathematic
L"A + B", //OP_ADD,
- L"A - B", //OP_SUBSTRACT,
+ L"A - B", //OP_SUBTRACT,
L"A x B", //OP_MULTIPLY,
L"A \u00F7 B", //OP_DIVIDE,
L"\u00AC A", //OP_NEGATE,
@@ -1064,9 +1064,9 @@ void VisualScriptConstant::set_constant_type(Variant::Type p_type) {
return;
type = p_type;
- ports_changed_notify();
Variant::CallError ce;
value = Variant::construct(type, NULL, 0, ce);
+ ports_changed_notify();
_change_notify();
}
@@ -1111,7 +1111,7 @@ void VisualScriptConstant::_bind_methods() {
}
ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, argt), "set_constant_type", "get_constant_type");
- ADD_PROPERTY(PropertyInfo(Variant::NIL, "value", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT), "set_constant_value", "get_constant_value");
+ ADD_PROPERTY(PropertyInfo(Variant::NIL, "value", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT | PROPERTY_USAGE_DEFAULT), "set_constant_value", "get_constant_value");
}
class VisualScriptNodeInstanceConstant : public VisualScriptNodeInstance {
diff --git a/modules/vorbis/audio_stream_ogg_vorbis.cpp b/modules/vorbis/audio_stream_ogg_vorbis.cpp
index 9fb6fa8197..03c0bfb1c2 100644
--- a/modules/vorbis/audio_stream_ogg_vorbis.cpp
+++ b/modules/vorbis/audio_stream_ogg_vorbis.cpp
@@ -64,7 +64,7 @@ int AudioStreamPlaybackOGGVorbis::_ov_seek_func(void *_f, ogg_int64_t offs, int
fa->seek_end(offs);
} else {
- ERR_PRINT("BUG, wtf was whence set to?\n");
+ ERR_PRINT("Vorbis seek function failure: Unexpected value in _whence\n");
}
int ret = fa->eof_reached() ? -1 : 0;
//printf("returning %i\n",ret);
diff --git a/modules/webm/doc_classes/ResourceImporterWebm.xml b/modules/webm/doc_classes/ResourceImporterWebm.xml
index dcba351e37..5dadb83b07 100644
--- a/modules/webm/doc_classes/ResourceImporterWebm.xml
+++ b/modules/webm/doc_classes/ResourceImporterWebm.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="ResourceImporterWebm" inherits="ResourceImporter" category="Core" version="3.0-alpha">
+<class name="ResourceImporterWebm" inherits="ResourceImporter" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
diff --git a/modules/webm/doc_classes/VideoStreamWebm.xml b/modules/webm/doc_classes/VideoStreamWebm.xml
index 9a430f6b0d..6e8120b1de 100644
--- a/modules/webm/doc_classes/VideoStreamWebm.xml
+++ b/modules/webm/doc_classes/VideoStreamWebm.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<class name="VideoStreamWebm" inherits="VideoStream" category="Core" version="3.0-alpha">
+<class name="VideoStreamWebm" inherits="VideoStream" category="Core" version="3.0-beta">
<brief_description>
</brief_description>
<description>
@@ -24,10 +24,6 @@
</description>
</method>
</methods>
- <members>
- <member name="file" type="String" setter="set_file" getter="get_file">
- </member>
- </members>
<constants>
</constants>
</class>
diff --git a/modules/webm/video_stream_webm.cpp b/modules/webm/video_stream_webm.cpp
index 0fc9df5b58..b055ccf5aa 100644
--- a/modules/webm/video_stream_webm.cpp
+++ b/modules/webm/video_stream_webm.cpp
@@ -92,21 +92,27 @@ private:
/**/
-VideoStreamPlaybackWebm::VideoStreamPlaybackWebm()
- : audio_track(0),
- webm(NULL),
- video(NULL),
- audio(NULL),
- video_frames(NULL), audio_frame(NULL),
- video_frames_pos(0), video_frames_capacity(0),
- num_decoded_samples(0), samples_offset(-1),
- mix_callback(NULL),
- mix_udata(NULL),
- playing(false), paused(false),
- delay_compensation(0.0),
- time(0.0), video_frame_delay(0.0), video_pos(0.0),
- texture(memnew(ImageTexture)),
- pcm(NULL) {}
+VideoStreamPlaybackWebm::VideoStreamPlaybackWebm() :
+ audio_track(0),
+ webm(NULL),
+ video(NULL),
+ audio(NULL),
+ video_frames(NULL),
+ audio_frame(NULL),
+ video_frames_pos(0),
+ video_frames_capacity(0),
+ num_decoded_samples(0),
+ samples_offset(-1),
+ mix_callback(NULL),
+ mix_udata(NULL),
+ playing(false),
+ paused(false),
+ delay_compensation(0.0),
+ time(0.0),
+ video_frame_delay(0.0),
+ video_pos(0.0),
+ texture(memnew(ImageTexture)),
+ pcm(NULL) {}
VideoStreamPlaybackWebm::~VideoStreamPlaybackWebm() {
delete_pointers();
@@ -403,8 +409,8 @@ void VideoStreamPlaybackWebm::delete_pointers() {
/**/
-VideoStreamWebm::VideoStreamWebm()
- : audio_track(0) {}
+VideoStreamWebm::VideoStreamWebm() :
+ audio_track(0) {}
Ref<VideoStreamPlayback> VideoStreamWebm::instance_playback() {
diff --git a/platform/SCsub b/platform/SCsub
index 4ef23ab053..e624f8e90f 100644
--- a/platform/SCsub
+++ b/platform/SCsub
@@ -25,6 +25,7 @@ f.write(unreg_apis)
f.close()
platform_sources.append('register_platform_apis.gen.cpp')
-env.Prepend(LIBS=env.Library('platform', platform_sources))
+lib = env.add_library('platform', platform_sources)
+env.Prepend(LIBS=lib)
Export('env')
diff --git a/platform/android/SCsub b/platform/android/SCsub
index 7fa0262359..0cd91276ef 100644
--- a/platform/android/SCsub
+++ b/platform/android/SCsub
@@ -144,8 +144,7 @@ manifest = manifest.replace("$$ADD_APPATTRIBUTE_CHUNKS$$", env.android_appattrib
pp_baseout.write(manifest)
-env_android.SharedLibrary("#bin/libgodot", [android_objects], SHLIBSUFFIX=env["SHLIBSUFFIX"])
-
+lib = env_android.add_shared_library("#bin/libgodot", [android_objects], SHLIBSUFFIX=env["SHLIBSUFFIX"])
lib_arch_dir = ''
if env['android_arch'] == 'armv6':
diff --git a/platform/android/build.gradle.template b/platform/android/build.gradle.template
index 11c49fbb50..4a44d1c5f9 100644
--- a/platform/android/build.gradle.template
+++ b/platform/android/build.gradle.template
@@ -31,7 +31,7 @@ android {
disable 'MissingTranslation'
}
- compileSdkVersion 24
+ compileSdkVersion 26
buildToolsVersion "26.0.1"
useLibrary 'org.apache.http.legacy'
diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp
index e1ff12c5ac..255413bf2c 100644
--- a/platform/android/export/export.cpp
+++ b/platform/android/export/export.cpp
@@ -192,6 +192,19 @@ static const char *android_perms[] = {
NULL
};
+struct LauncherIcon {
+ char *option_id;
+ char *export_path;
+};
+
+static const LauncherIcon launcher_icons[] = {
+ { "launcher_icons/xxxhdpi_192x192", "res/drawable-xxxhdpi-v4/icon.png" },
+ { "launcher_icons/xxhdpi_144x144", "res/drawable-xxhdpi-v4/icon.png" },
+ { "launcher_icons/xhdpi_96x96", "res/drawable-xhdpi-v4/icon.png" },
+ { "launcher_icons/hdpi_72x72", "res/drawable-hdpi-v4/icon.png" },
+ { "launcher_icons/mdpi_48x48", "res/drawable-mdpi-v4/icon.png" }
+};
+
class EditorExportAndroid : public EditorExportPlatform {
GDCLASS(EditorExportAndroid, EditorExportPlatform)
@@ -467,52 +480,72 @@ class EditorExportAndroid : public EditorExportPlatform {
return zipfi;
}
- static Set<String> get_abis() {
- Set<String> abis;
- abis.insert("armeabi");
- abis.insert("armeabi-v7a");
- abis.insert("arm64-v8a");
- abis.insert("x86");
- abis.insert("x86_64");
- abis.insert("mips");
- abis.insert("mips64");
+ static Vector<String> get_abis() {
+ // mips and armv6 are dead (especially for games), so not including them
+ Vector<String> abis;
+ abis.push_back("armeabi-v7a");
+ abis.push_back("arm64-v8a");
+ abis.push_back("x86");
+ abis.push_back("x86_64");
return abis;
}
- static Error save_apk_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total) {
- APKExportData *ed = (APKExportData *)p_userdata;
- String dst_path = p_path;
- static Set<String> android_abis = get_abis();
-
- if (dst_path.ends_with(".so")) {
- String abi = dst_path.get_base_dir().get_file().strip_edges(); // parent dir name
- if (android_abis.has(abi)) {
- dst_path = "lib/" + abi + "/" + dst_path.get_file();
- } else {
- String err = "Dynamic libraries must be located in the folder named after Android ABI they were compiled for. " +
- p_path + " does not follow this convention.";
- ERR_PRINT(err.utf8().get_data());
- return ERR_FILE_BAD_PATH;
- }
- } else {
- dst_path = dst_path.replace_first("res://", "assets/");
- }
-
+ static Error store_in_apk(APKExportData *ed, const String &p_path, const Vector<uint8_t> &p_data, int compression_method = Z_DEFLATED) {
zip_fileinfo zipfi = get_zip_fileinfo();
-
zipOpenNewFileInZip(ed->apk,
- dst_path.utf8().get_data(),
+ p_path.utf8().get_data(),
&zipfi,
NULL,
0,
NULL,
0,
NULL,
- _should_compress_asset(p_path, p_data) ? Z_DEFLATED : 0,
+ compression_method,
Z_DEFAULT_COMPRESSION);
zipWriteInFileInZip(ed->apk, p_data.ptr(), p_data.size());
zipCloseFileInZip(ed->apk);
+
+ return OK;
+ }
+
+ static Error save_apk_so(void *p_userdata, const SharedObject &p_so) {
+ if (!p_so.path.get_file().begins_with("lib")) {
+ String err = "Android .so file names must start with \"lib\", but got: " + p_so.path;
+ ERR_PRINT(err.utf8().get_data());
+ return FAILED;
+ }
+ APKExportData *ed = (APKExportData *)p_userdata;
+ Vector<String> abis = get_abis();
+ bool exported = false;
+ for (int i = 0; i < p_so.tags.size(); ++i) {
+ // shared objects can be fat (compatible with multiple ABIs)
+ int start_pos = 0;
+ int abi_index = abis.find(p_so.tags[i]);
+ if (abi_index != -1) {
+ exported = true;
+ start_pos = abi_index + 1;
+ String abi = abis[abi_index];
+ String dst_path = "lib/" + abi + "/" + p_so.path.get_file();
+ Vector<uint8_t> array = FileAccess::get_file_as_array(p_so.path);
+ Error store_err = store_in_apk(ed, dst_path, array);
+ ERR_FAIL_COND_V(store_err, store_err);
+ }
+ }
+ if (!exported) {
+ String abis_string = String(" ").join(abis);
+ String err = "Cannot determine ABI for library \"" + p_so.path + "\". One of the supported ABIs must be used as a tag: " + abis_string;
+ ERR_PRINT(err.utf8().get_data());
+ return FAILED;
+ }
+ return OK;
+ }
+
+ static Error save_apk_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total) {
+ APKExportData *ed = (APKExportData *)p_userdata;
+ String dst_path = p_path.replace_first("res://", "assets/");
+
+ store_in_apk(ed, dst_path, p_data, _should_compress_asset(p_path, p_data) ? Z_DEFLATED : 0);
ed->ep->step("File: " + p_path, 3 + p_file * 100 / p_total);
return OK;
}
@@ -935,6 +968,18 @@ class EditorExportAndroid : public EditorExportPlatform {
//printf("end\n");
}
+ static Vector<String> get_enabled_abis(const Ref<EditorExportPreset> &p_preset) {
+ Vector<String> abis = get_abis();
+ Vector<String> enabled_abis;
+ for (int i = 0; i < abis.size(); ++i) {
+ bool is_enabled = p_preset->get("architectures/" + abis[i]);
+ if (is_enabled) {
+ enabled_abis.push_back(abis[i]);
+ }
+ }
+ return enabled_abis;
+ }
+
public:
enum {
MAX_USER_PERMISSIONS = 20
@@ -951,6 +996,11 @@ public:
r_features->push_back("etc");
else*/
r_features->push_back("etc2");
+
+ Vector<String> abis = get_enabled_abis(p_preset);
+ for (int i = 0; i < abis.size(); ++i) {
+ r_features->push_back(abis[i]);
+ }
}
virtual void get_export_options(List<ExportOption> *r_options) {
@@ -965,16 +1015,18 @@ public:
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "version/name"), "1.0"));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/unique_name"), "org.godotengine.$genname"));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/name"), ""));
- r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/icon", PROPERTY_HINT_FILE, "png"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "package/signed"), true));
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "architecture/arm"), true));
- r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "architecture/x86"), false));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/immersive_mode"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "screen/orientation", PROPERTY_HINT_ENUM, "Landscape,Portrait"), 0));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_small"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_normal"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_large"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_xlarge"), true));
+
+ for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_icons[i].option_id, PROPERTY_HINT_FILE, "png"), ""));
+ }
+
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release", PROPERTY_HINT_GLOBAL_FILE, "keystore"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release_user"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release_password"), ""));
@@ -982,6 +1034,13 @@ public:
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "apk_expansion/SALT"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "apk_expansion/public_key", PROPERTY_HINT_MULTILINE_TEXT), ""));
+ Vector<String> abis = get_abis();
+ for (int i = 0; i < abis.size(); ++i) {
+ String abi = abis[i];
+ bool is_default = (abi == "armeabi-v7a");
+ r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "architectures/" + abi), is_default));
+ }
+
const char **perms = android_perms;
while (*perms) {
@@ -1295,10 +1354,6 @@ public:
String unaligned_path = EditorSettings::get_singleton()->get_cache_dir().plus_file("tmpexport-unaligned.apk");
zipFile unaligned_apk = zipOpen2(unaligned_path.utf8().get_data(), APPEND_STATUS_CREATE, NULL, &io2);
- bool export_x86 = p_preset->get("architecture/x86");
- bool export_arm = p_preset->get("architecture/arm");
- bool export_arm64 = p_preset->get("architecture/arm64");
-
bool use_32_fb = p_preset->get("graphics/32_bits_framebuffer");
bool immersive = p_preset->get("screen/immersive_mode");
@@ -1318,6 +1373,8 @@ public:
String release_username = p_preset->get("keystore/release_user");
String release_password = p_preset->get("keystore/release_password");
+ Vector<String> enabled_abis = get_enabled_abis(p_preset);
+
while (ret == UNZ_OK) {
//get filename
@@ -1334,7 +1391,7 @@ public:
//read
unzOpenCurrentFile(pkg);
- unzReadCurrentFile(pkg, data.ptr(), data.size());
+ unzReadCurrentFile(pkg, data.ptrw(), data.size());
unzCloseCurrentFile(pkg);
//write
@@ -1350,23 +1407,20 @@ public:
}
if (file == "res/drawable/icon.png") {
-
- String icon = p_preset->get("package/icon");
- icon = icon.strip_edges();
bool found = false;
-
- if (icon != "" && icon.ends_with(".png")) {
-
- FileAccess *f = FileAccess::open(icon, FileAccess::READ);
- if (f) {
-
- data.resize(f->get_len());
- f->get_buffer(data.ptr(), data.size());
- memdelete(f);
- found = true;
+ for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
+ String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges();
+ if (icon_path != "" && icon_path.ends_with(".png")) {
+ FileAccess *f = FileAccess::open(icon_path, FileAccess::READ);
+ if (f) {
+ data.resize(f->get_len());
+ f->get_buffer(data.ptrw(), data.size());
+ memdelete(f);
+ found = true;
+ break;
+ }
}
}
-
if (!found) {
String appicon = ProjectSettings::get_singleton()->get("application/config/icon");
@@ -1374,32 +1428,32 @@ public:
FileAccess *f = FileAccess::open(appicon, FileAccess::READ);
if (f) {
data.resize(f->get_len());
- f->get_buffer(data.ptr(), data.size());
+ f->get_buffer(data.ptrw(), data.size());
memdelete(f);
}
}
}
}
- if (file == "lib/x86/*.so" && !export_x86) {
- skip = true;
- }
-
- if (file.match("lib/armeabi*/*.so") && !export_arm) {
- skip = true;
- }
-
- if (file.match("lib/arm64*/*.so") && !export_arm64) {
- skip = true;
+ if (file.ends_with(".so")) {
+ bool enabled = false;
+ for (int i = 0; i < enabled_abis.size(); ++i) {
+ if (file.begins_with("lib/" + enabled_abis[i] + "/")) {
+ enabled = true;
+ break;
+ }
+ }
+ if (!enabled) {
+ skip = true;
+ }
}
if (file.begins_with("META-INF") && _signed) {
skip = true;
}
- print_line("ADDING: " + file);
-
if (!skip) {
+ print_line("ADDING: " + file);
// Respect decision on compression made by AAPT for the export template
const bool uncompressed = info.compression_method == 0;
@@ -1473,7 +1527,20 @@ public:
ed.ep = &ep;
ed.apk = unaligned_apk;
- err = export_project_files(p_preset, save_apk_file, &ed);
+ err = export_project_files(p_preset, save_apk_file, &ed, save_apk_so);
+ }
+
+ if (!err) {
+ APKExportData ed;
+ ed.ep = &ep;
+ ed.apk = unaligned_apk;
+ for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
+ String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges();
+ if (icon_path != "" && icon_path.ends_with(".png") && FileAccess::exists(icon_path)) {
+ Vector<uint8_t> data = FileAccess::get_file_as_array(icon_path);
+ store_in_apk(&ed, launcher_icons[i].export_path, data);
+ }
+ }
}
}
@@ -1490,12 +1557,15 @@ public:
encode_uint32(cl.size(), &clf[0]);
for (int i = 0; i < cl.size(); i++) {
+ print_line(itos(i) + " param: " + cl[i]);
CharString txt = cl[i].utf8();
int base = clf.size();
- clf.resize(base + 4 + txt.length());
- encode_uint32(txt.length(), &clf[base]);
- copymem(&clf[base + 4], txt.ptr(), txt.length());
- print_line(itos(i) + " param: " + cl[i]);
+ int length = txt.length();
+ if (!length)
+ continue;
+ clf.resize(base + 4 + length);
+ encode_uint32(length, &clf[base]);
+ copymem(&clf[base + 4], txt.ptr(), length);
}
zip_fileinfo zipfi = get_zip_fileinfo();
@@ -1636,7 +1706,7 @@ public:
int method, level;
unzOpenCurrentFile2(tmp_unaligned, &method, &level, 1); // raw read
long file_offset = unzGetCurrentFileZStreamPos64(tmp_unaligned);
- unzReadCurrentFile(tmp_unaligned, data.ptr(), data.size());
+ unzReadCurrentFile(tmp_unaligned, data.ptrw(), data.size());
unzCloseCurrentFile(tmp_unaligned);
// align
diff --git a/platform/android/java/src/org/godotengine/godot/Dictionary.java b/platform/android/java/src/org/godotengine/godot/Dictionary.java
index ed91fedd85..2bc9c083aa 100644
--- a/platform/android/java/src/org/godotengine/godot/Dictionary.java
+++ b/platform/android/java/src/org/godotengine/godot/Dictionary.java
@@ -32,7 +32,6 @@ package org.godotengine.godot;
import java.util.HashMap;
import java.util.Set;
-
public class Dictionary extends HashMap<String, Object> {
protected String[] keys_cache;
@@ -40,7 +39,7 @@ public class Dictionary extends HashMap<String, Object> {
public String[] get_keys() {
String[] ret = new String[size()];
- int i=0;
+ int i = 0;
Set<String> keys = keySet();
for (String key : keys) {
@@ -54,7 +53,7 @@ public class Dictionary extends HashMap<String, Object> {
public Object[] get_values() {
Object[] ret = new Object[size()];
- int i=0;
+ int i = 0;
Set<String> keys = keySet();
for (String key : keys) {
@@ -71,7 +70,7 @@ public class Dictionary extends HashMap<String, Object> {
public void set_values(Object[] vals) {
- int i=0;
+ int i = 0;
for (String key : keys_cache) {
put(key, vals[i]);
i++;
diff --git a/platform/android/java/src/org/godotengine/godot/Godot.java b/platform/android/java/src/org/godotengine/godot/Godot.java
index 41dcba5c2c..3939ceb2e7 100644
--- a/platform/android/java/src/org/godotengine/godot/Godot.java
+++ b/platform/android/java/src/org/godotengine/godot/Godot.java
@@ -90,35 +90,34 @@ import android.os.Bundle;
import android.os.Messenger;
import android.os.SystemClock;
-
-public class Godot extends Activity implements SensorEventListener, IDownloaderClient
-{
+public class Godot extends Activity implements SensorEventListener, IDownloaderClient {
static final int MAX_SINGLETONS = 64;
private IStub mDownloaderClientStub;
- private IDownloaderService mRemoteService;
- private TextView mStatusText;
- private TextView mProgressFraction;
- private TextView mProgressPercent;
- private TextView mAverageSpeed;
- private TextView mTimeRemaining;
- private ProgressBar mPB;
-
- private View mDashboard;
- private View mCellMessage;
-
- private Button mPauseButton;
- private Button mWiFiSettingsButton;
-
- private boolean use_32_bits=false;
- private boolean use_immersive=false;
- private boolean mStatePaused;
- private int mState;
- private boolean keep_screen_on=true;
+ private IDownloaderService mRemoteService;
+ private TextView mStatusText;
+ private TextView mProgressFraction;
+ private TextView mProgressPercent;
+ private TextView mAverageSpeed;
+ private TextView mTimeRemaining;
+ private ProgressBar mPB;
+
+ private View mDashboard;
+ private View mCellMessage;
+
+ private Button mPauseButton;
+ private Button mWiFiSettingsButton;
+
+ private boolean use_32_bits = false;
+ private boolean use_immersive = false;
+ private boolean mStatePaused;
+ private int mState;
+ private boolean keep_screen_on = true;
static private Intent mCurrentIntent;
- @Override public void onNewIntent(Intent intent) {
+ @Override
+ public void onNewIntent(Intent intent) {
mCurrentIntent = intent;
}
@@ -127,43 +126,43 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
}
private void setState(int newState) {
- if (mState != newState) {
- mState = newState;
- mStatusText.setText(Helpers.getDownloaderStringResourceIDFromState(newState));
- }
- }
-
- private void setButtonPausedState(boolean paused) {
- mStatePaused = paused;
- int stringResourceID = paused ? com.godot.game.R.string.text_button_resume :
- com.godot.game.R.string.text_button_pause;
- mPauseButton.setText(stringResourceID);
- }
+ if (mState != newState) {
+ mState = newState;
+ mStatusText.setText(Helpers.getDownloaderStringResourceIDFromState(newState));
+ }
+ }
+
+ private void setButtonPausedState(boolean paused) {
+ mStatePaused = paused;
+ int stringResourceID = paused ? com.godot.game.R.string.text_button_resume :
+ com.godot.game.R.string.text_button_pause;
+ mPauseButton.setText(stringResourceID);
+ }
static public class SingletonBase {
protected void registerClass(String p_name, String[] p_methods) {
- GodotLib.singleton(p_name,this);
+ GodotLib.singleton(p_name, this);
Class clazz = getClass();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
- boolean found=false;
- Log.d("XXX","METHOD: %s\n" + method.getName());
+ boolean found = false;
+ Log.d("XXX", "METHOD: %s\n" + method.getName());
for (String s : p_methods) {
- Log.d("XXX", "METHOD CMP WITH: %s\n" + s);
+ Log.d("XXX", "METHOD CMP WITH: %s\n" + s);
if (s.equals(method.getName())) {
- found=true;
- Log.d("XXX","METHOD CMP VALID");
+ found = true;
+ Log.d("XXX", "METHOD CMP VALID");
break;
}
}
if (!found)
continue;
- Log.d("XXX","METHOD FOUND: %s\n" + method.getName());
+ Log.d("XXX", "METHOD FOUND: %s\n" + method.getName());
List<String> ptr = new ArrayList<String>();
@@ -175,17 +174,13 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
String[] pt = new String[ptr.size()];
ptr.toArray(pt);
- GodotLib.method(p_name,method.getName(),method.getReturnType().getName(),pt);
-
-
+ GodotLib.method(p_name, method.getName(), method.getReturnType().getName(), pt);
}
- Godot.singletons[Godot.singleton_count++]=this;
+ Godot.singletons[Godot.singleton_count++] = this;
}
protected void onMainActivityResult(int requestCode, int resultCode, Intent data) {
-
-
}
protected void onMainPause() {}
@@ -200,22 +195,20 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
public void registerMethods() {}
}
-/*
+ /*
protected List<SingletonBase> singletons = new ArrayList<SingletonBase>();
protected void instanceSingleton(SingletonBase s) {
s.registerMethods();
singletons.add(s);
}
-
-*/
+ */
private String[] command_line;
private boolean use_apk_expansion;
public GodotView mView;
- private boolean godot_initialized=false;
-
+ private boolean godot_initialized = false;
private SensorManager mSensorManager;
private Sensor mAccelerometer;
@@ -226,36 +219,34 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
public FrameLayout layout;
public RelativeLayout adLayout;
-
static public GodotIO io;
public static void setWindowTitle(String title) {
//setTitle(title);
}
-
static SingletonBase singletons[] = new SingletonBase[MAX_SINGLETONS];
- static int singleton_count=0;
-
+ static int singleton_count = 0;
public interface ResultCallback {
public void callback(int requestCode, int resultCode, Intent data);
- };
+ }
public ResultCallback result_callback;
private PaymentsManager mPaymentsManager = null;
- @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) {
- if(requestCode == PaymentsManager.REQUEST_CODE_FOR_PURCHASE){
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == PaymentsManager.REQUEST_CODE_FOR_PURCHASE) {
mPaymentsManager.processPurchaseResponse(resultCode, data);
- }else if (result_callback != null) {
+ } else if (result_callback != null) {
result_callback.callback(requestCode, resultCode, data);
result_callback = null;
};
- for(int i=0;i<singleton_count;i++) {
+ for (int i = 0; i < singleton_count; i++) {
- singletons[i].onMainActivityResult(requestCode,resultCode,data);
+ singletons[i].onMainActivityResult(requestCode, resultCode, data);
}
};
@@ -265,38 +256,38 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
//setContentView(mView);
layout = new FrameLayout(this);
- layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
+ layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
setContentView(layout);
// GodotEditText layout
GodotEditText edittext = new GodotEditText(this);
- edittext.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
- // ...add to FrameLayout
- layout.addView(edittext);
+ edittext.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
+ // ...add to FrameLayout
+ layout.addView(edittext);
- mView = new GodotView(getApplication(),io,use_gl2,use_32_bits, this);
- layout.addView(mView,new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
+ mView = new GodotView(getApplication(), io, use_gl2, use_32_bits, this);
+ layout.addView(mView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
edittext.setView(mView);
io.setEdit(edittext);
final Godot godot = this;
mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- Point fullSize = new Point();
- godot.getWindowManager().getDefaultDisplay().getSize(fullSize);
- Rect gameSize = new Rect();
- godot.mView.getWindowVisibleDisplayFrame(gameSize);
-
- final int keyboardHeight = fullSize.y - gameSize.bottom;
- Log.d("GODOT", "setVirtualKeyboardHeight: " + keyboardHeight);
- GodotLib.setVirtualKeyboardHeight(keyboardHeight);
- }
+ @Override
+ public void onGlobalLayout() {
+ Point fullSize = new Point();
+ godot.getWindowManager().getDefaultDisplay().getSize(fullSize);
+ Rect gameSize = new Rect();
+ godot.mView.getWindowVisibleDisplayFrame(gameSize);
+
+ final int keyboardHeight = fullSize.y - gameSize.bottom;
+ Log.d("GODOT", "setVirtualKeyboardHeight: " + keyboardHeight);
+ GodotLib.setVirtualKeyboardHeight(keyboardHeight);
+ }
});
// Ad layout
adLayout = new RelativeLayout(this);
- adLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
+ adLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
layout.addView(adLayout);
final String[] current_command_line = command_line;
@@ -313,12 +304,11 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
});
}
});
-
}
public void setKeepScreenOn(final boolean p_enabled) {
keep_screen_on = p_enabled;
- if (mView != null){
+ if (mView != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -335,12 +325,12 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
AlertDialog.Builder builder = new AlertDialog.Builder(getInstance());
builder.setMessage(message).setTitle(title);
builder.setPositiveButton(
- "OK",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
+ "OK",
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ });
AlertDialog dialog = builder.create();
dialog.show();
}
@@ -349,91 +339,86 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
private static Godot _self;
- public static Godot getInstance(){
+ public static Godot getInstance() {
return Godot._self;
}
-
private String[] getCommandLine() {
- InputStream is;
- try {
- is = getAssets().open("_cl_");
- byte[] len = new byte[4];
- int r = is.read(len);
- if (r<4) {
- Log.d("XXX","**ERROR** Wrong cmdline length.\n");
- Log.d("GODOT", "**ERROR** Wrong cmdline length.\n");
- return new String[0];
- }
- int argc=((int)(len[3]&0xFF)<<24) | ((int)(len[2]&0xFF)<<16) | ((int)(len[1]&0xFF)<<8) | ((int)(len[0]&0xFF));
- String[] cmdline = new String[argc];
-
- for(int i=0;i<argc;i++) {
- r = is.read(len);
- if (r<4) {
-
- Log.d("GODOT", "**ERROR** Wrong cmdline param length.\n");
- return new String[0];
- }
- int strlen=((int)(len[3]&0xFF)<<24) | ((int)(len[2]&0xFF)<<16) | ((int)(len[1]&0xFF)<<8) | ((int)(len[0]&0xFF));
- if (strlen>65535) {
- Log.d("GODOT", "**ERROR** Wrong command len\n");
- return new String[0];
- }
- byte[] arg = new byte[strlen];
- r = is.read(arg);
- if (r==strlen) {
- cmdline[i]=new String(arg,"UTF-8");
- }
+ InputStream is;
+ try {
+ is = getAssets().open("_cl_");
+ byte[] len = new byte[4];
+ int r = is.read(len);
+ if (r < 4) {
+ Log.d("XXX", "**ERROR** Wrong cmdline length.\n");
+ Log.d("GODOT", "**ERROR** Wrong cmdline length.\n");
+ return new String[0];
+ }
+ int argc = ((int)(len[3] & 0xFF) << 24) | ((int)(len[2] & 0xFF) << 16) | ((int)(len[1] & 0xFF) << 8) | ((int)(len[0] & 0xFF));
+ String[] cmdline = new String[argc];
+
+ for (int i = 0; i < argc; i++) {
+ r = is.read(len);
+ if (r < 4) {
+
+ Log.d("GODOT", "**ERROR** Wrong cmdline param length.\n");
+ return new String[0];
+ }
+ int strlen = ((int)(len[3] & 0xFF) << 24) | ((int)(len[2] & 0xFF) << 16) | ((int)(len[1] & 0xFF) << 8) | ((int)(len[0] & 0xFF));
+ if (strlen > 65535) {
+ Log.d("GODOT", "**ERROR** Wrong command len\n");
+ return new String[0];
+ }
+ byte[] arg = new byte[strlen];
+ r = is.read(arg);
+ if (r == strlen) {
+ cmdline[i] = new String(arg, "UTF-8");
+ }
}
return cmdline;
} catch (Exception e) {
- e.printStackTrace();
- Log.d("GODOT", "**ERROR** Exception " + e.getClass().getName() + ":" + e.getMessage());
+ e.printStackTrace();
+ Log.d("GODOT", "**ERROR** Exception " + e.getClass().getName() + ":" + e.getMessage());
return new String[0];
}
-
-
}
-
String expansion_pack_path;
-
private void initializeGodot() {
- if (expansion_pack_path!=null) {
+ if (expansion_pack_path != null) {
String[] new_cmdline;
- int cll=0;
- if (command_line!=null) {
- Log.d("GODOT", "initializeGodot: command_line: is not null" );
- new_cmdline = new String[ command_line.length + 2 ];
- cll=command_line.length;
- for(int i=0;i<command_line.length;i++) {
- new_cmdline[i]=command_line[i];
+ int cll = 0;
+ if (command_line != null) {
+ Log.d("GODOT", "initializeGodot: command_line: is not null");
+ new_cmdline = new String[command_line.length + 2];
+ cll = command_line.length;
+ for (int i = 0; i < command_line.length; i++) {
+ new_cmdline[i] = command_line[i];
}
} else {
- Log.d("GODOT", "initializeGodot: command_line: is null" );
- new_cmdline = new String[ 2 ];
+ Log.d("GODOT", "initializeGodot: command_line: is null");
+ new_cmdline = new String[2];
}
- new_cmdline[cll]="--main_pack";
- new_cmdline[cll+1]=expansion_pack_path;
- command_line=new_cmdline;
+ new_cmdline[cll] = "--main_pack";
+ new_cmdline[cll + 1] = expansion_pack_path;
+ command_line = new_cmdline;
}
io = new GodotIO(this);
io.unique_id = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
- GodotLib.io=io;
- Log.d("GODOT", "command_line is null? " + ((command_line == null)?"yes":"no"));
+ GodotLib.io = io;
+ Log.d("GODOT", "command_line is null? " + ((command_line == null) ? "yes" : "no"));
/*if(command_line != null){
Log.d("GODOT", "Command Line:");
for(int w=0;w <command_line.length;w++){
Log.d("GODOT"," " + command_line[w]);
}
}*/
- mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
+ mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
@@ -449,18 +434,15 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
mPaymentsManager = PaymentsManager.createManager(this).initService();
- godot_initialized=true;
-
+ godot_initialized = true;
}
@Override
public void onServiceConnected(Messenger m) {
- mRemoteService = DownloaderServiceMarshaller.CreateProxy(m);
- mRemoteService.onClientUpdated(mDownloaderClientStub.getMessenger());
+ mRemoteService = DownloaderServiceMarshaller.CreateProxy(m);
+ mRemoteService.onClientUpdated(mDownloaderClientStub.getMessenger());
}
-
-
@Override
protected void onCreate(Bundle icicle) {
@@ -474,59 +456,58 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
//check for apk expansion API
if (true) {
- boolean md5mismatch = false;
+ boolean md5mismatch = false;
command_line = getCommandLine();
- String main_pack_md5=null;
- String main_pack_key=null;
+ String main_pack_md5 = null;
+ String main_pack_key = null;
List<String> new_args = new LinkedList<String>();
+ for (int i = 0; i < command_line.length; i++) {
- for(int i=0;i<command_line.length;i++) {
-
- boolean has_extra = i< command_line.length -1;
+ boolean has_extra = i < command_line.length - 1;
if (command_line[i].equals("--use_depth_32")) {
- use_32_bits=true;
+ use_32_bits = true;
} else if (command_line[i].equals("--use_immersive")) {
- use_immersive=true;
- if(Build.VERSION.SDK_INT >= 19.0){ // check if the application runs on an android 4.4+
+ use_immersive = true;
+ if (Build.VERSION.SDK_INT >= 19.0) { // check if the application runs on an android 4.4+
window.getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
- | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | // hide nav bar
+ View.SYSTEM_UI_FLAG_FULLSCREEN | // hide status bar
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
UiChangeListener();
}
} else if (command_line[i].equals("--use_apk_expansion")) {
- use_apk_expansion=true;
+ use_apk_expansion = true;
} else if (has_extra && command_line[i].equals("--apk_expansion_md5")) {
- main_pack_md5=command_line[i+1];
+ main_pack_md5 = command_line[i + 1];
i++;
} else if (has_extra && command_line[i].equals("--apk_expansion_key")) {
- main_pack_key=command_line[i+1];
+ main_pack_key = command_line[i + 1];
SharedPreferences prefs = getSharedPreferences("app_data_keys", MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("store_public_key", main_pack_key);
editor.commit();
i++;
- } else if (command_line[i].trim().length()!=0){
+ } else if (command_line[i].trim().length() != 0) {
new_args.add(command_line[i]);
}
}
- if (new_args.isEmpty()){
- command_line=null;
- }else{
+ if (new_args.isEmpty()) {
+ command_line = null;
+ } else {
command_line = new_args.toArray(new String[new_args.size()]);
- }
- if (use_apk_expansion && main_pack_md5!=null && main_pack_key!=null) {
+ }
+ if (use_apk_expansion && main_pack_md5 != null && main_pack_key != null) {
//check that environment is ok!
- if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED )) {
+ if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Log.d("GODOT", "**ERROR! No media mounted!");
//show popup and die
}
@@ -534,7 +515,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
// Build the full path to the app's expansion files
try {
expansion_pack_path = Helpers.getSaveFilePath(getApplicationContext());
- expansion_pack_path+="/"+"main."+getPackageManager().getPackageInfo(getPackageName(), 0).versionCode+"."+this.getPackageName()+".obb";
+ expansion_pack_path += "/main." + getPackageManager().getPackageInfo(getPackageName(), 0).versionCode + "." + this.getPackageName() + ".obb";
} catch (Exception e) {
e.printStackTrace();
}
@@ -542,20 +523,20 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
File f = new File(expansion_pack_path);
boolean pack_valid = true;
- Log.d("GODOT","**PACK** - Path "+expansion_pack_path);
+ Log.d("GODOT", "**PACK** - Path " + expansion_pack_path);
if (!f.exists()) {
- pack_valid=false;
- Log.d("GODOT","**PACK** - File does not exist");
+ pack_valid = false;
+ Log.d("GODOT", "**PACK** - File does not exist");
- } else if( obbIsCorrupted(expansion_pack_path, main_pack_md5)){
+ } else if (obbIsCorrupted(expansion_pack_path, main_pack_md5)) {
Log.d("GODOT", "**PACK** - Expansion pack (obb) is corrupted");
pack_valid = false;
- try{
- f.delete();
- }catch(Exception e){
- Log.d("GODOT", "**PACK** - Error deleting corrupted expansion pack (obb)");
+ try {
+ f.delete();
+ } catch (Exception e) {
+ Log.d("GODOT", "**PACK** - Error deleting corrupted expansion pack (obb)");
}
}
@@ -564,12 +545,12 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
Intent notifierIntent = new Intent(this, this.getClass());
notifierIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
- Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ Intent.FLAG_ACTIVITY_CLEAR_TOP);
- PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
- notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
+ notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT);
- int startResult;
+ int startResult;
try {
Log.d("GODOT", "INITIALIZING DOWNLOAD");
startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(
@@ -578,36 +559,34 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
GodotDownloaderService.class);
Log.d("GODOT", "DOWNLOAD SERVICE FINISHED:" + startResult);
- if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {
- Log.d("GODOT", "DOWNLOAD REQUIRED");
- // This is where you do set up to display the download
- // progress (next step)
- mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this,
- GodotDownloaderService.class);
-
- setContentView(com.godot.game.R.layout.downloading_expansion);
- mPB = (ProgressBar) findViewById(com.godot.game.R.id.progressBar);
- mStatusText = (TextView) findViewById(com.godot.game.R.id.statusText);
- mProgressFraction = (TextView) findViewById(com.godot.game.R.id.progressAsFraction);
- mProgressPercent = (TextView) findViewById(com.godot.game.R.id.progressAsPercentage);
- mAverageSpeed = (TextView) findViewById(com.godot.game.R.id.progressAverageSpeed);
- mTimeRemaining = (TextView) findViewById(com.godot.game.R.id.progressTimeRemaining);
- mDashboard = findViewById(com.godot.game.R.id.downloaderDashboard);
- mCellMessage = findViewById(com.godot.game.R.id.approveCellular);
- mPauseButton = (Button) findViewById(com.godot.game.R.id.pauseButton);
- mWiFiSettingsButton = (Button) findViewById(com.godot.game.R.id.wifiSettingsButton);
-
- return;
- } else{
- Log.d("GODOT", "NO DOWNLOAD REQUIRED");
- }
+ if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {
+ Log.d("GODOT", "DOWNLOAD REQUIRED");
+ // This is where you do set up to display the download
+ // progress (next step)
+ mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this,
+ GodotDownloaderService.class);
+
+ setContentView(com.godot.game.R.layout.downloading_expansion);
+ mPB = (ProgressBar)findViewById(com.godot.game.R.id.progressBar);
+ mStatusText = (TextView)findViewById(com.godot.game.R.id.statusText);
+ mProgressFraction = (TextView)findViewById(com.godot.game.R.id.progressAsFraction);
+ mProgressPercent = (TextView)findViewById(com.godot.game.R.id.progressAsPercentage);
+ mAverageSpeed = (TextView)findViewById(com.godot.game.R.id.progressAverageSpeed);
+ mTimeRemaining = (TextView)findViewById(com.godot.game.R.id.progressTimeRemaining);
+ mDashboard = findViewById(com.godot.game.R.id.downloaderDashboard);
+ mCellMessage = findViewById(com.godot.game.R.id.approveCellular);
+ mPauseButton = (Button)findViewById(com.godot.game.R.id.pauseButton);
+ mWiFiSettingsButton = (Button)findViewById(com.godot.game.R.id.wifiSettingsButton);
+
+ return;
+ } else {
+ Log.d("GODOT", "NO DOWNLOAD REQUIRED");
+ }
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
Log.d("GODOT", "Error downloading expansion package:" + e.getMessage());
}
-
}
-
}
}
@@ -615,28 +594,26 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
initializeGodot();
-
//instanceSingleton( new GodotFacebook(this) );
-
-
}
+ @Override
+ protected void onDestroy() {
- @Override protected void onDestroy(){
-
- if(mPaymentsManager != null ) mPaymentsManager.destroy();
- for(int i=0;i<singleton_count;i++) {
+ if (mPaymentsManager != null) mPaymentsManager.destroy();
+ for (int i = 0; i < singleton_count; i++) {
singletons[i].onMainDestroy();
}
super.onDestroy();
}
- @Override protected void onPause() {
+ @Override
+ protected void onPause() {
super.onPause();
- if (!godot_initialized){
+ if (!godot_initialized) {
if (null != mDownloaderClientStub) {
- mDownloaderClientStub.disconnect(this);
- }
+ mDownloaderClientStub.disconnect(this);
+ }
return;
}
mView.onPause();
@@ -648,17 +625,18 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
});
mSensorManager.unregisterListener(this);
- for(int i=0;i<singleton_count;i++) {
+ for (int i = 0; i < singleton_count; i++) {
singletons[i].onMainPause();
}
}
- @Override protected void onResume() {
+ @Override
+ protected void onResume() {
super.onResume();
- if (!godot_initialized){
+ if (!godot_initialized) {
if (null != mDownloaderClientStub) {
- mDownloaderClientStub.connect(this);
- }
+ mDownloaderClientStub.connect(this);
+ }
return;
}
@@ -674,59 +652,58 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_GAME);
mSensorManager.registerListener(this, mGyroscope, SensorManager.SENSOR_DELAY_GAME);
- if(use_immersive && Build.VERSION.SDK_INT >= 19.0){ // check if the application runs on an android 4.4+
+ if (use_immersive && Build.VERSION.SDK_INT >= 19.0) { // check if the application runs on an android 4.4+
Window window = getWindow();
window.getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
- | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | // hide nav bar
+ View.SYSTEM_UI_FLAG_FULLSCREEN | // hide status bar
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
- for(int i=0;i<singleton_count;i++) {
+ for (int i = 0; i < singleton_count; i++) {
singletons[i].onMainResume();
}
-
-
-
}
public void UiChangeListener() {
final View decorView = getWindow().getDecorView();
- decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() {
+ decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
decorView.setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_FULLSCREEN |
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
});
}
- @Override public void onSensorChanged(SensorEvent event) {
- Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
+ @Override
+ public void onSensorChanged(SensorEvent event) {
+ Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int displayRotation = display.getRotation();
float[] adjustedValues = new float[3];
final int axisSwap[][] = {
- { 1, -1, 0, 1 }, // ROTATION_0
- {-1, -1, 1, 0 }, // ROTATION_90
- {-1, 1, 0, 1 }, // ROTATION_180
- { 1, 1, 1, 0 } }; // ROTATION_270
+ { 1, -1, 0, 1 }, // ROTATION_0
+ { -1, -1, 1, 0 }, // ROTATION_90
+ { -1, 1, 0, 1 }, // ROTATION_180
+ { 1, 1, 1, 0 }
+ }; // ROTATION_270
final int[] as = axisSwap[displayRotation];
- adjustedValues[0] = (float)as[0] * event.values[ as[2] ];
- adjustedValues[1] = (float)as[1] * event.values[ as[3] ];
- adjustedValues[2] = event.values[2];
+ adjustedValues[0] = (float)as[0] * event.values[as[2]];
+ adjustedValues[1] = (float)as[1] * event.values[as[3]];
+ adjustedValues[2] = event.values[2];
final float x = adjustedValues[0];
final float y = adjustedValues[1];
@@ -738,27 +715,28 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
@Override
public void run() {
if (typeOfSensor == Sensor.TYPE_ACCELEROMETER) {
- GodotLib.accelerometer(-x,y,-z);
+ GodotLib.accelerometer(-x, y, -z);
}
if (typeOfSensor == Sensor.TYPE_GRAVITY) {
- GodotLib.gravity(-x,y,-z);
+ GodotLib.gravity(-x, y, -z);
}
if (typeOfSensor == Sensor.TYPE_MAGNETIC_FIELD) {
- GodotLib.magnetometer(-x,y,-z);
+ GodotLib.magnetometer(-x, y, -z);
}
if (typeOfSensor == Sensor.TYPE_GYROSCOPE) {
- GodotLib.gyroscope(x,-y,z);
+ GodotLib.gyroscope(x, -y, z);
}
}
});
}
}
- @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) {
+ @Override
+ public final void onAccuracyChanged(Sensor sensor, int accuracy) {
// Do something here if sensor accuracy changes.
}
-/*
+ /*
@Override public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
@@ -772,12 +750,13 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
return false;
}
-*/
+ */
- @Override public void onBackPressed() {
+ @Override
+ public void onBackPressed() {
boolean shouldQuit = true;
- for(int i=0;i<singleton_count;i++) {
+ for (int i = 0; i < singleton_count; i++) {
if (singletons[i].onMainBackPressed()) {
shouldQuit = false;
}
@@ -799,71 +778,68 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
System.exit(0);
}
+ private boolean obbIsCorrupted(String f, String main_pack_md5) {
+ try {
- private boolean obbIsCorrupted(String f, String main_pack_md5){
-
- try {
-
- InputStream fis = new FileInputStream(f);
+ InputStream fis = new FileInputStream(f);
- // Create MD5 Hash
- byte[] buffer = new byte[16384];
-
- MessageDigest complete = MessageDigest.getInstance("MD5");
- int numRead;
- do {
- numRead = fis.read(buffer);
- if (numRead > 0) {
- complete.update(buffer, 0, numRead);
- }
- } while (numRead != -1);
+ // Create MD5 Hash
+ byte[] buffer = new byte[16384];
+ MessageDigest complete = MessageDigest.getInstance("MD5");
+ int numRead;
+ do {
+ numRead = fis.read(buffer);
+ if (numRead > 0) {
+ complete.update(buffer, 0, numRead);
+ }
+ } while (numRead != -1);
- fis.close();
- byte[] messageDigest = complete.digest();
+ fis.close();
+ byte[] messageDigest = complete.digest();
- // Create Hex String
- StringBuffer hexString = new StringBuffer();
- for (int i=0; i<messageDigest.length; i++) {
- String s = Integer.toHexString(0xFF & messageDigest[i]);
+ // Create Hex String
+ StringBuffer hexString = new StringBuffer();
+ for (int i = 0; i < messageDigest.length; i++) {
+ String s = Integer.toHexString(0xFF & messageDigest[i]);
- if (s.length()==1) {
- s="0"+s;
- }
- hexString.append(s);
- }
- String md5str = hexString.toString();
+ if (s.length() == 1) {
+ s = "0" + s;
+ }
+ hexString.append(s);
+ }
+ String md5str = hexString.toString();
- //Log.d("GODOT","**PACK** - My MD5: "+hexString+" - APK md5: "+main_pack_md5);
- if (!md5str.equals(main_pack_md5)) {
- Log.d("GODOT","**PACK MD5 MISMATCH???** - MD5 Found: "+md5str+" "+Integer.toString(md5str.length())+" - MD5 Expected: "+main_pack_md5+" "+Integer.toString(main_pack_md5.length()));
- return true;
- }
- return false;
- } catch (Exception e) {
- e.printStackTrace();
- Log.d("GODOT","**PACK FAIL**");
- return true;
- }
+ //Log.d("GODOT","**PACK** - My MD5: "+hexString+" - APK md5: "+main_pack_md5);
+ if (!md5str.equals(main_pack_md5)) {
+ Log.d("GODOT", "**PACK MD5 MISMATCH???** - MD5 Found: " + md5str + " " + Integer.toString(md5str.length()) + " - MD5 Expected: " + main_pack_md5 + " " + Integer.toString(main_pack_md5.length()));
+ return true;
+ }
+ return false;
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.d("GODOT", "**PACK FAIL**");
+ return true;
+ }
}
//@Override public boolean dispatchTouchEvent (MotionEvent event) {
public boolean gotTouchEvent(final MotionEvent event) {
super.onTouchEvent(event);
- final int evcount=event.getPointerCount();
- if (evcount==0)
+ final int evcount = event.getPointerCount();
+ if (evcount == 0)
return true;
if (mView != null) {
- final int[] arr = new int[event.getPointerCount()*3];
+ final int[] arr = new int[event.getPointerCount() * 3];
- for(int i=0;i<event.getPointerCount();i++) {
+ for (int i = 0; i < event.getPointerCount(); i++) {
- arr[i*3+0]=(int)event.getPointerId(i);
- arr[i*3+1]=(int)event.getX(i);
- arr[i*3+2]=(int)event.getY(i);
+ arr[i * 3 + 0] = (int)event.getPointerId(i);
+ arr[i * 3 + 1] = (int)event.getX(i);
+ arr[i * 3 + 2] = (int)event.getY(i);
}
//System.out.printf("gaction: %d\n",event.getAction());
@@ -871,13 +847,13 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
mView.queueEvent(new Runnable() {
@Override
public void run() {
- switch(action) {
+ switch (action) {
case MotionEvent.ACTION_DOWN: {
- GodotLib.touch(0,0,evcount,arr);
+ GodotLib.touch(0, 0, evcount, arr);
//System.out.printf("action down at: %f,%f\n", event.getX(),event.getY());
} break;
case MotionEvent.ACTION_MOVE: {
- GodotLib.touch(1,0,evcount,arr);
+ GodotLib.touch(1, 0, evcount, arr);
/*
for(int i=0;i<event.getPointerCount();i++) {
System.out.printf("%d - moved to: %f,%f\n",i, event.getX(i),event.getY(i));
@@ -887,17 +863,17 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
case MotionEvent.ACTION_POINTER_UP: {
final int indexPointUp = event.getActionIndex();
final int pointer_idx = event.getPointerId(indexPointUp);
- GodotLib.touch(4,pointer_idx,evcount,arr);
+ GodotLib.touch(4, pointer_idx, evcount, arr);
//System.out.printf("%d - s.up at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));
} break;
case MotionEvent.ACTION_POINTER_DOWN: {
int pointer_idx = event.getActionIndex();
- GodotLib.touch(3,pointer_idx,evcount,arr);
+ GodotLib.touch(3, pointer_idx, evcount, arr);
//System.out.printf("%d - s.down at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));
} break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
- GodotLib.touch(2,0,evcount,arr);
+ GodotLib.touch(2, 0, evcount, arr);
/*
for(int i=0;i<event.getPointerCount();i++) {
System.out.printf("%d - up! %f,%f\n",i, event.getX(i),event.getY(i));
@@ -911,14 +887,16 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
return true;
}
- @Override public boolean onKeyMultiple(final int inKeyCode, int repeatCount, KeyEvent event) {
+ @Override
+ public boolean onKeyMultiple(final int inKeyCode, int repeatCount, KeyEvent event) {
String s = event.getCharacters();
if (s == null || s.length() == 0)
return super.onKeyMultiple(inKeyCode, repeatCount, event);
final char[] cc = s.toCharArray();
int cnt = 0;
- for (int i = cc.length; --i >= 0; cnt += cc[i] != 0 ? 1 : 0);
+ for (int i = cc.length; --i >= 0; cnt += cc[i] != 0 ? 1 : 0)
+ ;
if (cnt == 0) return super.onKeyMultiple(inKeyCode, repeatCount, event);
final Activity me = this;
queueEvent(new Runnable() {
@@ -939,7 +917,6 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
private void queueEvent(Runnable runnable) {
// TODO Auto-generated method stub
-
}
public PaymentsManager getPaymentsManager() {
@@ -952,7 +929,6 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
}
*/
-
// Audio
/**
@@ -960,110 +936,106 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
* to show the state as being indeterminate at times. This sample can be
* considered a guideline.
*/
- @Override
- public void onDownloadStateChanged(int newState) {
- Log.d("GODOT", "onDownloadStateChanged:" + newState);
- setState(newState);
- boolean showDashboard = true;
- boolean showCellMessage = false;
- boolean paused;
- boolean indeterminate;
- switch (newState) {
- case IDownloaderClient.STATE_IDLE:
- Log.d("GODOT", "STATE IDLE");
- // STATE_IDLE means the service is listening, so it's
- // safe to start making calls via mRemoteService.
- paused = false;
- indeterminate = true;
- break;
- case IDownloaderClient.STATE_CONNECTING:
- case IDownloaderClient.STATE_FETCHING_URL:
- Log.d("GODOT", "STATE CONNECTION / FETCHING URL");
- showDashboard = true;
- paused = false;
- indeterminate = true;
- break;
- case IDownloaderClient.STATE_DOWNLOADING:
- Log.d("GODOT", "STATE DOWNLOADING");
- paused = false;
- showDashboard = true;
- indeterminate = false;
- break;
-
- case IDownloaderClient.STATE_FAILED_CANCELED:
- case IDownloaderClient.STATE_FAILED:
- case IDownloaderClient.STATE_FAILED_FETCHING_URL:
- case IDownloaderClient.STATE_FAILED_UNLICENSED:
- Log.d("GODOT", "MANY TYPES OF FAILING");
- paused = true;
- showDashboard = false;
- indeterminate = false;
- break;
- case IDownloaderClient.STATE_PAUSED_NEED_CELLULAR_PERMISSION:
- case IDownloaderClient.STATE_PAUSED_WIFI_DISABLED_NEED_CELLULAR_PERMISSION:
- Log.d("GODOT", "PAUSED FOR SOME STUPID REASON");
- showDashboard = false;
- paused = true;
- indeterminate = false;
- showCellMessage = true;
- break;
-
- case IDownloaderClient.STATE_PAUSED_BY_REQUEST:
- Log.d("GODOT", "PAUSED BY STUPID USER");
- paused = true;
- indeterminate = false;
- break;
- case IDownloaderClient.STATE_PAUSED_ROAMING:
- case IDownloaderClient.STATE_PAUSED_SDCARD_UNAVAILABLE:
- Log.d("GODOT", "PAUSED BY ROAMING WTF!?");
- paused = true;
- indeterminate = false;
- break;
- case IDownloaderClient.STATE_COMPLETED:
- Log.d("GODOT", "COMPLETED");
- showDashboard = false;
- paused = false;
- indeterminate = false;
-// validateXAPKZipFiles();
- initializeGodot();
- return;
- default:
- Log.d("GODOT", "DEFAULT ????");
- paused = true;
- indeterminate = true;
- showDashboard = true;
- }
- int newDashboardVisibility = showDashboard ? View.VISIBLE : View.GONE;
- if (mDashboard.getVisibility() != newDashboardVisibility) {
- mDashboard.setVisibility(newDashboardVisibility);
- }
- int cellMessageVisibility = showCellMessage ? View.VISIBLE : View.GONE;
- if (mCellMessage.getVisibility() != cellMessageVisibility) {
- mCellMessage.setVisibility(cellMessageVisibility);
- }
-
- mPB.setIndeterminate(indeterminate);
- setButtonPausedState(paused);
- }
+ @Override
+ public void onDownloadStateChanged(int newState) {
+ Log.d("GODOT", "onDownloadStateChanged:" + newState);
+ setState(newState);
+ boolean showDashboard = true;
+ boolean showCellMessage = false;
+ boolean paused;
+ boolean indeterminate;
+ switch (newState) {
+ case IDownloaderClient.STATE_IDLE:
+ Log.d("GODOT", "DOWNLOAD STATE IDLE");
+ // STATE_IDLE means the service is listening, so it's
+ // safe to start making calls via mRemoteService.
+ paused = false;
+ indeterminate = true;
+ break;
+ case IDownloaderClient.STATE_CONNECTING:
+ case IDownloaderClient.STATE_FETCHING_URL:
+ Log.d("GODOT", "DOWNLOAD STATE CONNECTION / FETCHING URL");
+ showDashboard = true;
+ paused = false;
+ indeterminate = true;
+ break;
+ case IDownloaderClient.STATE_DOWNLOADING:
+ Log.d("GODOT", "DOWNLOAD STATE DOWNLOADING");
+ paused = false;
+ showDashboard = true;
+ indeterminate = false;
+ break;
+
+ case IDownloaderClient.STATE_FAILED_CANCELED:
+ case IDownloaderClient.STATE_FAILED:
+ case IDownloaderClient.STATE_FAILED_FETCHING_URL:
+ case IDownloaderClient.STATE_FAILED_UNLICENSED:
+ Log.d("GODOT", "DOWNLOAD STATE: FAILED, CANCELLED, UNLICENSED OR FAILED TO FETCH URL");
+ paused = true;
+ showDashboard = false;
+ indeterminate = false;
+ break;
+ case IDownloaderClient.STATE_PAUSED_NEED_CELLULAR_PERMISSION:
+ case IDownloaderClient.STATE_PAUSED_WIFI_DISABLED_NEED_CELLULAR_PERMISSION:
+ Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY MISSING CELLULAR PERMISSION");
+ showDashboard = false;
+ paused = true;
+ indeterminate = false;
+ showCellMessage = true;
+ break;
+
+ case IDownloaderClient.STATE_PAUSED_BY_REQUEST:
+ Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY USER");
+ paused = true;
+ indeterminate = false;
+ break;
+ case IDownloaderClient.STATE_PAUSED_ROAMING:
+ case IDownloaderClient.STATE_PAUSED_SDCARD_UNAVAILABLE:
+ Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY ROAMING OR SDCARD UNAVAILABLE");
+ paused = true;
+ indeterminate = false;
+ break;
+ case IDownloaderClient.STATE_COMPLETED:
+ Log.d("GODOT", "DOWNLOAD STATE: COMPLETED");
+ showDashboard = false;
+ paused = false;
+ indeterminate = false;
+ // validateXAPKZipFiles();
+ initializeGodot();
+ return;
+ default:
+ Log.d("GODOT", "DOWNLOAD STATE: DEFAULT");
+ paused = true;
+ indeterminate = true;
+ showDashboard = true;
+ }
+ int newDashboardVisibility = showDashboard ? View.VISIBLE : View.GONE;
+ if (mDashboard.getVisibility() != newDashboardVisibility) {
+ mDashboard.setVisibility(newDashboardVisibility);
+ }
+ int cellMessageVisibility = showCellMessage ? View.VISIBLE : View.GONE;
+ if (mCellMessage.getVisibility() != cellMessageVisibility) {
+ mCellMessage.setVisibility(cellMessageVisibility);
+ }
+ mPB.setIndeterminate(indeterminate);
+ setButtonPausedState(paused);
+ }
@Override
public void onDownloadProgress(DownloadProgressInfo progress) {
mAverageSpeed.setText(getString(com.godot.game.R.string.kilobytes_per_second,
- Helpers.getSpeedString(progress.mCurrentSpeed)));
- mTimeRemaining.setText(getString(com.godot.game.R.string.time_remaining,
- Helpers.getTimeRemaining(progress.mTimeRemaining)));
-
- progress.mOverallTotal = progress.mOverallTotal;
- mPB.setMax((int) (progress.mOverallTotal >> 8));
- mPB.setProgress((int) (progress.mOverallProgress >> 8));
- mProgressPercent.setText(Long.toString(progress.mOverallProgress
- * 100 /
- progress.mOverallTotal) + "%");
- mProgressFraction.setText(Helpers.getDownloadProgressString
- (progress.mOverallProgress,
- progress.mOverallTotal));
-
+ Helpers.getSpeedString(progress.mCurrentSpeed)));
+ mTimeRemaining.setText(getString(com.godot.game.R.string.time_remaining,
+ Helpers.getTimeRemaining(progress.mTimeRemaining)));
+
+ progress.mOverallTotal = progress.mOverallTotal;
+ mPB.setMax((int)(progress.mOverallTotal >> 8));
+ mPB.setProgress((int)(progress.mOverallProgress >> 8));
+ mProgressPercent.setText(Long.toString(progress.mOverallProgress * 100 /
+ progress.mOverallTotal) +
+ "%");
+ mProgressFraction.setText(Helpers.getDownloadProgressString(progress.mOverallProgress,
+ progress.mOverallTotal));
}
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java b/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java
index 2c668dd586..568c7a4140 100644
--- a/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java
+++ b/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java
@@ -46,14 +46,14 @@ import android.util.Log;
*/
public class GodotDownloaderAlarmReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d("GODOT", "Alarma recivida");
- try {
- DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent, GodotDownloaderService.class);
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- Log.d("GODOT", "Exception: " + e.getClass().getName() + ":" + e.getMessage());
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.d("GODOT", "Alarma recivida");
+ try {
+ DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent, GodotDownloaderService.class);
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
+ Log.d("GODOT", "Exception: " + e.getClass().getName() + ":" + e.getMessage());
+ }
}
- }
}
diff --git a/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java b/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java
index 97ba7826fb..b8b3b925c5 100644
--- a/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java
+++ b/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java
@@ -40,46 +40,45 @@ import com.google.android.vending.expansion.downloader.impl.DownloaderService;
* DownloaderService from the Downloader library.
*/
public class GodotDownloaderService extends DownloaderService {
- // stuff for LVL -- MODIFY FOR YOUR APPLICATION!
- private static final String BASE64_PUBLIC_KEY = "REPLACE THIS WITH YOUR PUBLIC KEY";
- // used by the preference obfuscater
- private static final byte[] SALT = new byte[] {
- 1, 43, -12, -1, 54, 98,
- -100, -12, 43, 2, -8, -4, 9, 5, -106, -108, -33, 45, -1, 84
- };
+ // stuff for LVL -- MODIFY FOR YOUR APPLICATION!
+ private static final String BASE64_PUBLIC_KEY = "REPLACE THIS WITH YOUR PUBLIC KEY";
+ // used by the preference obfuscater
+ private static final byte[] SALT = new byte[] {
+ 1, 43, -12, -1, 54, 98,
+ -100, -12, 43, 2, -8, -4, 9, 5, -106, -108, -33, 45, -1, 84
+ };
- /**
+ /**
* This public key comes from your Android Market publisher account, and it
* used by the LVL to validate responses from Market on your behalf.
*/
- @Override
- public String getPublicKey() {
- SharedPreferences prefs = getApplicationContext().getSharedPreferences("app_data_keys", Context.MODE_PRIVATE);
- Log.d("GODOT", "getting public key:" + prefs.getString("store_public_key", null));
- return prefs.getString("store_public_key", null);
-
- //return BASE64_PUBLIC_KEY;
- }
+ @Override
+ public String getPublicKey() {
+ SharedPreferences prefs = getApplicationContext().getSharedPreferences("app_data_keys", Context.MODE_PRIVATE);
+ Log.d("GODOT", "getting public key:" + prefs.getString("store_public_key", null));
+ return prefs.getString("store_public_key", null);
- /**
+ //return BASE64_PUBLIC_KEY;
+ }
+
+ /**
* This is used by the preference obfuscater to make sure that your
* obfuscated preferences are different than the ones used by other
* applications.
*/
- @Override
- public byte[] getSALT() {
- return SALT;
- }
+ @Override
+ public byte[] getSALT() {
+ return SALT;
+ }
- /**
+ /**
* Fill this in with the class name for your alarm receiver. We do this
* because receivers must be unique across all of Android (it's a good idea
* to make sure that your receiver is in your unique package)
*/
- @Override
- public String getAlarmReceiverClassName() {
- Log.d("GODOT", "getAlarmReceiverClassName()");
- return GodotDownloaderAlarmReceiver.class.getName();
- }
-
+ @Override
+ public String getAlarmReceiverClassName() {
+ Log.d("GODOT", "getAlarmReceiverClassName()");
+ return GodotDownloaderAlarmReceiver.class.getName();
+ }
}
diff --git a/platform/android/java/src/org/godotengine/godot/GodotIO.java b/platform/android/java/src/org/godotengine/godot/GodotIO.java
index 989fd2b609..12a2467a29 100644
--- a/platform/android/java/src/org/godotengine/godot/GodotIO.java
+++ b/platform/android/java/src/org/godotengine/godot/GodotIO.java
@@ -56,7 +56,6 @@ import org.godotengine.godot.input.*;
public class GodotIO {
-
AssetManager am;
Godot activity;
GodotEditText edit;
@@ -64,35 +63,32 @@ public class GodotIO {
Context applicationContext;
MediaPlayer mediaPlayer;
- final int SCREEN_LANDSCAPE=0;
- final int SCREEN_PORTRAIT=1;
- final int SCREEN_REVERSE_LANDSCAPE=2;
- final int SCREEN_REVERSE_PORTRAIT=3;
- final int SCREEN_SENSOR_LANDSCAPE=4;
- final int SCREEN_SENSOR_PORTRAIT=5;
- final int SCREEN_SENSOR=6;
+ final int SCREEN_LANDSCAPE = 0;
+ final int SCREEN_PORTRAIT = 1;
+ final int SCREEN_REVERSE_LANDSCAPE = 2;
+ final int SCREEN_REVERSE_PORTRAIT = 3;
+ final int SCREEN_SENSOR_LANDSCAPE = 4;
+ final int SCREEN_SENSOR_PORTRAIT = 5;
+ final int SCREEN_SENSOR = 6;
/////////////////////////
/// FILES
/////////////////////////
- public int last_file_id=1;
+ public int last_file_id = 1;
class AssetData {
-
- public boolean eof=false;
+ public boolean eof = false;
public String path;
public InputStream is;
public int len;
public int pos;
}
+ HashMap<Integer, AssetData> streams;
- HashMap<Integer,AssetData> streams;
-
-
- public int file_open(String path,boolean write) {
+ public int file_open(String path, boolean write) {
//System.out.printf("file_open: Attempt to Open %s\n",path);
@@ -100,7 +96,6 @@ public class GodotIO {
if (write)
return -1;
-
AssetData ad = new AssetData();
try {
@@ -113,76 +108,73 @@ public class GodotIO {
}
try {
- ad.len=ad.is.available();
+ ad.len = ad.is.available();
} catch (Exception e) {
- System.out.printf("Exception availabling on file_open: %s\n",path);
+ System.out.printf("Exception availabling on file_open: %s\n", path);
return -1;
}
- ad.path=path;
- ad.pos=0;
+ ad.path = path;
+ ad.pos = 0;
++last_file_id;
- streams.put(last_file_id,ad);
+ streams.put(last_file_id, ad);
return last_file_id;
}
public int file_get_size(int id) {
if (!streams.containsKey(id)) {
- System.out.printf("file_get_size: Invalid file id: %d\n",id);
+ System.out.printf("file_get_size: Invalid file id: %d\n", id);
return -1;
}
return streams.get(id).len;
-
}
- public void file_seek(int id,int bytes) {
+ public void file_seek(int id, int bytes) {
if (!streams.containsKey(id)) {
- System.out.printf("file_get_size: Invalid file id: %d\n",id);
+ System.out.printf("file_get_size: Invalid file id: %d\n", id);
return;
}
//seek sucks
AssetData ad = streams.get(id);
- if (bytes>ad.len)
- bytes=ad.len;
- if (bytes<0)
- bytes=0;
+ if (bytes > ad.len)
+ bytes = ad.len;
+ if (bytes < 0)
+ bytes = 0;
try {
- if (bytes > (int)ad.pos) {
- int todo=bytes-(int)ad.pos;
- while(todo>0) {
- todo-=ad.is.skip(todo);
- }
- ad.pos=bytes;
- } else if (bytes<(int)ad.pos) {
+ if (bytes > (int)ad.pos) {
+ int todo = bytes - (int)ad.pos;
+ while (todo > 0) {
+ todo -= ad.is.skip(todo);
+ }
+ ad.pos = bytes;
+ } else if (bytes < (int)ad.pos) {
- ad.is=am.open(ad.path);
+ ad.is = am.open(ad.path);
- ad.pos=bytes;
- int todo=bytes;
- while(todo>0) {
- todo-=ad.is.skip(todo);
+ ad.pos = bytes;
+ int todo = bytes;
+ while (todo > 0) {
+ todo -= ad.is.skip(todo);
+ }
}
- }
- ad.eof=false;
+ ad.eof = false;
} catch (IOException e) {
- System.out.printf("Exception on file_seek: %s\n",e);
+ System.out.printf("Exception on file_seek: %s\n", e);
return;
}
-
-
}
public int file_tell(int id) {
if (!streams.containsKey(id)) {
- System.out.printf("file_read: Can't tell eof for invalid file id: %d\n",id);
+ System.out.printf("file_read: Can't tell eof for invalid file id: %d\n", id);
return 0;
}
@@ -192,7 +184,7 @@ public class GodotIO {
public boolean file_eof(int id) {
if (!streams.containsKey(id)) {
- System.out.printf("file_read: Can't check eof for invalid file id: %d\n",id);
+ System.out.printf("file_read: Can't check eof for invalid file id: %d\n", id);
return false;
}
@@ -203,73 +195,65 @@ public class GodotIO {
public byte[] file_read(int id, int bytes) {
if (!streams.containsKey(id)) {
- System.out.printf("file_read: Can't read invalid file id: %d\n",id);
+ System.out.printf("file_read: Can't read invalid file id: %d\n", id);
return new byte[0];
}
-
AssetData ad = streams.get(id);
if (ad.pos + bytes > ad.len) {
- bytes=ad.len-ad.pos;
- ad.eof=true;
+ bytes = ad.len - ad.pos;
+ ad.eof = true;
}
-
- if (bytes==0) {
+ if (bytes == 0) {
return new byte[0];
}
-
-
- byte[] buf1=new byte[bytes];
- int r=0;
+ byte[] buf1 = new byte[bytes];
+ int r = 0;
try {
r = ad.is.read(buf1);
} catch (IOException e) {
- System.out.printf("Exception on file_read: %s\n",e);
+ System.out.printf("Exception on file_read: %s\n", e);
return new byte[bytes];
}
- if (r==0) {
+ if (r == 0) {
return new byte[0];
}
- ad.pos+=r;
+ ad.pos += r;
- if (r<bytes) {
+ if (r < bytes) {
- byte[] buf2=new byte[r];
- for(int i=0;i<r;i++)
- buf2[i]=buf1[i];
+ byte[] buf2 = new byte[r];
+ for (int i = 0; i < r; i++)
+ buf2[i] = buf1[i];
return buf2;
} else {
return buf1;
}
-
}
public void file_close(int id) {
if (!streams.containsKey(id)) {
- System.out.printf("file_close: Can't close invalid file id: %d\n",id);
+ System.out.printf("file_close: Can't close invalid file id: %d\n", id);
return;
}
streams.remove(id);
-
}
-
/////////////////////////
/// DIRECTORIES
/////////////////////////
-
class AssetDir {
public String[] files;
@@ -277,49 +261,48 @@ public class GodotIO {
public String path;
}
- public int last_dir_id=1;
+ public int last_dir_id = 1;
- HashMap<Integer,AssetDir> dirs;
+ HashMap<Integer, AssetDir> dirs;
public int dir_open(String path) {
AssetDir ad = new AssetDir();
- ad.current=0;
- ad.path=path;
+ ad.current = 0;
+ ad.path = path;
try {
ad.files = am.list(path);
// no way to find path is directory or file exactly.
// but if ad.files.length==0, then it's an empty directory or file.
- if (ad.files.length==0) {
+ if (ad.files.length == 0) {
return -1;
}
} catch (IOException e) {
- System.out.printf("Exception on dir_open: %s\n",e);
+ System.out.printf("Exception on dir_open: %s\n", e);
return -1;
}
//System.out.printf("Opened dir: %s\n",path);
++last_dir_id;
- dirs.put(last_dir_id,ad);
+ dirs.put(last_dir_id, ad);
return last_dir_id;
-
}
public boolean dir_is_dir(int id) {
if (!dirs.containsKey(id)) {
- System.out.printf("dir_next: invalid dir id: %d\n",id);
+ System.out.printf("dir_next: invalid dir id: %d\n", id);
return false;
}
AssetDir ad = dirs.get(id);
//System.out.printf("go next: %d,%d\n",ad.current,ad.files.length);
int idx = ad.current;
- if (idx>0)
+ if (idx > 0)
idx--;
- if (idx>=ad.files.length)
+ if (idx >= ad.files.length)
return false;
String fname = ad.files[idx];
@@ -327,7 +310,7 @@ public class GodotIO {
if (ad.path.equals(""))
am.open(fname);
else
- am.open(ad.path+"/"+fname);
+ am.open(ad.path + "/" + fname);
return false;
} catch (Exception e) {
return true;
@@ -337,46 +320,41 @@ public class GodotIO {
public String dir_next(int id) {
if (!dirs.containsKey(id)) {
- System.out.printf("dir_next: invalid dir id: %d\n",id);
+ System.out.printf("dir_next: invalid dir id: %d\n", id);
return "";
}
AssetDir ad = dirs.get(id);
//System.out.printf("go next: %d,%d\n",ad.current,ad.files.length);
- if (ad.current>=ad.files.length) {
+ if (ad.current >= ad.files.length) {
ad.current++;
return "";
}
String r = ad.files[ad.current];
ad.current++;
return r;
-
}
public void dir_close(int id) {
if (!dirs.containsKey(id)) {
- System.out.printf("dir_close: invalid dir id: %d\n",id);
+ System.out.printf("dir_close: invalid dir id: %d\n", id);
return;
}
dirs.remove(id);
}
-
-
GodotIO(Godot p_activity) {
- am=p_activity.getAssets();
- activity=p_activity;
- streams=new HashMap<Integer,AssetData>();
- dirs=new HashMap<Integer,AssetDir>();
+ am = p_activity.getAssets();
+ activity = p_activity;
+ streams = new HashMap<Integer, AssetData>();
+ dirs = new HashMap<Integer, AssetDir>();
applicationContext = activity.getApplicationContext();
-
}
-
/////////////////////////
// AUDIO
/////////////////////////
@@ -400,7 +378,7 @@ public class GodotIO {
desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
- channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
+ channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
audioStartThread();
@@ -412,10 +390,10 @@ public class GodotIO {
public void audioStartThread() {
mAudioThread = new Thread(new Runnable() {
- public void run() {
- mAudioTrack.play();
- GodotLib.audio();
- }
+ public void run() {
+ mAudioTrack.play();
+ GodotLib.audio();
+ }
});
// I'd take REALTIME if I could get it!
@@ -424,15 +402,15 @@ public class GodotIO {
}
public void audioWriteShortBuffer(short[] buffer) {
- for (int i = 0; i < buffer.length; ) {
+ for (int i = 0; i < buffer.length;) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
- Thread.sleep(1);
- } catch(InterruptedException e) {
- // Nom nom
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ // Nom nom
}
} else {
Log.w("Godot", "Godot audio: error return from write(short)");
@@ -441,18 +419,16 @@ public class GodotIO {
}
}
-
-
public void audioQuit() {
if (mAudioThread != null) {
try {
mAudioThread.join();
- } catch(Exception e) {
+ } catch (Exception e) {
Log.v("Godot", "Problem stopping audio thread: " + e);
}
mAudioThread = null;
- //Log.v("Godot", "Finished waiting for audio thread");
+ //Log.v("Godot", "Finished waiting for audio thread");
}
if (mAudioTrack != null) {
@@ -473,20 +449,18 @@ public class GodotIO {
// MISCELLANEOUS OS IO
/////////////////////////
-
-
public int openURI(String p_uri) {
try {
Log.v("MyApp", "TRYING TO OPEN URI: " + p_uri);
String path = p_uri;
- String type="";
+ String type = "";
if (path.startsWith("/")) {
//absolute path to filesystem, prepend file://
- path="file://"+path;
+ path = "file://" + path;
if (p_uri.endsWith(".png") || p_uri.endsWith(".jpg") || p_uri.endsWith(".gif") || p_uri.endsWith(".webp")) {
- type="image/*";
+ type = "image/*";
}
}
@@ -531,7 +505,7 @@ public class GodotIO {
}
public void showKeyboard(String p_existing_text) {
- if(edit != null)
+ if (edit != null)
edit.showKeyboard(p_existing_text);
//InputMethodManager inputMgr = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
@@ -539,21 +513,21 @@ public class GodotIO {
};
public void hideKeyboard() {
- if(edit != null)
+ if (edit != null)
edit.hideKeyboard();
- InputMethodManager inputMgr = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
- View v = activity.getCurrentFocus();
- if (v != null) {
- inputMgr.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- } else {
- inputMgr.hideSoftInputFromWindow(new View(activity).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- }
+ InputMethodManager inputMgr = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
+ View v = activity.getCurrentFocus();
+ if (v != null) {
+ inputMgr.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ } else {
+ inputMgr.hideSoftInputFromWindow(new View(activity).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ }
};
public void setScreenOrientation(int p_orientation) {
- switch(p_orientation) {
+ switch (p_orientation) {
case SCREEN_LANDSCAPE: {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
@@ -576,16 +550,14 @@ public class GodotIO {
case SCREEN_SENSOR: {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
} break;
-
}
};
-
+
public void setEdit(GodotEditText _edit) {
edit = _edit;
}
- public void playVideo(String p_path)
- {
+ public void playVideo(String p_path) {
Uri filePath = Uri.parse(p_path);
mediaPlayer = new MediaPlayer();
@@ -594,11 +566,9 @@ public class GodotIO {
mediaPlayer.setDataSource(applicationContext, filePath);
mediaPlayer.prepare();
mediaPlayer.start();
+ } catch (IOException e) {
+ System.out.println("IOError while playing video");
}
- catch(IOException e)
- {
- System.out.println("IOError while playing video");
- }
}
public boolean isVideoPlaying() {
@@ -621,49 +591,47 @@ public class GodotIO {
}
}
-
- public static final int SYSTEM_DIR_DESKTOP=0;
- public static final int SYSTEM_DIR_DCIM=1;
- public static final int SYSTEM_DIR_DOCUMENTS=2;
- public static final int SYSTEM_DIR_DOWNLOADS=3;
- public static final int SYSTEM_DIR_MOVIES=4;
- public static final int SYSTEM_DIR_MUSIC=5;
- public static final int SYSTEM_DIR_PICTURES=6;
- public static final int SYSTEM_DIR_RINGTONES=7;
-
+ public static final int SYSTEM_DIR_DESKTOP = 0;
+ public static final int SYSTEM_DIR_DCIM = 1;
+ public static final int SYSTEM_DIR_DOCUMENTS = 2;
+ public static final int SYSTEM_DIR_DOWNLOADS = 3;
+ public static final int SYSTEM_DIR_MOVIES = 4;
+ public static final int SYSTEM_DIR_MUSIC = 5;
+ public static final int SYSTEM_DIR_PICTURES = 6;
+ public static final int SYSTEM_DIR_RINGTONES = 7;
public String getSystemDir(int idx) {
- String what="";
- switch(idx) {
+ String what = "";
+ switch (idx) {
case SYSTEM_DIR_DESKTOP: {
//what=Environment.DIRECTORY_DOCUMENTS;
- what=Environment.DIRECTORY_DOWNLOADS;
+ what = Environment.DIRECTORY_DOWNLOADS;
} break;
case SYSTEM_DIR_DCIM: {
- what=Environment.DIRECTORY_DCIM;
+ what = Environment.DIRECTORY_DCIM;
} break;
case SYSTEM_DIR_DOCUMENTS: {
- what=Environment.DIRECTORY_DOWNLOADS;
+ what = Environment.DIRECTORY_DOWNLOADS;
//what=Environment.DIRECTORY_DOCUMENTS;
} break;
case SYSTEM_DIR_DOWNLOADS: {
- what=Environment.DIRECTORY_DOWNLOADS;
+ what = Environment.DIRECTORY_DOWNLOADS;
} break;
case SYSTEM_DIR_MOVIES: {
- what=Environment.DIRECTORY_MOVIES;
+ what = Environment.DIRECTORY_MOVIES;
} break;
case SYSTEM_DIR_MUSIC: {
- what=Environment.DIRECTORY_MUSIC;
+ what = Environment.DIRECTORY_MUSIC;
} break;
case SYSTEM_DIR_PICTURES: {
- what=Environment.DIRECTORY_PICTURES;
+ what = Environment.DIRECTORY_PICTURES;
} break;
case SYSTEM_DIR_RINGTONES: {
- what=Environment.DIRECTORY_RINGTONES;
+ what = Environment.DIRECTORY_RINGTONES;
} break;
}
@@ -676,10 +644,9 @@ public class GodotIO {
protected static final String PREFS_FILE = "device_id.xml";
protected static final String PREFS_DEVICE_ID = "device_id";
- public static String unique_id="";
+ public static String unique_id = "";
public String getUniqueID() {
- return unique_id;
+ return unique_id;
}
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/GodotLib.java b/platform/android/java/src/org/godotengine/godot/GodotLib.java
index 6b84ad6555..873d30eb34 100644
--- a/platform/android/java/src/org/godotengine/godot/GodotLib.java
+++ b/platform/android/java/src/org/godotengine/godot/GodotLib.java
@@ -33,43 +33,41 @@ package org.godotengine.godot;
public class GodotLib {
+ public static GodotIO io;
- public static GodotIO io;
+ static {
+ System.loadLibrary("godot_android");
+ }
- static {
- System.loadLibrary("godot_android");
- }
-
- /**
+ /**
* @param width the current view width
* @param height the current view height
*/
- public static native void initialize(Godot p_instance,boolean need_reload_hook,Object p_asset_manager, boolean use_apk_expansion);
- public static native void setup(String[] p_cmdline);
- public static native void resize(int width, int height,boolean reload);
- public static native void newcontext(boolean p_32_bits);
- public static native void back();
- public static native void step();
- public static native void touch(int what,int pointer,int howmany, int[] arr);
- public static native void accelerometer(float x, float y, float z);
- public static native void gravity(float x, float y, float z);
- public static native void magnetometer(float x, float y, float z);
- public static native void gyroscope(float x, float y, float z);
- public static native void key(int p_scancode, int p_unicode_char, boolean p_pressed);
- public static native void joybutton(int p_device, int p_but, boolean p_pressed);
- public static native void joyaxis(int p_device, int p_axis, float p_value);
- public static native void joyhat(int p_device, int p_hat_x, int p_hat_y);
- public static native void joyconnectionchanged(int p_device, boolean p_connected, String p_name);
- public static native void focusin();
- public static native void focusout();
- public static native void audio();
- public static native void singleton(String p_name,Object p_object);
- public static native void method(String p_sname,String p_name,String p_ret,String[] p_params);
- public static native String getGlobal(String p_key);
+ public static native void initialize(Godot p_instance, boolean need_reload_hook, Object p_asset_manager, boolean use_apk_expansion);
+ public static native void setup(String[] p_cmdline);
+ public static native void resize(int width, int height, boolean reload);
+ public static native void newcontext(boolean p_32_bits);
+ public static native void back();
+ public static native void step();
+ public static native void touch(int what, int pointer, int howmany, int[] arr);
+ public static native void accelerometer(float x, float y, float z);
+ public static native void gravity(float x, float y, float z);
+ public static native void magnetometer(float x, float y, float z);
+ public static native void gyroscope(float x, float y, float z);
+ public static native void key(int p_scancode, int p_unicode_char, boolean p_pressed);
+ public static native void joybutton(int p_device, int p_but, boolean p_pressed);
+ public static native void joyaxis(int p_device, int p_axis, float p_value);
+ public static native void joyhat(int p_device, int p_hat_x, int p_hat_y);
+ public static native void joyconnectionchanged(int p_device, boolean p_connected, String p_name);
+ public static native void focusin();
+ public static native void focusout();
+ public static native void audio();
+ public static native void singleton(String p_name, Object p_object);
+ public static native void method(String p_sname, String p_name, String p_ret, String[] p_params);
+ public static native String getGlobal(String p_key);
public static native void callobject(int p_ID, String p_method, Object[] p_params);
public static native void calldeferred(int p_ID, String p_method, Object[] p_params);
public static native void setVirtualKeyboardHeight(int p_height);
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java b/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java
index 8fe79fdfc7..61d10ed9e4 100644
--- a/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java
+++ b/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java
@@ -40,7 +40,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-
public class GodotPaymentV3 extends Godot.SingletonBase {
private Godot activity;
@@ -67,8 +66,8 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
public GodotPaymentV3(Activity p_activity) {
- registerClass("GodotPayments", new String[]{"purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume", "querySkuDetails"});
- activity = (Godot) p_activity;
+ registerClass("GodotPayments", new String[] { "purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume", "querySkuDetails" });
+ activity = (Godot)p_activity;
mPaymentManager = activity.getPaymentsManager();
mPaymentManager.setBaseSingleton(this);
}
@@ -89,32 +88,32 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
}
public void callbackSuccess(String ticket, String signature, String sku) {
- GodotLib.calldeferred(purchaseCallbackId, "purchase_success", new Object[]{ticket, signature, sku});
+ GodotLib.calldeferred(purchaseCallbackId, "purchase_success", new Object[] { ticket, signature, sku });
}
public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku) {
Log.d(this.getClass().getName(), "callbackSuccessProductMassConsumed > " + ticket + "," + signature + "," + sku);
- GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku});
+ GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[] { ticket, signature, sku });
}
public void callbackSuccessNoUnconsumedPurchases() {
- GodotLib.calldeferred(purchaseCallbackId, "consume_not_required", new Object[]{});
+ GodotLib.calldeferred(purchaseCallbackId, "consume_not_required", new Object[] {});
}
public void callbackFailConsume() {
- GodotLib.calldeferred(purchaseCallbackId, "consume_fail", new Object[]{});
+ GodotLib.calldeferred(purchaseCallbackId, "consume_fail", new Object[] {});
}
public void callbackFail() {
- GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[]{});
+ GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[] {});
}
public void callbackCancel() {
- GodotLib.calldeferred(purchaseCallbackId, "purchase_cancel", new Object[]{});
+ GodotLib.calldeferred(purchaseCallbackId, "purchase_cancel", new Object[] {});
}
public void callbackAlreadyOwned(String sku) {
- GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[]{sku});
+ GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[] { sku });
}
public int getPurchaseCallbackId() {
@@ -161,7 +160,7 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
// callback for requestPurchased()
public void callbackPurchased(String receipt, String signature, String sku) {
- GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[]{receipt, signature, sku});
+ GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[] { receipt, signature, sku });
}
// consume item automatically after purchase. default is true.
@@ -210,10 +209,10 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
}
public void completeSkuDetail() {
- GodotLib.calldeferred(purchaseCallbackId, "sku_details_complete", new Object[]{mSkuDetails});
+ GodotLib.calldeferred(purchaseCallbackId, "sku_details_complete", new Object[] { mSkuDetails });
}
public void errorSkuDetail(String errorMessage) {
- GodotLib.calldeferred(purchaseCallbackId, "sku_details_error", new Object[]{errorMessage});
+ GodotLib.calldeferred(purchaseCallbackId, "sku_details_error", new Object[] { errorMessage });
}
}
diff --git a/platform/android/java/src/org/godotengine/godot/GodotView.java b/platform/android/java/src/org/godotengine/godot/GodotView.java
index b807b952d4..b762aa021a 100644
--- a/platform/android/java/src/org/godotengine/godot/GodotView.java
+++ b/platform/android/java/src/org/godotengine/godot/GodotView.java
@@ -77,20 +77,19 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
private static Context ctx;
private static GodotIO io;
- private static boolean firsttime=true;
- private static boolean use_gl3=false;
- private static boolean use_32=false;
+ private static boolean firsttime = true;
+ private static boolean use_gl3 = false;
+ private static boolean use_32 = false;
private Godot activity;
-
private InputManagerCompat mInputManager;
- public GodotView(Context context,GodotIO p_io,boolean p_use_gl3, boolean p_use_32_bits, Godot p_activity) {
+ public GodotView(Context context, GodotIO p_io, boolean p_use_gl3, boolean p_use_32_bits, Godot p_activity) {
super(context);
- ctx=context;
- io=p_io;
- use_gl3=p_use_gl3;
- use_32=p_use_32_bits;
+ ctx = context;
+ io = p_io;
+ use_gl3 = p_use_gl3;
+ use_32 = p_use_32_bits;
activity = p_activity;
@@ -101,14 +100,15 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
mInputManager = InputManagerCompat.Factory.getInputManager(this.getContext());
mInputManager.registerInputDeviceListener(this, null);
init(false, 16, 0);
- }
+ }
- public GodotView(Context context, boolean translucent, int depth, int stencil) {
+ public GodotView(Context context, boolean translucent, int depth, int stencil) {
super(context);
init(translucent, depth, stencil);
- }
+ }
- @Override public boolean onTouchEvent (MotionEvent event) {
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
return activity.gotTouchEvent(event);
};
@@ -196,16 +196,17 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
ArrayList<joystick> joy_devices = new ArrayList<joystick>();
private int find_joy_device(int device_id) {
- for (int i=0; i<joy_devices.size(); i++) {
+ for (int i = 0; i < joy_devices.size(); i++) {
if (joy_devices.get(i).device_id == device_id) {
- return i;
+ return i;
}
}
onInputDeviceAdded(device_id);
return joy_devices.size() - 1;
}
- @Override public void onInputDeviceAdded(int deviceId) {
+ @Override
+ public void onInputDeviceAdded(int deviceId) {
joystick joy = new joystick();
joy.device_id = deviceId;
final int id = joy_devices.size();
@@ -219,8 +220,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
for (InputDevice.MotionRange range : ranges) {
if (range.getAxis() == MotionEvent.AXIS_HAT_X || range.getAxis() == MotionEvent.AXIS_HAT_Y) {
joy.hats.add(range);
- }
- else {
+ } else {
joy.axes.add(range);
}
}
@@ -231,9 +231,10 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
GodotLib.joyconnectionchanged(id, true, name);
}
});
- }
+ }
- @Override public void onInputDeviceRemoved(int deviceId) {
+ @Override
+ public void onInputDeviceRemoved(int deviceId) {
final int id = find_joy_device(deviceId);
joy_devices.remove(id);
queueEvent(new Runnable() {
@@ -244,10 +245,11 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
});
}
- @Override public void onInputDeviceChanged(int deviceId) {
-
+ @Override
+ public void onInputDeviceChanged(int deviceId) {
}
- @Override public boolean onKeyUp(final int keyCode, KeyEvent event) {
+ @Override
+ public boolean onKeyUp(final int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
@@ -282,7 +284,8 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
return super.onKeyUp(keyCode, event);
};
- @Override public boolean onKeyDown(final int keyCode, KeyEvent event) {
+ @Override
+ public boolean onKeyDown(final int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
activity.onBackPressed();
@@ -326,7 +329,8 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
return super.onKeyDown(keyCode, event);
}
- @Override public boolean onGenericMotionEvent(MotionEvent event) {
+ @Override
+ public boolean onGenericMotionEvent(MotionEvent event) {
if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK && event.getAction() == MotionEvent.ACTION_MOVE) {
@@ -335,7 +339,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
for (int i = 0; i < joy.axes.size(); i++) {
InputDevice.MotionRange range = joy.axes.get(i);
- final float value = (event.getAxisValue(range.getAxis()) - range.getMin() ) / range.getRange() * 2.0f - 1.0f;
+ final float value = (event.getAxisValue(range.getAxis()) - range.getMin()) / range.getRange() * 2.0f - 1.0f;
//Log.e(TAG, String.format("axis event: %d, value %f", i, value));
final int idx = i;
queueEvent(new Runnable() {
@@ -346,9 +350,9 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
});
}
- for (int i = 0; i < joy.hats.size(); i+=2) {
+ for (int i = 0; i < joy.hats.size(); i += 2) {
final int hatX = Math.round(event.getAxisValue(joy.hats.get(i).getAxis()));
- final int hatY = Math.round(event.getAxisValue(joy.hats.get(i+1).getAxis()));
+ final int hatY = Math.round(event.getAxisValue(joy.hats.get(i + 1).getAxis()));
//Log.e(TAG, String.format("HAT EVENT %d, %d", hatX, hatY));
queueEvent(new Runnable() {
@Override
@@ -363,8 +367,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
return super.onGenericMotionEvent(event);
};
-
- private void init(boolean translucent, int depth, int stencil) {
+ private void init(boolean translucent, int depth, int stencil) {
this.setFocusableInTouchMode(true);
/* By default, GLSurfaceView() creates a RGB_565 opaque surface.
@@ -388,14 +391,14 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
*/
if (use_32) {
- setEGLConfigChooser( translucent ?
- new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(8, 8, 8, 8, 16, stencil)) :
- new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(5, 6, 5, 0, 16, stencil)) );
+ setEGLConfigChooser(translucent ?
+ new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(8, 8, 8, 8, 16, stencil)) :
+ new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(5, 6, 5, 0, 16, stencil)));
} else {
- setEGLConfigChooser( translucent ?
- new ConfigChooser(8, 8, 8, 8, 16, stencil) :
- new ConfigChooser(5, 6, 5, 0, 16, stencil) );
+ setEGLConfigChooser(translucent ?
+ new ConfigChooser(8, 8, 8, 8, 16, stencil) :
+ new ConfigChooser(5, 6, 5, 0, 16, stencil));
}
/* Set the renderer responsible for frame rendering */
@@ -403,33 +406,33 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
}
private static class ContextFactory implements GLSurfaceView.EGLContextFactory {
- private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
- public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
- if (use_gl3)
- Log.w(TAG, "creating OpenGL ES 3.0 context :");
- else
- Log.w(TAG, "creating OpenGL ES 2.0 context :");
-
- checkEglError("Before eglCreateContext", egl);
- int[] attrib_list2 = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
- int[] attrib_list3 = {EGL_CONTEXT_CLIENT_VERSION, 3, EGL10.EGL_NONE };
- EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, use_gl3?attrib_list3:attrib_list2);
- checkEglError("After eglCreateContext", egl);
- return context;
- }
+ private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
+ public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
+ if (use_gl3)
+ Log.w(TAG, "creating OpenGL ES 3.0 context :");
+ else
+ Log.w(TAG, "creating OpenGL ES 2.0 context :");
+
+ checkEglError("Before eglCreateContext", egl);
+ int[] attrib_list2 = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
+ int[] attrib_list3 = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL10.EGL_NONE };
+ EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, use_gl3 ? attrib_list3 : attrib_list2);
+ checkEglError("After eglCreateContext", egl);
+ return context;
+ }
- public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) {
- egl.eglDestroyContext(display, context);
+ public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) {
+ egl.eglDestroyContext(display, context);
+ }
}
- }
- private static void checkEglError(String prompt, EGL10 egl) {
- int error;
- while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) {
- Log.e(TAG, String.format("%s: EGL error: 0x%x", prompt, error));
+ private static void checkEglError(String prompt, EGL10 egl) {
+ int error;
+ while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) {
+ Log.e(TAG, String.format("%s: EGL error: 0x%x", prompt, error));
+ }
}
- }
- /* Fallback if 32bit View is not supported*/
+ /* Fallback if 32bit View is not supported*/
private static class FallbackConfigChooser extends ConfigChooser {
private ConfigChooser fallback;
@@ -438,17 +441,17 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
this.fallback = fallback;
}
- @Override
+ @Override
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display, EGLConfig[] configs) {
EGLConfig ec = super.chooseConfig(egl, display, configs);
if (ec == null) {
- Log.w(TAG, "Trying ConfigChooser fallback");
- ec = fallback.chooseConfig(egl, display, configs);
- use_32=false;
+ Log.w(TAG, "Trying ConfigChooser fallback");
+ ec = fallback.chooseConfig(egl, display, configs);
+ use_32 = false;
}
return ec;
- }
- }
+ }
+ }
private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser {
@@ -467,46 +470,46 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
*/
private static int EGL_OPENGL_ES2_BIT = 4;
private static int[] s_configAttribs2 =
- {
- EGL10.EGL_RED_SIZE, 4,
- EGL10.EGL_GREEN_SIZE, 4,
- EGL10.EGL_BLUE_SIZE, 4,
- // EGL10.EGL_DEPTH_SIZE, 16,
- // EGL10.EGL_STENCIL_SIZE, EGL10.EGL_DONT_CARE,
- EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
- EGL10.EGL_NONE
- };
+ {
+ EGL10.EGL_RED_SIZE, 4,
+ EGL10.EGL_GREEN_SIZE, 4,
+ EGL10.EGL_BLUE_SIZE, 4,
+ // EGL10.EGL_DEPTH_SIZE, 16,
+ // EGL10.EGL_STENCIL_SIZE, EGL10.EGL_DONT_CARE,
+ EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL10.EGL_NONE
+ };
private static int[] s_configAttribs3 =
- {
- EGL10.EGL_RED_SIZE, 4,
- EGL10.EGL_GREEN_SIZE, 4,
- EGL10.EGL_BLUE_SIZE, 4,
- // EGL10.EGL_DEPTH_SIZE, 16,
- // EGL10.EGL_STENCIL_SIZE, EGL10.EGL_DONT_CARE,
- EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, //apparently there is no EGL_OPENGL_ES3_BIT
- EGL10.EGL_NONE
- };
+ {
+ EGL10.EGL_RED_SIZE, 4,
+ EGL10.EGL_GREEN_SIZE, 4,
+ EGL10.EGL_BLUE_SIZE, 4,
+ // EGL10.EGL_DEPTH_SIZE, 16,
+ // EGL10.EGL_STENCIL_SIZE, EGL10.EGL_DONT_CARE,
+ EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, //apparently there is no EGL_OPENGL_ES3_BIT
+ EGL10.EGL_NONE
+ };
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
/* Get the number of minimally matching EGL configurations
*/
int[] num_config = new int[1];
- egl.eglChooseConfig(display, use_gl3?s_configAttribs3:s_configAttribs2, null, 0, num_config);
+ egl.eglChooseConfig(display, use_gl3 ? s_configAttribs3 : s_configAttribs2, null, 0, num_config);
int numConfigs = num_config[0];
if (numConfigs <= 0) {
- throw new IllegalArgumentException("No configs match configSpec");
+ throw new IllegalArgumentException("No configs match configSpec");
}
/* Allocate then read the array of minimally matching EGL configs
*/
EGLConfig[] configs = new EGLConfig[numConfigs];
- egl.eglChooseConfig(display, use_gl3?s_configAttribs3:s_configAttribs2, configs, numConfigs, num_config);
+ egl.eglChooseConfig(display, use_gl3 ? s_configAttribs3 : s_configAttribs2, configs, numConfigs, num_config);
if (DEBUG) {
- printConfigs(egl, display, configs);
+ printConfigs(egl, display, configs);
}
/* Now return the "best" one
*/
@@ -514,54 +517,54 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
}
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display,
- EGLConfig[] configs) {
- for(EGLConfig config : configs) {
- int d = findConfigAttrib(egl, display, config,
- EGL10.EGL_DEPTH_SIZE, 0);
- int s = findConfigAttrib(egl, display, config,
- EGL10.EGL_STENCIL_SIZE, 0);
-
- // We need at least mDepthSize and mStencilSize bits
- if (d < mDepthSize || s < mStencilSize)
- continue;
-
- // We want an *exact* match for red/green/blue/alpha
- int r = findConfigAttrib(egl, display, config,
- EGL10.EGL_RED_SIZE, 0);
- int g = findConfigAttrib(egl, display, config,
- EGL10.EGL_GREEN_SIZE, 0);
- int b = findConfigAttrib(egl, display, config,
- EGL10.EGL_BLUE_SIZE, 0);
- int a = findConfigAttrib(egl, display, config,
- EGL10.EGL_ALPHA_SIZE, 0);
-
- if (r == mRedSize && g == mGreenSize && b == mBlueSize && a == mAlphaSize)
- return config;
+ EGLConfig[] configs) {
+ for (EGLConfig config : configs) {
+ int d = findConfigAttrib(egl, display, config,
+ EGL10.EGL_DEPTH_SIZE, 0);
+ int s = findConfigAttrib(egl, display, config,
+ EGL10.EGL_STENCIL_SIZE, 0);
+
+ // We need at least mDepthSize and mStencilSize bits
+ if (d < mDepthSize || s < mStencilSize)
+ continue;
+
+ // We want an *exact* match for red/green/blue/alpha
+ int r = findConfigAttrib(egl, display, config,
+ EGL10.EGL_RED_SIZE, 0);
+ int g = findConfigAttrib(egl, display, config,
+ EGL10.EGL_GREEN_SIZE, 0);
+ int b = findConfigAttrib(egl, display, config,
+ EGL10.EGL_BLUE_SIZE, 0);
+ int a = findConfigAttrib(egl, display, config,
+ EGL10.EGL_ALPHA_SIZE, 0);
+
+ if (r == mRedSize && g == mGreenSize && b == mBlueSize && a == mAlphaSize)
+ return config;
}
return null;
}
private int findConfigAttrib(EGL10 egl, EGLDisplay display,
- EGLConfig config, int attribute, int defaultValue) {
+ EGLConfig config, int attribute, int defaultValue) {
if (egl.eglGetConfigAttrib(display, config, attribute, mValue)) {
- return mValue[0];
+ return mValue[0];
}
return defaultValue;
}
private void printConfigs(EGL10 egl, EGLDisplay display,
- EGLConfig[] configs) {
+ EGLConfig[] configs) {
int numConfigs = configs.length;
Log.w(TAG, String.format("%d configurations", numConfigs));
for (int i = 0; i < numConfigs; i++) {
- Log.w(TAG, String.format("Configuration %d:\n", i));
- printConfig(egl, display, configs[i]);
+ Log.w(TAG, String.format("Configuration %d:\n", i));
+ printConfig(egl, display, configs[i]);
}
}
private void printConfig(EGL10 egl, EGLDisplay display,
- EGLConfig config) {
+ EGLConfig config) {
int[] attributes = {
EGL10.EGL_BUFFER_SIZE,
EGL10.EGL_ALPHA_SIZE,
@@ -634,14 +637,15 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
};
int[] value = new int[1];
for (int i = 0; i < attributes.length; i++) {
- int attribute = attributes[i];
- String name = names[i];
- if ( egl.eglGetConfigAttrib(display, config, attribute, value)) {
- Log.w(TAG, String.format(" %s: %d\n", name, value[0]));
- } else {
- // Log.w(TAG, String.format(" %s: failed\n", name));
- while (egl.eglGetError() != EGL10.EGL_SUCCESS);
- }
+ int attribute = attributes[i];
+ String name = names[i];
+ if (egl.eglGetConfigAttrib(display, config, attribute, value)) {
+ Log.w(TAG, String.format(" %s: %d\n", name, value[0]));
+ } else {
+ // Log.w(TAG, String.format(" %s: failed\n", name));
+ while (egl.eglGetError() != EGL10.EGL_SUCCESS)
+ ;
+ }
}
}
@@ -657,19 +661,18 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
private static class Renderer implements GLSurfaceView.Renderer {
-
public void onDrawFrame(GL10 gl) {
GodotLib.step();
- for(int i=0;i<Godot.singleton_count;i++) {
+ for (int i = 0; i < Godot.singleton_count; i++) {
Godot.singletons[i].onGLDrawFrame(gl);
}
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
- GodotLib.resize(width, height,!firsttime);
- firsttime=false;
- for(int i=0;i<Godot.singleton_count;i++) {
+ GodotLib.resize(width, height, !firsttime);
+ firsttime = false;
+ for (int i = 0; i < Godot.singleton_count; i++) {
Godot.singletons[i].onGLSurfaceChanged(gl, width, height);
}
}
diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java b/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java
index d8a3ac5591..9e062d89c6 100644
--- a/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java
+++ b/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java
@@ -70,42 +70,37 @@ public class GodotEditText extends EditText {
super(context, attrs, defStyle);
this.initView();
}
-
+
protected void initView() {
- this.setPadding(0, 0, 0, 0);
+ this.setPadding(0, 0, 0, 0);
this.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
-
+
sHandler = new Handler() {
@Override
public void handleMessage(final Message msg) {
switch (msg.what) {
- case HANDLER_OPEN_IME_KEYBOARD:
- {
- GodotEditText edit = (GodotEditText) msg.obj;
- String text = edit.mOriginText;
- if (edit.requestFocus())
- {
- edit.removeTextChangedListener(edit.mInputWrapper);
- edit.setText("");
- edit.append(text);
- edit.mInputWrapper.setOriginText(text);
- edit.addTextChangedListener(edit.mInputWrapper);
- final InputMethodManager imm = (InputMethodManager) mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(edit, 0);
- }
+ case HANDLER_OPEN_IME_KEYBOARD: {
+ GodotEditText edit = (GodotEditText)msg.obj;
+ String text = edit.mOriginText;
+ if (edit.requestFocus()) {
+ edit.removeTextChangedListener(edit.mInputWrapper);
+ edit.setText("");
+ edit.append(text);
+ edit.mInputWrapper.setOriginText(text);
+ edit.addTextChangedListener(edit.mInputWrapper);
+ final InputMethodManager imm = (InputMethodManager)mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(edit, 0);
}
- break;
-
- case HANDLER_CLOSE_IME_KEYBOARD:
- {
- GodotEditText edit = (GodotEditText) msg.obj;
-
- edit.removeTextChangedListener(mInputWrapper);
- final InputMethodManager imm = (InputMethodManager) mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
- edit.mView.requestFocus();
- }
- break;
+ } break;
+
+ case HANDLER_CLOSE_IME_KEYBOARD: {
+ GodotEditText edit = (GodotEditText)msg.obj;
+
+ edit.removeTextChangedListener(mInputWrapper);
+ final InputMethodManager imm = (InputMethodManager)mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
+ edit.mView.requestFocus();
+ } break;
}
}
};
@@ -116,7 +111,7 @@ public class GodotEditText extends EditText {
// ===========================================================
public void setView(final GodotView view) {
this.mView = view;
- if(mInputWrapper == null)
+ if (mInputWrapper == null)
mInputWrapper = new GodotTextInputWrapper(mView, this);
this.setOnEditorActionListener(mInputWrapper);
view.requestFocus();
@@ -125,7 +120,7 @@ public class GodotEditText extends EditText {
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
- @Override
+ @Override
public boolean onKeyDown(final int keyCode, final KeyEvent keyEvent) {
super.onKeyDown(keyCode, keyEvent);
@@ -142,7 +137,7 @@ public class GodotEditText extends EditText {
// ===========================================================
public void showKeyboard(String p_existing_text) {
this.mOriginText = p_existing_text;
-
+
final Message msg = new Message();
msg.what = HANDLER_OPEN_IME_KEYBOARD;
msg.obj = this;
@@ -155,7 +150,7 @@ public class GodotEditText extends EditText {
msg.obj = this;
sHandler.sendMessage(msg);
}
-
+
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java
index ac424ab9f8..8e34d9e9e7 100644
--- a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java
+++ b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java
@@ -67,7 +67,7 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene
private boolean isFullScreenEdit() {
final TextView textField = this.mEdit;
- final InputMethodManager imm = (InputMethodManager) textField.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ final InputMethodManager imm = (InputMethodManager)textField.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
return imm.isFullscreenMode();
}
@@ -81,7 +81,6 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene
@Override
public void afterTextChanged(final Editable s) {
-
}
@Override
diff --git a/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java b/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java
index 4615d2fbb5..0a876d2b7f 100644
--- a/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java
+++ b/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java
@@ -23,118 +23,118 @@ import android.view.InputDevice;
import android.view.MotionEvent;
public interface InputManagerCompat {
- /**
- * Gets information about the input device with the specified id.
- *
- * @param id The device id
- * @return The input device or null if not found
- */
- public InputDevice getInputDevice(int id);
+ /**
+ * Gets information about the input device with the specified id.
+ *
+ * @param id The device id
+ * @return The input device or null if not found
+ */
+ public InputDevice getInputDevice(int id);
- /**
- * Gets the ids of all input devices in the system.
- *
- * @return The input device ids.
- */
- public int[] getInputDeviceIds();
+ /**
+ * Gets the ids of all input devices in the system.
+ *
+ * @return The input device ids.
+ */
+ public int[] getInputDeviceIds();
- /**
- * Registers an input device listener to receive notifications about when
- * input devices are added, removed or changed.
- *
- * @param listener The listener to register.
- * @param handler The handler on which the listener should be invoked, or
- * null if the listener should be invoked on the calling thread's
- * looper.
- */
- public void registerInputDeviceListener(InputManagerCompat.InputDeviceListener listener,
- Handler handler);
+ /**
+ * Registers an input device listener to receive notifications about when
+ * input devices are added, removed or changed.
+ *
+ * @param listener The listener to register.
+ * @param handler The handler on which the listener should be invoked, or
+ * null if the listener should be invoked on the calling thread's
+ * looper.
+ */
+ public void registerInputDeviceListener(InputManagerCompat.InputDeviceListener listener,
+ Handler handler);
- /**
- * Unregisters an input device listener.
- *
- * @param listener The listener to unregister.
- */
- public void unregisterInputDeviceListener(InputManagerCompat.InputDeviceListener listener);
+ /**
+ * Unregisters an input device listener.
+ *
+ * @param listener The listener to unregister.
+ */
+ public void unregisterInputDeviceListener(InputManagerCompat.InputDeviceListener listener);
- /*
- * The following three calls are to simulate V16 behavior on pre-Jellybean
- * devices. If you don't call them, your callback will never be called
- * pre-API 16.
- */
+ /*
+ * The following three calls are to simulate V16 behavior on pre-Jellybean
+ * devices. If you don't call them, your callback will never be called
+ * pre-API 16.
+ */
- /**
- * Pass the motion events to the InputManagerCompat. This is used to
- * optimize for polling for controllers. If you do not pass these events in,
- * polling will cause regular object creation.
- *
- * @param event the motion event from the app
- */
- public void onGenericMotionEvent(MotionEvent event);
+ /**
+ * Pass the motion events to the InputManagerCompat. This is used to
+ * optimize for polling for controllers. If you do not pass these events in,
+ * polling will cause regular object creation.
+ *
+ * @param event the motion event from the app
+ */
+ public void onGenericMotionEvent(MotionEvent event);
- /**
- * Tell the V9 input manager that it should stop polling for disconnected
- * devices. You can call this during onPause in your activity, although you
- * might want to call it whenever your game is not active (or whenever you
- * don't care about being notified of new input devices)
- */
- public void onPause();
+ /**
+ * Tell the V9 input manager that it should stop polling for disconnected
+ * devices. You can call this during onPause in your activity, although you
+ * might want to call it whenever your game is not active (or whenever you
+ * don't care about being notified of new input devices)
+ */
+ public void onPause();
- /**
- * Tell the V9 input manager that it should start polling for disconnected
- * devices. You can call this during onResume in your activity, although you
- * might want to call it less often (only when the gameplay is actually
- * active)
- */
- public void onResume();
+ /**
+ * Tell the V9 input manager that it should start polling for disconnected
+ * devices. You can call this during onResume in your activity, although you
+ * might want to call it less often (only when the gameplay is actually
+ * active)
+ */
+ public void onResume();
- public interface InputDeviceListener {
- /**
- * Called whenever the input manager detects that a device has been
- * added. This will only be called in the V9 version when a motion event
- * is detected.
- *
- * @param deviceId The id of the input device that was added.
- */
- void onInputDeviceAdded(int deviceId);
+ public interface InputDeviceListener {
+ /**
+ * Called whenever the input manager detects that a device has been
+ * added. This will only be called in the V9 version when a motion event
+ * is detected.
+ *
+ * @param deviceId The id of the input device that was added.
+ */
+ void onInputDeviceAdded(int deviceId);
- /**
- * Called whenever the properties of an input device have changed since
- * they were last queried. This will not be called for the V9 version of
- * the API.
- *
- * @param deviceId The id of the input device that changed.
- */
- void onInputDeviceChanged(int deviceId);
+ /**
+ * Called whenever the properties of an input device have changed since
+ * they were last queried. This will not be called for the V9 version of
+ * the API.
+ *
+ * @param deviceId The id of the input device that changed.
+ */
+ void onInputDeviceChanged(int deviceId);
- /**
- * Called whenever the input manager detects that a device has been
- * removed. For the V9 version, this can take some time depending on the
- * poll rate.
- *
- * @param deviceId The id of the input device that was removed.
- */
- void onInputDeviceRemoved(int deviceId);
- }
+ /**
+ * Called whenever the input manager detects that a device has been
+ * removed. For the V9 version, this can take some time depending on the
+ * poll rate.
+ *
+ * @param deviceId The id of the input device that was removed.
+ */
+ void onInputDeviceRemoved(int deviceId);
+ }
- /**
- * Use this to construct a compatible InputManager.
- */
- public static class Factory {
+ /**
+ * Use this to construct a compatible InputManager.
+ */
+ public static class Factory {
- /**
- * Constructs and returns a compatible InputManger
- *
- * @param context the Context that will be used to get the system
- * service from
- * @return a compatible implementation of InputManager
- */
- public static InputManagerCompat getInputManager(Context context) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- return new InputManagerV16(context);
- } else {
- return new InputManagerV9();
- }
- }
- }
+ /**
+ * Constructs and returns a compatible InputManger
+ *
+ * @param context the Context that will be used to get the system
+ * service from
+ * @return a compatible implementation of InputManager
+ */
+ public static InputManagerCompat getInputManager(Context context) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ return new InputManagerV16(context);
+ } else {
+ return new InputManagerV9();
+ }
+ }
+ }
}
diff --git a/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java b/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java
index f05701f455..3b88609cc9 100644
--- a/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java
+++ b/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java
@@ -30,78 +30,74 @@ import java.util.Map;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public class InputManagerV16 implements InputManagerCompat {
- private final InputManager mInputManager;
- private final Map<InputManagerCompat.InputDeviceListener, V16InputDeviceListener> mListeners;
-
- public InputManagerV16(Context context) {
- mInputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE);
- mListeners = new HashMap<InputManagerCompat.InputDeviceListener, V16InputDeviceListener>();
- }
-
- @Override
- public InputDevice getInputDevice(int id) {
- return mInputManager.getInputDevice(id);
- }
-
- @Override
- public int[] getInputDeviceIds() {
- return mInputManager.getInputDeviceIds();
- }
-
- static class V16InputDeviceListener implements InputManager.InputDeviceListener {
- final InputManagerCompat.InputDeviceListener mIDL;
-
- public V16InputDeviceListener(InputDeviceListener idl) {
- mIDL = idl;
- }
-
- @Override
- public void onInputDeviceAdded(int deviceId) {
- mIDL.onInputDeviceAdded(deviceId);
- }
-
- @Override
- public void onInputDeviceChanged(int deviceId) {
- mIDL.onInputDeviceChanged(deviceId);
- }
-
- @Override
- public void onInputDeviceRemoved(int deviceId) {
- mIDL.onInputDeviceRemoved(deviceId);
- }
-
- }
-
- @Override
- public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) {
- V16InputDeviceListener v16Listener = new V16InputDeviceListener(listener);
- mInputManager.registerInputDeviceListener(v16Listener, handler);
- mListeners.put(listener, v16Listener);
- }
-
- @Override
- public void unregisterInputDeviceListener(InputDeviceListener listener) {
- V16InputDeviceListener curListener = mListeners.remove(listener);
- if (null != curListener)
- {
- mInputManager.unregisterInputDeviceListener(curListener);
- }
-
- }
-
- @Override
- public void onGenericMotionEvent(MotionEvent event) {
- // unused in V16
- }
-
- @Override
- public void onPause() {
- // unused in V16
- }
-
- @Override
- public void onResume() {
- // unused in V16
- }
-
+ private final InputManager mInputManager;
+ private final Map<InputManagerCompat.InputDeviceListener, V16InputDeviceListener> mListeners;
+
+ public InputManagerV16(Context context) {
+ mInputManager = (InputManager)context.getSystemService(Context.INPUT_SERVICE);
+ mListeners = new HashMap<InputManagerCompat.InputDeviceListener, V16InputDeviceListener>();
+ }
+
+ @Override
+ public InputDevice getInputDevice(int id) {
+ return mInputManager.getInputDevice(id);
+ }
+
+ @Override
+ public int[] getInputDeviceIds() {
+ return mInputManager.getInputDeviceIds();
+ }
+
+ static class V16InputDeviceListener implements InputManager.InputDeviceListener {
+ final InputManagerCompat.InputDeviceListener mIDL;
+
+ public V16InputDeviceListener(InputDeviceListener idl) {
+ mIDL = idl;
+ }
+
+ @Override
+ public void onInputDeviceAdded(int deviceId) {
+ mIDL.onInputDeviceAdded(deviceId);
+ }
+
+ @Override
+ public void onInputDeviceChanged(int deviceId) {
+ mIDL.onInputDeviceChanged(deviceId);
+ }
+
+ @Override
+ public void onInputDeviceRemoved(int deviceId) {
+ mIDL.onInputDeviceRemoved(deviceId);
+ }
+ }
+
+ @Override
+ public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) {
+ V16InputDeviceListener v16Listener = new V16InputDeviceListener(listener);
+ mInputManager.registerInputDeviceListener(v16Listener, handler);
+ mListeners.put(listener, v16Listener);
+ }
+
+ @Override
+ public void unregisterInputDeviceListener(InputDeviceListener listener) {
+ V16InputDeviceListener curListener = mListeners.remove(listener);
+ if (null != curListener) {
+ mInputManager.unregisterInputDeviceListener(curListener);
+ }
+ }
+
+ @Override
+ public void onGenericMotionEvent(MotionEvent event) {
+ // unused in V16
+ }
+
+ @Override
+ public void onPause() {
+ // unused in V16
+ }
+
+ @Override
+ public void onResume() {
+ // unused in V16
+ }
}
diff --git a/platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java b/platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java
index 0334c00997..a1418c5899 100644
--- a/platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java
+++ b/platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java
@@ -31,181 +31,179 @@ import java.util.Map;
import java.util.Queue;
public class InputManagerV9 implements InputManagerCompat {
- private static final String LOG_TAG = "InputManagerV9";
- private static final int MESSAGE_TEST_FOR_DISCONNECT = 101;
- private static final long CHECK_ELAPSED_TIME = 3000L;
-
- private static final int ON_DEVICE_ADDED = 0;
- private static final int ON_DEVICE_CHANGED = 1;
- private static final int ON_DEVICE_REMOVED = 2;
-
- private final SparseArray<long[]> mDevices;
- private final Map<InputDeviceListener, Handler> mListeners;
- private final Handler mDefaultHandler;
-
- private static class PollingMessageHandler extends Handler {
- private final WeakReference<InputManagerV9> mInputManager;
-
- PollingMessageHandler(InputManagerV9 im) {
- mInputManager = new WeakReference<InputManagerV9>(im);
- }
-
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- switch (msg.what) {
- case MESSAGE_TEST_FOR_DISCONNECT:
- InputManagerV9 imv = mInputManager.get();
- if (null != imv) {
- long time = SystemClock.elapsedRealtime();
- int size = imv.mDevices.size();
- for (int i = 0; i < size; i++) {
- long[] lastContact = imv.mDevices.valueAt(i);
- if (null != lastContact) {
- if (time - lastContact[0] > CHECK_ELAPSED_TIME) {
- // check to see if the device has been
- // disconnected
- int id = imv.mDevices.keyAt(i);
- if (null == InputDevice.getDevice(id)) {
- // disconnected!
- imv.notifyListeners(ON_DEVICE_REMOVED, id);
- imv.mDevices.remove(id);
- } else {
- lastContact[0] = time;
- }
- }
- }
- }
- sendEmptyMessageDelayed(MESSAGE_TEST_FOR_DISCONNECT,
- CHECK_ELAPSED_TIME);
- }
- break;
- }
- }
-
- }
-
- public InputManagerV9() {
- mDevices = new SparseArray<long[]>();
- mListeners = new HashMap<InputDeviceListener, Handler>();
- mDefaultHandler = new PollingMessageHandler(this);
- // as a side-effect, populates our collection of watched
- // input devices
- getInputDeviceIds();
- }
-
- @Override
- public InputDevice getInputDevice(int id) {
- return InputDevice.getDevice(id);
- }
-
- @Override
- public int[] getInputDeviceIds() {
- // add any hitherto unknown devices to our
- // collection of watched input devices
- int[] activeDevices = InputDevice.getDeviceIds();
- long time = SystemClock.elapsedRealtime();
- for ( int id : activeDevices ) {
- long[] lastContact = mDevices.get(id);
- if ( null == lastContact ) {
- // we have a new device
- mDevices.put(id, new long[] { time });
- }
- }
- return activeDevices;
- }
-
- @Override
- public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) {
- mListeners.remove(listener);
- if (handler == null) {
- handler = mDefaultHandler;
- }
- mListeners.put(listener, handler);
- }
-
- @Override
- public void unregisterInputDeviceListener(InputDeviceListener listener) {
- mListeners.remove(listener);
- }
-
- private void notifyListeners(int why, int deviceId) {
- // the state of some device has changed
- if (!mListeners.isEmpty()) {
- // yes... this will cause an object to get created... hopefully
- // it won't happen very often
- for (InputDeviceListener listener : mListeners.keySet()) {
- Handler handler = mListeners.get(listener);
- DeviceEvent odc = DeviceEvent.getDeviceEvent(why, deviceId, listener);
- handler.post(odc);
- }
- }
- }
-
- private static class DeviceEvent implements Runnable {
- private int mMessageType;
- private int mId;
- private InputDeviceListener mListener;
- private static Queue<DeviceEvent> sEventQueue = new ArrayDeque<DeviceEvent>();
-
- private DeviceEvent() {
- }
-
- static DeviceEvent getDeviceEvent(int messageType, int id,
- InputDeviceListener listener) {
- DeviceEvent curChanged = sEventQueue.poll();
- if (null == curChanged) {
- curChanged = new DeviceEvent();
- }
- curChanged.mMessageType = messageType;
- curChanged.mId = id;
- curChanged.mListener = listener;
- return curChanged;
- }
-
- @Override
- public void run() {
- switch (mMessageType) {
- case ON_DEVICE_ADDED:
- mListener.onInputDeviceAdded(mId);
- break;
- case ON_DEVICE_CHANGED:
- mListener.onInputDeviceChanged(mId);
- break;
- case ON_DEVICE_REMOVED:
- mListener.onInputDeviceRemoved(mId);
- break;
- default:
- Log.e(LOG_TAG, "Unknown Message Type");
- break;
- }
- // dump this runnable back in the queue
- sEventQueue.offer(this);
- }
- }
-
- @Override
- public void onGenericMotionEvent(MotionEvent event) {
- // detect new devices
- int id = event.getDeviceId();
- long[] timeArray = mDevices.get(id);
- if (null == timeArray) {
- notifyListeners(ON_DEVICE_ADDED, id);
- timeArray = new long[1];
- mDevices.put(id, timeArray);
- }
- long time = SystemClock.elapsedRealtime();
- timeArray[0] = time;
- }
-
- @Override
- public void onPause() {
- mDefaultHandler.removeMessages(MESSAGE_TEST_FOR_DISCONNECT);
- }
-
- @Override
- public void onResume() {
- mDefaultHandler.sendEmptyMessage(MESSAGE_TEST_FOR_DISCONNECT);
- }
-
+ private static final String LOG_TAG = "InputManagerV9";
+ private static final int MESSAGE_TEST_FOR_DISCONNECT = 101;
+ private static final long CHECK_ELAPSED_TIME = 3000L;
+
+ private static final int ON_DEVICE_ADDED = 0;
+ private static final int ON_DEVICE_CHANGED = 1;
+ private static final int ON_DEVICE_REMOVED = 2;
+
+ private final SparseArray<long[]> mDevices;
+ private final Map<InputDeviceListener, Handler> mListeners;
+ private final Handler mDefaultHandler;
+
+ private static class PollingMessageHandler extends Handler {
+ private final WeakReference<InputManagerV9> mInputManager;
+
+ PollingMessageHandler(InputManagerV9 im) {
+ mInputManager = new WeakReference<InputManagerV9>(im);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ switch (msg.what) {
+ case MESSAGE_TEST_FOR_DISCONNECT:
+ InputManagerV9 imv = mInputManager.get();
+ if (null != imv) {
+ long time = SystemClock.elapsedRealtime();
+ int size = imv.mDevices.size();
+ for (int i = 0; i < size; i++) {
+ long[] lastContact = imv.mDevices.valueAt(i);
+ if (null != lastContact) {
+ if (time - lastContact[0] > CHECK_ELAPSED_TIME) {
+ // check to see if the device has been
+ // disconnected
+ int id = imv.mDevices.keyAt(i);
+ if (null == InputDevice.getDevice(id)) {
+ // disconnected!
+ imv.notifyListeners(ON_DEVICE_REMOVED, id);
+ imv.mDevices.remove(id);
+ } else {
+ lastContact[0] = time;
+ }
+ }
+ }
+ }
+ sendEmptyMessageDelayed(MESSAGE_TEST_FOR_DISCONNECT,
+ CHECK_ELAPSED_TIME);
+ }
+ break;
+ }
+ }
+ }
+
+ public InputManagerV9() {
+ mDevices = new SparseArray<long[]>();
+ mListeners = new HashMap<InputDeviceListener, Handler>();
+ mDefaultHandler = new PollingMessageHandler(this);
+ // as a side-effect, populates our collection of watched
+ // input devices
+ getInputDeviceIds();
+ }
+
+ @Override
+ public InputDevice getInputDevice(int id) {
+ return InputDevice.getDevice(id);
+ }
+
+ @Override
+ public int[] getInputDeviceIds() {
+ // add any hitherto unknown devices to our
+ // collection of watched input devices
+ int[] activeDevices = InputDevice.getDeviceIds();
+ long time = SystemClock.elapsedRealtime();
+ for (int id : activeDevices) {
+ long[] lastContact = mDevices.get(id);
+ if (null == lastContact) {
+ // we have a new device
+ mDevices.put(id, new long[] { time });
+ }
+ }
+ return activeDevices;
+ }
+
+ @Override
+ public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) {
+ mListeners.remove(listener);
+ if (handler == null) {
+ handler = mDefaultHandler;
+ }
+ mListeners.put(listener, handler);
+ }
+
+ @Override
+ public void unregisterInputDeviceListener(InputDeviceListener listener) {
+ mListeners.remove(listener);
+ }
+
+ private void notifyListeners(int why, int deviceId) {
+ // the state of some device has changed
+ if (!mListeners.isEmpty()) {
+ // yes... this will cause an object to get created... hopefully
+ // it won't happen very often
+ for (InputDeviceListener listener : mListeners.keySet()) {
+ Handler handler = mListeners.get(listener);
+ DeviceEvent odc = DeviceEvent.getDeviceEvent(why, deviceId, listener);
+ handler.post(odc);
+ }
+ }
+ }
+
+ private static class DeviceEvent implements Runnable {
+ private int mMessageType;
+ private int mId;
+ private InputDeviceListener mListener;
+ private static Queue<DeviceEvent> sEventQueue = new ArrayDeque<DeviceEvent>();
+
+ private DeviceEvent() {
+ }
+
+ static DeviceEvent getDeviceEvent(int messageType, int id,
+ InputDeviceListener listener) {
+ DeviceEvent curChanged = sEventQueue.poll();
+ if (null == curChanged) {
+ curChanged = new DeviceEvent();
+ }
+ curChanged.mMessageType = messageType;
+ curChanged.mId = id;
+ curChanged.mListener = listener;
+ return curChanged;
+ }
+
+ @Override
+ public void run() {
+ switch (mMessageType) {
+ case ON_DEVICE_ADDED:
+ mListener.onInputDeviceAdded(mId);
+ break;
+ case ON_DEVICE_CHANGED:
+ mListener.onInputDeviceChanged(mId);
+ break;
+ case ON_DEVICE_REMOVED:
+ mListener.onInputDeviceRemoved(mId);
+ break;
+ default:
+ Log.e(LOG_TAG, "Unknown Message Type");
+ break;
+ }
+ // dump this runnable back in the queue
+ sEventQueue.offer(this);
+ }
+ }
+
+ @Override
+ public void onGenericMotionEvent(MotionEvent event) {
+ // detect new devices
+ int id = event.getDeviceId();
+ long[] timeArray = mDevices.get(id);
+ if (null == timeArray) {
+ notifyListeners(ON_DEVICE_ADDED, id);
+ timeArray = new long[1];
+ mDevices.put(id, timeArray);
+ }
+ long time = SystemClock.elapsedRealtime();
+ timeArray[0] = time;
+ }
+
+ @Override
+ public void onPause() {
+ mDefaultHandler.removeMessages(MESSAGE_TEST_FOR_DISCONNECT);
+ }
+
+ @Override
+ public void onResume() {
+ mDefaultHandler.sendEmptyMessage(MESSAGE_TEST_FOR_DISCONNECT);
+ }
}
diff --git a/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java b/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java
index 8622f4ccff..d6f26e19b2 100644
--- a/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java
+++ b/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java
@@ -39,33 +39,32 @@ import android.util.Log;
abstract public class ConsumeTask {
private Context context;
-
+
private IInAppBillingService mService;
- public ConsumeTask(IInAppBillingService mService, Context context ){
+ public ConsumeTask(IInAppBillingService mService, Context context) {
this.context = context;
this.mService = mService;
}
-
- public void consume(final String sku){
+ public void consume(final String sku) {
//Log.d("XXX", "Consuming product " + sku);
PaymentsCache pc = new PaymentsCache(context);
Boolean isBlocked = pc.getConsumableFlag("block", sku);
String _token = pc.getConsumableValue("token", sku);
- //Log.d("XXX", "token " + _token);
- if(!isBlocked && _token == null){
+ //Log.d("XXX", "token " + _token);
+ if (!isBlocked && _token == null) {
//_token = "inapp:"+context.getPackageName()+":android.test.purchased";
//Log.d("XXX", "Consuming product " + sku + " with token " + _token);
- }else if(!isBlocked){
+ } else if (!isBlocked) {
//Log.d("XXX", "It is not blocked ¿?");
return;
- }else if(_token == null){
+ } else if (_token == null) {
//Log.d("XXX", "No token available");
this.error("No token for sku:" + sku);
return;
}
final String token = _token;
- new AsyncTask<String, String, String>(){
+ new AsyncTask<String, String, String>() {
@Override
protected String doInBackground(String... params) {
@@ -73,28 +72,27 @@ abstract public class ConsumeTask {
//Log.d("XXX", "Requesting to release item.");
int response = mService.consumePurchase(3, context.getPackageName(), token);
//Log.d("XXX", "release response code: " + response);
- if(response == 0 || response == 8){
+ if (response == 0 || response == 8) {
return null;
}
} catch (RemoteException e) {
return e.getMessage();
-
}
return "Some error";
}
-
- protected void onPostExecute(String param){
- if(param == null){
- success( new PaymentsCache(context).getConsumableValue("ticket", sku) );
- }else{
+
+ protected void onPostExecute(String param) {
+ if (param == null) {
+ success(new PaymentsCache(context).getConsumableValue("ticket", sku));
+ } else {
error(param);
}
}
-
- }.execute();
+
+ }
+ .execute();
}
-
+
abstract protected void success(String ticket);
abstract protected void error(String message);
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java b/platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java
index 0afe35510c..31f6396738 100644
--- a/platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java
+++ b/platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java
@@ -36,15 +36,12 @@ import android.os.AsyncTask;
import android.os.RemoteException;
import android.util.Log;
-abstract public class GenericConsumeTask extends AsyncTask<String, String, String>{
+abstract public class GenericConsumeTask extends AsyncTask<String, String, String> {
private Context context;
private IInAppBillingService mService;
-
-
-
- public GenericConsumeTask(Context context, IInAppBillingService mService, String sku, String receipt, String signature, String token){
+ public GenericConsumeTask(Context context, IInAppBillingService mService, String sku, String receipt, String signature, String token) {
this.context = context;
this.mService = mService;
this.sku = sku;
@@ -52,19 +49,19 @@ abstract public class GenericConsumeTask extends AsyncTask<String, String, Strin
this.signature = signature;
this.token = token;
}
-
+
private String sku;
private String receipt;
private String signature;
private String token;
-
+
@Override
protected String doInBackground(String... params) {
try {
//Log.d("godot", "Requesting to consume an item with token ." + token);
int response = mService.consumePurchase(3, context.getPackageName(), token);
//Log.d("godot", "consumePurchase response: " + response);
- if(response == 0 || response == 8){
+ if (response == 0 || response == 8) {
return null;
}
} catch (Exception e) {
@@ -72,11 +69,10 @@ abstract public class GenericConsumeTask extends AsyncTask<String, String, Strin
}
return null;
}
-
- protected void onPostExecute(String sarasa){
+
+ protected void onPostExecute(String sarasa) {
onSuccess(sku, receipt, signature, token);
}
-
- abstract public void onSuccess(String sku, String receipt, String signature, String token);
+ abstract public void onSuccess(String sku, String receipt, String signature, String token);
}
diff --git a/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java b/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java
index 7318ae2fc6..80f53d16c8 100644
--- a/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java
+++ b/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java
@@ -50,28 +50,26 @@ import android.util.Log;
abstract public class HandlePurchaseTask {
private Activity context;
-
- public HandlePurchaseTask(Activity context ){
+
+ public HandlePurchaseTask(Activity context) {
this.context = context;
}
-
-
- public void handlePurchaseRequest(int resultCode, Intent data){
+
+ public void handlePurchaseRequest(int resultCode, Intent data) {
//Log.d("XXX", "Handling purchase response");
//int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
PaymentsCache pc = new PaymentsCache(context);
-
+
String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
//Log.d("XXX", "Purchase data:" + purchaseData);
String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
//Log.d("XXX", "Purchase signature:" + dataSignature);
-
+
if (resultCode == Activity.RESULT_OK) {
-
+
try {
//Log.d("SARLANGA", purchaseData);
-
-
+
JSONObject jo = new JSONObject(purchaseData);
//String sku = jo.getString("productId");
//alert("You have bought the " + sku + ". Excellent choice, aventurer!");
@@ -82,8 +80,8 @@ abstract public class HandlePurchaseTask {
//Integer state = jo.getInt("purchaseState");
String developerPayload = jo.getString("developerPayload");
String purchaseToken = jo.getString("purchaseToken");
-
- if(! pc.getConsumableValue("validation_hash", productId).equals(developerPayload) ) {
+
+ if (!pc.getConsumableValue("validation_hash", productId).equals(developerPayload)) {
error("Untrusted callback");
return;
}
@@ -92,13 +90,13 @@ abstract public class HandlePurchaseTask {
pc.setConsumableValue("ticket", productId, purchaseData);
pc.setConsumableFlag("block", productId, true);
pc.setConsumableValue("token", productId, purchaseToken);
-
+
success(productId, dataSignature, purchaseData);
return;
- } catch (JSONException e) {
+ } catch (JSONException e) {
error(e.getMessage());
}
- }else if( resultCode == Activity.RESULT_CANCELED){
+ } else if (resultCode == Activity.RESULT_CANCELED) {
canceled();
}
}
@@ -106,6 +104,4 @@ abstract public class HandlePurchaseTask {
abstract protected void success(String sku, String signature, String ticket);
abstract protected void error(String message);
abstract protected void canceled();
-
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java b/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java
index 69ac02e902..f9828ef77d 100644
--- a/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java
+++ b/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java
@@ -34,41 +34,38 @@ import android.content.SharedPreferences;
import android.util.Log;
public class PaymentsCache {
-
+
public Context context;
- public PaymentsCache(Context context){
+ public PaymentsCache(Context context) {
this.context = context;
}
-
-
- public void setConsumableFlag(String set, String sku, Boolean flag){
- SharedPreferences sharedPref = context.getSharedPreferences("consumables_" + set, Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPref.edit();
- editor.putBoolean(sku, flag);
- editor.commit();
-}
- public boolean getConsumableFlag(String set, String sku){
- SharedPreferences sharedPref = context.getSharedPreferences(
- "consumables_" + set, Context.MODE_PRIVATE);
- return sharedPref.getBoolean(sku, false);
+ public void setConsumableFlag(String set, String sku, Boolean flag) {
+ SharedPreferences sharedPref = context.getSharedPreferences("consumables_" + set, Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPref.edit();
+ editor.putBoolean(sku, flag);
+ editor.commit();
}
+ public boolean getConsumableFlag(String set, String sku) {
+ SharedPreferences sharedPref = context.getSharedPreferences(
+ "consumables_" + set, Context.MODE_PRIVATE);
+ return sharedPref.getBoolean(sku, false);
+ }
- public void setConsumableValue(String set, String sku, String value){
- SharedPreferences sharedPref = context.getSharedPreferences("consumables_" + set, Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPref.edit();
- editor.putString(sku, value);
+ public void setConsumableValue(String set, String sku, String value) {
+ SharedPreferences sharedPref = context.getSharedPreferences("consumables_" + set, Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPref.edit();
+ editor.putString(sku, value);
//Log.d("XXX", "Setting asset: consumables_" + set + ":" + sku);
- editor.commit();
+ editor.commit();
}
- public String getConsumableValue(String set, String sku){
- SharedPreferences sharedPref = context.getSharedPreferences(
- "consumables_" + set, Context.MODE_PRIVATE);
+ public String getConsumableValue(String set, String sku) {
+ SharedPreferences sharedPref = context.getSharedPreferences(
+ "consumables_" + set, Context.MODE_PRIVATE);
//Log.d("XXX", "Getting asset: consumables_" + set + ":" + sku);
- return sharedPref.getString(sku, null);
+ return sharedPref.getString(sku, null);
}
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java b/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java
index b327265abb..71407566e2 100644
--- a/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java
+++ b/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java
@@ -106,7 +106,6 @@ public class PaymentsManager {
@Override
protected void error(String message) {
godotPaymentV3.callbackFail();
-
}
@Override
@@ -119,8 +118,8 @@ public class PaymentsManager {
godotPaymentV3.callbackAlreadyOwned(sku);
}
- }.purchase(sku, transactionId);
-
+ }
+ .purchase(sku, transactionId);
}
public void consumeUnconsumedPurchases() {
@@ -135,16 +134,15 @@ public class PaymentsManager {
protected void error(String message) {
Log.d("godot", "consumeUnconsumedPurchases :" + message);
godotPaymentV3.callbackFailConsume();
-
}
@Override
protected void notRequired() {
Log.d("godot", "callbackSuccessNoUnconsumedPurchases :");
godotPaymentV3.callbackSuccessNoUnconsumedPurchases();
-
}
- }.consumeItAll();
+ }
+ .consumeItAll();
}
public void requestPurchased() {
@@ -210,9 +208,9 @@ public class PaymentsManager {
@Override
protected void error(String message) {
godotPaymentV3.callbackFail();
-
}
- }.consume(sku);
+ }
+ .consume(sku);
}
}
@@ -225,7 +223,8 @@ public class PaymentsManager {
protected void canceled() {
godotPaymentV3.callbackCancel();
}
- }.handlePurchaseRequest(resultCode, data);
+ }
+ .handlePurchaseRequest(resultCode, data);
}
public void validatePurchase(String purchaseToken, final String sku) {
@@ -246,8 +245,8 @@ public class PaymentsManager {
protected void error(String message) {
godotPaymentV3.callbackFail();
}
- }.consume(sku);
-
+ }
+ .consume(sku);
}
@Override
@@ -259,7 +258,8 @@ public class PaymentsManager {
protected void canceled() {
godotPaymentV3.callbackCancel();
}
- }.validatePurchase(sku);
+ }
+ .validatePurchase(sku);
}
public void setAutoConsume(boolean autoConsume) {
@@ -278,7 +278,8 @@ public class PaymentsManager {
protected void error(String message) {
godotPaymentV3.callbackFailConsume();
}
- }.consume(sku);
+ }
+ .consume(sku);
}
// Workaround to bug where sometimes response codes come as Long instead of Integer
@@ -287,8 +288,10 @@ public class PaymentsManager {
if (o == null) {
//logDebug("Bundle with null response code, assuming OK (known issue)");
return BILLING_RESPONSE_RESULT_OK;
- } else if (o instanceof Integer) return ((Integer) o).intValue();
- else if (o instanceof Long) return (int) ((Long) o).longValue();
+ } else if (o instanceof Integer)
+ return ((Integer)o).intValue();
+ else if (o instanceof Long)
+ return (int)((Long)o).longValue();
else {
//logError("Unexpected type for bundle response code.");
//logError(o.getClass().getName());
@@ -304,25 +307,41 @@ public class PaymentsManager {
* It also includes the result code numerically.
*/
public static String getResponseDesc(int code) {
- String[] iab_msgs = ("0:OK/1:User Canceled/2:Unknown/" +
- "3:Billing Unavailable/4:Item unavailable/" +
- "5:Developer Error/6:Error/7:Item Already Owned/" +
- "8:Item not owned").split("/");
- String[] iabhelper_msgs = ("0:OK/-1001:Remote exception during initialization/" +
- "-1002:Bad response received/" +
- "-1003:Purchase signature verification failed/" +
- "-1004:Send intent failed/" +
- "-1005:User cancelled/" +
- "-1006:Unknown purchase response/" +
- "-1007:Missing token/" +
- "-1008:Unknown error/" +
- "-1009:Subscriptions not available/" +
- "-1010:Invalid consumption attempt").split("/");
+ String[] iab_msgs = ("0:OK/1:User Canceled/2:Unknown/"
+ +
+ "3:Billing Unavailable/4:Item unavailable/"
+ +
+ "5:Developer Error/6:Error/7:Item Already Owned/"
+ +
+ "8:Item not owned")
+ .split("/");
+ String[] iabhelper_msgs = ("0:OK/-1001:Remote exception during initialization/"
+ +
+ "-1002:Bad response received/"
+ +
+ "-1003:Purchase signature verification failed/"
+ +
+ "-1004:Send intent failed/"
+ +
+ "-1005:User cancelled/"
+ +
+ "-1006:Unknown purchase response/"
+ +
+ "-1007:Missing token/"
+ +
+ "-1008:Unknown error/"
+ +
+ "-1009:Subscriptions not available/"
+ +
+ "-1010:Invalid consumption attempt")
+ .split("/");
if (code <= -1000) {
int index = -1000 - code;
- if (index >= 0 && index < iabhelper_msgs.length) return iabhelper_msgs[index];
- else return String.valueOf(code) + ":Unknown IAB Helper Error";
+ if (index >= 0 && index < iabhelper_msgs.length)
+ return iabhelper_msgs[index];
+ else
+ return String.valueOf(code) + ":Unknown IAB Helper Error";
} else if (code < 0 || code >= iab_msgs.length)
return String.valueOf(code) + ":Unknown";
else
@@ -375,7 +394,7 @@ public class PaymentsManager {
ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");
for (String thisResponse : responseList) {
- Log.d("godot", "response = "+thisResponse);
+ Log.d("godot", "response = " + thisResponse);
godotPaymentV3.addSkuDetail(thisResponse);
}
} catch (RemoteException e) {
@@ -385,7 +404,8 @@ public class PaymentsManager {
}
godotPaymentV3.completeSkuDetail();
}
- })).start();
+ }))
+ .start();
}
private GodotPaymentV3 godotPaymentV3;
@@ -393,5 +413,4 @@ public class PaymentsManager {
public void setBaseSingleton(GodotPaymentV3 godotPaymentV3) {
this.godotPaymentV3 = godotPaymentV3;
}
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java b/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java
index 6ecea0106c..e2f08345ad 100644
--- a/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java
+++ b/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java
@@ -50,17 +50,16 @@ import android.util.Log;
abstract public class PurchaseTask {
private Activity context;
-
+
private IInAppBillingService mService;
- public PurchaseTask(IInAppBillingService mService, Activity context ){
+ public PurchaseTask(IInAppBillingService mService, Activity context) {
this.context = context;
this.mService = mService;
}
-
private boolean isLooping = false;
-
- public void purchase(final String sku, final String transactionId){
+
+ public void purchase(final String sku, final String transactionId) {
Log.d("XXX", "Starting purchase for: " + sku);
PaymentsCache pc = new PaymentsCache(context);
Boolean isBlocked = pc.getConsumableFlag("block", sku);
@@ -75,7 +74,7 @@ abstract public class PurchaseTask {
Bundle buyIntentBundle;
try {
- buyIntentBundle = mService.getBuyIntent(3, context.getApplicationContext().getPackageName(), sku, "inapp", hash );
+ buyIntentBundle = mService.getBuyIntent(3, context.getApplicationContext().getPackageName(), sku, "inapp", hash);
} catch (RemoteException e) {
//Log.d("XXX", "Error: " + e.getMessage());
error(e.getMessage());
@@ -83,50 +82,45 @@ abstract public class PurchaseTask {
}
Object rc = buyIntentBundle.get("RESPONSE_CODE");
int responseCode = 0;
- if(rc == null){
+ if (rc == null) {
responseCode = PaymentsManager.BILLING_RESPONSE_RESULT_OK;
- }else if( rc instanceof Integer){
+ } else if (rc instanceof Integer) {
responseCode = ((Integer)rc).intValue();
- }else if( rc instanceof Long){
+ } else if (rc instanceof Long) {
responseCode = (int)((Long)rc).longValue();
}
//Log.d("XXX", "Buy intent response code: " + responseCode);
- if(responseCode == 1 || responseCode == 3 || responseCode == 4){
+ if (responseCode == 1 || responseCode == 3 || responseCode == 4) {
canceled();
return;
}
- if(responseCode == 7){
+ if (responseCode == 7) {
alreadyOwned();
return;
}
-
-
+
PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
pc.setConsumableValue("validation_hash", sku, hash);
try {
- if(context == null){
+ if (context == null) {
//Log.d("XXX", "No context!");
}
- if(pendingIntent == null){
+ if (pendingIntent == null) {
//Log.d("XXX", "No pending intent");
}
//Log.d("XXX", "Starting activity for purchase!");
context.startIntentSenderForResult(
pendingIntent.getIntentSender(),
- PaymentsManager.REQUEST_CODE_FOR_PURCHASE,
- new Intent(),
+ PaymentsManager.REQUEST_CODE_FOR_PURCHASE,
+ new Intent(),
Integer.valueOf(0), Integer.valueOf(0),
- Integer.valueOf(0));
+ Integer.valueOf(0));
} catch (SendIntentException e) {
error(e.getMessage());
}
-
-
-
}
abstract protected void error(String message);
abstract protected void canceled();
abstract protected void alreadyOwned();
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java b/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java
index d831e45694..765906d0bb 100644
--- a/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java
+++ b/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java
@@ -48,69 +48,63 @@ abstract public class ReleaseAllConsumablesTask {
private Context context;
private IInAppBillingService mService;
-
- public ReleaseAllConsumablesTask(IInAppBillingService mService, Context context ){
+
+ public ReleaseAllConsumablesTask(IInAppBillingService mService, Context context) {
this.context = context;
this.mService = mService;
}
-
- public void consumeItAll(){
- try{
+ public void consumeItAll() {
+ try {
//Log.d("godot", "consumeItall for " + context.getPackageName());
- Bundle bundle = mService.getPurchases(3, context.getPackageName(), "inapp",null);
-
+ Bundle bundle = mService.getPurchases(3, context.getPackageName(), "inapp", null);
+
for (String key : bundle.keySet()) {
Object value = bundle.get(key);
//Log.d("godot", String.format("%s %s (%s)", key,
//value.toString(), value.getClass().getName()));
}
-
-
- if (bundle.getInt("RESPONSE_CODE") == 0){
+
+ if (bundle.getInt("RESPONSE_CODE") == 0) {
final ArrayList<String> myPurchases = bundle.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
final ArrayList<String> mySignatures = bundle.getStringArrayList("INAPP_DATA_SIGNATURE_LIST");
-
- if (myPurchases == null || myPurchases.size() == 0){
+ if (myPurchases == null || myPurchases.size() == 0) {
//Log.d("godot", "No purchases!");
notRequired();
return;
}
-
-
+
//Log.d("godot", "# products to be consumed:" + myPurchases.size());
- for (int i=0;i<myPurchases.size();i++)
- {
-
- try{
+ for (int i = 0; i < myPurchases.size(); i++) {
+
+ try {
String receipt = myPurchases.get(i);
JSONObject inappPurchaseData = new JSONObject(receipt);
String sku = inappPurchaseData.getString("productId");
String token = inappPurchaseData.getString("purchaseToken");
String signature = mySignatures.get(i);
//Log.d("godot", "A punto de consumir un item con token:" + token + "\n" + receipt);
- new GenericConsumeTask(context, mService, sku, receipt,signature, token) {
-
+ new GenericConsumeTask(context, mService, sku, receipt, signature, token) {
+
@Override
public void onSuccess(String sku, String receipt, String signature, String token) {
ReleaseAllConsumablesTask.this.success(sku, receipt, signature, token);
}
- }.execute();
-
+ }
+ .execute();
+
} catch (JSONException e) {
}
}
-
}
- }catch(Exception e){
+ } catch (Exception e) {
Log.d("godot", "Error releasing products:" + e.getClass().getName() + ":" + e.getMessage());
}
}
-
+
abstract protected void success(String sku, String receipt, String signature, String token);
abstract protected void error(String message);
abstract protected void notRequired();
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java b/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java
index 6e058c140c..3e62ef282a 100644
--- a/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java
+++ b/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java
@@ -55,22 +55,21 @@ abstract public class ValidateTask {
private Activity context;
private GodotPaymentV3 godotPaymentsV3;
- public ValidateTask(Activity context, GodotPaymentV3 godotPaymentsV3){
+ public ValidateTask(Activity context, GodotPaymentV3 godotPaymentsV3) {
this.context = context;
this.godotPaymentsV3 = godotPaymentsV3;
}
-
- public void validatePurchase(final String sku){
- new AsyncTask<String, String, String>(){
-
+ public void validatePurchase(final String sku) {
+ new AsyncTask<String, String, String>() {
+
private ProgressDialog dialog;
@Override
- protected void onPreExecute(){
+ protected void onPreExecute() {
dialog = ProgressDialog.show(context, null, "Please wait...");
}
-
+
@Override
protected String doInBackground(String... params) {
PaymentsCache pc = new PaymentsCache(context);
@@ -90,37 +89,34 @@ abstract public class ValidateTask {
//Log.d("XXX", "Validation response:\n"+jsonResponse);
return jsonResponse;
}
-
+
@Override
- protected void onPostExecute(String response){
- if(dialog != null){
+ protected void onPostExecute(String response) {
+ if (dialog != null) {
dialog.dismiss();
}
JSONObject j;
try {
j = new JSONObject(response);
- if(j.getString("status").equals("OK")){
+ if (j.getString("status").equals("OK")) {
success();
return;
- }else if(j.getString("status") != null){
+ } else if (j.getString("status") != null) {
error(j.getString("message"));
- }else{
+ } else {
error("Connection error");
}
} catch (JSONException e) {
error(e.getMessage());
- }catch (Exception e){
+ } catch (Exception e) {
error(e.getMessage());
}
-
-
}
-
- }.execute();
+
+ }
+ .execute();
}
abstract protected void success();
abstract protected void error(String message);
abstract protected void canceled();
-
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/utils/Crypt.java b/platform/android/java/src/org/godotengine/godot/utils/Crypt.java
index 2fd66553f6..35e4e430a4 100644
--- a/platform/android/java/src/org/godotengine/godot/utils/Crypt.java
+++ b/platform/android/java/src/org/godotengine/godot/utils/Crypt.java
@@ -34,34 +34,34 @@ import java.util.Random;
public class Crypt {
- public static String md5(String input){
- try {
- // Create MD5 Hash
- MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
- digest.update(input.getBytes());
- byte messageDigest[] = digest.digest();
-
- // Create Hex String
- StringBuffer hexString = new StringBuffer();
- for (int i=0; i<messageDigest.length; i++)
- hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
- return hexString.toString();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "";
+ public static String md5(String input) {
+ try {
+ // Create MD5 Hash
+ MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
+ digest.update(input.getBytes());
+ byte messageDigest[] = digest.digest();
+
+ // Create Hex String
+ StringBuffer hexString = new StringBuffer();
+ for (int i = 0; i < messageDigest.length; i++)
+ hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
+ return hexString.toString();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "";
}
-
- public static String createRandomHash(){
+
+ public static String createRandomHash() {
return md5(Long.toString(createRandomLong()));
}
-
- public static long createAbsRandomLong(){
+
+ public static long createAbsRandomLong() {
return Math.abs(createRandomLong());
}
-
- public static long createRandomLong(){
+
+ public static long createRandomLong() {
Random r = new Random();
return r.nextLong();
}
diff --git a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java b/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java
index 3fc8c48397..bfcf7e3b2a 100644
--- a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java
+++ b/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java
@@ -42,30 +42,29 @@ import javax.net.ssl.TrustManagerFactory;
import org.apache.http.conn.ssl.SSLSocketFactory;
-
/**
*
* @author Luis Linietsky <luis.linietsky@gmail.com>
*/
public class CustomSSLSocketFactory extends SSLSocketFactory {
- SSLContext sslContext = SSLContext.getInstance("TLS");
+ SSLContext sslContext = SSLContext.getInstance("TLS");
- public CustomSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
- super(truststore);
+ public CustomSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
+ super(truststore);
- TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
- tmf.init(truststore);
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
+ tmf.init(truststore);
- sslContext.init(null, tmf.getTrustManagers(), null);
- }
+ sslContext.init(null, tmf.getTrustManagers(), null);
+ }
- @Override
- public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
- return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
- }
+ @Override
+ public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
+ return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
+ }
- @Override
- public Socket createSocket() throws IOException {
- return sslContext.getSocketFactory().createSocket();
- }
+ @Override
+ public Socket createSocket() throws IOException {
+ return sslContext.getSocketFactory().createSocket();
+ }
}
diff --git a/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java b/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java
index 0711f30b8b..81a642af9f 100644
--- a/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java
+++ b/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java
@@ -63,7 +63,6 @@ import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
-
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
@@ -73,155 +72,154 @@ import android.util.Log;
* @author Luis Linietsky <luis.linietsky@gmail.com>
*/
public class HttpRequester {
-
+
private Context context;
- private static final int TTL = 600000; // 10 minutos
- private long cttl=0;
-
- public HttpRequester(){
+ private static final int TTL = 600000; // 10 minutos
+ private long cttl = 0;
+
+ public HttpRequester() {
//Log.d("XXX", "Creando http request sin contexto");
}
-
- public HttpRequester(Context context){
- this.context=context;
+
+ public HttpRequester(Context context) {
+ this.context = context;
//Log.d("XXX", "Creando http request con contexto");
}
-
- public String post(RequestParams params){
- HttpPost httppost = new HttpPost(params.getUrl());
- try {
+
+ public String post(RequestParams params) {
+ HttpPost httppost = new HttpPost(params.getUrl());
+ try {
httppost.setEntity(new UrlEncodedFormEntity(params.toPairsList()));
return request(httppost);
} catch (UnsupportedEncodingException e) {
return null;
}
}
-
- public String get(RequestParams params){
+
+ public String get(RequestParams params) {
String response = getResponseFromCache(params.getUrl());
- if(response == null){
+ if (response == null) {
//Log.d("XXX", "Cache miss!");
- HttpGet httpget = new HttpGet(params.getUrl());
- long timeInit = new Date().getTime();
- response = request(httpget);
- long delay = new Date().getTime() - timeInit;
- Log.d("com.app11tt.android.utils.HttpRequest::get(url)", "Url: " + params.getUrl() + " downloaded in " + String.format("%.03f", delay/1000.0f) + " seconds");
- if(response == null || response.length() == 0){
- response = "";
- }else{
- saveResponseIntoCache(params.getUrl(), response);
- }
+ HttpGet httpget = new HttpGet(params.getUrl());
+ long timeInit = new Date().getTime();
+ response = request(httpget);
+ long delay = new Date().getTime() - timeInit;
+ Log.d("com.app11tt.android.utils.HttpRequest::get(url)", "Url: " + params.getUrl() + " downloaded in " + String.format("%.03f", delay / 1000.0f) + " seconds");
+ if (response == null || response.length() == 0) {
+ response = "";
+ } else {
+ saveResponseIntoCache(params.getUrl(), response);
+ }
}
Log.d("XXX", "Req: " + params.getUrl());
Log.d("XXX", "Resp: " + response);
- return response;
+ return response;
}
-
- private String request(HttpUriRequest request){
+
+ private String request(HttpUriRequest request) {
//Log.d("XXX", "Haciendo request a: " + request.getURI() );
- Log.d("PPP", "Haciendo request a: " + request.getURI() );
+ Log.d("PPP", "Haciendo request a: " + request.getURI());
long init = new Date().getTime();
HttpClient httpclient = getNewHttpClient();
HttpParams httpParameters = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 0);
HttpConnectionParams.setSoTimeout(httpParameters, 0);
HttpConnectionParams.setTcpNoDelay(httpParameters, true);
- try {
- HttpResponse response = httpclient.execute(request);
- Log.d("PPP", "Fin de request (" + (new Date().getTime() - init) + ") a: " + request.getURI() );
+ try {
+ HttpResponse response = httpclient.execute(request);
+ Log.d("PPP", "Fin de request (" + (new Date().getTime() - init) + ") a: " + request.getURI());
//Log.d("XXX1", "Status:" + response.getStatusLine().toString());
- if(response.getStatusLine().getStatusCode() == 200){
- String strResponse = EntityUtils.toString(response.getEntity());
+ if (response.getStatusLine().getStatusCode() == 200) {
+ String strResponse = EntityUtils.toString(response.getEntity());
//Log.d("XXX2", strResponse);
- return strResponse;
- }else{
- Log.d("XXX3", "Response status code:" + response.getStatusLine().getStatusCode() + "\n" + EntityUtils.toString(response.getEntity()));
- return null;
- }
-
- } catch (ClientProtocolException e) {
- Log.d("XXX3", e.getMessage());
- } catch (IOException e) {
- Log.d("XXX4", e.getMessage());
- }
+ return strResponse;
+ } else {
+ Log.d("XXX3", "Response status code:" + response.getStatusLine().getStatusCode() + "\n" + EntityUtils.toString(response.getEntity()));
+ return null;
+ }
+
+ } catch (ClientProtocolException e) {
+ Log.d("XXX3", e.getMessage());
+ } catch (IOException e) {
+ Log.d("XXX4", e.getMessage());
+ }
return null;
}
-
+
private HttpClient getNewHttpClient() {
- try {
- KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
- trustStore.load(null, null);
+ try {
+ KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
+ trustStore.load(null, null);
- SSLSocketFactory sf = new CustomSSLSocketFactory(trustStore);
- sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+ SSLSocketFactory sf = new CustomSSLSocketFactory(trustStore);
+ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
- HttpParams params = new BasicHttpParams();
- HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
- HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
+ HttpParams params = new BasicHttpParams();
+ HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
+ HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
- SchemeRegistry registry = new SchemeRegistry();
- registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
- registry.register(new Scheme("https", sf, 443));
+ SchemeRegistry registry = new SchemeRegistry();
+ registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
+ registry.register(new Scheme("https", sf, 443));
- ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
+ ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
- return new DefaultHttpClient(ccm, params);
- } catch (Exception e) {
- return new DefaultHttpClient();
- }
+ return new DefaultHttpClient(ccm, params);
+ } catch (Exception e) {
+ return new DefaultHttpClient();
+ }
}
-
+
private static String convertStreamToString(InputStream is) {
- BufferedReader reader = new BufferedReader(new InputStreamReader(is));
- StringBuilder sb = new StringBuilder();
- String line = null;
- try {
- while ((line = reader.readLine()) != null) {
- sb.append((line + "\n"));
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- is.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return sb.toString();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+ StringBuilder sb = new StringBuilder();
+ String line = null;
+ try {
+ while ((line = reader.readLine()) != null) {
+ sb.append((line + "\n"));
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ is.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return sb.toString();
}
- public void saveResponseIntoCache(String request, String response){
- if(context == null){
+ public void saveResponseIntoCache(String request, String response) {
+ if (context == null) {
//Log.d("XXX", "No context, cache failed!");
return;
}
- SharedPreferences sharedPref = context.getSharedPreferences("http_get_cache", Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPref.edit();
- editor.putString("request_" + Crypt.md5(request), response);
- editor.putLong("request_" + Crypt.md5(request) + "_ttl", new Date().getTime() + getTtl());
- editor.commit();
+ SharedPreferences sharedPref = context.getSharedPreferences("http_get_cache", Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPref.edit();
+ editor.putString("request_" + Crypt.md5(request), response);
+ editor.putLong("request_" + Crypt.md5(request) + "_ttl", new Date().getTime() + getTtl());
+ editor.commit();
}
-
-
- public String getResponseFromCache(String request){
- if(context == null){
+
+ public String getResponseFromCache(String request) {
+ if (context == null) {
Log.d("XXX", "No context, cache miss");
return null;
}
- SharedPreferences sharedPref = context.getSharedPreferences( "http_get_cache", Context.MODE_PRIVATE);
- long ttl = getResponseTtl(request);
- if(ttl == 0l || (new Date().getTime() - ttl) > 0l){
- Log.d("XXX", "Cache invalid ttl:" + ttl + " vs now:" + new Date().getTime());
- return null;
- }
- return sharedPref.getString("request_" + Crypt.md5(request), null);
+ SharedPreferences sharedPref = context.getSharedPreferences("http_get_cache", Context.MODE_PRIVATE);
+ long ttl = getResponseTtl(request);
+ if (ttl == 0l || (new Date().getTime() - ttl) > 0l) {
+ Log.d("XXX", "Cache invalid ttl:" + ttl + " vs now:" + new Date().getTime());
+ return null;
+ }
+ return sharedPref.getString("request_" + Crypt.md5(request), null);
}
- public long getResponseTtl(String request){
- SharedPreferences sharedPref = context.getSharedPreferences(
- "http_get_cache", Context.MODE_PRIVATE);
- return sharedPref.getLong("request_" + Crypt.md5(request) + "_ttl", 0l);
+ public long getResponseTtl(String request) {
+ SharedPreferences sharedPref = context.getSharedPreferences(
+ "http_get_cache", Context.MODE_PRIVATE);
+ return sharedPref.getLong("request_" + Crypt.md5(request) + "_ttl", 0l);
}
public long getTtl() {
@@ -229,7 +227,6 @@ public class HttpRequester {
}
public void setTtl(long ttl) {
- this.cttl = (ttl*1000) + new Date().getTime();
+ this.cttl = (ttl * 1000) + new Date().getTime();
}
-
}
diff --git a/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java b/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java
index ded11550bb..051fed5500 100644
--- a/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java
+++ b/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java
@@ -43,33 +43,33 @@ import org.apache.http.message.BasicNameValuePair;
*/
public class RequestParams {
- private HashMap<String,String> params;
+ private HashMap<String, String> params;
private String url;
-
- public RequestParams(){
- params = new HashMap<String,String>();
+
+ public RequestParams() {
+ params = new HashMap<String, String>();
}
-
- public void put(String key, String value){
+
+ public void put(String key, String value) {
params.put(key, value);
}
-
- public String get(String key){
+
+ public String get(String key) {
return params.get(key);
}
-
- public void remove(Object key){
+
+ public void remove(Object key) {
params.remove(key);
}
-
- public boolean has(String key){
+
+ public boolean has(String key) {
return params.containsKey(key);
}
-
- public List<NameValuePair> toPairsList(){
- List<NameValuePair> fields = new ArrayList<NameValuePair>();
- for(String key : params.keySet()){
+ public List<NameValuePair> toPairsList() {
+ List<NameValuePair> fields = new ArrayList<NameValuePair>();
+
+ for (String key : params.keySet()) {
fields.add(new BasicNameValuePair(key, this.get(key)));
}
return fields;
@@ -82,6 +82,4 @@ public class RequestParams {
public void setUrl(String url) {
this.url = url;
}
-
-
}
diff --git a/platform/android/java_class_wrapper.cpp b/platform/android/java_class_wrapper.cpp
index 8606ea41a0..892e64cdfc 100644
--- a/platform/android/java_class_wrapper.cpp
+++ b/platform/android/java_class_wrapper.cpp
@@ -59,7 +59,7 @@ bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method,
r_error.argument = pc;
continue;
}
- uint32_t *ptypes = E->get().param_types.ptr();
+ uint32_t *ptypes = E->get().param_types.ptrw();
bool valid = true;
for (int i = 0; i < pc; i++) {
diff --git a/platform/android/power_android.cpp b/platform/android/power_android.cpp
index 48c9377a5a..54fb435b62 100644
--- a/platform/android/power_android.cpp
+++ b/platform/android/power_android.cpp
@@ -245,8 +245,10 @@ int power_android::get_power_percent_left() {
}
}
-power_android::power_android()
- : nsecs_left(-1), percent_left(-1), power_state(OS::POWERSTATE_UNKNOWN) {
+power_android::power_android() :
+ nsecs_left(-1),
+ percent_left(-1),
+ power_state(OS::POWERSTATE_UNKNOWN) {
}
power_android::~power_android() {
diff --git a/platform/haiku/SCsub b/platform/haiku/SCsub
index d0c244a194..592f56bbbf 100644
--- a/platform/haiku/SCsub
+++ b/platform/haiku/SCsub
@@ -12,7 +12,7 @@ common_haiku = [
'audio_driver_media_kit.cpp'
]
-target = env.Program(
+target = env.add_program(
'#bin/godot',
['godot_haiku.cpp'] + common_haiku
)
diff --git a/platform/haiku/haiku_application.cpp b/platform/haiku/haiku_application.cpp
index d23b9e27d8..e2649b15a4 100644
--- a/platform/haiku/haiku_application.cpp
+++ b/platform/haiku/haiku_application.cpp
@@ -29,6 +29,6 @@
/*************************************************************************/
#include "haiku_application.h"
-HaikuApplication::HaikuApplication()
- : BApplication("application/x-vnd.godot") {
+HaikuApplication::HaikuApplication() :
+ BApplication("application/x-vnd.godot") {
}
diff --git a/platform/haiku/haiku_direct_window.cpp b/platform/haiku/haiku_direct_window.cpp
index 24a8a4b17b..aa25064ccb 100644
--- a/platform/haiku/haiku_direct_window.cpp
+++ b/platform/haiku/haiku_direct_window.cpp
@@ -34,8 +34,8 @@
#include "main/main.h"
#include "os/keyboard.h"
-HaikuDirectWindow::HaikuDirectWindow(BRect p_frame)
- : BDirectWindow(p_frame, "Godot", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) {
+HaikuDirectWindow::HaikuDirectWindow(BRect p_frame) :
+ BDirectWindow(p_frame, "Godot", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) {
last_mouse_pos_valid = false;
last_buttons_state = 0;
last_button_mask = 0;
diff --git a/platform/haiku/haiku_gl_view.cpp b/platform/haiku/haiku_gl_view.cpp
index d898bd1a5d..bb9c439e94 100644
--- a/platform/haiku/haiku_gl_view.cpp
+++ b/platform/haiku/haiku_gl_view.cpp
@@ -30,8 +30,8 @@
#include "haiku_gl_view.h"
#include "main/main.h"
-HaikuGLView::HaikuGLView(BRect frame, uint32 type)
- : BGLView(frame, "GodotGLView", B_FOLLOW_ALL_SIDES, 0, type) {
+HaikuGLView::HaikuGLView(BRect frame, uint32 type) :
+ BGLView(frame, "GodotGLView", B_FOLLOW_ALL_SIDES, 0, type) {
}
void HaikuGLView::AttachedToWindow(void) {
diff --git a/platform/haiku/os_haiku.cpp b/platform/haiku/os_haiku.cpp
index ef5a065107..f7196755af 100644
--- a/platform/haiku/os_haiku.cpp
+++ b/platform/haiku/os_haiku.cpp
@@ -105,6 +105,7 @@ void OS_Haiku::initialize(const VideoMode &p_desired, int p_video_driver, int p_
context_gl = memnew(ContextGL_Haiku(window));
context_gl->initialize();
context_gl->make_current();
+ context_gl->set_use_vsync(current_video_mode.use_vsync);
/* Port to GLES 3 rasterizer */
//rasterizer = memnew(RasterizerGLES2);
diff --git a/platform/haiku/power_haiku.cpp b/platform/haiku/power_haiku.cpp
index 8718b317a3..73d60e9fec 100644
--- a/platform/haiku/power_haiku.cpp
+++ b/platform/haiku/power_haiku.cpp
@@ -64,8 +64,10 @@ int PowerX11::get_power_percent_left() {
}
}
-PowerHaiku::PowerHaiku()
- : nsecs_left(-1), percent_left(-1), power_state(OS::POWERSTATE_UNKNOWN) {
+PowerHaiku::PowerHaiku() :
+ nsecs_left(-1),
+ percent_left(-1),
+ power_state(OS::POWERSTATE_UNKNOWN) {
}
PowerHaiku::~PowerHaiku() {
diff --git a/platform/iphone/SCsub b/platform/iphone/SCsub
index 550dfdd7d6..6b5f30dc41 100644
--- a/platform/iphone/SCsub
+++ b/platform/iphone/SCsub
@@ -17,7 +17,7 @@ iphone_lib = [
]
env_ios = env.Clone()
-ios_lib = env_ios.Library('iphone', iphone_lib)
+ios_lib = env_ios.add_library('iphone', iphone_lib)
def combine_libs(target=None, source=None, env=None):
lib_path = target[0].srcnode().abspath
diff --git a/platform/iphone/app_delegate.mm b/platform/iphone/app_delegate.mm
index 8f2893e69e..b591f80aa7 100644
--- a/platform/iphone/app_delegate.mm
+++ b/platform/iphone/app_delegate.mm
@@ -564,7 +564,7 @@ static int frame_count = 0;
MainLoop::NOTIFICATION_OS_MEMORY_WARNING);
};
-- (void)applicationDidFinishLaunching:(UIApplication *)application {
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
printf("**************** app delegate init\n");
CGRect rect = [[UIScreen mainScreen] bounds];
@@ -671,6 +671,7 @@ static int frame_count = 0;
isAdvertisingTrackingEnabled]];
#endif
+ return TRUE;
};
- (void)applicationWillTerminate:(UIApplication *)application {
diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp
index 6aa1ed9f8d..1833bdf2b3 100644
--- a/platform/iphone/export/export.cpp
+++ b/platform/iphone/export/export.cpp
@@ -37,7 +37,7 @@
#include "io/zip_io.h"
#include "os/file_access.h"
#include "os/os.h"
-#include "platform/osx/logo.gen.h"
+#include "platform/iphone/logo.gen.h"
#include "project_settings.h"
#include "string.h"
#include "version.h"
@@ -69,8 +69,9 @@ class EditorExportPlatformIOS : public EditorExportPlatform {
String name;
bool is_default;
- ExportArchitecture()
- : name(""), is_default(false) {
+ ExportArchitecture() :
+ name(""),
+ is_default(false) {
}
ExportArchitecture(String p_name, bool p_is_default) {
@@ -453,8 +454,9 @@ struct CodesignData {
const Ref<EditorExportPreset> &preset;
bool debug;
- CodesignData(const Ref<EditorExportPreset> &p_preset, bool p_debug)
- : preset(p_preset), debug(p_debug) {
+ CodesignData(const Ref<EditorExportPreset> &p_preset, bool p_debug) :
+ preset(p_preset),
+ debug(p_debug) {
}
};
@@ -793,7 +795,7 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p
//read
unzOpenCurrentFile(src_pkg_zip);
- unzReadCurrentFile(src_pkg_zip, data.ptr(), data.size());
+ unzReadCurrentFile(src_pkg_zip, data.ptrw(), data.size());
unzCloseCurrentFile(src_pkg_zip);
//write
@@ -972,14 +974,13 @@ bool EditorExportPlatformIOS::can_export(const Ref<EditorExportPreset> &p_preset
if (!err.empty())
r_error = err;
+ r_missing_templates = !valid;
return valid;
}
EditorExportPlatformIOS::EditorExportPlatformIOS() {
- ///@TODO need to create the correct logo
- // Ref<Image> img = memnew(Image(_iphone_logo));
- Ref<Image> img = memnew(Image(_osx_logo));
+ Ref<Image> img = memnew(Image(_iphone_logo));
logo.instance();
logo->create_from_image(img);
}
diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp
index fbe3bd310d..1c7f41b464 100644
--- a/platform/iphone/os_iphone.cpp
+++ b/platform/iphone/os_iphone.cpp
@@ -117,7 +117,7 @@ void OSIPhone::initialize(const VideoMode &p_desired, int p_video_driver, int p_
*/
visual_server->init();
- // visual_server->cursor_set_visible(false, 0);
+ //visual_server->cursor_set_visible(false, 0);
// reset this to what it should be, it will have been set to 0 after visual_server->init() is called
RasterizerStorageGLES3::system_fbo = gl_view_base_fb;
@@ -127,14 +127,6 @@ void OSIPhone::initialize(const VideoMode &p_desired, int p_video_driver, int p_
input = memnew(InputDefault);
-/*
-#ifdef IOS_SCORELOOP_ENABLED
- scoreloop = memnew(ScoreloopIOS);
- Engine::get_singleton()->add_singleton(Engine::Singleton("Scoreloop", scoreloop));
- scoreloop->connect();
-#endif
- */
-
#ifdef GAME_CENTER_ENABLED
game_center = memnew(GameCenter);
Engine::get_singleton()->add_singleton(Engine::Singleton("GameCenter", game_center));
@@ -149,7 +141,7 @@ void OSIPhone::initialize(const VideoMode &p_desired, int p_video_driver, int p_
#ifdef ICLOUD_ENABLED
icloud = memnew(ICloud);
Engine::get_singleton()->add_singleton(Engine::Singleton("ICloud", icloud));
-//icloud->connect();
+ //icloud->connect();
#endif
Engine::get_singleton()->add_singleton(Engine::Singleton("iOS", memnew(iOS)));
};
@@ -394,12 +386,12 @@ void OSIPhone::alert(const String &p_alert, const String &p_title) {
iOS::alert(utf8_alert.get_data(), utf8_title.get_data());
}
-Error OSIPhone::open_dynamic_library(const String p_path, void *&p_library_handle) {
+Error OSIPhone::open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path) {
if (p_path.length() == 0) {
p_library_handle = RTLD_SELF;
return OK;
}
- return OS_Unix::open_dynamic_library(p_path, p_library_handle);
+ return OS_Unix::open_dynamic_library(p_path, p_library_handle, p_also_set_library_path);
}
Error OSIPhone::close_dynamic_library(void *p_library_handle) {
diff --git a/platform/iphone/os_iphone.h b/platform/iphone/os_iphone.h
index 1ef673765a..3f989b49be 100644
--- a/platform/iphone/os_iphone.h
+++ b/platform/iphone/os_iphone.h
@@ -155,7 +155,7 @@ public:
virtual void alert(const String &p_alert, const String &p_title = "ALERT!");
- virtual Error open_dynamic_library(const String p_path, void *&p_library_handle);
+ virtual Error open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path = false);
virtual Error close_dynamic_library(void *p_library_handle);
virtual Error get_dynamic_library_symbol_handle(void *p_library_handle, const String p_name, void *&p_symbol_handle, bool p_optional = false);
diff --git a/platform/iphone/power_iphone.cpp b/platform/iphone/power_iphone.cpp
index 055d31ef0a..03afdb15f9 100644
--- a/platform/iphone/power_iphone.cpp
+++ b/platform/iphone/power_iphone.cpp
@@ -58,8 +58,10 @@ int PowerIphone::get_power_percent_left() {
}
}
-PowerIphone::PowerIphone()
- : nsecs_left(-1), percent_left(-1), power_state(OS::POWERSTATE_UNKNOWN) {
+PowerIphone::PowerIphone() :
+ nsecs_left(-1),
+ percent_left(-1),
+ power_state(OS::POWERSTATE_UNKNOWN) {
// TODO Auto-generated constructor stub
}
diff --git a/platform/javascript/SCsub b/platform/javascript/SCsub
index 8d505a5829..05992ebac8 100644
--- a/platform/javascript/SCsub
+++ b/platform/javascript/SCsub
@@ -22,7 +22,7 @@ for x in javascript_files:
env.Append(LINKFLAGS=["-s", "EXPORTED_FUNCTIONS=\"['_main','_main_after_fs_sync','_send_notification']\""])
target_dir = env.Dir("#bin")
-build = env.Program(['#bin/godot', target_dir.File('godot' + env['PROGSUFFIX'] + '.wasm')], javascript_objects, PROGSUFFIX=env['PROGSUFFIX'] + '.js');
+build = env.add_program(['#bin/godot', target_dir.File('godot' + env['PROGSUFFIX'] + '.wasm')], javascript_objects, PROGSUFFIX=env['PROGSUFFIX'] + '.js');
js_libraries = []
js_libraries.append(env.File('http_request.js'))
diff --git a/platform/javascript/dom_keys.h b/platform/javascript/dom_keys.h
index d63f165382..bd15cec603 100644
--- a/platform/javascript/dom_keys.h
+++ b/platform/javascript/dom_keys.h
@@ -262,7 +262,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_CAPS_LOCK:
return KEY_CAPSLOCK;
- /*
+ /*
case DOM_VK_KANA: return KEY_UNKNOWN;
case DOM_VK_HANGUL: return KEY_UNKNOWN;
case DOM_VK_EISU: return KEY_UNKNOWN;
@@ -274,7 +274,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_ESCAPE:
return KEY_ESCAPE;
- /*
+ /*
case DOM_VK_CONVERT: return KEY_UNKNOWN;
case DOM_VK_NONCONVERT: return KEY_UNKNOWN;
case DOM_VK_ACCEPT: return KEY_UNKNOWN;
@@ -292,7 +292,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_DOWN:
return KEY_DOWN;
- //case DOM_VK_SELECT: return KEY_UNKNOWN;
+ //case DOM_VK_SELECT: return KEY_UNKNOWN;
case DOM_VK_PRINTSCREEN: // this is the usual printScreen key
case DOM_VK_PRINT: // maybe for alt+printScreen or physical printers?
@@ -320,7 +320,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_DIVIDE:
return KEY_KP_DIVIDE;
- /*
+ /*
case DOM_VK_F17: return KEY_UNKNOWN;
case DOM_VK_F18: return KEY_UNKNOWN;
case DOM_VK_F19: return KEY_UNKNOWN;
@@ -335,7 +335,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_SCROLL_LOCK:
return KEY_SCROLLLOCK;
- /*
+ /*
case DOM_VK_WIN_OEM_FJ_JISHO: return KEY_UNKNOWN;
case DOM_VK_WIN_OEM_FJ_MASSHOU: return KEY_UNKNOWN;
case DOM_VK_WIN_OEM_FJ_TOUROKU: return KEY_UNKNOWN;
@@ -375,7 +375,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_QUOTE:
return KEY_APOSTROPHE;
- // rest is OEM/unusual
+ // rest is OEM/unusual
default: return KEY_UNKNOWN;
};
diff --git a/platform/javascript/export/export.cpp b/platform/javascript/export/export.cpp
index 05b0fb3fbc..775e9c7ee0 100644
--- a/platform/javascript/export/export.cpp
+++ b/platform/javascript/export/export.cpp
@@ -214,7 +214,7 @@ Error EditorExportPlatformJavaScript::export_project(const Ref<EditorExportPrese
//read
unzOpenCurrentFile(pkg);
- unzReadCurrentFile(pkg, data.ptr(), data.size());
+ unzReadCurrentFile(pkg, data.ptrw(), data.size());
unzCloseCurrentFile(pkg);
//write
@@ -257,7 +257,7 @@ Error EditorExportPlatformJavaScript::export_project(const Ref<EditorExportPrese
}
Vector<uint8_t> buf;
buf.resize(f->get_len());
- f->get_buffer(buf.ptr(), buf.size());
+ f->get_buffer(buf.ptrw(), buf.size());
memdelete(f);
_fix_html(buf, p_preset, p_path.get_file().get_basename(), p_debug);
diff --git a/platform/javascript/javascript_eval.cpp b/platform/javascript/javascript_eval.cpp
index a755dcb5c4..9fc23a6747 100644
--- a/platform/javascript/javascript_eval.cpp
+++ b/platform/javascript/javascript_eval.cpp
@@ -45,7 +45,7 @@ Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) {
bool b;
double d;
char *s;
- } js_data[4];
+ } js_data;
PoolByteArray arr;
PoolByteArray::Write arr_write;
@@ -56,9 +56,8 @@ Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) {
const CODE = $0;
const USE_GLOBAL_EXEC_CONTEXT = $1;
const PTR = $2;
- const ELEM_LEN = $3;
- const BYTEARRAY_PTR = $4;
- const BYTEARRAY_WRITE_PTR = $5;
+ const BYTEARRAY_PTR = $3;
+ const BYTEARRAY_WRITE_PTR = $4;
var eval_ret;
try {
if (USE_GLOBAL_EXEC_CONTEXT) {
@@ -118,56 +117,25 @@ Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) {
HEAPU8.set(eval_ret, bytes_ptr);
return 20; // POOL_BYTE_ARRAY
}
-
- if (typeof eval_ret.x==='number' && typeof eval_ret.y==='number') {
- setValue(PTR, eval_ret.x, 'double');
- setValue(PTR + ELEM_LEN, eval_ret.y, 'double');
- if (typeof eval_ret.z==='number') {
- setValue(PTR + ELEM_LEN*2, eval_ret.z, 'double');
- return 7; // VECTOR3
- }
- else if (typeof eval_ret.width==='number' && typeof eval_ret.height==='number') {
- setValue(PTR + ELEM_LEN*2, eval_ret.width, 'double');
- setValue(PTR + ELEM_LEN*3, eval_ret.height, 'double');
- return 6; // RECT2
- }
- return 5; // VECTOR2
- }
-
- if (typeof eval_ret.r === 'number' && typeof eval_ret.g === 'number' && typeof eval_ret.b === 'number') {
- setValue(PTR, eval_ret.r, 'double');
- setValue(PTR + ELEM_LEN, eval_ret.g, 'double');
- setValue(PTR + ELEM_LEN*2, eval_ret.b, 'double');
- setValue(PTR + ELEM_LEN*3, typeof eval_ret.a === 'number' ? eval_ret.a : 1, 'double');
- return 14; // COLOR
- }
break;
}
return 0; // NIL
- }, p_code.utf8().get_data(), p_use_global_exec_context, js_data, sizeof *js_data, &arr, &arr_write));
+ }, p_code.utf8().get_data(), p_use_global_exec_context, &js_data, &arr, &arr_write));
/* clang-format on */
switch (return_type) {
case Variant::BOOL:
- return js_data->b;
+ return js_data.b;
case Variant::REAL:
- return js_data->d;
+ return js_data.d;
case Variant::STRING: {
- String str = String::utf8(js_data->s);
+ String str = String::utf8(js_data.s);
/* clang-format off */
- EM_ASM_({ _free($0); }, js_data->s);
+ EM_ASM_({ _free($0); }, js_data.s);
/* clang-format on */
return str;
}
- case Variant::VECTOR2:
- return Vector2(js_data[0].d, js_data[1].d);
- case Variant::VECTOR3:
- return Vector3(js_data[0].d, js_data[1].d, js_data[2].d);
- case Variant::RECT2:
- return Rect2(js_data[0].d, js_data[1].d, js_data[2].d, js_data[3].d);
- case Variant::COLOR:
- return Color(js_data[0].d, js_data[1].d, js_data[2].d, js_data[3].d);
case Variant::POOL_BYTE_ARRAY:
arr_write = PoolByteArray::Write();
return arr;
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index d5c675d9e0..3b02bfd862 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -201,7 +201,7 @@ static EM_BOOL _mousemove_callback(int event_type, const EmscriptenMouseEvent *m
ev->set_position(pos);
ev->set_global_position(ev->get_position());
- ev->set_relative(_input->get_mouse_position() - ev->get_position());
+ ev->set_relative(ev->get_position() - _input->get_mouse_position());
_input->set_mouse_position(ev->get_position());
ev->set_speed(_input->get_last_mouse_speed());
@@ -336,7 +336,7 @@ static EM_BOOL _touchmove_callback(int event_type, const EmscriptenTouchEvent *t
ev_mouse->set_position(Point2(first_touch.canvasX, first_touch.canvasY));
ev_mouse->set_global_position(ev_mouse->get_position());
- ev_mouse->set_relative(_input->get_mouse_position() - ev_mouse->get_position());
+ ev_mouse->set_relative(ev_mouse->get_position() - _input->get_mouse_position());
_input->set_mouse_position(ev_mouse->get_position());
ev_mouse->set_speed(_input->get_last_mouse_speed());
diff --git a/platform/javascript/power_javascript.cpp b/platform/javascript/power_javascript.cpp
index 10964502d4..54fceb75f4 100644
--- a/platform/javascript/power_javascript.cpp
+++ b/platform/javascript/power_javascript.cpp
@@ -63,8 +63,10 @@ int PowerJavascript::get_power_percent_left() {
}
}
-PowerJavascript::PowerJavascript()
- : nsecs_left(-1), percent_left(-1), power_state(OS::POWERSTATE_UNKNOWN) {
+PowerJavascript::PowerJavascript() :
+ nsecs_left(-1),
+ percent_left(-1),
+ power_state(OS::POWERSTATE_UNKNOWN) {
}
PowerJavascript::~PowerJavascript() {
diff --git a/platform/osx/SCsub b/platform/osx/SCsub
index be3950bc6d..cb88bc470a 100644
--- a/platform/osx/SCsub
+++ b/platform/osx/SCsub
@@ -16,7 +16,8 @@ files = [
'power_osx.cpp',
]
-binary = env.Program('#bin/godot', files)
+prog = env.add_program('#bin/godot', files)
+
if env["debug_symbols"] == "full" or env["debug_symbols"] == "yes":
- env.AddPostAction(binary, make_debug)
+ env.AddPostAction(prog, make_debug)
diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp
index 689b79b826..d3b763b42e 100644
--- a/platform/osx/export/export.cpp
+++ b/platform/osx/export/export.cpp
@@ -390,7 +390,7 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p
//read
unzOpenCurrentFile(src_pkg_zip);
- unzReadCurrentFile(src_pkg_zip, data.ptr(), data.size());
+ unzReadCurrentFile(src_pkg_zip, data.ptrw(), data.size());
unzCloseCurrentFile(src_pkg_zip);
//write
@@ -605,6 +605,7 @@ bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset
if (!err.empty())
r_error = err;
+ r_missing_templates = !valid;
return valid;
}
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h
index 9a740a7bea..6543ca7dd2 100644
--- a/platform/osx/os_osx.h
+++ b/platform/osx/os_osx.h
@@ -43,7 +43,6 @@
#include "servers/visual_server.h"
#include <ApplicationServices/ApplicationServices.h>
-//bitch
#undef CursorShape
/**
@author Juan Linietsky <reduzio@gmail.com>
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm
index 781e8de1ab..75d0bd1648 100644
--- a/platform/osx/os_osx.mm
+++ b/platform/osx/os_osx.mm
@@ -1028,7 +1028,7 @@ void OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
// OS X needs non-zero color size, so set resonable values
int colorBits = 32;
-// Fail if a robustness strategy was requested
+ // Fail if a robustness strategy was requested
#define ADD_ATTR(x) \
{ attributes[attributeCount++] = x; }
@@ -1089,6 +1089,8 @@ void OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
[context makeCurrentContext];
+ set_use_vsync(p_desired.use_vsync);
+
[NSApp activateIgnoringOtherApps:YES];
_update_window();
@@ -1483,7 +1485,7 @@ void OS_OSX::make_rendering_thread() {
Error OS_OSX::shell_open(String p_uri) {
- [[NSWorkspace sharedWorkspace] openURL:[[NSURL alloc] initWithString:[NSString stringWithUTF8String:p_uri.utf8().get_data()]]];
+ [[NSWorkspace sharedWorkspace] openURL:[[NSURL alloc] initWithString:[[NSString stringWithUTF8String:p_uri.utf8().get_data()] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]]];
return OK;
}
diff --git a/platform/osx/power_osx.cpp b/platform/osx/power_osx.cpp
index eed03e63c1..bd5f9fe65f 100644
--- a/platform/osx/power_osx.cpp
+++ b/platform/osx/power_osx.cpp
@@ -242,8 +242,10 @@ int power_osx::get_power_percent_left() {
}
}
-power_osx::power_osx()
- : nsecs_left(-1), percent_left(-1), power_state(OS::POWERSTATE_UNKNOWN) {
+power_osx::power_osx() :
+ nsecs_left(-1),
+ percent_left(-1),
+ power_state(OS::POWERSTATE_UNKNOWN) {
}
power_osx::~power_osx() {
diff --git a/platform/server/SCsub b/platform/server/SCsub
index 30195bb908..30d8cc8064 100644
--- a/platform/server/SCsub
+++ b/platform/server/SCsub
@@ -7,4 +7,4 @@ common_server = [\
"os_server.cpp",\
]
-env.Program('#bin/godot_server', ['godot_server.cpp'] + common_server)
+prog = env.add_program('#bin/godot_server', ['godot_server.cpp'] + common_server)
diff --git a/platform/server/os_server.h b/platform/server/os_server.h
index 03f7c2a6c8..40b10c019f 100644
--- a/platform/server/os_server.h
+++ b/platform/server/os_server.h
@@ -38,7 +38,6 @@
#include "servers/visual/rasterizer.h"
#include "servers/visual_server.h"
-//bitch
#undef CursorShape
/**
@author Juan Linietsky <reduzio@gmail.com>
diff --git a/platform/uwp/SCsub b/platform/uwp/SCsub
index bbd329a7e5..f0d69fef33 100644
--- a/platform/uwp/SCsub
+++ b/platform/uwp/SCsub
@@ -19,7 +19,7 @@ files = [
if "build_angle" in env and env["build_angle"]:
cmd = env.AlwaysBuild(env.ANGLE('libANGLE.lib', None))
-prog = env.Program('#bin/godot', files)
+prog = env.add_program('#bin/godot', files)
if "build_angle" in env and env["build_angle"]:
env.Depends(prog, [cmd])
diff --git a/platform/uwp/app.cpp b/platform/uwp/app.cpp
index c565999d82..b47b99744e 100644
--- a/platform/uwp/app.cpp
+++ b/platform/uwp/app.cpp
@@ -77,15 +77,15 @@ public:
return 0;
}
-App::App()
- : mWindowClosed(false),
- mWindowVisible(true),
- mWindowWidth(0),
- mWindowHeight(0),
- mEglDisplay(EGL_NO_DISPLAY),
- mEglContext(EGL_NO_CONTEXT),
- mEglSurface(EGL_NO_SURFACE),
- number_of_contacts(0) {
+App::App() :
+ mWindowClosed(false),
+ mWindowVisible(true),
+ mWindowWidth(0),
+ mWindowHeight(0),
+ mEglDisplay(EGL_NO_DISPLAY),
+ mEglContext(EGL_NO_CONTEXT),
+ mEglSurface(EGL_NO_SURFACE),
+ number_of_contacts(0) {
}
// The first method called when the IFrameworkView is being created.
diff --git a/platform/uwp/export/export.cpp b/platform/uwp/export/export.cpp
index 120df9bc3f..7f86b4ae53 100644
--- a/platform/uwp/export/export.cpp
+++ b/platform/uwp/export/export.cpp
@@ -137,7 +137,7 @@ class AppxPackager {
ZPOS64_T end_of_central_dir_offset;
Vector<uint8_t> central_dir_data;
- String hash_block(uint8_t *p_block_data, size_t p_block_len);
+ String hash_block(const uint8_t *p_block_data, size_t p_block_len);
void make_block_map();
void make_content_types();
@@ -188,14 +188,14 @@ public:
///////////////////////////////////////////////////////////////////////////
-String AppxPackager::hash_block(uint8_t *p_block_data, size_t p_block_len) {
+String AppxPackager::hash_block(const uint8_t *p_block_data, size_t p_block_len) {
char hash[32];
char base64[45];
sha256_context ctx;
sha256_init(&ctx);
- sha256_hash(&ctx, p_block_data, p_block_len);
+ sha256_hash(&ctx, (uint8_t *)p_block_data, p_block_len);
sha256_done(&ctx, (uint8_t *)hash);
base64_encode(base64, hash, 32);
@@ -510,8 +510,8 @@ void AppxPackager::add_file(String p_file_name, const uint8_t *p_buffer, size_t
strm.avail_in = block_size;
strm.avail_out = strm_out.size();
- strm.next_in = strm_in.ptr();
- strm.next_out = strm_out.ptr();
+ strm.next_in = (uint8_t *)strm_in.ptr();
+ strm.next_out = strm_out.ptrw();
int total_out_before = strm.total_out;
@@ -541,8 +541,8 @@ void AppxPackager::add_file(String p_file_name, const uint8_t *p_buffer, size_t
strm.avail_in = 0;
strm.avail_out = strm_out.size();
- strm.next_in = strm_in.ptr();
- strm.next_out = strm_out.ptr();
+ strm.next_in = (uint8_t *)strm_in.ptr();
+ strm.next_out = strm_out.ptrw();
int total_out_before = strm.total_out;
@@ -588,7 +588,7 @@ void AppxPackager::finish() {
Vector<uint8_t> blockmap_buffer;
blockmap_buffer.resize(blockmap_file->get_len());
- blockmap_file->get_buffer(blockmap_buffer.ptr(), blockmap_buffer.size());
+ blockmap_file->get_buffer(blockmap_buffer.ptrw(), blockmap_buffer.size());
add_file("AppxBlockMap.xml", blockmap_buffer.ptr(), blockmap_buffer.size(), -1, -1, true);
@@ -604,7 +604,7 @@ void AppxPackager::finish() {
Vector<uint8_t> types_buffer;
types_buffer.resize(types_file->get_len());
- types_file->get_buffer(types_buffer.ptr(), types_buffer.size());
+ types_file->get_buffer(types_buffer.ptrw(), types_buffer.size());
add_file("[Content_Types].xml", types_buffer.ptr(), types_buffer.size(), -1, -1, true);
@@ -911,7 +911,7 @@ class EditorExportUWP : public EditorExportPlatform {
}
data.resize(f->get_len());
- f->get_buffer(data.ptr(), data.size());
+ f->get_buffer(data.ptrw(), data.size());
f->close();
memdelete(f);
@@ -1301,7 +1301,7 @@ public:
if (do_read) {
data.resize(info.uncompressed_size);
unzOpenCurrentFile(pkg);
- unzReadCurrentFile(pkg, data.ptr(), data.size());
+ unzReadCurrentFile(pkg, data.ptrw(), data.size());
unzCloseCurrentFile(pkg);
}
@@ -1341,7 +1341,7 @@ public:
// Argc
clf.resize(4);
- encode_uint32(cl.size(), clf.ptr());
+ encode_uint32(cl.size(), clf.ptrw());
for (int i = 0; i < cl.size(); i++) {
diff --git a/platform/uwp/gl_context_egl.cpp b/platform/uwp/gl_context_egl.cpp
index dafe5d5e25..2130af6d60 100644
--- a/platform/uwp/gl_context_egl.cpp
+++ b/platform/uwp/gl_context_egl.cpp
@@ -108,7 +108,8 @@ Error ContextEGL::initialize() {
EGL_NONE,*/
// These are the default display attributes, used to request ANGLE's D3D11 renderer.
// eglInitialize will only succeed with these attributes if the hardware supports D3D11 Feature Level 10_0+.
- EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
+ EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+ EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
// EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER is an optimization that can have large performance benefits on mobile devices.
// Its syntax is subject to change, though. Please update your Visual Studio templates if you experience compilation issues with it.
@@ -117,7 +118,8 @@ Error ContextEGL::initialize() {
// EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE is an option that enables ANGLE to automatically call
// the IDXGIDevice3::Trim method on behalf of the application when it gets suspended.
// Calling IDXGIDevice3::Trim when an application is suspended is a Windows Store application certification requirement.
- EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE, EGL_TRUE,
+ EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE,
+ EGL_TRUE,
EGL_NONE,
};
@@ -190,10 +192,10 @@ void ContextEGL::cleanup() {
}
};
-ContextEGL::ContextEGL(CoreWindow ^ p_window)
- : mEglDisplay(EGL_NO_DISPLAY),
- mEglContext(EGL_NO_CONTEXT),
- mEglSurface(EGL_NO_SURFACE) {
+ContextEGL::ContextEGL(CoreWindow ^ p_window) :
+ mEglDisplay(EGL_NO_DISPLAY),
+ mEglContext(EGL_NO_CONTEXT),
+ mEglSurface(EGL_NO_SURFACE) {
window = p_window;
};
diff --git a/platform/uwp/joypad_uwp.cpp b/platform/uwp/joypad_uwp.cpp
index 0f84bd55a3..088d232e04 100644
--- a/platform/uwp/joypad_uwp.cpp
+++ b/platform/uwp/joypad_uwp.cpp
@@ -54,7 +54,7 @@ void JoypadUWP::process_controllers() {
case ControllerType::GAMEPAD_CONTROLLER: {
- GamepadReading reading = ((Gamepad ^)joy.controller_reference)->GetCurrentReading();
+ GamepadReading reading = ((Gamepad ^) joy.controller_reference)->GetCurrentReading();
int button_mask = (int)GamepadButtons::Menu;
for (int j = 0; j < 14; j++) {
@@ -161,7 +161,7 @@ void JoypadUWP::joypad_vibration_start(int p_device, float p_weak_magnitude, flo
GamepadVibration vibration;
vibration.LeftMotor = p_strong_magnitude;
vibration.RightMotor = p_weak_magnitude;
- ((Gamepad ^)joy.controller_reference)->Vibration = vibration;
+ ((Gamepad ^) joy.controller_reference)->Vibration = vibration;
joy.ff_timestamp = p_timestamp;
joy.ff_end_timestamp = p_duration == 0 ? 0 : p_timestamp + (uint64_t)(p_duration * 1000000.0);
@@ -175,7 +175,7 @@ void JoypadUWP::joypad_vibration_stop(int p_device, uint64_t p_timestamp) {
GamepadVibration vibration;
vibration.LeftMotor = 0.0;
vibration.RightMotor = 0.0;
- ((Gamepad ^)joy.controller_reference)->Vibration = vibration;
+ ((Gamepad ^) joy.controller_reference)->Vibration = vibration;
joy.ff_timestamp = p_timestamp;
joy.vibrating = false;
diff --git a/platform/uwp/logo.png b/platform/uwp/logo.png
index 4376abd563..9017a30636 100644
--- a/platform/uwp/logo.png
+++ b/platform/uwp/logo.png
Binary files differ
diff --git a/platform/uwp/os_uwp.cpp b/platform/uwp/os_uwp.cpp
index 1655caf04b..659f162724 100644
--- a/platform/uwp/os_uwp.cpp
+++ b/platform/uwp/os_uwp.cpp
@@ -241,6 +241,7 @@ void OSUWP::initialize(const VideoMode &p_desired, int p_video_driver, int p_aud
RasterizerGLES3::register_config();
RasterizerGLES3::make_current();
+ gl_context->set_use_vsync(vm.use_vsync);
visual_server = memnew(VisualServerRaster);
// FIXME: Reimplement threaded rendering? Or remove?
diff --git a/platform/uwp/power_uwp.cpp b/platform/uwp/power_uwp.cpp
index 81e97b1391..14fce8b133 100644
--- a/platform/uwp/power_uwp.cpp
+++ b/platform/uwp/power_uwp.cpp
@@ -30,8 +30,10 @@
#include "power_uwp.h"
-PowerUWP::PowerUWP()
- : nsecs_left(-1), percent_left(-1), power_state(OS::POWERSTATE_UNKNOWN) {
+PowerUWP::PowerUWP() :
+ nsecs_left(-1),
+ percent_left(-1),
+ power_state(OS::POWERSTATE_UNKNOWN) {
}
PowerUWP::~PowerUWP() {
diff --git a/platform/windows/SCsub b/platform/windows/SCsub
index aa9eb3e69b..5a253d5db5 100644
--- a/platform/windows/SCsub
+++ b/platform/windows/SCsub
@@ -28,7 +28,7 @@ obj = env.RES(restarget, 'godot_res.rc')
common_win.append(obj)
-binary = env.Program('#bin/godot', ['godot_win.cpp'] + common_win, PROGSUFFIX=env["PROGSUFFIX"])
+prog = env.add_program('#bin/godot', ['godot_win.cpp'] + common_win, PROGSUFFIX=env["PROGSUFFIX"])
# Microsoft Visual Studio Project Generation
if env['vsproj']:
@@ -38,4 +38,4 @@ if env['vsproj']:
if not os.getenv("VCINSTALLDIR"):
if env["debug_symbols"] == "full" or env["debug_symbols"] == "yes":
- env.AddPostAction(binary, make_debug_mingw)
+ env.AddPostAction(prog, make_debug_mingw)
diff --git a/platform/windows/crash_handler_win.cpp b/platform/windows/crash_handler_win.cpp
index feea3911b2..5657036693 100644
--- a/platform/windows/crash_handler_win.cpp
+++ b/platform/windows/crash_handler_win.cpp
@@ -61,8 +61,8 @@ class symbol {
static const int max_name_len = 1024;
public:
- symbol(HANDLE process, DWORD64 address)
- : sym((sym_type *)::operator new(sizeof(*sym) + max_name_len)) {
+ symbol(HANDLE process, DWORD64 address) :
+ sym((sym_type *)::operator new(sizeof(*sym) + max_name_len)) {
memset(sym, '\0', sizeof(*sym) + max_name_len);
sym->SizeOfStruct = sizeof(*sym);
sym->MaxNameLength = max_name_len;
@@ -85,8 +85,8 @@ class get_mod_info {
HANDLE process;
public:
- get_mod_info(HANDLE h)
- : process(h) {}
+ get_mod_info(HANDLE h) :
+ process(h) {}
module_data operator()(HMODULE module) {
module_data ret;
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index fbb02c9d1b..d85e1b061c 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -64,6 +64,10 @@ def get_opts():
return [
('mingw_prefix_32', 'MinGW prefix (Win32)', mingw32),
('mingw_prefix_64', 'MinGW prefix (Win64)', mingw64),
+ # Targeted Windows version: 7 (and later), minimum supported version
+ # XP support dropped after EOL due to missing API for IPv6 and other issues
+ # Vista support dropped after EOL due to GH-10243
+ ('target_win_version', 'Targeted Windows version, >= 0x0601 (Windows 7)', '0x0601'),
EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')),
]
@@ -97,11 +101,6 @@ def configure(env):
env.Append(CPPPATH=['#platform/windows'])
- # Targeted Windows version: 7 (and later), minimum supported version
- # XP support dropped after EOL due to missing API for IPv6 and other issues
- # Vista support dropped after EOL due to GH-10243
- winver = "0x0601"
-
if (os.name == "nt" and os.getenv("VCINSTALLDIR")): # MSVC
env['ENV']['TMP'] = os.environ['TMP']
@@ -175,7 +174,7 @@ def configure(env):
env.Append(CCFLAGS=['/DWASAPI_ENABLED'])
env.Append(CCFLAGS=['/DTYPED_METHOD_BIND'])
env.Append(CCFLAGS=['/DWIN32'])
- env.Append(CCFLAGS=['/DWINVER=%s' % winver, '/D_WIN32_WINNT=%s' % winver])
+ env.Append(CCFLAGS=['/DWINVER=%s' % env['target_win_version'], '/D_WIN32_WINNT=%s' % env['target_win_version']])
if env["bits"] == "64":
env.Append(CCFLAGS=['/D_WIN64'])
@@ -271,7 +270,7 @@ def configure(env):
env.Append(CCFLAGS=['-DOPENGL_ENABLED'])
env.Append(CCFLAGS=['-DRTAUDIO_ENABLED'])
env.Append(CCFLAGS=['-DWASAPI_ENABLED'])
- env.Append(CCFLAGS=['-DWINVER=%s' % winver, '-D_WIN32_WINNT=%s' % winver])
+ env.Append(CCFLAGS=['-DWINVER=%s' % env['target_win_version'], '-D_WIN32_WINNT=%s' % env['target_win_version']])
env.Append(LIBS=['mingw32', 'opengl32', 'dsound', 'ole32', 'd3d9', 'winmm', 'gdi32', 'iphlpapi', 'shlwapi', 'wsock32', 'ws2_32', 'kernel32', 'oleaut32', 'dinput8', 'dxguid', 'ksuser'])
env.Append(CPPFLAGS=['-DMINGW_ENABLED'])
diff --git a/platform/windows/export/export.cpp b/platform/windows/export/export.cpp
index 5301aa9e95..1b6a8f4a60 100644
--- a/platform/windows/export/export.cpp
+++ b/platform/windows/export/export.cpp
@@ -28,11 +28,135 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "editor/editor_export.h"
+#include "editor/editor_settings.h"
+#include "os/file_access.h"
+#include "os/os.h"
#include "platform/windows/logo.gen.h"
+class EditorExportPlatformWindows : public EditorExportPlatformPC {
+
+public:
+ virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0);
+ virtual void get_export_options(List<ExportOption> *r_options);
+};
+
+Error EditorExportPlatformWindows::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) {
+ Error err = EditorExportPlatformPC::export_project(p_preset, p_debug, p_path, p_flags);
+
+ if (err != OK) {
+ return err;
+ }
+
+ String rcedit_path = EditorSettings::get_singleton()->get("export/windows/rcedit");
+
+ if (rcedit_path == String()) {
+ return OK;
+ }
+
+ if (!FileAccess::exists(rcedit_path)) {
+ ERR_PRINTS("Could not find rcedit executable at " + rcedit_path + ", aborting.");
+ return ERR_FILE_NOT_FOUND;
+ }
+
+#ifndef WINDOWS_ENABLED
+ // On non-Windows we need WINE to run rcedit
+ String wine_path = EditorSettings::get_singleton()->get("export/windows/wine");
+
+ if (wine_path != String() && !FileAccess::exists(wine_path)) {
+ ERR_PRINTS("Could not find wine executable at " + wine_path + ", aborting.");
+ return ERR_FILE_NOT_FOUND;
+ }
+
+ if (wine_path == String()) {
+ wine_path = "wine"; // try to run wine from PATH
+ }
+#endif
+
+ String icon_path = p_preset->get("application/icon");
+ String file_verion = p_preset->get("application/file_version");
+ String product_version = p_preset->get("application/product_version");
+ String company_name = p_preset->get("application/company_name");
+ String product_name = p_preset->get("application/product_name");
+ String file_description = p_preset->get("application/file_description");
+ String copyright = p_preset->get("application/copyright");
+ String trademarks = p_preset->get("application/trademarks");
+ String comments = p_preset->get("application/comments");
+
+ List<String> args;
+ args.push_back(p_path);
+ if (icon_path != String()) {
+ args.push_back("--set-icon");
+ args.push_back(icon_path);
+ }
+ if (file_verion != String()) {
+ args.push_back("--set-file-version");
+ args.push_back(file_verion);
+ }
+ if (product_version != String()) {
+ args.push_back("--set-product-version");
+ args.push_back(product_version);
+ }
+ if (company_name != String()) {
+ args.push_back("--set-version-string");
+ args.push_back("CompanyName");
+ args.push_back(company_name);
+ }
+ if (product_name != String()) {
+ args.push_back("--set-version-string");
+ args.push_back("ProductName");
+ args.push_back(product_name);
+ }
+ if (file_description != String()) {
+ args.push_back("--set-version-string");
+ args.push_back("FileDescription");
+ args.push_back(file_description);
+ }
+ if (copyright != String()) {
+ args.push_back("--set-version-string");
+ args.push_back("LegalCopyright");
+ args.push_back(copyright);
+ }
+ if (trademarks != String()) {
+ args.push_back("--set-version-string");
+ args.push_back("LegalTrademarks");
+ args.push_back(trademarks);
+ }
+
+#ifdef WINDOWS_ENABLED
+ OS::get_singleton()->execute(rcedit_path, args, true);
+#else
+ // On non-Windows we need WINE to run rcedit
+ args.push_front(rcedit_path);
+ OS::get_singleton()->execute(wine_path, args, true);
+#endif
+
+ return OK;
+}
+
+void EditorExportPlatformWindows::get_export_options(List<ExportOption> *r_options) {
+ EditorExportPlatformPC::get_export_options(r_options);
+
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/icon", PROPERTY_HINT_GLOBAL_FILE, "*.ico"), String()));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/file_version"), String()));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/product_version"), String()));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/company_name"), String()));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/product_name"), String()));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/file_description"), String()));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/copyright"), String()));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/trademarks"), String()));
+}
+
void register_windows_exporter() {
- Ref<EditorExportPlatformPC> platform;
+ EDITOR_DEF("export/windows/rcedit", "");
+ EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "export/windows/rcedit", PROPERTY_HINT_GLOBAL_FILE, "*.exe"));
+#ifndef WINDOWS_ENABLED
+ // On non-Windows we need WINE to run rcedit
+ EDITOR_DEF("export/windows/wine", "");
+ EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "export/windows/wine", PROPERTY_HINT_GLOBAL_FILE));
+#endif
+
+ Ref<EditorExportPlatformWindows> platform;
platform.instance();
Ref<Image> img = memnew(Image(_windows_logo));
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index c189b3b744..41730d33af 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -69,6 +69,19 @@ __attribute__((visibility("default"))) DWORD NvOptimusEnablement = 0x00000001;
#define WM_TOUCH 576
#endif
+static String format_error_message(DWORD id) {
+
+ LPWSTR messageBuffer = NULL;
+ size_t size = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL, id, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&messageBuffer, 0, NULL);
+
+ String msg = "Error " + itos(id) + ": " + String(messageBuffer, size);
+
+ LocalFree(messageBuffer);
+
+ return msg;
+}
+
extern HINSTANCE godot_hinstance;
void RedirectIOToConsole() {
@@ -210,7 +223,17 @@ bool OS_Windows::can_draw() const {
#define SIGNATURE_MASK 0xFFFFFF00
#define IsPenEvent(dw) (((dw)&SIGNATURE_MASK) == MI_WP_SIGNATURE)
-void OS_Windows::_touch_event(bool p_pressed, int p_x, int p_y, int idx) {
+void OS_Windows::_touch_event(bool p_pressed, float p_x, float p_y, int idx) {
+
+ // Defensive
+ if (touch_state.has(idx) == p_pressed)
+ return;
+
+ if (p_pressed) {
+ touch_state.insert(idx, Vector2(p_x, p_y));
+ } else {
+ touch_state.erase(idx);
+ }
Ref<InputEventScreenTouch> event;
event.instance();
@@ -223,7 +246,17 @@ void OS_Windows::_touch_event(bool p_pressed, int p_x, int p_y, int idx) {
}
};
-void OS_Windows::_drag_event(int p_x, int p_y, int idx) {
+void OS_Windows::_drag_event(float p_x, float p_y, int idx) {
+
+ Map<int, Vector2>::Element *curr = touch_state.find(idx);
+ // Defensive
+ if (!curr)
+ return;
+
+ if (curr->get() == Vector2(p_x, p_y))
+ return;
+
+ curr->get() = Vector2(p_x, p_y);
Ref<InputEventScreenDrag> event;
event.instance();
@@ -253,6 +286,13 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) {
ReleaseCapture();
}
+
+ // Release every touch to avoid sticky points
+ for (Map<int, Vector2>::Element *E = touch_state.front(); E; E = E->next()) {
+ _touch_event(false, E->get().x, E->get().y, E->key());
+ }
+ touch_state.clear();
+
break;
}
case WM_ACTIVATE: // Watch For Window Activate Message
@@ -656,7 +696,6 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
print_line("input lang change");
} break;
-#if WINVER >= 0x0601 // for windows 7
case WM_TOUCH: {
BOOL bHandled = FALSE;
@@ -669,10 +708,10 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
//do something with each touch input entry
if (ti.dwFlags & TOUCHEVENTF_MOVE) {
- _drag_event(ti.x / 100, ti.y / 100, ti.dwID);
+ _drag_event(ti.x / 100.0f, ti.y / 100.0f, ti.dwID);
} else if (ti.dwFlags & (TOUCHEVENTF_UP | TOUCHEVENTF_DOWN)) {
- _touch_event(ti.dwFlags & TOUCHEVENTF_DOWN != 0, ti.x / 100, ti.y / 100, ti.dwID);
+ _touch_event(ti.dwFlags & TOUCHEVENTF_DOWN, ti.x / 100.0f, ti.y / 100.0f, ti.dwID);
};
}
bHandled = TRUE;
@@ -690,7 +729,6 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
} break;
-#endif
case WM_DEVICECHANGE: {
joypad->probe_joypads();
@@ -1036,6 +1074,8 @@ void OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int
RasterizerGLES3::register_config();
RasterizerGLES3::make_current();
+
+ gl_context->set_use_vsync(video_mode.use_vsync);
#endif
visual_server = memnew(VisualServerRaster);
@@ -1044,12 +1084,6 @@ void OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int
visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD));
}
- if (!is_no_window_mode_enabled()) {
- ShowWindow(hWnd, SW_SHOW); // Show The Window
- SetForegroundWindow(hWnd); // Slightly Higher Priority
- SetFocus(hWnd); // Sets Keyboard Focus To
- }
-
/*
DEVMODE dmScreenSettings; // Device Mode
memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared
@@ -1080,13 +1114,19 @@ void OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int
tme.dwHoverTime = HOVER_DEFAULT;
TrackMouseEvent(&tme);
- //RegisterTouchWindow(hWnd, 0); // Windows 7
+ RegisterTouchWindow(hWnd, 0);
_ensure_user_data_dir();
DragAcceptFiles(hWnd, true);
move_timer_id = 1;
+
+ if (!is_no_window_mode_enabled()) {
+ ShowWindow(hWnd, SW_SHOW); // Show The Window
+ SetForegroundWindow(hWnd); // Slightly Higher Priority
+ SetFocus(hWnd); // Sets Keyboard Focus To
+ }
}
void OS_Windows::set_clipboard(const String &p_text) {
@@ -1188,6 +1228,7 @@ void OS_Windows::finalize() {
memdelete(joypad);
memdelete(input);
+ touch_state.clear();
visual_server->finish();
memdelete(visual_server);
@@ -1588,10 +1629,29 @@ void OS_Windows::_update_window_style(bool repaint) {
}
}
-Error OS_Windows::open_dynamic_library(const String p_path, void *&p_library_handle) {
- p_library_handle = (void *)LoadLibrary(p_path.utf8().get_data());
+Error OS_Windows::open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path) {
+
+ typedef DLL_DIRECTORY_COOKIE(WINAPI * PAddDllDirectory)(PCWSTR);
+ typedef BOOL(WINAPI * PRemoveDllDirectory)(DLL_DIRECTORY_COOKIE);
+
+ PAddDllDirectory add_dll_directory = (PAddDllDirectory)GetProcAddress(GetModuleHandle("kernel32.dll"), "AddDllDirectory");
+ PRemoveDllDirectory remove_dll_directory = (PRemoveDllDirectory)GetProcAddress(GetModuleHandle("kernel32.dll"), "RemoveDllDirectory");
+
+ bool has_dll_directory_api = ((add_dll_directory != NULL) && (remove_dll_directory != NULL));
+ DLL_DIRECTORY_COOKIE cookie;
+
+ if (p_also_set_library_path && has_dll_directory_api) {
+ cookie = add_dll_directory(p_path.get_base_dir().c_str());
+ }
+
+ p_library_handle = (void *)LoadLibraryExW(p_path.c_str(), NULL, (p_also_set_library_path && has_dll_directory_api) ? LOAD_LIBRARY_SEARCH_DEFAULT_DIRS : 0);
+
+ if (p_also_set_library_path && has_dll_directory_api) {
+ remove_dll_directory(cookie);
+ }
+
if (!p_library_handle) {
- ERR_EXPLAIN("Can't open dynamic library: " + p_path + ". Error: " + String::num(GetLastError()));
+ ERR_EXPLAIN("Can't open dynamic library: " + p_path + ". Error: " + format_error_message(GetLastError()));
ERR_FAIL_V(ERR_CANT_OPEN);
}
return OK;
@@ -1843,7 +1903,7 @@ Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments,
modstr.resize(cmdline.size());
for (int i = 0; i < cmdline.size(); i++)
modstr[i] = cmdline[i];
- int ret = CreateProcessW(NULL, modstr.ptr(), NULL, NULL, 0, NORMAL_PRIORITY_CLASS, NULL, NULL, si_w, &pi.pi);
+ int ret = CreateProcessW(NULL, modstr.ptrw(), NULL, NULL, 0, NORMAL_PRIORITY_CLASS, NULL, NULL, si_w, &pi.pi);
ERR_FAIL_COND_V(ret == 0, ERR_CANT_FORK);
if (p_blocking) {
@@ -1954,7 +2014,7 @@ void OS_Windows::set_icon(const Ref<Image> &p_icon) {
bool OS_Windows::has_environment(const String &p_var) const {
- return getenv(p_var.utf8().get_data()) != NULL;
+ return _wgetenv(p_var.c_str()) != NULL;
};
String OS_Windows::get_environment(const String &p_var) const {
@@ -2199,14 +2259,17 @@ String OS_Windows::get_system_dir(SystemDir p_dir) const {
String OS_Windows::get_user_data_dir() const {
- String appname = get_safe_application_name();
+ String appname = get_safe_dir_name(ProjectSettings::get_singleton()->get("application/config/name"));
if (appname != "") {
-
- bool use_godot_dir = ProjectSettings::get_singleton()->get("application/config/use_shared_user_dir");
- if (use_godot_dir) {
- return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file(appname).replace("\\", "/");
+ bool use_custom_dir = ProjectSettings::get_singleton()->get("application/config/use_custom_user_dir");
+ if (use_custom_dir) {
+ String custom_dir = get_safe_dir_name(ProjectSettings::get_singleton()->get("application/config/custom_user_dir_name"), true);
+ if (custom_dir == "") {
+ custom_dir = appname;
+ }
+ return get_data_path().plus_file(custom_dir).replace("\\", "/");
} else {
- return get_data_path().plus_file(appname).replace("\\", "/");
+ return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file(appname).replace("\\", "/");
}
}
diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h
index 4367297262..af1ccd4446 100644
--- a/platform/windows/os_windows.h
+++ b/platform/windows/os_windows.h
@@ -117,6 +117,7 @@ class OS_Windows : public OS {
InputDefault *input;
JoypadWindows *joypad;
+ Map<int, Vector2> touch_state;
PowerWindows *power_manager;
@@ -132,8 +133,8 @@ class OS_Windows : public OS {
CrashHandler crash_handler;
- void _drag_event(int p_x, int p_y, int idx);
- void _touch_event(bool p_pressed, int p_x, int p_y, int idx);
+ void _drag_event(float p_x, float p_y, int idx);
+ void _touch_event(bool p_pressed, float p_x, float p_y, int idx);
void _update_window_style(bool repaint = true);
@@ -212,7 +213,7 @@ public:
virtual void set_borderless_window(int p_borderless);
virtual bool get_borderless_window();
- virtual Error open_dynamic_library(const String p_path, void *&p_library_handle);
+ virtual Error open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path = false);
virtual Error close_dynamic_library(void *p_library_handle);
virtual Error get_dynamic_library_symbol_handle(void *p_library_handle, const String p_name, void *&p_symbol_handle, bool p_optional = false);
diff --git a/platform/windows/power_windows.cpp b/platform/windows/power_windows.cpp
index 8d86f160f1..cc452d774d 100644
--- a/platform/windows/power_windows.cpp
+++ b/platform/windows/power_windows.cpp
@@ -121,8 +121,10 @@ int PowerWindows::get_power_percent_left() {
}
}
-PowerWindows::PowerWindows()
- : nsecs_left(-1), percent_left(-1), power_state(OS::POWERSTATE_UNKNOWN) {
+PowerWindows::PowerWindows() :
+ nsecs_left(-1),
+ percent_left(-1),
+ power_state(OS::POWERSTATE_UNKNOWN) {
}
PowerWindows::~PowerWindows() {
diff --git a/platform/windows/stream_peer_winsock.cpp b/platform/windows/stream_peer_winsock.cpp
index a9d9cb9373..8b83215325 100644
--- a/platform/windows/stream_peer_winsock.cpp
+++ b/platform/windows/stream_peer_winsock.cpp
@@ -141,7 +141,7 @@ Error StreamPeerWinsock::write(const uint8_t *p_data, int p_bytes, int &r_sent,
if (WSAGetLastError() != WSAEWOULDBLOCK) {
- perror("shit?");
+ perror("Nothing sent");
disconnect_from_host();
ERR_PRINT("Server disconnected!\n");
return FAILED;
@@ -197,7 +197,7 @@ Error StreamPeerWinsock::read(uint8_t *p_buffer, int p_bytes, int &r_received, b
if (WSAGetLastError() != WSAEWOULDBLOCK) {
- perror("shit?");
+ perror("Nothing read");
disconnect_from_host();
ERR_PRINT("Server disconnected!\n");
return FAILED;
diff --git a/platform/x11/SCsub b/platform/x11/SCsub
index aabc49149f..6378553638 100644
--- a/platform/x11/SCsub
+++ b/platform/x11/SCsub
@@ -17,6 +17,7 @@ common_x11 = [
"power_x11.cpp",
]
-binary = env.Program('#bin/godot', ['godot_x11.cpp'] + common_x11)
+prog = env.add_program('#bin/godot', ['godot_x11.cpp'] + common_x11)
+
if env["debug_symbols"] == "full" or env["debug_symbols"] == "yes":
- env.AddPostAction(binary, make_debug)
+ env.AddPostAction(prog, make_debug)
diff --git a/platform/x11/context_gl_x11.cpp b/platform/x11/context_gl_x11.cpp
index 4f9d4a84b9..61c6b3c9dd 100644
--- a/platform/x11/context_gl_x11.cpp
+++ b/platform/x11/context_gl_x11.cpp
@@ -228,8 +228,8 @@ bool ContextGL_X11::is_using_vsync() const {
return use_vsync;
}
-ContextGL_X11::ContextGL_X11(::Display *p_x11_display, ::Window &p_x11_window, const OS::VideoMode &p_default_video_mode, bool p_opengl_3_context)
- : x11_window(p_x11_window) {
+ContextGL_X11::ContextGL_X11(::Display *p_x11_display, ::Window &p_x11_window, const OS::VideoMode &p_default_video_mode, bool p_opengl_3_context) :
+ x11_window(p_x11_window) {
default_video_mode = p_default_video_mode;
x11_display = p_x11_display;
diff --git a/platform/x11/detect.py b/platform/x11/detect.py
index 3d07851c4f..d7dbe71da4 100644
--- a/platform/x11/detect.py
+++ b/platform/x11/detect.py
@@ -55,6 +55,7 @@ def get_opts():
BoolVariable('pulseaudio', 'Detect & use pulseaudio', True),
BoolVariable('udev', 'Use udev for gamepad connection callbacks', False),
EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')),
+ BoolVariable('touch', 'Enable touch events', True),
]
@@ -141,6 +142,14 @@ def configure(env):
env.ParseConfig('pkg-config xinerama --cflags --libs')
env.ParseConfig('pkg-config xrandr --cflags --libs')
+ if (env['touch']):
+ x11_error = os.system("pkg-config xi --modversion > /dev/null ")
+ if (x11_error):
+ print("xi not found.. cannot build with touch. Aborting.")
+ sys.exit(255)
+ env.ParseConfig('pkg-config xi --cflags --libs')
+ env.Append(CPPFLAGS=['-DTOUCH_ENABLED'])
+
# FIXME: Check for existence of the libs before parsing their flags with pkg-config
if not env['builtin_openssl']:
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp
index d1aa129e77..b59fab7088 100644
--- a/platform/x11/os_x11.cpp
+++ b/platform/x11/os_x11.cpp
@@ -132,10 +132,9 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
// Try to support IME if detectable auto-repeat is supported
if (xkb_dar == True) {
-// Xutf8LookupString will be used later instead of XmbLookupString before
-// the multibyte sequences can be converted to unicode string.
-
#ifdef X_HAVE_UTF8_STRING
+ // Xutf8LookupString will be used later instead of XmbLookupString before
+ // the multibyte sequences can be converted to unicode string.
modifiers = XSetLocaleModifiers("");
#endif
}
@@ -178,6 +177,49 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
}
}
+#ifdef TOUCH_ENABLED
+ if (!XQueryExtension(x11_display, "XInputExtension", &touch.opcode, &event_base, &error_base)) {
+ fprintf(stderr, "XInput extension not available");
+ } else {
+ // 2.2 is the first release with multitouch
+ int xi_major = 2;
+ int xi_minor = 2;
+ if (XIQueryVersion(x11_display, &xi_major, &xi_minor) != Success) {
+ fprintf(stderr, "XInput 2.2 not available (server supports %d.%d)\n", xi_major, xi_minor);
+ touch.opcode = 0;
+ } else {
+ int dev_count;
+ XIDeviceInfo *info = XIQueryDevice(x11_display, XIAllDevices, &dev_count);
+
+ for (int i = 0; i < dev_count; i++) {
+ XIDeviceInfo *dev = &info[i];
+ if (!dev->enabled)
+ continue;
+ if (!(dev->use == XIMasterPointer || dev->use == XIFloatingSlave))
+ continue;
+
+ bool direct_touch = false;
+ for (int j = 0; j < dev->num_classes; j++) {
+ if (dev->classes[j]->type == XITouchClass && ((XITouchClassInfo *)dev->classes[j])->mode == XIDirectTouch) {
+ direct_touch = true;
+ break;
+ }
+ }
+ if (direct_touch) {
+ touch.devices.push_back(dev->deviceid);
+ fprintf(stderr, "Using touch device: %s\n", dev->name);
+ }
+ }
+
+ XIFreeDeviceInfo(info);
+
+ if (!touch.devices.size()) {
+ fprintf(stderr, "No touch devices found\n");
+ }
+ }
+ }
+#endif
+
xim = XOpenIM(x11_display, NULL, NULL, NULL);
if (xim == NULL) {
@@ -243,6 +285,8 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
RasterizerGLES3::make_current();
+ context_gl->set_use_vsync(current_videomode.use_vsync);
+
#endif
visual_server = memnew(VisualServerRaster);
@@ -308,6 +352,34 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
XChangeWindowAttributes(x11_display, x11_window, CWEventMask, &new_attr);
+#ifdef TOUCH_ENABLED
+ if (touch.devices.size()) {
+
+ // Must be alive after this block
+ static unsigned char mask_data[XIMaskLen(XI_LASTEVENT)] = {};
+
+ touch.event_mask.deviceid = XIAllDevices;
+ touch.event_mask.mask_len = sizeof(mask_data);
+ touch.event_mask.mask = mask_data;
+
+ XISetMask(touch.event_mask.mask, XI_TouchBegin);
+ XISetMask(touch.event_mask.mask, XI_TouchUpdate);
+ XISetMask(touch.event_mask.mask, XI_TouchEnd);
+ XISetMask(touch.event_mask.mask, XI_TouchOwnership);
+
+ XISelectEvents(x11_display, x11_window, &touch.event_mask, 1);
+
+ // Disabled by now since grabbing also blocks mouse events
+ // (they are received as extended events instead of standard events)
+ /*XIClearMask(touch.event_mask.mask, XI_TouchOwnership);
+
+ // Grab touch devices to avoid OS gesture interference
+ for (int i = 0; i < touch.devices.size(); ++i) {
+ XIGrabDevice(x11_display, touch.devices[i], x11_window, CurrentTime, None, XIGrabModeAsync, XIGrabModeAsync, False, &touch.event_mask);
+ }*/
+ }
+#endif
+
/* set the titlebar name */
XStoreName(x11_display, x11_window, "Godot");
@@ -441,15 +513,14 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
power_manager = memnew(PowerX11);
XEvent xevent;
- while (XCheckIfEvent(x11_display, &xevent, _check_window_events, NULL)) {
- _window_changed(&xevent);
+ while (XPending(x11_display) > 0) {
+ XNextEvent(x11_display, &xevent);
+ if (xevent.type == ConfigureNotify) {
+ _window_changed(&xevent);
+ }
}
}
-int OS_X11::_check_window_events(Display *display, XEvent *event, char *arg) {
- if (event->type == ConfigureNotify) return 1;
- return 0;
-}
void OS_X11::xim_destroy_callback(::XIM im, ::XPointer client_data,
::XPointer call_data) {
@@ -478,7 +549,7 @@ void OS_X11::finalize() {
memdelete(main_loop);
main_loop = NULL;
-/*
+ /*
if (debugger_connection_console) {
memdelete(debugger_connection_console);
}
@@ -487,6 +558,10 @@ void OS_X11::finalize() {
#ifdef JOYDEV_ENABLED
memdelete(joypad);
#endif
+#ifdef TOUCH_ENABLED
+ touch.devices.clear();
+ touch.state.clear();
+#endif
memdelete(input);
visual_server->finish();
@@ -1435,6 +1510,69 @@ void OS_X11::process_xevents() {
continue;
}
+#ifdef TOUCH_ENABLED
+ if (XGetEventData(x11_display, &event.xcookie)) {
+
+ if (event.xcookie.type == GenericEvent && event.xcookie.extension == touch.opcode) {
+
+ XIDeviceEvent *event_data = (XIDeviceEvent *)event.xcookie.data;
+ int index = event_data->detail;
+ Vector2 pos = Vector2(event_data->event_x, event_data->event_y);
+
+ switch (event_data->evtype) {
+
+ case XI_TouchBegin: // Fall-through
+ // Disabled hand-in-hand with the grabbing
+ //XIAllowTouchEvents(x11_display, event_data->deviceid, event_data->detail, x11_window, XIAcceptTouch);
+
+ case XI_TouchEnd: {
+
+ bool is_begin = event_data->evtype == XI_TouchBegin;
+
+ Ref<InputEventScreenTouch> st;
+ st.instance();
+ st->set_index(index);
+ st->set_position(pos);
+ st->set_pressed(is_begin);
+
+ if (is_begin) {
+ if (touch.state.has(index)) // Defensive
+ break;
+ touch.state[index] = pos;
+ input->parse_input_event(st);
+ } else {
+ if (!touch.state.has(index)) // Defensive
+ break;
+ touch.state.erase(index);
+ input->parse_input_event(st);
+ }
+ } break;
+
+ case XI_TouchUpdate: {
+
+ Map<int, Vector2>::Element *curr_pos_elem = touch.state.find(index);
+ if (!curr_pos_elem) { // Defensive
+ break;
+ }
+
+ if (curr_pos_elem->value() != pos) {
+
+ Ref<InputEventScreenDrag> sd;
+ sd.instance();
+ sd->set_index(index);
+ sd->set_position(pos);
+ sd->set_relative(pos - curr_pos_elem->value());
+ input->parse_input_event(sd);
+
+ curr_pos_elem->value() = pos;
+ }
+ } break;
+ }
+ }
+ }
+ XFreeEventData(x11_display, &event.xcookie);
+#endif
+
switch (event.type) {
case Expose:
Main::force_redraw();
@@ -1477,6 +1615,12 @@ void OS_X11::process_xevents() {
ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
GrabModeAsync, GrabModeAsync, x11_window, None, CurrentTime);
}
+#ifdef TOUCH_ENABLED
+ // Grab touch devices to avoid OS gesture interference
+ /*for (int i = 0; i < touch.devices.size(); ++i) {
+ XIGrabDevice(x11_display, touch.devices[i], x11_window, CurrentTime, None, XIGrabModeAsync, XIGrabModeAsync, False, &touch.event_mask);
+ }*/
+#endif
if (xic) {
XSetICFocus(xic);
}
@@ -1493,6 +1637,23 @@ void OS_X11::process_xevents() {
}
XUngrabPointer(x11_display, CurrentTime);
}
+#ifdef TOUCH_ENABLED
+ // Ungrab touch devices so input works as usual while we are unfocused
+ /*for (int i = 0; i < touch.devices.size(); ++i) {
+ XIUngrabDevice(x11_display, touch.devices[i], CurrentTime);
+ }*/
+
+ // Release every pointer to avoid sticky points
+ for (Map<int, Vector2>::Element *E = touch.state.front(); E; E = E->next()) {
+
+ Ref<InputEventScreenTouch> st;
+ st.instance();
+ st->set_index(E->key());
+ st->set_position(E->get());
+ input->parse_input_event(st);
+ }
+ touch.state.clear();
+#endif
if (xic) {
XUnsetICFocus(xic);
}
diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h
index a74e6ee5f3..244c69ee2b 100644
--- a/platform/x11/os_x11.h
+++ b/platform/x11/os_x11.h
@@ -48,6 +48,9 @@
#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>
#include <X11/keysym.h>
+#ifdef TOUCH_ENABLED
+#include <X11/extensions/XInput2.h>
+#endif
// Hints for X11 fullscreen
typedef struct {
@@ -117,6 +120,14 @@ class OS_X11 : public OS_Unix {
Point2i last_click_pos;
uint64_t last_click_ms;
uint32_t last_button_state;
+#ifdef TOUCH_ENABLED
+ struct {
+ int opcode;
+ Vector<int> devices;
+ XIEventMask event_mask;
+ Map<int, Vector2> state;
+ } touch;
+#endif
unsigned int get_mouse_button_state(unsigned int p_x11_state);
void get_key_modifier_state(unsigned int p_x11_state, Ref<InputEventWithModifiers> state);
@@ -188,7 +199,6 @@ protected:
virtual void set_main_loop(MainLoop *p_main_loop);
void _window_changed(XEvent *xevent);
- static int _check_window_events(Display *display, XEvent *xevent, char *arg);
public:
virtual String get_name();
diff --git a/platform/x11/power_x11.cpp b/platform/x11/power_x11.cpp
index 76ff7f91fb..0ef2629cb0 100644
--- a/platform/x11/power_x11.cpp
+++ b/platform/x11/power_x11.cpp
@@ -542,8 +542,10 @@ bool PowerX11::UpdatePowerInfo() {
return false;
}
-PowerX11::PowerX11()
- : nsecs_left(-1), percent_left(-1), power_state(OS::POWERSTATE_UNKNOWN) {
+PowerX11::PowerX11() :
+ nsecs_left(-1),
+ percent_left(-1),
+ power_state(OS::POWERSTATE_UNKNOWN) {
}
PowerX11::~PowerX11() {
diff --git a/scene/2d/animated_sprite.cpp b/scene/2d/animated_sprite.cpp
index 4865858b7d..f8f94926b7 100644
--- a/scene/2d/animated_sprite.cpp
+++ b/scene/2d/animated_sprite.cpp
@@ -568,7 +568,7 @@ void AnimatedSprite::stop() {
bool AnimatedSprite::is_playing() const {
- return is_processing();
+ return playing;
}
void AnimatedSprite::_reset_timeout() {
diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp
index 9ee77a710c..80f9bf0f9f 100644
--- a/scene/2d/area_2d.cpp
+++ b/scene/2d/area_2d.cpp
@@ -688,8 +688,8 @@ void Area2D::_bind_methods() {
BIND_ENUM_CONSTANT(SPACE_OVERRIDE_REPLACE_COMBINE);
}
-Area2D::Area2D()
- : CollisionObject2D(Physics2DServer::get_singleton()->area_create(), true) {
+Area2D::Area2D() :
+ CollisionObject2D(Physics2DServer::get_singleton()->area_create(), true) {
space_override = SPACE_OVERRIDE_DISABLED;
set_gravity(98);
diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp
index 73e633139b..937a026e34 100644
--- a/scene/2d/audio_stream_player_2d.cpp
+++ b/scene/2d/audio_stream_player_2d.cpp
@@ -21,7 +21,7 @@ void AudioStreamPlayer2D::_mix_audio() {
}
//get data
- AudioFrame *buffer = mix_buffer.ptr();
+ AudioFrame *buffer = mix_buffer.ptrw();
int buffer_size = mix_buffer.size();
//mix
@@ -134,7 +134,7 @@ void AudioStreamPlayer2D::_notification(int p_what) {
Physics2DDirectSpaceState::ShapeResult sr[MAX_INTERSECT_AREAS];
- int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask, Physics2DDirectSpaceState::TYPE_MASK_AREA);
+ int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask);
for (int i = 0; i < areas; i++) {
diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp
index 66abe1baa8..82123d12ac 100644
--- a/scene/2d/canvas_item.cpp
+++ b/scene/2d/canvas_item.cpp
@@ -184,6 +184,11 @@ RID CanvasItemMaterial::get_shader_rid() const {
return shader_map[current_key].shader;
}
+Shader::Mode CanvasItemMaterial::get_shader_mode() const {
+
+ return Shader::MODE_CANVAS_ITEM;
+}
+
void CanvasItemMaterial::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_blend_mode", "blend_mode"), &CanvasItemMaterial::set_blend_mode);
@@ -206,8 +211,8 @@ void CanvasItemMaterial::_bind_methods() {
BIND_ENUM_CONSTANT(LIGHT_MODE_LIGHT_ONLY);
}
-CanvasItemMaterial::CanvasItemMaterial()
- : element(this) {
+CanvasItemMaterial::CanvasItemMaterial() :
+ element(this) {
blend_mode = BLEND_MODE_MIX;
light_mode = LIGHT_MODE_NORMAL;
@@ -618,6 +623,29 @@ void CanvasItem::draw_polyline_colors(const Vector<Point2> &p_points, const Vect
VisualServer::get_singleton()->canvas_item_add_polyline(canvas_item, p_points, p_colors, p_width, p_antialiased);
}
+
+void CanvasItem::draw_multiline(const Vector<Point2> &p_points, const Color &p_color, float p_width, bool p_antialiased) {
+
+ if (!drawing) {
+ ERR_EXPLAIN("Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal.");
+ ERR_FAIL();
+ }
+
+ Vector<Color> colors;
+ colors.push_back(p_color);
+ VisualServer::get_singleton()->canvas_item_add_multiline(canvas_item, p_points, colors, p_width, p_antialiased);
+}
+
+void CanvasItem::draw_multiline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width, bool p_antialiased) {
+
+ if (!drawing) {
+ ERR_EXPLAIN("Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal.");
+ ERR_FAIL();
+ }
+
+ VisualServer::get_singleton()->canvas_item_add_multiline(canvas_item, p_points, p_colors, p_width, p_antialiased);
+}
+
void CanvasItem::draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_filled) {
if (!drawing) {
@@ -974,6 +1002,8 @@ void CanvasItem::_bind_methods() {
ClassDB::bind_method(D_METHOD("draw_line", "from", "to", "color", "width", "antialiased"), &CanvasItem::draw_line, DEFVAL(1.0), DEFVAL(false));
ClassDB::bind_method(D_METHOD("draw_polyline", "points", "color", "width", "antialiased"), &CanvasItem::draw_polyline, DEFVAL(1.0), DEFVAL(false));
ClassDB::bind_method(D_METHOD("draw_polyline_colors", "points", "colors", "width", "antialiased"), &CanvasItem::draw_polyline_colors, DEFVAL(1.0), DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("draw_multiline", "points", "color", "width", "antialiased"), &CanvasItem::draw_multiline, DEFVAL(1.0), DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("draw_multiline_colors", "points", "colors", "width", "antialiased"), &CanvasItem::draw_multiline_colors, DEFVAL(1.0), DEFVAL(false));
ClassDB::bind_method(D_METHOD("draw_rect", "rect", "color", "filled"), &CanvasItem::draw_rect, DEFVAL(true));
ClassDB::bind_method(D_METHOD("draw_circle", "position", "radius", "color"), &CanvasItem::draw_circle);
ClassDB::bind_method(D_METHOD("draw_texture", "texture", "position", "modulate", "normal_map"), &CanvasItem::draw_texture, DEFVAL(Color(1, 1, 1, 1)), DEFVAL(Variant()));
@@ -1126,8 +1156,8 @@ Rect2 CanvasItem::_edit_get_item_and_children_rect() const {
return rect;
}
-CanvasItem::CanvasItem()
- : xform_change(this) {
+CanvasItem::CanvasItem() :
+ xform_change(this) {
canvas_item = VisualServer::get_singleton()->canvas_item_create();
visible = true;
diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h
index c877a94755..2384c0f370 100644
--- a/scene/2d/canvas_item.h
+++ b/scene/2d/canvas_item.h
@@ -123,6 +123,8 @@ public:
RID get_shader_rid() const;
+ virtual Shader::Mode get_shader_mode() const;
+
CanvasItemMaterial();
virtual ~CanvasItemMaterial();
};
@@ -266,6 +268,8 @@ public:
void draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = 1.0, bool p_antialiased = false);
void draw_polyline(const Vector<Point2> &p_points, const Color &p_color, float p_width = 1.0, bool p_antialiased = false);
void draw_polyline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = 1.0, bool p_antialiased = false);
+ void draw_multiline(const Vector<Point2> &p_points, const Color &p_color, float p_width = 1.0, bool p_antialiased = false);
+ void draw_multiline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = 1.0, bool p_antialiased = false);
void draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_filled = true);
void draw_circle(const Point2 &p_pos, float p_radius, const Color &p_color);
void draw_texture(const Ref<Texture> &p_texture, const Point2 &p_pos, const Color &p_modulate = Color(1, 1, 1, 1), const Ref<Texture> &p_normal_map = Ref<Texture>());
diff --git a/scene/2d/line_2d.cpp b/scene/2d/line_2d.cpp
index 9131223ff3..57a0e15447 100644
--- a/scene/2d/line_2d.cpp
+++ b/scene/2d/line_2d.cpp
@@ -37,8 +37,8 @@ VARIANT_ENUM_CAST(Line2D::LineJointMode)
VARIANT_ENUM_CAST(Line2D::LineCapMode)
VARIANT_ENUM_CAST(Line2D::LineTextureMode)
-Line2D::Line2D()
- : Node2D() {
+Line2D::Line2D() :
+ Node2D() {
_joint_mode = LINE_JOINT_SHARP;
_begin_cap_mode = LINE_CAP_NONE;
_end_cap_mode = LINE_CAP_NONE;
diff --git a/scene/2d/navigation2d.cpp b/scene/2d/navigation2d.cpp
index 74d835dfb2..9eff107827 100644
--- a/scene/2d/navigation2d.cpp
+++ b/scene/2d/navigation2d.cpp
@@ -150,7 +150,7 @@ void Navigation2D::_navpoly_unlink(int p_id) {
Polygon &p = E->get();
int ec = p.edges.size();
- Polygon::Edge *edges = p.edges.ptr();
+ Polygon::Edge *edges = p.edges.ptrw();
for (int i = 0; i < ec; i++) {
int next = (i + 1) % ec;
diff --git a/scene/2d/navigation2d.h b/scene/2d/navigation2d.h
index e87b01f7c5..bb97e1a9a9 100644
--- a/scene/2d/navigation2d.h
+++ b/scene/2d/navigation2d.h
@@ -57,9 +57,9 @@ class Navigation2D : public Node2D {
return (a.key == p_key.a.key) ? (b.key < p_key.b.key) : (a.key < p_key.a.key);
};
- EdgeKey(const Point &p_a = Point(), const Point &p_b = Point())
- : a(p_a),
- b(p_b) {
+ EdgeKey(const Point &p_a = Point(), const Point &p_b = Point()) :
+ a(p_a),
+ b(p_b) {
if (a.key > b.key) {
SWAP(a, b);
}
diff --git a/scene/2d/parallax_layer.cpp b/scene/2d/parallax_layer.cpp
index 4a69841975..9da27caa4c 100644
--- a/scene/2d/parallax_layer.cpp
+++ b/scene/2d/parallax_layer.cpp
@@ -73,7 +73,8 @@ void ParallaxLayer::_update_mirroring() {
RID c = pb->get_world_2d()->get_canvas();
RID ci = get_canvas_item();
- VisualServer::get_singleton()->canvas_set_item_mirroring(c, ci, mirroring);
+ Point2 mirrorScale = mirroring * get_scale();
+ VisualServer::get_singleton()->canvas_set_item_mirroring(c, ci, mirrorScale);
}
}
@@ -116,18 +117,21 @@ void ParallaxLayer::set_base_offset_and_scale(const Point2 &p_offset, float p_sc
Point2 new_ofs = (screen_offset + (p_offset - screen_offset) * motion_scale) + motion_offset * p_scale + orig_offset * p_scale;
- Vector2 mirror = Vector2(1, 1);
-
if (mirroring.x) {
- mirror.x = -1;
+ double den = mirroring.x * p_scale;
+ double before = new_ofs.x;
+ new_ofs.x -= den * ceil(new_ofs.x / den);
}
if (mirroring.y) {
- mirror.y = -1;
+ double den = mirroring.y * p_scale;
+ new_ofs.y -= den * ceil(new_ofs.y / den);
}
set_position(new_ofs);
- set_scale(mirror * p_scale * orig_scale);
+ set_scale(Vector2(1, 1) * p_scale * orig_scale);
+
+ _update_mirroring();
}
String ParallaxLayer::get_configuration_warning() const {
diff --git a/scene/2d/particles_2d.cpp b/scene/2d/particles_2d.cpp
index aee5d89150..7d53557216 100644
--- a/scene/2d/particles_2d.cpp
+++ b/scene/2d/particles_2d.cpp
@@ -291,7 +291,7 @@ void Particles2D::_notification(int p_what) {
texture_rid = texture->get_rid();
RID normal_rid;
if (normal_map.is_valid())
- normal_rid = texture->get_rid();
+ normal_rid = normal_map->get_rid();
VS::get_singleton()->canvas_item_add_particles(get_canvas_item(), particles, texture_rid, normal_rid, h_frames, v_frames);
diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp
index 55c055e34f..4029ef137b 100644
--- a/scene/2d/path_2d.cpp
+++ b/scene/2d/path_2d.cpp
@@ -107,39 +107,59 @@ void PathFollow2D::_update_transform() {
if (!c.is_valid())
return;
- if (delta_offset == 0) {
- return;
- }
-
- float o = offset;
+ float path_length = c->get_baked_length();
+ float bounded_offset = offset;
if (loop)
- o = Math::fposmod(o, c->get_baked_length());
-
- Vector2 pos = c->interpolate_baked(o, cubic);
-
- Vector2 offset = Vector2(h_offset, v_offset);
+ bounded_offset = Math::fposmod(bounded_offset, path_length);
+ else
+ bounded_offset = CLAMP(bounded_offset, 0, path_length);
- Transform2D t = get_transform();
- t.set_origin(pos);
+ Vector2 pos = c->interpolate_baked(bounded_offset, cubic);
if (rotate) {
+ float ahead = bounded_offset + lookahead;
+
+ if (loop && ahead >= path_length) {
+ // If our lookahead will loop, we need to check if the path is closed.
+ int point_count = c->get_point_count();
+ if (point_count > 0) {
+ Vector2 start_point = c->get_point_position(0);
+ Vector2 end_point = c->get_point_position(point_count - 1);
+ if (start_point == end_point) {
+ // Since the path is closed we want to 'smooth off'
+ // the corner at the start/end.
+ // So we wrap the lookahead back round.
+ ahead = Math::fmod(ahead, path_length);
+ }
+ }
+ }
- Vector2 t_prev = (pos - c->interpolate_baked(o - delta_offset, cubic)).normalized();
- Vector2 t_cur = (c->interpolate_baked(o + delta_offset, cubic) - pos).normalized();
+ Vector2 ahead_pos = c->interpolate_baked(ahead, cubic);
- float dot = t_prev.dot(t_cur);
- float angle = Math::acos(CLAMP(dot, -1, 1));
+ Vector2 tangent_to_curve;
+ if (ahead_pos == pos) {
+ // This will happen at the end of non-looping or non-closed paths.
+ // We'll try a look behind instead, in order to get a meaningful angle.
+ tangent_to_curve =
+ (pos - c->interpolate_baked(bounded_offset - lookahead, cubic)).normalized();
+ } else {
+ tangent_to_curve = (ahead_pos - pos).normalized();
+ }
- t.rotate(angle);
+ Vector2 normal_of_curve = -tangent_to_curve.tangent();
- t.translate(offset);
+ pos += tangent_to_curve * h_offset;
+ pos += normal_of_curve * v_offset;
+
+ set_rotation(tangent_to_curve.angle());
} else {
- t.set_origin(t.get_origin() + offset);
+ pos.x += h_offset;
+ pos.y += v_offset;
}
- set_transform(t);
+ set_position(pos);
}
void PathFollow2D::_notification(int p_what) {
@@ -187,6 +207,8 @@ bool PathFollow2D::_set(const StringName &p_name, const Variant &p_value) {
set_cubic_interpolation(p_value);
} else if (String(p_name) == "loop") {
set_loop(p_value);
+ } else if (String(p_name) == "lookahead") {
+ set_lookahead(p_value);
} else
return false;
@@ -209,6 +231,8 @@ bool PathFollow2D::_get(const StringName &p_name, Variant &r_ret) const {
r_ret = cubic;
} else if (String(p_name) == "loop") {
r_ret = loop;
+ } else if (String(p_name) == "lookahead") {
+ r_ret = lookahead;
} else
return false;
@@ -226,6 +250,7 @@ void PathFollow2D::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::BOOL, "rotate"));
p_list->push_back(PropertyInfo(Variant::BOOL, "cubic_interp"));
p_list->push_back(PropertyInfo(Variant::BOOL, "loop"));
+ p_list->push_back(PropertyInfo(Variant::REAL, "lookahead", PROPERTY_HINT_RANGE, "0.001,1024.0,0.001"));
}
String PathFollow2D::get_configuration_warning() const {
@@ -265,7 +290,7 @@ void PathFollow2D::_bind_methods() {
}
void PathFollow2D::set_offset(float p_offset) {
- delta_offset = p_offset - offset;
+
offset = p_offset;
if (path)
_update_transform();
@@ -316,6 +341,16 @@ float PathFollow2D::get_unit_offset() const {
return 0;
}
+void PathFollow2D::set_lookahead(float p_lookahead) {
+
+ lookahead = p_lookahead;
+}
+
+float PathFollow2D::get_lookahead() const {
+
+ return lookahead;
+}
+
void PathFollow2D::set_rotate(bool p_rotate) {
rotate = p_rotate;
@@ -340,11 +375,11 @@ bool PathFollow2D::has_loop() const {
PathFollow2D::PathFollow2D() {
offset = 0;
- delta_offset = 0;
h_offset = 0;
v_offset = 0;
path = NULL;
rotate = true;
cubic = true;
loop = true;
+ lookahead = 4;
}
diff --git a/scene/2d/path_2d.h b/scene/2d/path_2d.h
index f5ba3a3d32..88a0abdea9 100644
--- a/scene/2d/path_2d.h
+++ b/scene/2d/path_2d.h
@@ -60,9 +60,9 @@ public:
private:
Path2D *path;
real_t offset;
- real_t delta_offset; // change in offset since last _update_transform
real_t h_offset;
real_t v_offset;
+ real_t lookahead;
bool cubic;
bool loop;
bool rotate;
@@ -90,6 +90,9 @@ public:
void set_unit_offset(float p_unit_offset);
float get_unit_offset() const;
+ void set_lookahead(float p_lookahead);
+ float get_lookahead() const;
+
void set_loop(bool p_loop);
bool has_loop() const;
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp
index 1f6127e6eb..a1a1101b11 100644
--- a/scene/2d/physics_body_2d.cpp
+++ b/scene/2d/physics_body_2d.cpp
@@ -132,8 +132,8 @@ bool PhysicsBody2D::get_collision_layer_bit(int p_bit) const {
return get_collision_layer() & (1 << p_bit);
}
-PhysicsBody2D::PhysicsBody2D(Physics2DServer::BodyMode p_mode)
- : CollisionObject2D(Physics2DServer::get_singleton()->body_create(), false) {
+PhysicsBody2D::PhysicsBody2D(Physics2DServer::BodyMode p_mode) :
+ CollisionObject2D(Physics2DServer::get_singleton()->body_create(), false) {
Physics2DServer::get_singleton()->body_set_mode(get_rid(), p_mode);
collision_layer = 1;
@@ -226,8 +226,8 @@ void StaticBody2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_bounce", "get_bounce");
}
-StaticBody2D::StaticBody2D()
- : PhysicsBody2D(Physics2DServer::BODY_MODE_STATIC) {
+StaticBody2D::StaticBody2D() :
+ PhysicsBody2D(Physics2DServer::BODY_MODE_STATIC) {
constant_angular_velocity = 0;
bounce = 0;
@@ -921,8 +921,8 @@ void RigidBody2D::_bind_methods() {
BIND_ENUM_CONSTANT(CCD_MODE_CAST_SHAPE);
}
-RigidBody2D::RigidBody2D()
- : PhysicsBody2D(Physics2DServer::BODY_MODE_RIGID) {
+RigidBody2D::RigidBody2D() :
+ PhysicsBody2D(Physics2DServer::BODY_MODE_RIGID) {
mode = MODE_RIGID;
@@ -1144,8 +1144,8 @@ void KinematicBody2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::REAL, "collision/safe_margin", PROPERTY_HINT_RANGE, "0.001,256,0.001"), "set_safe_margin", "get_safe_margin");
}
-KinematicBody2D::KinematicBody2D()
- : PhysicsBody2D(Physics2DServer::BODY_MODE_KINEMATIC) {
+KinematicBody2D::KinematicBody2D() :
+ PhysicsBody2D(Physics2DServer::BODY_MODE_KINEMATIC) {
margin = 0.08;
diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp
index ff23b3183b..a809023083 100644
--- a/scene/2d/ray_cast_2d.cpp
+++ b/scene/2d/ray_cast_2d.cpp
@@ -56,11 +56,6 @@ uint32_t RayCast2D::get_collision_mask() const {
return collision_mask;
}
-void RayCast2D::set_type_mask(uint32_t p_mask) {
-
- type_mask = p_mask;
-}
-
void RayCast2D::set_collision_mask_bit(int p_bit, bool p_value) {
uint32_t mask = get_collision_mask();
@@ -76,11 +71,6 @@ bool RayCast2D::get_collision_mask_bit(int p_bit) const {
return get_collision_mask() & (1 << p_bit);
}
-uint32_t RayCast2D::get_type_mask() const {
-
- return type_mask;
-}
-
bool RayCast2D::is_colliding() const {
return collided;
@@ -130,11 +120,11 @@ void RayCast2D::set_exclude_parent_body(bool p_exclude_parent_body) {
if (!is_inside_tree())
return;
- if (Object::cast_to<PhysicsBody2D>(get_parent())) {
+ if (Object::cast_to<CollisionObject2D>(get_parent())) {
if (exclude_parent_body)
- exclude.insert(Object::cast_to<PhysicsBody2D>(get_parent())->get_rid());
+ exclude.insert(Object::cast_to<CollisionObject2D>(get_parent())->get_rid());
else
- exclude.erase(Object::cast_to<PhysicsBody2D>(get_parent())->get_rid());
+ exclude.erase(Object::cast_to<CollisionObject2D>(get_parent())->get_rid());
}
}
@@ -154,11 +144,11 @@ void RayCast2D::_notification(int p_what) {
else
set_physics_process(false);
- if (Object::cast_to<PhysicsBody2D>(get_parent())) {
+ if (Object::cast_to<CollisionObject2D>(get_parent())) {
if (exclude_parent_body)
- exclude.insert(Object::cast_to<PhysicsBody2D>(get_parent())->get_rid());
+ exclude.insert(Object::cast_to<CollisionObject2D>(get_parent())->get_rid());
else
- exclude.erase(Object::cast_to<PhysicsBody2D>(get_parent())->get_rid());
+ exclude.erase(Object::cast_to<CollisionObject2D>(get_parent())->get_rid());
}
} break;
case NOTIFICATION_EXIT_TREE: {
@@ -218,7 +208,7 @@ void RayCast2D::_update_raycast_state() {
Physics2DDirectSpaceState::RayResult rr;
- if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_mask, type_mask)) {
+ if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_mask)) {
collided = true;
against = rr.collider_id;
@@ -297,9 +287,6 @@ void RayCast2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_collision_mask_bit", "bit", "value"), &RayCast2D::set_collision_mask_bit);
ClassDB::bind_method(D_METHOD("get_collision_mask_bit", "bit"), &RayCast2D::get_collision_mask_bit);
- ClassDB::bind_method(D_METHOD("set_type_mask", "mask"), &RayCast2D::set_type_mask);
- ClassDB::bind_method(D_METHOD("get_type_mask"), &RayCast2D::get_type_mask);
-
ClassDB::bind_method(D_METHOD("set_exclude_parent_body", "mask"), &RayCast2D::set_exclude_parent_body);
ClassDB::bind_method(D_METHOD("get_exclude_parent_body"), &RayCast2D::get_exclude_parent_body);
@@ -307,7 +294,6 @@ void RayCast2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "exclude_parent"), "set_exclude_parent_body", "get_exclude_parent_body");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "cast_to"), "set_cast_to", "get_cast_to");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "type_mask", PROPERTY_HINT_FLAGS, "Static,Kinematic,Rigid,Character,Area"), "set_type_mask", "get_type_mask");
}
RayCast2D::RayCast2D() {
@@ -317,7 +303,6 @@ RayCast2D::RayCast2D() {
collided = false;
against_shape = 0;
collision_mask = 1;
- type_mask = Physics2DDirectSpaceState::TYPE_MASK_COLLISION;
cast_to = Vector2(0, 50);
exclude_parent_body = true;
}
diff --git a/scene/2d/ray_cast_2d.h b/scene/2d/ray_cast_2d.h
index c13ddfdc58..9d60a16c6a 100644
--- a/scene/2d/ray_cast_2d.h
+++ b/scene/2d/ray_cast_2d.h
@@ -44,7 +44,6 @@ class RayCast2D : public Node2D {
Vector2 collision_normal;
Set<RID> exclude;
uint32_t collision_mask;
- uint32_t type_mask;
bool exclude_parent_body;
Vector2 cast_to;
@@ -67,9 +66,6 @@ public:
void set_collision_mask_bit(int p_bit, bool p_value);
bool get_collision_mask_bit(int p_bit) const;
- void set_type_mask(uint32_t p_mask);
- uint32_t get_type_mask() const;
-
void set_exclude_parent_body(bool p_exclude_parent_body);
bool get_exclude_parent_body() const;
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp
index f067b5a187..5a32a3d0f0 100644
--- a/scene/2d/tile_map.cpp
+++ b/scene/2d/tile_map.cpp
@@ -215,6 +215,9 @@ void TileMap::_fix_cell_transform(Transform2D &xform, const Cell &p_cell, const
if (tile_origin == TILE_ORIGIN_BOTTOM_LEFT)
offset.y += cell_size.y;
+ else if (tile_origin == TILE_ORIGIN_CENTER) {
+ offset += cell_size / 2;
+ }
if (s.y > s.x) {
if ((p_cell.flip_h && (p_cell.flip_v || p_cell.transpose)) || (p_cell.flip_v && !p_cell.transpose))
@@ -235,6 +238,8 @@ void TileMap::_fix_cell_transform(Transform2D &xform, const Cell &p_cell, const
xform.elements[1].x = -xform.elements[1].x;
if (tile_origin == TILE_ORIGIN_TOP_LEFT || tile_origin == TILE_ORIGIN_BOTTOM_LEFT)
offset.x = s.x - offset.x;
+ else if (tile_origin == TILE_ORIGIN_CENTER)
+ offset.x = s.x - offset.x / 2;
}
if (p_cell.flip_v) {
xform.elements[0].y = -xform.elements[0].y;
@@ -242,10 +247,9 @@ void TileMap::_fix_cell_transform(Transform2D &xform, const Cell &p_cell, const
if (tile_origin == TILE_ORIGIN_TOP_LEFT)
offset.y = s.y - offset.y;
else if (tile_origin == TILE_ORIGIN_BOTTOM_LEFT) {
- if (p_cell.transpose)
- offset.y += s.y;
- else
- offset.y -= s.y;
+ offset.y += s.y;
+ } else if (tile_origin == TILE_ORIGIN_CENTER) {
+ offset.y += s.y;
}
}
xform.elements[2].x += offset.x;
@@ -365,6 +369,11 @@ void TileMap::_update_dirty_quadrants() {
}
Rect2 r = tile_set->tile_get_region(c.id);
+ if (tile_set->tile_get_is_autotile(c.id)) {
+ int spacing = tile_set->autotile_get_spacing(c.id);
+ r.size = tile_set->autotile_get_size(c.id);
+ r.position += (r.size + Vector2(spacing, spacing)) * Vector2(c.autotile_coord_x, c.autotile_coord_y);
+ }
Size2 s = tex->get_size();
if (r == Rect2())
@@ -424,20 +433,18 @@ void TileMap::_update_dirty_quadrants() {
}
} else if (tile_origin == TILE_ORIGIN_CENTER) {
- rect.position += tcenter;
- Vector2 center = (s / 2) - tile_ofs;
- center_ofs = tcenter - (s / 2);
+ rect.position += tile_ofs;
if (c.flip_h)
- rect.position.x -= s.x - center.x;
+ rect.position.x -= cell_size.x / 2;
else
- rect.position.x -= center.x;
+ rect.position.x += cell_size.x / 2;
if (c.flip_v)
- rect.position.y -= s.y - center.y;
+ rect.position.y -= cell_size.y / 2;
else
- rect.position.y -= center.y;
+ rect.position.y += cell_size.y / 2;
}
Ref<Texture> normal_map = tile_set->tile_get_normal_map(c.id);
@@ -456,21 +463,23 @@ void TileMap::_update_dirty_quadrants() {
for (int i = 0; i < shapes.size(); i++) {
Ref<Shape2D> shape = shapes[i].shape;
if (shape.is_valid()) {
- Transform2D xform;
- xform.set_origin(offset.floor());
-
- Vector2 shape_ofs = tile_set->tile_get_shape_offset(c.id, i);
-
- _fix_cell_transform(xform, c, shape_ofs + center_ofs, s);
-
- if (debug_canvas_item.is_valid()) {
- vs->canvas_item_add_set_transform(debug_canvas_item, xform);
- shape->draw(debug_canvas_item, debug_collision_color);
+ if (!tile_set->tile_get_is_autotile(c.id) || (shapes[i].autotile_coord.x == c.autotile_coord_x && shapes[i].autotile_coord.y == c.autotile_coord_y)) {
+ Transform2D xform;
+ xform.set_origin(offset.floor());
+
+ Vector2 shape_ofs = tile_set->tile_get_shape_offset(c.id, i);
+
+ _fix_cell_transform(xform, c, shape_ofs + center_ofs, s);
+
+ if (debug_canvas_item.is_valid()) {
+ vs->canvas_item_add_set_transform(debug_canvas_item, xform);
+ shape->draw(debug_canvas_item, debug_collision_color);
+ }
+ ps->body_add_shape(q.body, shape->get_rid(), xform);
+ ps->body_set_shape_metadata(q.body, shape_idx, Vector2(E->key().x, E->key().y));
+ ps->body_set_shape_as_one_way_collision(q.body, shape_idx, shapes[i].one_way_collision);
+ shape_idx++;
}
- ps->body_add_shape(q.body, shape->get_rid(), xform);
- ps->body_set_shape_metadata(q.body, shape_idx, Vector2(E->key().x, E->key().y));
- ps->body_set_shape_as_one_way_collision(q.body, shape_idx, shapes[i].one_way_collision);
- shape_idx++;
}
}
@@ -479,9 +488,17 @@ void TileMap::_update_dirty_quadrants() {
}
if (navigation) {
- Ref<NavigationPolygon> navpoly = tile_set->tile_get_navigation_polygon(c.id);
+ Ref<NavigationPolygon> navpoly;
+ Vector2 npoly_ofs;
+ if (tile_set->tile_get_is_autotile(c.id)) {
+ navpoly = tile_set->autotile_get_navigation_polygon(c.id, Vector2(c.autotile_coord_x, c.autotile_coord_y));
+ npoly_ofs = Vector2();
+ } else {
+ navpoly = tile_set->tile_get_navigation_polygon(c.id);
+ npoly_ofs = tile_set->tile_get_navigation_polygon_offset(c.id);
+ }
+
if (navpoly.is_valid()) {
- Vector2 npoly_ofs = tile_set->tile_get_navigation_polygon_offset(c.id);
Transform2D xform;
xform.set_origin(offset.floor() + q.pos);
_fix_cell_transform(xform, c, npoly_ofs + center_ofs, s);
@@ -495,9 +512,13 @@ void TileMap::_update_dirty_quadrants() {
}
}
- Ref<OccluderPolygon2D> occluder = tile_set->tile_get_light_occluder(c.id);
+ Ref<OccluderPolygon2D> occluder;
+ if (tile_set->tile_get_is_autotile(c.id)) {
+ occluder = tile_set->autotile_get_light_occluder(c.id, Vector2(c.autotile_coord_x, c.autotile_coord_y));
+ } else {
+ occluder = tile_set->tile_get_light_occluder(c.id);
+ }
if (occluder.is_valid()) {
-
Vector2 occluder_ofs = tile_set->tile_get_occluder_offset(c.id);
Transform2D xform;
xform.set_origin(offset.floor() + q.pos);
@@ -656,7 +677,7 @@ void TileMap::set_cellv(const Vector2 &p_pos, int p_tile, bool p_flip_x, bool p_
set_cell(p_pos.x, p_pos.y, p_tile, p_flip_x, p_flip_y, p_transpose);
}
-void TileMap::set_cell(int p_x, int p_y, int p_tile, bool p_flip_x, bool p_flip_y, bool p_transpose) {
+void TileMap::set_cell(int p_x, int p_y, int p_tile, bool p_flip_x, bool p_flip_y, bool p_transpose, Vector2 p_autotile_coord) {
PosKey pk(p_x, p_y);
@@ -692,7 +713,7 @@ void TileMap::set_cell(int p_x, int p_y, int p_tile, bool p_flip_x, bool p_flip_
} else {
ERR_FAIL_COND(!Q); // quadrant should exist...
- if (E->get().id == p_tile && E->get().flip_h == p_flip_x && E->get().flip_v == p_flip_y && E->get().transpose == p_transpose)
+ if (E->get().id == p_tile && E->get().flip_h == p_flip_x && E->get().flip_v == p_flip_y && E->get().transpose == p_transpose && E->get().autotile_coord_x == (uint16_t)p_autotile_coord.x && E->get().autotile_coord_y == (uint16_t)p_autotile_coord.y)
return; //nothing changed
}
@@ -702,15 +723,109 @@ void TileMap::set_cell(int p_x, int p_y, int p_tile, bool p_flip_x, bool p_flip_
c.flip_h = p_flip_x;
c.flip_v = p_flip_y;
c.transpose = p_transpose;
+ c.autotile_coord_x = (uint16_t)p_autotile_coord.x;
+ c.autotile_coord_y = (uint16_t)p_autotile_coord.y;
_make_quadrant_dirty(Q);
used_size_cache_dirty = true;
}
int TileMap::get_cellv(const Vector2 &p_pos) const {
+
return get_cell(p_pos.x, p_pos.y);
}
+void TileMap::make_bitmask_area_dirty(const Vector2 &p_pos) {
+
+ for (int x = p_pos.x - 1; x <= p_pos.x + 1; x++) {
+ for (int y = p_pos.y - 1; y <= p_pos.y + 1; y++) {
+ PosKey p(x, y);
+ if (dirty_bitmask.find(p) == NULL) {
+ dirty_bitmask.push_back(p);
+ }
+ }
+ }
+}
+
+void TileMap::update_bitmask_area(const Vector2 &p_pos) {
+
+ for (int x = p_pos.x - 1; x <= p_pos.x + 1; x++) {
+ for (int y = p_pos.y - 1; y <= p_pos.y + 1; y++) {
+ update_cell_bitmask(x, y);
+ }
+ }
+}
+
+void TileMap::update_cell_bitmask(int p_x, int p_y) {
+
+ PosKey p(p_x, p_y);
+ Map<PosKey, Cell>::Element *E = tile_map.find(p);
+ if (E != NULL) {
+ int id = get_cell(p_x, p_y);
+ if (tile_set->tile_get_is_autotile(id)) {
+ uint16_t mask = 0;
+ if (tile_set->autotile_get_bitmask_mode(id) == TileSet::BITMASK_2X2) {
+ if (tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y - 1)) && tile_set->is_tile_bound(id, get_cell(p_x, p_y - 1)) && tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y))) {
+ mask |= TileSet::BIND_TOPLEFT;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y - 1)) && tile_set->is_tile_bound(id, get_cell(p_x, p_y - 1)) && tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y))) {
+ mask |= TileSet::BIND_TOPRIGHT;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y + 1)) && tile_set->is_tile_bound(id, get_cell(p_x, p_y + 1)) && tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y))) {
+ mask |= TileSet::BIND_BOTTOMLEFT;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y + 1)) && tile_set->is_tile_bound(id, get_cell(p_x, p_y + 1)) && tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y))) {
+ mask |= TileSet::BIND_BOTTOMRIGHT;
+ }
+ } else if (tile_set->autotile_get_bitmask_mode(id) == TileSet::BITMASK_3X3) {
+ if (tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y - 1)) && tile_set->is_tile_bound(id, get_cell(p_x, p_y - 1)) && tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y))) {
+ mask |= TileSet::BIND_TOPLEFT;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x, p_y - 1))) {
+ mask |= TileSet::BIND_TOP;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y - 1)) && tile_set->is_tile_bound(id, get_cell(p_x, p_y - 1)) && tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y))) {
+ mask |= TileSet::BIND_TOPRIGHT;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y))) {
+ mask |= TileSet::BIND_LEFT;
+ }
+ mask |= TileSet::BIND_CENTER;
+ if (tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y))) {
+ mask |= TileSet::BIND_RIGHT;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y + 1)) && tile_set->is_tile_bound(id, get_cell(p_x, p_y + 1)) && tile_set->is_tile_bound(id, get_cell(p_x - 1, p_y))) {
+ mask |= TileSet::BIND_BOTTOMLEFT;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x, p_y + 1))) {
+ mask |= TileSet::BIND_BOTTOM;
+ }
+ if (tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y + 1)) && tile_set->is_tile_bound(id, get_cell(p_x, p_y + 1)) && tile_set->is_tile_bound(id, get_cell(p_x + 1, p_y))) {
+ mask |= TileSet::BIND_BOTTOMRIGHT;
+ }
+ }
+ Vector2 coord = tile_set->autotile_get_subtile_for_bitmask(id, mask, this, Vector2(p_x, p_y));
+ E->get().autotile_coord_x = (int)coord.x;
+ E->get().autotile_coord_y = (int)coord.y;
+
+ PosKey qk(p_x / _get_quadrant_size(), p_y / _get_quadrant_size());
+ Map<PosKey, Quadrant>::Element *Q = quadrant_map.find(qk);
+ _make_quadrant_dirty(Q);
+ } else {
+ E->get().autotile_coord_x = 0;
+ E->get().autotile_coord_y = 0;
+ }
+ }
+}
+
+void TileMap::update_dirty_bitmask() {
+
+ while (dirty_bitmask.size() > 0) {
+ update_cell_bitmask(dirty_bitmask[0].x, dirty_bitmask[0].y);
+ dirty_bitmask.pop_front();
+ }
+}
+
int TileMap::get_cell(int p_x, int p_y) const {
PosKey pk(p_x, p_y);
@@ -756,6 +871,33 @@ bool TileMap::is_cell_transposed(int p_x, int p_y) const {
return E->get().transpose;
}
+void TileMap::set_cell_autotile_coord(int p_x, int p_y, const Vector2 &p_coord) {
+
+ PosKey pk(p_x, p_y);
+
+ const Map<PosKey, Cell>::Element *E = tile_map.find(pk);
+
+ if (!E)
+ return;
+
+ Cell c = E->get();
+ c.autotile_coord_x = p_coord.x;
+ c.autotile_coord_y = p_coord.y;
+ tile_map[pk] = c;
+}
+
+Vector2 TileMap::get_cell_autotile_coord(int p_x, int p_y) const {
+
+ PosKey pk(p_x, p_y);
+
+ const Map<PosKey, Cell>::Element *E = tile_map.find(pk);
+
+ if (!E)
+ return Vector2();
+
+ return Vector2(E->get().autotile_coord_x, E->get().autotile_coord_y);
+}
+
void TileMap::_recreate_quadrants() {
_clear_quadrants();
@@ -823,11 +965,14 @@ void TileMap::_set_tile_data(const PoolVector<int> &p_data) {
int c = p_data.size();
PoolVector<int>::Read r = p_data.read();
- for (int i = 0; i < c; i += 2) {
+ int offset = (format == FORMAT_2) ? 3 : 2;
+
+ clear();
+ for (int i = 0; i < c; i += offset) {
const uint8_t *ptr = (const uint8_t *)&r[i];
- uint8_t local[8];
- for (int j = 0; j < 8; j++)
+ uint8_t local[12];
+ for (int j = 0; j < ((format == FORMAT_2) ? 12 : 8); j++)
local[j] = ptr[j];
#ifdef BIG_ENDIAN_ENABLED
@@ -836,6 +981,11 @@ void TileMap::_set_tile_data(const PoolVector<int> &p_data) {
SWAP(local[1], local[2]);
SWAP(local[4], local[7]);
SWAP(local[5], local[6]);
+ //TODO: ask someone to check this...
+ if (FORMAT == FORMAT_2) {
+ SWAP(local[8], local[11]);
+ SWAP(local[9], local[10]);
+ }
#endif
int16_t x = decode_uint16(&local[0]);
@@ -845,24 +995,30 @@ void TileMap::_set_tile_data(const PoolVector<int> &p_data) {
bool flip_v = v & (1 << 30);
bool transpose = v & (1 << 31);
v &= (1 << 29) - 1;
-
+ int16_t coord_x;
+ int16_t coord_y;
+ if (format == FORMAT_2) {
+ coord_x = decode_uint16(&local[8]);
+ coord_y = decode_uint16(&local[10]);
+ }
/*
if (x<-20 || y <-20 || x>4000 || y>4000)
continue;
*/
- set_cell(x, y, v, flip_h, flip_v, transpose);
+ set_cell(x, y, v, flip_h, flip_v, transpose, Vector2(coord_x, coord_y));
}
}
PoolVector<int> TileMap::_get_tile_data() const {
PoolVector<int> data;
- data.resize(tile_map.size() * 2);
+ data.resize(tile_map.size() * 3);
PoolVector<int>::Write w = data.write();
+ format = FORMAT_2;
+
int idx = 0;
for (const Map<PosKey, Cell>::Element *E = tile_map.front(); E; E = E->next()) {
-
uint8_t *ptr = (uint8_t *)&w[idx];
encode_uint16(E->key().x, &ptr[0]);
encode_uint16(E->key().y, &ptr[2]);
@@ -873,9 +1029,10 @@ PoolVector<int> TileMap::_get_tile_data() const {
val |= (1 << 30);
if (E->get().transpose)
val |= (1 << 31);
-
encode_uint32(val, &ptr[4]);
- idx += 2;
+ encode_uint16(E->get().autotile_coord_x, &ptr[8]);
+ encode_uint16(E->get().autotile_coord_y, &ptr[10]);
+ idx += 3;
}
w = PoolVector<int>::Write();
@@ -1119,10 +1276,50 @@ Vector2 TileMap::_map_to_world(int p_x, int p_y, bool p_ignore_ofs) const {
}
return ret;
}
+
+bool TileMap::_set(const StringName &p_name, const Variant &p_value) {
+
+ if (p_name == "format") {
+ if (p_value.get_type() == Variant::INT) {
+ format = (DataFormat)(p_value.operator int64_t());
+ return true;
+ }
+ } else if (p_name == "tile_data") {
+ if (p_value.is_array()) {
+ _set_tile_data(p_value);
+ return true;
+ }
+ return false;
+ }
+ return false;
+}
+
+bool TileMap::_get(const StringName &p_name, Variant &r_ret) const {
+
+ if (p_name == "format") {
+ r_ret = FORMAT_2;
+ return true;
+ } else if (p_name == "tile_data") {
+ r_ret = _get_tile_data();
+ return true;
+ }
+ return false;
+}
+
+void TileMap::_get_property_list(List<PropertyInfo> *p_list) const {
+
+ PropertyInfo p(Variant::INT, "format", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR);
+ p_list->push_back(p);
+
+ p = PropertyInfo(Variant::OBJECT, "tile_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR);
+ p_list->push_back(p);
+}
+
Vector2 TileMap::map_to_world(const Vector2 &p_pos, bool p_ignore_ofs) const {
return _map_to_world(p_pos.x, p_pos.y, p_ignore_ofs);
}
+
Vector2 TileMap::world_to_map(const Vector2 &p_pos) const {
Vector2 ret = get_cell_transform().affine_inverse().xform(p_pos);
@@ -1312,7 +1509,7 @@ void TileMap::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_occluder_light_mask", "mask"), &TileMap::set_occluder_light_mask);
ClassDB::bind_method(D_METHOD("get_occluder_light_mask"), &TileMap::get_occluder_light_mask);
- ClassDB::bind_method(D_METHOD("set_cell", "x", "y", "tile", "flip_x", "flip_y", "transpose"), &TileMap::set_cell, DEFVAL(false), DEFVAL(false), DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("set_cell", "x", "y", "tile", "flip_x", "flip_y", "transpose", "autotile_coord"), &TileMap::set_cell, DEFVAL(false), DEFVAL(false), DEFVAL(false), DEFVAL(Vector2()));
ClassDB::bind_method(D_METHOD("set_cellv", "position", "tile", "flip_x", "flip_y", "transpose"), &TileMap::set_cellv, DEFVAL(false), DEFVAL(false), DEFVAL(false));
ClassDB::bind_method(D_METHOD("get_cell", "x", "y"), &TileMap::get_cell);
ClassDB::bind_method(D_METHOD("get_cellv", "position"), &TileMap::get_cellv);
@@ -1357,8 +1554,6 @@ void TileMap::_bind_methods() {
ADD_GROUP("Occluder", "occluder_");
ADD_PROPERTY(PropertyInfo(Variant::INT, "occluder_light_mask", PROPERTY_HINT_LAYERS_2D_RENDER), "set_occluder_light_mask", "get_occluder_light_mask");
- ADD_GROUP("", "");
- ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "tile_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_tile_data", "_get_tile_data");
ADD_SIGNAL(MethodInfo("settings_changed"));
@@ -1398,6 +1593,7 @@ TileMap::TileMap() {
y_sort_mode = false;
occluder_light_mask = 1;
clip_uv = false;
+ format = FORMAT_1; //Always initialize with the lowest format
fp_adjust = 0.00001;
tile_origin = TILE_ORIGIN_TOP_LEFT;
diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h
index 9e14ec838a..11d9915cb6 100644
--- a/scene/2d/tile_map.h
+++ b/scene/2d/tile_map.h
@@ -60,6 +60,11 @@ public:
};
private:
+ enum DataFormat {
+ FORMAT_1 = 0,
+ FORMAT_2
+ };
+
Ref<TileSet> tile_set;
Size2i cell_size;
int quadrant_size;
@@ -81,6 +86,8 @@ private:
//using a more precise comparison so the regions can be sorted later
bool operator<(const PosKey &p_k) const { return (y == p_k.y) ? x < p_k.x : y < p_k.y; }
+ bool operator==(const PosKey &p_k) const { return (y == p_k.y && x == p_k.x); }
+
PosKey(int16_t p_x, int16_t p_y) {
x = p_x;
y = p_y;
@@ -98,13 +105,17 @@ private:
bool flip_h : 1;
bool flip_v : 1;
bool transpose : 1;
+ int16_t autotile_coord_x : 16;
+ int16_t autotile_coord_y : 16;
};
- uint32_t _u32t;
- Cell() { _u32t = 0; }
+ uint64_t _u64t;
+ Cell() { _u64t = 0; }
};
Map<PosKey, Cell> tile_map;
+ List<PosKey> dirty_bitmask;
+
struct Quadrant {
Vector2 pos;
@@ -136,8 +147,8 @@ private:
navpoly_ids = q.navpoly_ids;
occluder_instances = q.occluder_instances;
}
- Quadrant(const Quadrant &q)
- : dirty_list(this) {
+ Quadrant(const Quadrant &q) :
+ dirty_list(this) {
pos = q.pos;
canvas_items = q.canvas_items;
body = q.body;
@@ -145,8 +156,8 @@ private:
occluder_instances = q.occluder_instances;
navpoly_ids = q.navpoly_ids;
}
- Quadrant()
- : dirty_list(this) {}
+ Quadrant() :
+ dirty_list(this) {}
};
Map<PosKey, Quadrant> quadrant_map;
@@ -167,6 +178,7 @@ private:
float bounce;
uint32_t collision_layer;
uint32_t collision_mask;
+ mutable DataFormat format;
TileOrigin tile_origin;
@@ -198,6 +210,10 @@ private:
_FORCE_INLINE_ Vector2 _map_to_world(int p_x, int p_y, bool p_ignore_ofs = false) const;
protected:
+ bool _set(const StringName &p_name, const Variant &p_value);
+ bool _get(const StringName &p_name, Variant &r_ret) const;
+ void _get_property_list(List<PropertyInfo> *p_list) const;
+
void _notification(int p_what);
static void _bind_methods();
@@ -220,17 +236,24 @@ public:
void set_center_y(bool p_enable);
bool get_center_y() const;
- void set_cell(int p_x, int p_y, int p_tile, bool p_flip_x = false, bool p_flip_y = false, bool p_transpose = false);
+ void set_cell(int p_x, int p_y, int p_tile, bool p_flip_x = false, bool p_flip_y = false, bool p_transpose = false, Vector2 p_autotile_coord = Vector2());
int get_cell(int p_x, int p_y) const;
bool is_cell_x_flipped(int p_x, int p_y) const;
bool is_cell_y_flipped(int p_x, int p_y) const;
bool is_cell_transposed(int p_x, int p_y) const;
+ void set_cell_autotile_coord(int p_x, int p_y, const Vector2 &p_coord);
+ Vector2 get_cell_autotile_coord(int p_x, int p_y) const;
void set_cellv(const Vector2 &p_pos, int p_tile, bool p_flip_x = false, bool p_flip_y = false, bool p_transpose = false);
int get_cellv(const Vector2 &p_pos) const;
Rect2 _edit_get_rect() const;
+ void make_bitmask_area_dirty(const Vector2 &p_pos);
+ void update_bitmask_area(const Vector2 &p_pos);
+ void update_cell_bitmask(int p_x, int p_y);
+ void update_dirty_bitmask();
+
void set_collision_layer(uint32_t p_layer);
uint32_t get_collision_layer() const;
diff --git a/scene/3d/area.cpp b/scene/3d/area.cpp
index 266bc5e381..422aa556f9 100644
--- a/scene/3d/area.cpp
+++ b/scene/3d/area.cpp
@@ -737,8 +737,8 @@ void Area::_bind_methods() {
BIND_ENUM_CONSTANT(SPACE_OVERRIDE_REPLACE_COMBINE);
}
-Area::Area()
- : CollisionObject(PhysicsServer::get_singleton()->area_create(), true) {
+Area::Area() :
+ CollisionObject(PhysicsServer::get_singleton()->area_create(), true) {
space_override = SPACE_OVERRIDE_DISABLED;
set_gravity(9.8);
diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp
index ad1a15f363..6c102e4027 100644
--- a/scene/3d/audio_stream_player_3d.cpp
+++ b/scene/3d/audio_stream_player_3d.cpp
@@ -21,7 +21,7 @@ void AudioStreamPlayer3D::_mix_audio() {
}
//get data
- AudioFrame *buffer = mix_buffer.ptr();
+ AudioFrame *buffer = mix_buffer.ptrw();
int buffer_size = mix_buffer.size();
//mix
@@ -242,7 +242,7 @@ void AudioStreamPlayer3D::_notification(int p_what) {
PhysicsDirectSpaceState::ShapeResult sr[MAX_INTERSECT_AREAS];
- int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask, PhysicsDirectSpaceState::TYPE_MASK_AREA);
+ int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask);
Area *area = NULL;
for (int i = 0; i < areas; i++) {
diff --git a/scene/3d/camera.cpp b/scene/3d/camera.cpp
index 8c7d0c23c3..af210fff1c 100644
--- a/scene/3d/camera.cpp
+++ b/scene/3d/camera.cpp
@@ -191,11 +191,12 @@ void Camera::_update_camera() {
get_viewport()->_camera_transform_changed_notify();
*/
- if (is_inside_tree() && is_current()) {
- get_viewport()->_camera_transform_changed_notify();
- }
+ if (!is_inside_tree() || get_tree()->is_node_being_edited(this) || !is_current())
+ return;
+
+ get_viewport()->_camera_transform_changed_notify();
- if (is_current() && get_world().is_valid()) {
+ if (get_world().is_valid()) {
get_world()->_update_camera(this);
}
}
@@ -649,7 +650,7 @@ Camera::Camera() {
current = false;
force_change = false;
mode = PROJECTION_PERSPECTIVE;
- set_perspective(65.0, 0.1, 100.0);
+ set_perspective(70.0, 0.05, 100.0);
keep_aspect = KEEP_HEIGHT;
layers = 0xfffff;
v_offset = 0;
diff --git a/scene/3d/gi_probe.cpp b/scene/3d/gi_probe.cpp
index 05d5d52d28..1f2b43165e 100644
--- a/scene/3d/gi_probe.cpp
+++ b/scene/3d/gi_probe.cpp
@@ -1284,8 +1284,11 @@ void GIProbe::bake(Node *p_from_node, bool p_create_visual_debug) {
_create_debug_mesh(&baker);
} else {
- Ref<GIProbeData> probe_data;
- probe_data.instance();
+ Ref<GIProbeData> probe_data = get_probe_data();
+
+ if (probe_data.is_null())
+ probe_data.instance();
+
probe_data->set_bounds(AABB(-extents, extents * 2.0));
probe_data->set_cell_size(baker.po2_bounds.size[longest_axis] / baker.axis_cell_size[longest_axis]);
probe_data->set_dynamic_data(data);
@@ -1511,7 +1514,7 @@ GIProbe::GIProbe() {
energy = 1.0;
bias = 1.5;
normal_bias = 0.0;
- propagation = 1.0;
+ propagation = 0.7;
extents = Vector3(10, 10, 10);
color_scan_cell_width = 4;
bake_texture_size = 128;
diff --git a/scene/3d/light.cpp b/scene/3d/light.cpp
index 126c07f0be..1fc4e932e8 100644
--- a/scene/3d/light.cpp
+++ b/scene/3d/light.cpp
@@ -367,8 +367,8 @@ void DirectionalLight::_bind_methods() {
BIND_ENUM_CONSTANT(SHADOW_DEPTH_RANGE_OPTIMIZED);
}
-DirectionalLight::DirectionalLight()
- : Light(VisualServer::LIGHT_DIRECTIONAL) {
+DirectionalLight::DirectionalLight() :
+ Light(VisualServer::LIGHT_DIRECTIONAL) {
set_param(PARAM_SHADOW_NORMAL_BIAS, 0.8);
set_param(PARAM_SHADOW_BIAS, 0.1);
@@ -422,8 +422,8 @@ void OmniLight::_bind_methods() {
BIND_ENUM_CONSTANT(SHADOW_DETAIL_HORIZONTAL);
}
-OmniLight::OmniLight()
- : Light(VisualServer::LIGHT_OMNI) {
+OmniLight::OmniLight() :
+ Light(VisualServer::LIGHT_OMNI) {
set_shadow_mode(SHADOW_CUBE);
set_shadow_detail(SHADOW_DETAIL_HORIZONTAL);
diff --git a/scene/3d/light.h b/scene/3d/light.h
index 8514b429ec..33e62214b1 100644
--- a/scene/3d/light.h
+++ b/scene/3d/light.h
@@ -208,8 +208,8 @@ protected:
static void _bind_methods();
public:
- SpotLight()
- : Light(VisualServer::LIGHT_SPOT) {}
+ SpotLight() :
+ Light(VisualServer::LIGHT_SPOT) {}
};
#endif
diff --git a/scene/3d/navigation.cpp b/scene/3d/navigation.cpp
index b226cca02b..b6507aedb3 100644
--- a/scene/3d/navigation.cpp
+++ b/scene/3d/navigation.cpp
@@ -147,7 +147,7 @@ void Navigation::_navmesh_unlink(int p_id) {
Polygon &p = E->get();
int ec = p.edges.size();
- Polygon::Edge *edges = p.edges.ptr();
+ Polygon::Edge *edges = p.edges.ptrw();
for (int i = 0; i < ec; i++) {
int next = (i + 1) % ec;
diff --git a/scene/3d/navigation.h b/scene/3d/navigation.h
index 010d16dedd..d9a38f7b00 100644
--- a/scene/3d/navigation.h
+++ b/scene/3d/navigation.h
@@ -58,9 +58,9 @@ class Navigation : public Spatial {
return (a.key == p_key.a.key) ? (b.key < p_key.b.key) : (a.key < p_key.a.key);
};
- EdgeKey(const Point &p_a = Point(), const Point &p_b = Point())
- : a(p_a),
- b(p_b) {
+ EdgeKey(const Point &p_a = Point(), const Point &p_b = Point()) :
+ a(p_a),
+ b(p_b) {
if (a.key > b.key) {
SWAP(a, b);
}
diff --git a/scene/3d/particles.cpp b/scene/3d/particles.cpp
index 2a032f5d96..821f1a5a78 100644
--- a/scene/3d/particles.cpp
+++ b/scene/3d/particles.cpp
@@ -703,10 +703,13 @@ void ParticlesMaterial::_update_shader() {
else
code += " float tex_linear_velocity = 0.0;\n";
- if (tex_parameters[PARAM_ORBIT_VELOCITY].is_valid())
- code += " float tex_orbit_velocity = textureLod(orbit_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n";
- else
- code += " float tex_orbit_velocity = 0.0;\n";
+ if (flags[FLAG_DISABLE_Z]) {
+
+ if (tex_parameters[PARAM_ORBIT_VELOCITY].is_valid())
+ code += " float tex_orbit_velocity = textureLod(orbit_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n";
+ else
+ code += " float tex_orbit_velocity = 0.0;\n";
+ }
if (tex_parameters[PARAM_ANGULAR_VELOCITY].is_valid())
code += " float tex_angular_velocity = textureLod(angular_velocity_texture,vec2(CUSTOM.y,0.0),0.0).r;\n";
@@ -756,7 +759,7 @@ void ParticlesMaterial::_update_shader() {
code += " //apply linear acceleration\n";
code += " force += length(VELOCITY) > 0.0 ? normalize(VELOCITY) * (linear_accel+tex_linear_accel)*mix(1.0,rand_from_seed(alt_seed),linear_accel_random) : vec3(0.0);\n";
code += " //apply radial acceleration\n";
- code += " vec3 org = vec3(0.0);\n";
+ code += " vec3 org = EMISSION_TRANSFORM[3].xyz;\n";
code += " vec3 diff = pos-org;\n";
code += " force += length(diff) > 0.0 ? normalize(diff) * (radial_accel+tex_radial_accel)*mix(1.0,rand_from_seed(alt_seed),radial_accel_random) : vec3(0.0);\n";
code += " //apply tangential acceleration;\n";
@@ -769,6 +772,18 @@ void ParticlesMaterial::_update_shader() {
}
code += " //apply attractor forces\n";
code += " VELOCITY += force * DELTA;\n";
+ code += " //orbit velocity\n";
+ if (flags[FLAG_DISABLE_Z]) {
+
+ code += " float orbit_amount = (orbit_velocity+tex_orbit_velocity)*mix(1.0,rand_from_seed(alt_seed),orbit_velocity_random);\n";
+ code += " if (orbit_amount!=0.0) {\n";
+ code += " float ang = orbit_amount * DELTA * 3.1416 * 2.0;\n";
+ code += " mat2 rot = mat2(vec2(cos(ang),-sin(ang)),vec2(sin(ang),cos(ang)));\n";
+ code += " TRANSFORM[3].xy-=diff.xy;\n";
+ code += " TRANSFORM[3].xy+=rot * diff.xy;\n";
+ code += " }\n";
+ }
+
if (tex_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) {
code += " VELOCITY = normalize(VELOCITY)*tex_linear_velocity;\n";
}
@@ -869,6 +884,7 @@ void ParticlesMaterial::_update_shader() {
}
//scale by scale
code += " float base_scale = mix(scale*tex_scale,1.0,scale_random*scale_rand);\n";
+ code += " if (base_scale==0.0) base_scale=0.000001;\n";
if (trail_size_modifier.is_valid()) {
code += " if (trail_divisor > 1) { base_scale *= textureLod(trail_size_modifier,vec2(float(int(NUMBER)%trail_divisor)/float(trail_divisor-1),0.0),0.0).r; } \n";
}
@@ -1173,6 +1189,9 @@ void ParticlesMaterial::set_flag(Flags p_flag, bool p_enable) {
ERR_FAIL_INDEX(p_flag, FLAG_MAX);
flags[p_flag] = p_enable;
_queue_shader_change();
+ if (p_flag == FLAG_DISABLE_Z) {
+ _change_notify();
+ }
}
bool ParticlesMaterial::get_flag(Flags p_flag) const {
@@ -1358,6 +1377,15 @@ void ParticlesMaterial::_validate_property(PropertyInfo &property) const {
if (property.name == "emission_point_count" && (emission_shape != EMISSION_SHAPE_POINTS && emission_shape != EMISSION_SHAPE_DIRECTED_POINTS)) {
property.usage = 0;
}
+
+ if (property.name.begins_with("orbit_") && !flags[FLAG_DISABLE_Z]) {
+ property.usage = 0;
+ }
+}
+
+Shader::Mode ParticlesMaterial::get_shader_mode() const {
+
+ return Shader::MODE_PARTICLES;
}
void ParticlesMaterial::_bind_methods() {
@@ -1517,8 +1545,8 @@ void ParticlesMaterial::_bind_methods() {
BIND_ENUM_CONSTANT(EMISSION_SHAPE_DIRECTED_POINTS);
}
-ParticlesMaterial::ParticlesMaterial()
- : element(this) {
+ParticlesMaterial::ParticlesMaterial() :
+ element(this) {
set_spread(45);
set_flatness(0);
diff --git a/scene/3d/particles.h b/scene/3d/particles.h
index 30080360bb..5b8121e937 100644
--- a/scene/3d/particles.h
+++ b/scene/3d/particles.h
@@ -390,6 +390,8 @@ public:
RID get_shader_rid() const;
+ virtual Shader::Mode get_shader_mode() const;
+
ParticlesMaterial();
~ParticlesMaterial();
};
diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp
index 4e06b272e2..8c9f59e267 100644
--- a/scene/3d/physics_body.cpp
+++ b/scene/3d/physics_body.cpp
@@ -166,8 +166,8 @@ void PhysicsBody::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
}
-PhysicsBody::PhysicsBody(PhysicsServer::BodyMode p_mode)
- : CollisionObject(PhysicsServer::get_singleton()->body_create(p_mode), false) {
+PhysicsBody::PhysicsBody(PhysicsServer::BodyMode p_mode) :
+ CollisionObject(PhysicsServer::get_singleton()->body_create(p_mode), false) {
collision_layer = 1;
collision_mask = 1;
@@ -241,8 +241,8 @@ void StaticBody::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "constant_angular_velocity"), "set_constant_angular_velocity", "get_constant_angular_velocity");
}
-StaticBody::StaticBody()
- : PhysicsBody(PhysicsServer::BODY_MODE_STATIC) {
+StaticBody::StaticBody() :
+ PhysicsBody(PhysicsServer::BODY_MODE_STATIC) {
bounce = 0;
friction = 1;
@@ -734,15 +734,31 @@ bool RigidBody::is_contact_monitor_enabled() const {
return contact_monitor != NULL;
}
-void RigidBody::set_axis_lock(AxisLock p_lock) {
+void RigidBody::set_axis_lock_x(bool p_lock) {
+ RigidBody::locked_axis[0] = p_lock;
+ PhysicsServer::get_singleton()->body_set_axis_lock(get_rid(), 0, locked_axis[0]);
+}
+
+void RigidBody::set_axis_lock_y(bool p_lock) {
+ RigidBody::locked_axis[1] = p_lock;
+ PhysicsServer::get_singleton()->body_set_axis_lock(get_rid(), 1, locked_axis[1]);
+}
+
+void RigidBody::set_axis_lock_z(bool p_lock) {
+ RigidBody::locked_axis[2] = p_lock;
+ PhysicsServer::get_singleton()->body_set_axis_lock(get_rid(), 2, locked_axis[2]);
+}
- axis_lock = p_lock;
- PhysicsServer::get_singleton()->body_set_axis_lock(get_rid(), PhysicsServer::BodyAxisLock(axis_lock));
+bool RigidBody::get_axis_lock_x() const {
+ return RigidBody::locked_axis[0];
}
-RigidBody::AxisLock RigidBody::get_axis_lock() const {
+bool RigidBody::get_axis_lock_y() const {
+ return RigidBody::locked_axis[1];
+}
- return axis_lock;
+bool RigidBody::get_axis_lock_z() const {
+ return RigidBody::locked_axis[2];
}
Array RigidBody::get_colliding_bodies() const {
@@ -837,8 +853,12 @@ void RigidBody::_bind_methods() {
ClassDB::bind_method(D_METHOD("_body_enter_tree"), &RigidBody::_body_enter_tree);
ClassDB::bind_method(D_METHOD("_body_exit_tree"), &RigidBody::_body_exit_tree);
- ClassDB::bind_method(D_METHOD("set_axis_lock", "axis_lock"), &RigidBody::set_axis_lock);
- ClassDB::bind_method(D_METHOD("get_axis_lock"), &RigidBody::get_axis_lock);
+ ClassDB::bind_method(D_METHOD("set_axis_lock_x", "axis_lock_x"), &RigidBody::set_axis_lock_x);
+ ClassDB::bind_method(D_METHOD("set_axis_lock_y", "axis_lock_y"), &RigidBody::set_axis_lock_y);
+ ClassDB::bind_method(D_METHOD("set_axis_lock_z", "axis_lock_z"), &RigidBody::set_axis_lock_z);
+ ClassDB::bind_method(D_METHOD("get_axis_lock_x"), &RigidBody::get_axis_lock_x);
+ ClassDB::bind_method(D_METHOD("get_axis_lock_y"), &RigidBody::get_axis_lock_y);
+ ClassDB::bind_method(D_METHOD("get_axis_lock_z"), &RigidBody::get_axis_lock_z);
ClassDB::bind_method(D_METHOD("get_colliding_bodies"), &RigidBody::get_colliding_bodies);
@@ -856,7 +876,10 @@ void RigidBody::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "contact_monitor"), "set_contact_monitor", "is_contact_monitor_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sleeping"), "set_sleeping", "is_sleeping");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "can_sleep"), "set_can_sleep", "is_able_to_sleep");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "axis_lock", PROPERTY_HINT_ENUM, "Disabled,Lock X,Lock Y,Lock Z"), "set_axis_lock", "get_axis_lock");
+ ADD_GROUP("Axis Lock", "axis_lock_");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "axis_lock_x"), "set_axis_lock_x", "get_axis_lock_x");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "axis_lock_y"), "set_axis_lock_y", "get_axis_lock_y");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "axis_lock_z"), "set_axis_lock_z", "get_axis_lock_z");
ADD_GROUP("Linear", "linear_");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
ADD_PROPERTY(PropertyInfo(Variant::REAL, "linear_damp", PROPERTY_HINT_RANGE, "-1,128,0.01"), "set_linear_damp", "get_linear_damp");
@@ -874,15 +897,10 @@ void RigidBody::_bind_methods() {
BIND_ENUM_CONSTANT(MODE_STATIC);
BIND_ENUM_CONSTANT(MODE_CHARACTER);
BIND_ENUM_CONSTANT(MODE_KINEMATIC);
-
- BIND_ENUM_CONSTANT(AXIS_LOCK_DISABLED);
- BIND_ENUM_CONSTANT(AXIS_LOCK_X);
- BIND_ENUM_CONSTANT(AXIS_LOCK_Y);
- BIND_ENUM_CONSTANT(AXIS_LOCK_Z);
}
-RigidBody::RigidBody()
- : PhysicsBody(PhysicsServer::BODY_MODE_RIGID) {
+RigidBody::RigidBody() :
+ PhysicsBody(PhysicsServer::BODY_MODE_RIGID) {
mode = MODE_RIGID;
@@ -904,8 +922,6 @@ RigidBody::RigidBody()
contact_monitor = NULL;
can_sleep = true;
- axis_lock = AXIS_LOCK_DISABLED;
-
PhysicsServer::get_singleton()->body_set_force_integration_callback(get_rid(), this, "_direct_state_changed");
}
@@ -952,6 +968,12 @@ bool KinematicBody::move_and_collide(const Vector3 &p_motion, Collision &r_colli
r_collision.local_shape = result.collision_local_shape;
}
+ for (int i = 0; i < 3; i++) {
+ if (locked_axis[i]) {
+ result.motion[i] = 0;
+ }
+ }
+
gt.origin += result.motion;
set_global_transform(gt);
@@ -960,9 +982,16 @@ bool KinematicBody::move_and_collide(const Vector3 &p_motion, Collision &r_colli
Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction, float p_slope_stop_min_velocity, int p_max_slides, float p_floor_max_angle) {
- Vector3 motion = (floor_velocity + p_linear_velocity) * get_physics_process_delta_time();
Vector3 lv = p_linear_velocity;
+ for (int i = 0; i < 3; i++) {
+ if (locked_axis[i]) {
+ lv[i] = 0;
+ }
+ }
+
+ Vector3 motion = (floor_velocity + lv) * get_physics_process_delta_time();
+
on_floor = false;
on_ceiling = false;
on_wall = false;
@@ -1008,6 +1037,12 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve
motion = motion.slide(n);
lv = lv.slide(n);
+ for (int i = 0; i < 3; i++) {
+ if (locked_axis[i]) {
+ lv[i] = 0;
+ }
+ }
+
colliders.push_back(collision);
} else {
@@ -1047,6 +1082,33 @@ bool KinematicBody::test_move(const Transform &p_from, const Vector3 &p_motion)
return PhysicsServer::get_singleton()->body_test_motion(get_rid(), p_from, p_motion);
}
+void KinematicBody::set_axis_lock_x(bool p_lock) {
+ KinematicBody::locked_axis[0] = p_lock;
+ PhysicsServer::get_singleton()->body_set_axis_lock(get_rid(), 0, locked_axis[0]);
+}
+
+void KinematicBody::set_axis_lock_y(bool p_lock) {
+ KinematicBody::locked_axis[1] = p_lock;
+ PhysicsServer::get_singleton()->body_set_axis_lock(get_rid(), 1, locked_axis[1]);
+}
+
+void KinematicBody::set_axis_lock_z(bool p_lock) {
+ KinematicBody::locked_axis[2] = p_lock;
+ PhysicsServer::get_singleton()->body_set_axis_lock(get_rid(), 2, locked_axis[2]);
+}
+
+bool KinematicBody::get_axis_lock_x() const {
+ return KinematicBody::locked_axis[0];
+}
+
+bool KinematicBody::get_axis_lock_y() const {
+ return KinematicBody::locked_axis[1];
+}
+
+bool KinematicBody::get_axis_lock_z() const {
+ return KinematicBody::locked_axis[2];
+}
+
void KinematicBody::set_safe_margin(float p_margin) {
margin = p_margin;
@@ -1095,17 +1157,29 @@ void KinematicBody::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_on_wall"), &KinematicBody::is_on_wall);
ClassDB::bind_method(D_METHOD("get_floor_velocity"), &KinematicBody::get_floor_velocity);
+ ClassDB::bind_method(D_METHOD("set_axis_lock_x", "axis_lock_x"), &KinematicBody::set_axis_lock_x);
+ ClassDB::bind_method(D_METHOD("set_axis_lock_y", "axis_lock_y"), &KinematicBody::set_axis_lock_y);
+ ClassDB::bind_method(D_METHOD("set_axis_lock_z", "axis_lock_z"), &KinematicBody::set_axis_lock_z);
+ ClassDB::bind_method(D_METHOD("get_axis_lock_x"), &KinematicBody::get_axis_lock_x);
+ ClassDB::bind_method(D_METHOD("get_axis_lock_y"), &KinematicBody::get_axis_lock_y);
+ ClassDB::bind_method(D_METHOD("get_axis_lock_z"), &KinematicBody::get_axis_lock_z);
+
ClassDB::bind_method(D_METHOD("set_safe_margin", "pixels"), &KinematicBody::set_safe_margin);
ClassDB::bind_method(D_METHOD("get_safe_margin"), &KinematicBody::get_safe_margin);
ClassDB::bind_method(D_METHOD("get_slide_count"), &KinematicBody::get_slide_count);
ClassDB::bind_method(D_METHOD("get_slide_collision", "slide_idx"), &KinematicBody::_get_slide_collision);
+ ADD_GROUP("Axis Lock", "axis_lock_");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "axis_lock_x"), "set_axis_lock_x", "get_axis_lock_x");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "axis_lock_y"), "set_axis_lock_y", "get_axis_lock_y");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "axis_lock_z"), "set_axis_lock_z", "get_axis_lock_z");
+
ADD_PROPERTY(PropertyInfo(Variant::REAL, "collision/safe_margin", PROPERTY_HINT_RANGE, "0.001,256,0.001"), "set_safe_margin", "get_safe_margin");
}
-KinematicBody::KinematicBody()
- : PhysicsBody(PhysicsServer::BODY_MODE_KINEMATIC) {
+KinematicBody::KinematicBody() :
+ PhysicsBody(PhysicsServer::BODY_MODE_KINEMATIC) {
margin = 0.001;
diff --git a/scene/3d/physics_body.h b/scene/3d/physics_body.h
index f88b3860dc..57b120ef63 100644
--- a/scene/3d/physics_body.h
+++ b/scene/3d/physics_body.h
@@ -114,13 +114,6 @@ public:
MODE_KINEMATIC,
};
- enum AxisLock {
- AXIS_LOCK_DISABLED,
- AXIS_LOCK_X,
- AXIS_LOCK_Y,
- AXIS_LOCK_Z,
- };
-
private:
bool can_sleep;
PhysicsDirectBodyState *state;
@@ -139,7 +132,7 @@ private:
bool sleeping;
bool ccd;
- AxisLock axis_lock;
+ bool locked_axis[3] = { false, false, false };
int max_contacts_reported;
@@ -245,8 +238,12 @@ public:
void set_use_continuous_collision_detection(bool p_enable);
bool is_using_continuous_collision_detection() const;
- void set_axis_lock(AxisLock p_lock);
- AxisLock get_axis_lock() const;
+ void set_axis_lock_x(bool p_lock);
+ void set_axis_lock_y(bool p_lock);
+ void set_axis_lock_z(bool p_lock);
+ bool get_axis_lock_x() const;
+ bool get_axis_lock_y() const;
+ bool get_axis_lock_z() const;
Array get_colliding_bodies() const;
@@ -259,7 +256,6 @@ public:
};
VARIANT_ENUM_CAST(RigidBody::Mode);
-VARIANT_ENUM_CAST(RigidBody::AxisLock);
class KinematicCollision;
@@ -281,6 +277,8 @@ public:
};
private:
+ bool locked_axis[3] = { false, false, false };
+
float margin;
Vector3 floor_velocity;
@@ -303,6 +301,13 @@ public:
bool move_and_collide(const Vector3 &p_motion, Collision &r_collision);
bool test_move(const Transform &p_from, const Vector3 &p_motion);
+ void set_axis_lock_x(bool p_lock);
+ void set_axis_lock_y(bool p_lock);
+ void set_axis_lock_z(bool p_lock);
+ bool get_axis_lock_x() const;
+ bool get_axis_lock_y() const;
+ bool get_axis_lock_z() const;
+
void set_safe_margin(float p_margin);
float get_safe_margin() const;
diff --git a/scene/3d/ray_cast.cpp b/scene/3d/ray_cast.cpp
index 9f61cc64ea..faeb18691a 100644
--- a/scene/3d/ray_cast.cpp
+++ b/scene/3d/ray_cast.cpp
@@ -58,11 +58,6 @@ uint32_t RayCast::get_collision_mask() const {
return collision_mask;
}
-void RayCast::set_type_mask(uint32_t p_mask) {
-
- type_mask = p_mask;
-}
-
void RayCast::set_collision_mask_bit(int p_bit, bool p_value) {
uint32_t mask = get_collision_mask();
@@ -78,11 +73,6 @@ bool RayCast::get_collision_mask_bit(int p_bit) const {
return get_collision_mask() & (1 << p_bit);
}
-uint32_t RayCast::get_type_mask() const {
-
- return type_mask;
-}
-
bool RayCast::is_colliding() const {
return collided;
@@ -129,6 +119,29 @@ bool RayCast::is_enabled() const {
return enabled;
}
+void RayCast::set_exclude_parent_body(bool p_exclude_parent_body) {
+
+ if (exclude_parent_body == p_exclude_parent_body)
+ return;
+
+ exclude_parent_body = p_exclude_parent_body;
+
+ if (!is_inside_tree())
+ return;
+
+ if (Object::cast_to<CollisionObject>(get_parent())) {
+ if (exclude_parent_body)
+ exclude.insert(Object::cast_to<CollisionObject>(get_parent())->get_rid());
+ else
+ exclude.erase(Object::cast_to<CollisionObject>(get_parent())->get_rid());
+ }
+}
+
+bool RayCast::get_exclude_parent_body() const {
+
+ return exclude_parent_body;
+}
+
void RayCast::_notification(int p_what) {
switch (p_what) {
@@ -143,6 +156,13 @@ void RayCast::_notification(int p_what) {
} else
set_physics_process(false);
+ if (Object::cast_to<CollisionObject>(get_parent())) {
+ if (exclude_parent_body)
+ exclude.insert(Object::cast_to<CollisionObject>(get_parent())->get_rid());
+ else
+ exclude.erase(Object::cast_to<CollisionObject>(get_parent())->get_rid());
+ }
+
} break;
case NOTIFICATION_EXIT_TREE: {
@@ -187,7 +207,7 @@ void RayCast::_update_raycast_state() {
PhysicsDirectSpaceState::RayResult rr;
- if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_mask, type_mask)) {
+ if (dss->intersect_ray(gt.get_origin(), gt.xform(to), rr, exclude, collision_mask)) {
collided = true;
against = rr.collider_id;
@@ -266,13 +286,13 @@ void RayCast::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_collision_mask_bit", "bit", "value"), &RayCast::set_collision_mask_bit);
ClassDB::bind_method(D_METHOD("get_collision_mask_bit", "bit"), &RayCast::get_collision_mask_bit);
- ClassDB::bind_method(D_METHOD("set_type_mask", "mask"), &RayCast::set_type_mask);
- ClassDB::bind_method(D_METHOD("get_type_mask"), &RayCast::get_type_mask);
+ ClassDB::bind_method(D_METHOD("set_exclude_parent_body", "mask"), &RayCast::set_exclude_parent_body);
+ ClassDB::bind_method(D_METHOD("get_exclude_parent_body"), &RayCast::get_exclude_parent_body);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "exclude_parent"), "set_exclude_parent_body", "get_exclude_parent_body");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "cast_to"), "set_cast_to", "get_cast_to");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "type_mask", PROPERTY_HINT_FLAGS, "Static,Kinematic,Rigid,Character,Area"), "set_type_mask", "get_type_mask");
}
void RayCast::_create_debug_shape() {
@@ -344,7 +364,7 @@ RayCast::RayCast() {
collided = false;
against_shape = 0;
collision_mask = 1;
- type_mask = PhysicsDirectSpaceState::TYPE_MASK_COLLISION;
cast_to = Vector3(0, -1, 0);
debug_shape = NULL;
+ exclude_parent_body = true;
}
diff --git a/scene/3d/ray_cast.h b/scene/3d/ray_cast.h
index cac1596264..9fb1a1be67 100644
--- a/scene/3d/ray_cast.h
+++ b/scene/3d/ray_cast.h
@@ -48,7 +48,7 @@ class RayCast : public Spatial {
Set<RID> exclude;
uint32_t collision_mask;
- uint32_t type_mask;
+ bool exclude_parent_body;
Node *debug_shape;
Ref<Material> debug_material;
@@ -75,8 +75,8 @@ public:
void set_collision_mask_bit(int p_bit, bool p_value);
bool get_collision_mask_bit(int p_bit) const;
- void set_type_mask(uint32_t p_mask);
- uint32_t get_type_mask() const;
+ void set_exclude_parent_body(bool p_exclude_parent_body);
+ bool get_exclude_parent_body() const;
void force_raycast_update();
bool is_colliding() const;
diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp
index 588aa2881a..d9f88ac693 100644
--- a/scene/3d/spatial.cpp
+++ b/scene/3d/spatial.cpp
@@ -756,8 +756,8 @@ void Spatial::_bind_methods() {
ADD_SIGNAL(MethodInfo("visibility_changed"));
}
-Spatial::Spatial()
- : xform_change(this) {
+Spatial::Spatial() :
+ xform_change(this) {
data.dirty = DIRTY_NONE;
data.children_lock = 0;
diff --git a/scene/3d/vehicle_body.cpp b/scene/3d/vehicle_body.cpp
index a072572142..2e3e179a7b 100644
--- a/scene/3d/vehicle_body.cpp
+++ b/scene/3d/vehicle_body.cpp
@@ -54,8 +54,8 @@ public:
const Vector3 &inertiaInvA,
const real_t massInvA,
const Vector3 &inertiaInvB,
- const real_t massInvB)
- : m_linearJointAxis(jointAxis) {
+ const real_t massInvB) :
+ m_linearJointAxis(jointAxis) {
m_aJ = world2A.xform(rel_pos1.cross(m_linearJointAxis));
m_bJ = world2B.xform(rel_pos2.cross(-m_linearJointAxis));
m_0MinvJt = inertiaInvA * m_aJ;
@@ -593,12 +593,12 @@ void VehicleBody::_resolve_single_bilateral(PhysicsDirectBodyState *s, const Vec
#endif
}
-VehicleBody::btVehicleWheelContactPoint::btVehicleWheelContactPoint(PhysicsDirectBodyState *s, PhysicsBody *body1, const Vector3 &frictionPosWorld, const Vector3 &frictionDirectionWorld, real_t maxImpulse)
- : m_s(s),
- m_body1(body1),
- m_frictionPositionWorld(frictionPosWorld),
- m_frictionDirectionWorld(frictionDirectionWorld),
- m_maxImpulse(maxImpulse) {
+VehicleBody::btVehicleWheelContactPoint::btVehicleWheelContactPoint(PhysicsDirectBodyState *s, PhysicsBody *body1, const Vector3 &frictionPosWorld, const Vector3 &frictionDirectionWorld, real_t maxImpulse) :
+ m_s(s),
+ m_body1(body1),
+ m_frictionPositionWorld(frictionPosWorld),
+ m_frictionDirectionWorld(frictionDirectionWorld),
+ m_maxImpulse(maxImpulse) {
float denom0 = 0;
float denom1 = 0;
@@ -969,8 +969,8 @@ void VehicleBody::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0.01,1,0.01"), "set_friction", "get_friction");
}
-VehicleBody::VehicleBody()
- : PhysicsBody(PhysicsServer::BODY_MODE_RIGID) {
+VehicleBody::VehicleBody() :
+ PhysicsBody(PhysicsServer::BODY_MODE_RIGID) {
m_pitchControl = 0;
m_currentVehicleSpeedKmHour = real_t(0.);
diff --git a/scene/SCsub b/scene/SCsub
index 513adeffda..5d81e818ba 100644
--- a/scene/SCsub
+++ b/scene/SCsub
@@ -30,7 +30,7 @@ SConscript('resources/SCsub')
# Build it all as a library
-lib = env.Library("scene", env.scene_sources)
+lib = env.add_library("scene", env.scene_sources)
env.Prepend(LIBS=[lib])
Export('env')
diff --git a/scene/animation/animation_cache.cpp b/scene/animation/animation_cache.cpp
index b35b2568d1..fbe2593362 100644
--- a/scene/animation/animation_cache.cpp
+++ b/scene/animation/animation_cache.cpp
@@ -87,95 +87,90 @@ void AnimationCache::_update_cache() {
Ref<Resource> res;
- if (np.get_subname_count()) {
-
- if (animation->track_get_type(i) == Animation::TYPE_TRANSFORM) {
+ if (animation->track_get_type(i) == Animation::TYPE_TRANSFORM) {
+ if (np.get_subname_count() > 1) {
path_cache.push_back(Path());
ERR_EXPLAIN("Transform tracks can't have a subpath: " + np);
ERR_CONTINUE(animation->track_get_type(i) == Animation::TYPE_TRANSFORM);
}
- RES res;
-
- for (int j = 0; j < np.get_subname_count(); j++) {
- res = j == 0 ? node->get(np.get_subname(j)) : res->get(np.get_subname(j));
- if (res.is_null())
- break;
- }
+ Spatial *sp = Object::cast_to<Spatial>(node);
- if (res.is_null()) {
+ if (!sp) {
path_cache.push_back(Path());
- ERR_EXPLAIN("Invalid Track SubPath in Animation: " + np);
- ERR_CONTINUE(res.is_null());
+ ERR_EXPLAIN("Transform track not of type Spatial: " + np);
+ ERR_CONTINUE(!sp);
}
- path.resource = res;
- path.object = res.ptr();
-
- } else {
-
- if (animation->track_get_type(i) == Animation::TYPE_TRANSFORM) {
- StringName property = np.get_property();
+ if (np.get_subname_count() == 1) {
+ StringName property = np.get_subname(0);
String ps = property;
- Spatial *sp = Object::cast_to<Spatial>(node);
+ Skeleton *sk = Object::cast_to<Skeleton>(node);
+ if (!sk) {
- if (!sp) {
+ path_cache.push_back(Path());
+ ERR_EXPLAIN("Property defined in Transform track, but not a Skeleton!: " + np);
+ ERR_CONTINUE(!sk);
+ }
+ int idx = sk->find_bone(ps);
+ if (idx == -1) {
path_cache.push_back(Path());
- ERR_EXPLAIN("Transform track not of type Spatial: " + np);
- ERR_CONTINUE(!sp);
+ ERR_EXPLAIN("Property defined in Transform track, but not a Skeleton Bone!: " + np);
+ ERR_CONTINUE(idx == -1);
}
- if (ps != "") {
+ path.bone_idx = idx;
+ path.skeleton = sk;
+ }
- Skeleton *sk = Object::cast_to<Skeleton>(node);
- if (!sk) {
+ path.spatial = sp;
- path_cache.push_back(Path());
- ERR_EXPLAIN("Property defined in Transform track, but not a Skeleton!: " + np);
- ERR_CONTINUE(!sk);
- }
+ } else {
+ if (np.get_subname_count() > 0) {
- int idx = sk->find_bone(ps);
- if (idx == -1) {
+ RES res;
+ Vector<StringName> leftover_subpath;
- path_cache.push_back(Path());
- ERR_EXPLAIN("Property defined in Transform track, but not a Skeleton Bone!: " + np);
- ERR_CONTINUE(idx == -1);
- }
+ // We don't want to cache the last resource unless it is a method call
+ bool is_method = animation->track_get_type(i) == Animation::TYPE_METHOD;
+ root->get_node_and_resource(np, res, leftover_subpath, is_method);
- path.bone_idx = idx;
- path.skeleton = sk;
+ if (res.is_valid()) {
+ path.resource = res;
+ } else {
+ path.node = node;
}
+ path.object = res.is_valid() ? res.ptr() : (Object *)node;
+ path.subpath = leftover_subpath;
- path.spatial = sp;
- }
+ } else {
- path.node = node;
- path.object = node;
+ path.node = node;
+ path.object = node;
+ path.subpath = np.get_subnames();
+ }
}
if (animation->track_get_type(i) == Animation::TYPE_VALUE) {
- if (np.get_property().operator String() == "") {
+ if (np.get_subname_count() == 0) {
path_cache.push_back(Path());
ERR_EXPLAIN("Value Track lacks property: " + np);
- ERR_CONTINUE(np.get_property().operator String() == "");
+ ERR_CONTINUE(np.get_subname_count() == 0);
}
- path.property = np.get_property();
-
} else if (animation->track_get_type(i) == Animation::TYPE_METHOD) {
- if (np.get_property().operator String() != "") {
+ if (path.subpath.size() != 0) { // Trying to call a method of a non-resource
path_cache.push_back(Path());
ERR_EXPLAIN("Method Track has property: " + np);
- ERR_CONTINUE(np.get_property().operator String() != "");
+ ERR_CONTINUE(path.subpath.size() != 0);
}
}
@@ -226,7 +221,7 @@ void AnimationCache::set_track_value(int p_idx, const Variant &p_value) {
return;
ERR_FAIL_COND(!p.object);
- p.object->set(p.property, p_value);
+ p.object->set_indexed(p.subpath, p_value);
}
void AnimationCache::call_track(int p_idx, const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) {
diff --git a/scene/animation/animation_cache.h b/scene/animation/animation_cache.h
index e593668df6..481de59730 100644
--- a/scene/animation/animation_cache.h
+++ b/scene/animation/animation_cache.h
@@ -46,7 +46,7 @@ class AnimationCache : public Object {
Spatial *spatial;
int bone_idx;
- StringName property;
+ Vector<StringName> subpath;
bool valid;
Path() {
object = NULL;
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp
index 6be3ff88d9..e866e665d8 100644
--- a/scene/animation/animation_player.cpp
+++ b/scene/animation/animation_player.cpp
@@ -33,6 +33,17 @@
#include "message_queue.h"
#include "scene/scene_string_names.h"
+#ifdef TOOLS_ENABLED
+void AnimatedValuesBackup::update_skeletons() {
+
+ for (int i = 0; i < entries.size(); i++) {
+ if (entries[i].bone_idx != -1) {
+ Object::cast_to<Skeleton>(entries[i].object)->notification(Skeleton::NOTIFICATION_UPDATE_SKELETON);
+ }
+ }
+}
+#endif
+
bool AnimationPlayer::_set(const StringName &p_name, const Variant &p_value) {
String name = p_name;
@@ -228,7 +239,11 @@ void AnimationPlayer::_notification(int p_what) {
}
}
-void AnimationPlayer::_generate_node_caches(AnimationData *p_anim) {
+void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim) {
+
+ // Already cached?
+ if (p_anim->node_cache.size() == p_anim->animation->get_track_count())
+ return;
Node *parent = get_node(root);
@@ -242,7 +257,8 @@ void AnimationPlayer::_generate_node_caches(AnimationData *p_anim) {
p_anim->node_cache[i] = NULL;
RES resource;
- Node *child = parent->get_node_and_resource(a->track_get_path(i), resource);
+ Vector<StringName> leftover_path;
+ Node *child = parent->get_node_and_resource(a->track_get_path(i), resource, leftover_path);
if (!child) {
ERR_EXPLAIN("On Animation: '" + p_anim->name + "', couldn't resolve track: '" + String(a->track_get_path(i)) + "'");
}
@@ -250,9 +266,9 @@ void AnimationPlayer::_generate_node_caches(AnimationData *p_anim) {
uint32_t id = resource.is_valid() ? resource->get_instance_id() : child->get_instance_id();
int bone_idx = -1;
- if (a->track_get_path(i).get_property() && Object::cast_to<Skeleton>(child)) {
+ if (a->track_get_path(i).get_subname_count() == 1 && Object::cast_to<Skeleton>(child)) {
- bone_idx = Object::cast_to<Skeleton>(child)->find_bone(a->track_get_path(i).get_property());
+ bone_idx = Object::cast_to<Skeleton>(child)->find_bone(a->track_get_path(i).get_subname(0));
if (bone_idx == -1) {
continue;
@@ -289,8 +305,8 @@ void AnimationPlayer::_generate_node_caches(AnimationData *p_anim) {
p_anim->node_cache[i]->skeleton = Object::cast_to<Skeleton>(child);
if (p_anim->node_cache[i]->skeleton) {
- StringName bone_name = a->track_get_path(i).get_property();
- if (bone_name.operator String() != "") {
+ if (a->track_get_path(i).get_subname_count() == 1) {
+ StringName bone_name = a->track_get_path(i).get_subname(0);
p_anim->node_cache[i]->bone_idx = p_anim->node_cache[i]->skeleton->find_bone(bone_name);
if (p_anim->node_cache[i]->bone_idx < 0) {
@@ -311,24 +327,23 @@ void AnimationPlayer::_generate_node_caches(AnimationData *p_anim) {
if (a->track_get_type(i) == Animation::TYPE_VALUE) {
- StringName property = a->track_get_path(i).get_property();
- if (!p_anim->node_cache[i]->property_anim.has(property)) {
+ if (!p_anim->node_cache[i]->property_anim.has(a->track_get_path(i).get_concatenated_subnames())) {
TrackNodeCache::PropertyAnim pa;
- pa.prop = property;
+ pa.subpath = leftover_path;
pa.object = resource.is_valid() ? (Object *)resource.ptr() : (Object *)child;
pa.special = SP_NONE;
pa.owner = p_anim->node_cache[i];
if (false && p_anim->node_cache[i]->node_2d) {
- if (pa.prop == SceneStringNames::get_singleton()->transform_pos)
+ if (leftover_path.size() == 1 && leftover_path[0] == SceneStringNames::get_singleton()->transform_pos)
pa.special = SP_NODE2D_POS;
- else if (pa.prop == SceneStringNames::get_singleton()->transform_rot)
+ else if (leftover_path.size() == 1 && leftover_path[0] == SceneStringNames::get_singleton()->transform_rot)
pa.special = SP_NODE2D_ROT;
- else if (pa.prop == SceneStringNames::get_singleton()->transform_scale)
+ else if (leftover_path.size() == 1 && leftover_path[0] == SceneStringNames::get_singleton()->transform_scale)
pa.special = SP_NODE2D_SCALE;
}
- p_anim->node_cache[i]->property_anim[property] = pa;
+ p_anim->node_cache[i]->property_anim[a->track_get_path(i).get_concatenated_subnames()] = pa;
}
}
}
@@ -336,11 +351,7 @@ void AnimationPlayer::_generate_node_caches(AnimationData *p_anim) {
void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float p_time, float p_delta, float p_interp, bool p_allow_discrete) {
- if (p_anim->node_cache.size() != p_anim->animation->get_track_count()) {
- // animation hasn't been "node-cached"
- _generate_node_caches(p_anim);
- }
-
+ _ensure_node_caches(p_anim);
ERR_FAIL_COND(p_anim->node_cache.size() != p_anim->animation->get_track_count());
Animation *a = p_anim->animation.operator->();
@@ -353,6 +364,9 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
if (!nc) // no node cache for this track, skip it
continue;
+ if (!a->track_is_enabled(i))
+ continue; // do nothing if the track is disabled
+
if (a->track_get_key_count(i) == 0)
continue; // do nothing if track is empty
@@ -396,7 +410,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
//StringName property=a->track_get_path(i).get_property();
- Map<StringName, TrackNodeCache::PropertyAnim>::Element *E = nc->property_anim.find(a->track_get_path(i).get_property());
+ Map<StringName, TrackNodeCache::PropertyAnim>::Element *E = nc->property_anim.find(a->track_get_path(i).get_concatenated_subnames());
ERR_CONTINUE(!E); //should it continue, or create a new one?
TrackNodeCache::PropertyAnim *pa = &E->get();
@@ -434,7 +448,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
case SP_NONE: {
bool valid;
- pa->object->set(pa->prop, value, &valid); //you are not speshul
+ pa->object->set_indexed(pa->subpath, value, &valid); //you are not speshul
#ifdef DEBUG_ENABLED
if (!valid) {
ERR_PRINTS("Failed setting track value '" + String(pa->owner->path) + "'. Check if property exists or the type of key is valid. Animation '" + a->get_name() + "' at node '" + get_path() + "'.");
@@ -622,7 +636,7 @@ void AnimationPlayer::_animation_update_transforms() {
case SP_NONE: {
bool valid;
- pa->object->set(pa->prop, pa->value_accum, &valid); //you are not speshul
+ pa->object->set_indexed(pa->subpath, pa->value_accum, &valid); //you are not speshul
#ifdef DEBUG_ENABLED
if (!valid) {
ERR_PRINTS("Failed setting key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "' at Node '" + get_path() + "', Track '" + String(pa->owner->path) + "'. Check if property exists or the type of key is right for the property");
@@ -1205,6 +1219,70 @@ void AnimationPlayer::get_argument_options(const StringName &p_function, int p_i
Node::get_argument_options(p_function, p_idx, r_options);
}
+#ifdef TOOLS_ENABLED
+AnimatedValuesBackup AnimationPlayer::backup_animated_values() {
+
+ if (!playback.current.from)
+ return AnimatedValuesBackup();
+
+ _ensure_node_caches(playback.current.from);
+
+ AnimatedValuesBackup backup;
+
+ for (int i = 0; i < playback.current.from->node_cache.size(); i++) {
+ TrackNodeCache *nc = playback.current.from->node_cache[i];
+ if (!nc)
+ continue;
+
+ if (nc->skeleton) {
+ if (nc->bone_idx == -1)
+ continue;
+
+ AnimatedValuesBackup::Entry entry;
+ entry.object = nc->skeleton;
+ entry.bone_idx = nc->bone_idx;
+ entry.value = nc->skeleton->get_bone_pose(nc->bone_idx);
+ backup.entries.push_back(entry);
+ } else {
+ if (nc->spatial) {
+ AnimatedValuesBackup::Entry entry;
+ entry.object = nc->spatial;
+ entry.subpath.push_back("transform");
+ entry.value = nc->spatial->get_transform();
+ entry.bone_idx = -1;
+ backup.entries.push_back(entry);
+ } else {
+ for (Map<StringName, TrackNodeCache::PropertyAnim>::Element *E = nc->property_anim.front(); E; E = E->next()) {
+ AnimatedValuesBackup::Entry entry;
+ entry.object = E->value().object;
+ entry.subpath = E->value().subpath;
+ bool valid;
+ entry.value = E->value().object->get_indexed(E->value().subpath, &valid);
+ entry.bone_idx = -1;
+ if (valid)
+ backup.entries.push_back(entry);
+ }
+ }
+ }
+ }
+
+ return backup;
+}
+
+void AnimationPlayer::restore_animated_values(const AnimatedValuesBackup &p_backup) {
+
+ for (int i = 0; i < p_backup.entries.size(); i++) {
+
+ const AnimatedValuesBackup::Entry *entry = &p_backup.entries[i];
+ if (entry->bone_idx == -1) {
+ entry->object->set_indexed(entry->subpath, entry->value);
+ } else {
+ Object::cast_to<Skeleton>(entry->object)->set_bone_pose(entry->bone_idx, entry->value);
+ }
+ }
+}
+#endif
+
void AnimationPlayer::_bind_methods() {
ClassDB::bind_method(D_METHOD("_node_removed"), &AnimationPlayer::_node_removed);
@@ -1249,7 +1327,7 @@ void AnimationPlayer::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_root"), &AnimationPlayer::get_root);
ClassDB::bind_method(D_METHOD("seek", "seconds", "update"), &AnimationPlayer::seek, DEFVAL(false));
- ClassDB::bind_method(D_METHOD("get_position"), &AnimationPlayer::get_current_animation_position);
+ ClassDB::bind_method(D_METHOD("advance", "delta"), &AnimationPlayer::advance);
ClassDB::bind_method(D_METHOD("find_animation", "animation"), &AnimationPlayer::find_animation);
@@ -1261,12 +1339,15 @@ void AnimationPlayer::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_current_animation_position"), &AnimationPlayer::get_current_animation_position);
ClassDB::bind_method(D_METHOD("get_current_animation_length"), &AnimationPlayer::get_current_animation_length);
- ClassDB::bind_method(D_METHOD("advance", "delta"), &AnimationPlayer::advance);
-
ADD_GROUP("Playback Options", "playback_");
ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_animation_process_mode", "get_animation_process_mode");
ADD_PROPERTY(PropertyInfo(Variant::REAL, "playback_default_blend_time", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_default_blend_time", "get_default_blend_time");
+
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_node"), "set_root", "get_root");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "autoplay"), "set_autoplay", "get_autoplay");
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "speed_scale"), "set_speed_scale", "get_speed_scale");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "active"), "set_active", "is_active");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "current_animation"), "set_current_animation", "get_current_animation");
ADD_SIGNAL(MethodInfo("animation_finished", PropertyInfo(Variant::STRING, "name")));
ADD_SIGNAL(MethodInfo("animation_changed", PropertyInfo(Variant::STRING, "old_name"), PropertyInfo(Variant::STRING, "new_name")));
diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h
index 83da3b2e5c..e39afcf199 100644
--- a/scene/animation/animation_player.h
+++ b/scene/animation/animation_player.h
@@ -38,6 +38,24 @@
@author Juan Linietsky <reduzio@gmail.com>
*/
+#ifdef TOOLS_ENABLED
+// To save/restore animated values
+class AnimatedValuesBackup {
+ struct Entry {
+ Object *object;
+ Vector<StringName> subpath; // Unused if bone
+ int bone_idx; // -1 if not a bone
+ Variant value;
+ };
+ Vector<Entry> entries;
+
+ friend class AnimationPlayer;
+
+public:
+ void update_skeletons();
+};
+#endif
+
class AnimationPlayer : public Node {
GDCLASS(AnimationPlayer, Node);
OBJ_CATEGORY("Animation Nodes");
@@ -83,7 +101,7 @@ private:
TrackNodeCache *owner;
SpecialProperty special; //small optimization
- StringName prop;
+ Vector<StringName> subpath;
Object *object;
Variant value_accum;
uint64_t accum_pass;
@@ -198,7 +216,7 @@ private:
void _animation_process_animation(AnimationData *p_anim, float p_time, float p_delta, float p_interp, bool p_allow_discrete = true);
- void _generate_node_caches(AnimationData *p_anim);
+ void _ensure_node_caches(AnimationData *p_anim);
void _animation_process_data(PlaybackData &cd, float p_delta, float p_blend);
void _animation_process2(float p_delta);
void _animation_update_transforms();
@@ -291,6 +309,12 @@ public:
void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const;
+#ifdef TOOLS_ENABLED
+ // These may be interesting for games, but are too dangerous for general use
+ AnimatedValuesBackup backup_animated_values();
+ void restore_animated_values(const AnimatedValuesBackup &p_backup);
+#endif
+
AnimationPlayer();
~AnimationPlayer();
};
diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp
index ad5329c94b..32f82fe6b8 100644
--- a/scene/animation/animation_tree_player.cpp
+++ b/scene/animation/animation_tree_player.cpp
@@ -811,7 +811,7 @@ void AnimationTreePlayer::_process_animation(float p_delta) {
t.scale.y = 0;
t.scale.z = 0;
- t.value = t.object->get(t.property);
+ t.value = t.object->get_indexed(t.subpath);
t.value.zero();
t.skip = false;
@@ -831,7 +831,7 @@ void AnimationTreePlayer::_process_animation(float p_delta) {
for (List<AnimationNode::TrackRef>::Element *E = anim_list->tref.front(); E; E = E->next()) {
AnimationNode::TrackRef &tr = E->get();
- if (tr.track == NULL || tr.local_track < 0 || tr.weight < CMP_EPSILON)
+ if (tr.track == NULL || tr.local_track < 0 || tr.weight < CMP_EPSILON || !a->track_is_enabled(tr.local_track))
continue;
switch (a->track_get_type(tr.local_track)) {
@@ -890,8 +890,8 @@ void AnimationTreePlayer::_process_animation(float p_delta) {
if (t.skip || !t.object)
continue;
- if (t.property) { // value track
- t.object->set(t.property, t.value);
+ if (t.subpath.size()) { // value track
+ t.object->set_indexed(t.subpath, t.value);
continue;
}
@@ -1475,7 +1475,8 @@ AnimationTreePlayer::Track *AnimationTreePlayer::_find_track(const NodePath &p_p
ERR_FAIL_COND_V(!parent, NULL);
RES resource;
- Node *child = parent->get_node_and_resource(p_path, resource);
+ Vector<StringName> leftover_path;
+ Node *child = parent->get_node_and_resource(p_path, resource, leftover_path);
if (!child) {
String err = "Animation track references unknown Node: '" + String(p_path) + "'.";
WARN_PRINT(err.ascii().get_data());
@@ -1483,21 +1484,18 @@ AnimationTreePlayer::Track *AnimationTreePlayer::_find_track(const NodePath &p_p
}
ObjectID id = child->get_instance_id();
- StringName property;
int bone_idx = -1;
- if (p_path.get_property()) {
+ if (p_path.get_subname_count()) {
if (Object::cast_to<Skeleton>(child))
- bone_idx = Object::cast_to<Skeleton>(child)->find_bone(p_path.get_property());
- if (bone_idx == -1)
- property = p_path.get_property();
+ bone_idx = Object::cast_to<Skeleton>(child)->find_bone(p_path.get_subname(0));
}
TrackKey key;
key.id = id;
key.bone_idx = bone_idx;
- key.property = property;
+ key.subpath_concatenated = p_path.get_concatenated_subnames();
if (!track_map.has(key)) {
@@ -1507,7 +1505,7 @@ AnimationTreePlayer::Track *AnimationTreePlayer::_find_track(const NodePath &p_p
tr.skeleton = Object::cast_to<Skeleton>(child);
tr.spatial = Object::cast_to<Spatial>(child);
tr.bone_idx = bone_idx;
- tr.property = property;
+ if (bone_idx == -1) tr.subpath = leftover_path;
track_map[key] = tr;
}
@@ -1798,6 +1796,10 @@ void AnimationTreePlayer::_bind_methods() {
ADD_GROUP("Playback", "playback_");
ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_animation_process_mode", "get_animation_process_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "master_player"), "set_master_player", "get_master_player");
+ ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "base_path"), "set_base_path", "get_base_path");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "active"), "set_active", "is_active");
+
BIND_ENUM_CONSTANT(NODE_OUTPUT);
BIND_ENUM_CONSTANT(NODE_ANIMATION);
BIND_ENUM_CONSTANT(NODE_ONESHOT);
diff --git a/scene/animation/animation_tree_player.h b/scene/animation/animation_tree_player.h
index 3e2bb88198..c49b0c4d1b 100644
--- a/scene/animation/animation_tree_player.h
+++ b/scene/animation/animation_tree_player.h
@@ -78,14 +78,14 @@ private:
struct TrackKey {
uint32_t id;
- StringName property;
+ StringName subpath_concatenated;
int bone_idx;
inline bool operator<(const TrackKey &p_right) const {
if (id == p_right.id) {
if (bone_idx == p_right.bone_idx) {
- return property < p_right.property;
+ return subpath_concatenated < p_right.subpath_concatenated;
} else
return bone_idx < p_right.bone_idx;
} else
@@ -99,7 +99,7 @@ private:
Spatial *spatial;
Skeleton *skeleton;
int bone_idx;
- StringName property;
+ Vector<StringName> subpath;
Vector3 loc;
Quat rot;
diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp
index 40d06dc756..151632a0cb 100644
--- a/scene/animation/tween.cpp
+++ b/scene/animation/tween.cpp
@@ -264,12 +264,12 @@ Variant &Tween::_get_initial_val(InterpolateData &p_data) {
if (p_data.type == TARGETING_PROPERTY) {
bool valid = false;
- initial_val = object->get(p_data.target_key, &valid);
+ initial_val = object->get_indexed(p_data.target_key, &valid);
ERR_FAIL_COND_V(!valid, p_data.initial_val);
} else {
Variant::CallError error;
- initial_val = object->call(p_data.target_key, NULL, 0, error);
+ initial_val = object->call(p_data.target_key[0], NULL, 0, error);
ERR_FAIL_COND_V(error.error != Variant::CallError::CALL_OK, p_data.initial_val);
}
return initial_val;
@@ -296,12 +296,12 @@ Variant &Tween::_get_delta_val(InterpolateData &p_data) {
if (p_data.type == FOLLOW_PROPERTY) {
bool valid = false;
- final_val = target->get(p_data.target_key, &valid);
+ final_val = target->get_indexed(p_data.target_key, &valid);
ERR_FAIL_COND_V(!valid, p_data.initial_val);
} else {
Variant::CallError error;
- final_val = target->call(p_data.target_key, NULL, 0, error);
+ final_val = target->call(p_data.target_key[0], NULL, 0, error);
ERR_FAIL_COND_V(error.error != Variant::CallError::CALL_OK, p_data.initial_val);
}
@@ -462,6 +462,9 @@ Variant Tween::_run_equation(InterpolateData &p_data) {
result = r;
} break;
+ default: {
+ result = initial_val;
+ } break;
};
#undef APPLY_EQUATION
@@ -479,7 +482,7 @@ bool Tween::_apply_tween_value(InterpolateData &p_data, Variant &value) {
case FOLLOW_PROPERTY:
case TARGETING_PROPERTY: {
bool valid = false;
- object->set(p_data.key, value, &valid);
+ object->set_indexed(p_data.key, value, &valid);
return valid;
}
@@ -489,9 +492,9 @@ bool Tween::_apply_tween_value(InterpolateData &p_data, Variant &value) {
Variant::CallError error;
if (value.get_type() != Variant::NIL) {
Variant *arg[1] = { &value };
- object->call(p_data.key, (const Variant **)arg, 1, error);
+ object->call(p_data.key[0], (const Variant **)arg, 1, error);
} else {
- object->call(p_data.key, NULL, 0, error);
+ object->call(p_data.key[0], NULL, 0, error);
}
if (error.error == Variant::CallError::CALL_OK)
@@ -548,7 +551,7 @@ void Tween::_tween_process(float p_delta) {
continue;
else if (prev_delaying) {
- emit_signal("tween_started", object, data.key);
+ emit_signal("tween_started", object, NodePath(Vector<StringName>(), data.key, false));
_apply_tween_value(data, data.initial_val);
}
@@ -562,7 +565,7 @@ void Tween::_tween_process(float p_delta) {
case INTER_PROPERTY:
case INTER_METHOD: {
Variant result = _run_equation(data);
- emit_signal("tween_step", object, data.key, data.elapsed, result);
+ emit_signal("tween_step", object, NodePath(Vector<StringName>(), data.key, false), data.elapsed, result);
_apply_tween_value(data, result);
if (data.finish)
_apply_tween_value(data, data.final_val);
@@ -574,22 +577,22 @@ void Tween::_tween_process(float p_delta) {
switch (data.args) {
case 0:
- object->call_deferred(data.key);
+ object->call_deferred(data.key[0]);
break;
case 1:
- object->call_deferred(data.key, data.arg[0]);
+ object->call_deferred(data.key[0], data.arg[0]);
break;
case 2:
- object->call_deferred(data.key, data.arg[0], data.arg[1]);
+ object->call_deferred(data.key[0], data.arg[0], data.arg[1]);
break;
case 3:
- object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2]);
+ object->call_deferred(data.key[0], data.arg[0], data.arg[1], data.arg[2]);
break;
case 4:
- object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2], data.arg[3]);
+ object->call_deferred(data.key[0], data.arg[0], data.arg[1], data.arg[2], data.arg[3]);
break;
case 5:
- object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2], data.arg[3], data.arg[4]);
+ object->call_deferred(data.key[0], data.arg[0], data.arg[1], data.arg[2], data.arg[3], data.arg[4]);
break;
}
} else {
@@ -601,17 +604,18 @@ void Tween::_tween_process(float p_delta) {
&data.arg[3],
&data.arg[4],
};
- object->call(data.key, (const Variant **)arg, data.args, error);
+ object->call(data.key[0], (const Variant **)arg, data.args, error);
}
}
break;
+ default: {}
}
if (data.finish) {
- emit_signal("tween_completed", object, data.key);
+ emit_signal("tween_completed", object, NodePath(Vector<StringName>(), data.key, false));
// not repeat mode, remove completed action
if (!repeat)
- call_deferred("_remove", object, data.key, true);
+ call_deferred("_remove", object, NodePath(Vector<StringName>(), data.key, false), true);
}
}
pending_update--;
@@ -690,7 +694,7 @@ bool Tween::start() {
return true;
}
-bool Tween::reset(Object *p_object, String p_key) {
+bool Tween::reset(Object *p_object, StringName p_key) {
pending_update++;
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
@@ -700,7 +704,7 @@ bool Tween::reset(Object *p_object, String p_key) {
if (object == NULL)
continue;
- if (object == p_object && (data.key == p_key || p_key == "")) {
+ if (object == p_object && (data.concatenated_key == p_key || p_key == "")) {
data.elapsed = 0;
data.finish = false;
@@ -727,7 +731,7 @@ bool Tween::reset_all() {
return true;
}
-bool Tween::stop(Object *p_object, String p_key) {
+bool Tween::stop(Object *p_object, StringName p_key) {
pending_update++;
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
@@ -736,7 +740,7 @@ bool Tween::stop(Object *p_object, String p_key) {
Object *object = ObjectDB::get_instance(data.id);
if (object == NULL)
continue;
- if (object == p_object && (data.key == p_key || p_key == ""))
+ if (object == p_object && (data.concatenated_key == p_key || p_key == ""))
data.active = false;
}
pending_update--;
@@ -758,7 +762,7 @@ bool Tween::stop_all() {
return true;
}
-bool Tween::resume(Object *p_object, String p_key) {
+bool Tween::resume(Object *p_object, StringName p_key) {
set_active(true);
_set_process(true);
@@ -770,7 +774,7 @@ bool Tween::resume(Object *p_object, String p_key) {
Object *object = ObjectDB::get_instance(data.id);
if (object == NULL)
continue;
- if (object == p_object && (data.key == p_key || p_key == ""))
+ if (object == p_object && (data.concatenated_key == p_key || p_key == ""))
data.active = true;
}
pending_update--;
@@ -792,12 +796,12 @@ bool Tween::resume_all() {
return true;
}
-bool Tween::remove(Object *p_object, String p_key) {
+bool Tween::remove(Object *p_object, StringName p_key) {
_remove(p_object, p_key, false);
return true;
}
-void Tween::_remove(Object *p_object, String p_key, bool first_only) {
+void Tween::_remove(Object *p_object, StringName p_key, bool first_only) {
if (pending_update != 0) {
call_deferred("_remove", p_object, p_key, first_only);
@@ -810,7 +814,7 @@ void Tween::_remove(Object *p_object, String p_key, bool first_only) {
Object *object = ObjectDB::get_instance(data.id);
if (object == NULL)
continue;
- if (object == p_object && (data.key == p_key || p_key == "")) {
+ if (object == p_object && (data.concatenated_key == p_key || p_key == "")) {
for_removal.push_back(E);
if (first_only) {
break;
@@ -850,8 +854,9 @@ bool Tween::seek(real_t p_time) {
data.finish = true;
data.elapsed = (data.delay + data.duration);
- } else
+ } else {
data.finish = false;
+ }
switch (data.type) {
case INTER_PROPERTY:
@@ -993,11 +998,15 @@ bool Tween::_calc_delta_val(const Variant &p_initial_val, const Variant &p_final
return true;
}
-bool Tween::interpolate_property(Object *p_object, String p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
+bool Tween::interpolate_property(Object *p_object, NodePath p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
if (pending_update != 0) {
_add_pending_command("interpolate_property", p_object, p_property, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return true;
}
+ p_property = p_property.get_as_property_path();
+
+ if (p_initial_val.get_type() == Variant::NIL) p_initial_val = p_object->get_indexed(p_property.get_subnames());
+
// convert INT to REAL is better for interpolaters
if (p_initial_val.get_type() == Variant::INT) p_initial_val = p_initial_val.operator real_t();
if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t();
@@ -1011,7 +1020,7 @@ bool Tween::interpolate_property(Object *p_object, String p_property, Variant p_
ERR_FAIL_COND_V(p_delay < 0, false);
bool prop_valid = false;
- p_object->get(p_property, &prop_valid);
+ p_object->get_indexed(p_property.get_subnames(), &prop_valid);
ERR_FAIL_COND_V(!prop_valid, false);
InterpolateData data;
@@ -1021,7 +1030,8 @@ bool Tween::interpolate_property(Object *p_object, String p_property, Variant p_
data.elapsed = 0;
data.id = p_object->get_instance_id();
- data.key = p_property;
+ data.key = p_property.get_subnames();
+ data.concatenated_key = p_property.get_concatenated_subnames();
data.initial_val = p_initial_val;
data.final_val = p_final_val;
data.duration = p_duration;
@@ -1036,7 +1046,7 @@ bool Tween::interpolate_property(Object *p_object, String p_property, Variant p_
return true;
}
-bool Tween::interpolate_method(Object *p_object, String p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
+bool Tween::interpolate_method(Object *p_object, StringName p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
if (pending_update != 0) {
_add_pending_command("interpolate_method", p_object, p_method, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return true;
@@ -1063,7 +1073,8 @@ bool Tween::interpolate_method(Object *p_object, String p_method, Variant p_init
data.elapsed = 0;
data.id = p_object->get_instance_id();
- data.key = p_method;
+ data.key.push_back(p_method);
+ data.concatenated_key = p_method;
data.initial_val = p_initial_val;
data.final_val = p_final_val;
data.duration = p_duration;
@@ -1100,7 +1111,8 @@ bool Tween::interpolate_callback(Object *p_object, real_t p_duration, String p_c
data.elapsed = 0;
data.id = p_object->get_instance_id();
- data.key = p_callback;
+ data.key.push_back(p_callback);
+ data.concatenated_key = p_callback;
data.duration = p_duration;
data.delay = 0;
@@ -1152,7 +1164,8 @@ bool Tween::interpolate_deferred_callback(Object *p_object, real_t p_duration, S
data.elapsed = 0;
data.id = p_object->get_instance_id();
- data.key = p_callback;
+ data.key.push_back(p_callback);
+ data.concatenated_key = p_callback;
data.duration = p_duration;
data.delay = 0;
@@ -1183,11 +1196,16 @@ bool Tween::interpolate_deferred_callback(Object *p_object, real_t p_duration, S
return true;
}
-bool Tween::follow_property(Object *p_object, String p_property, Variant p_initial_val, Object *p_target, String p_target_property, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
+bool Tween::follow_property(Object *p_object, NodePath p_property, Variant p_initial_val, Object *p_target, NodePath p_target_property, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
if (pending_update != 0) {
_add_pending_command("follow_property", p_object, p_property, p_initial_val, p_target, p_target_property, p_duration, p_trans_type, p_ease_type, p_delay);
return true;
}
+ p_property = p_property.get_as_property_path();
+ p_target_property = p_target_property.get_as_property_path();
+
+ if (p_initial_val.get_type() == Variant::NIL) p_initial_val = p_object->get_indexed(p_property.get_subnames());
+
// convert INT to REAL is better for interpolaters
if (p_initial_val.get_type() == Variant::INT) p_initial_val = p_initial_val.operator real_t();
@@ -1201,11 +1219,11 @@ bool Tween::follow_property(Object *p_object, String p_property, Variant p_initi
ERR_FAIL_COND_V(p_delay < 0, false);
bool prop_valid = false;
- p_object->get(p_property, &prop_valid);
+ p_object->get_indexed(p_property.get_subnames(), &prop_valid);
ERR_FAIL_COND_V(!prop_valid, false);
bool target_prop_valid = false;
- Variant target_val = p_target->get(p_target_property, &target_prop_valid);
+ Variant target_val = p_target->get_indexed(p_target_property.get_subnames(), &target_prop_valid);
ERR_FAIL_COND_V(!target_prop_valid, false);
// convert INT to REAL is better for interpolaters
@@ -1219,10 +1237,11 @@ bool Tween::follow_property(Object *p_object, String p_property, Variant p_initi
data.elapsed = 0;
data.id = p_object->get_instance_id();
- data.key = p_property;
+ data.key = p_property.get_subnames();
+ data.concatenated_key = p_property.get_concatenated_subnames();
data.initial_val = p_initial_val;
data.target_id = p_target->get_instance_id();
- data.target_key = p_target_property;
+ data.target_key = p_target_property.get_subnames();
data.duration = p_duration;
data.trans_type = p_trans_type;
data.ease_type = p_ease_type;
@@ -1232,7 +1251,7 @@ bool Tween::follow_property(Object *p_object, String p_property, Variant p_initi
return true;
}
-bool Tween::follow_method(Object *p_object, String p_method, Variant p_initial_val, Object *p_target, String p_target_method, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
+bool Tween::follow_method(Object *p_object, StringName p_method, Variant p_initial_val, Object *p_target, StringName p_target_method, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
if (pending_update != 0) {
_add_pending_command("follow_method", p_object, p_method, p_initial_val, p_target, p_target_method, p_duration, p_trans_type, p_ease_type, p_delay);
return true;
@@ -1269,10 +1288,11 @@ bool Tween::follow_method(Object *p_object, String p_method, Variant p_initial_v
data.elapsed = 0;
data.id = p_object->get_instance_id();
- data.key = p_method;
+ data.key.push_back(p_method);
+ data.concatenated_key = p_method;
data.initial_val = p_initial_val;
data.target_id = p_target->get_instance_id();
- data.target_key = p_target_method;
+ data.target_key.push_back(p_target_method);
data.duration = p_duration;
data.trans_type = p_trans_type;
data.ease_type = p_ease_type;
@@ -1282,11 +1302,15 @@ bool Tween::follow_method(Object *p_object, String p_method, Variant p_initial_v
return true;
}
-bool Tween::targeting_property(Object *p_object, String p_property, Object *p_initial, String p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
+bool Tween::targeting_property(Object *p_object, NodePath p_property, Object *p_initial, NodePath p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
+
if (pending_update != 0) {
_add_pending_command("targeting_property", p_object, p_property, p_initial, p_initial_property, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return true;
}
+ p_property = p_property.get_as_property_path();
+ p_initial_property = p_initial_property.get_as_property_path();
+
// convert INT to REAL is better for interpolaters
if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t();
@@ -1300,11 +1324,11 @@ bool Tween::targeting_property(Object *p_object, String p_property, Object *p_in
ERR_FAIL_COND_V(p_delay < 0, false);
bool prop_valid = false;
- p_object->get(p_property, &prop_valid);
+ p_object->get_indexed(p_property.get_subnames(), &prop_valid);
ERR_FAIL_COND_V(!prop_valid, false);
bool initial_prop_valid = false;
- Variant initial_val = p_initial->get(p_initial_property, &initial_prop_valid);
+ Variant initial_val = p_initial->get_indexed(p_initial_property.get_subnames(), &initial_prop_valid);
ERR_FAIL_COND_V(!initial_prop_valid, false);
// convert INT to REAL is better for interpolaters
@@ -1318,9 +1342,10 @@ bool Tween::targeting_property(Object *p_object, String p_property, Object *p_in
data.elapsed = 0;
data.id = p_object->get_instance_id();
- data.key = p_property;
+ data.key = p_property.get_subnames();
+ data.concatenated_key = p_property.get_concatenated_subnames();
data.target_id = p_initial->get_instance_id();
- data.target_key = p_initial_property;
+ data.target_key = p_initial_property.get_subnames();
data.initial_val = initial_val;
data.final_val = p_final_val;
data.duration = p_duration;
@@ -1335,7 +1360,7 @@ bool Tween::targeting_property(Object *p_object, String p_property, Object *p_in
return true;
}
-bool Tween::targeting_method(Object *p_object, String p_method, Object *p_initial, String p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
+bool Tween::targeting_method(Object *p_object, StringName p_method, Object *p_initial, StringName p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
if (pending_update != 0) {
_add_pending_command("targeting_method", p_object, p_method, p_initial, p_initial_method, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return true;
@@ -1372,9 +1397,10 @@ bool Tween::targeting_method(Object *p_object, String p_method, Object *p_initia
data.elapsed = 0;
data.id = p_object->get_instance_id();
- data.key = p_method;
+ data.key.push_back(p_method);
+ data.concatenated_key = p_method;
data.target_id = p_initial->get_instance_id();
- data.target_key = p_initial_method;
+ data.target_key.push_back(p_initial_method);
data.initial_val = initial_val;
data.final_val = p_final_val;
data.duration = p_duration;
diff --git a/scene/animation/tween.h b/scene/animation/tween.h
index fac1d346b4..44710b25f9 100644
--- a/scene/animation/tween.h
+++ b/scene/animation/tween.h
@@ -86,12 +86,13 @@ private:
bool call_deferred;
real_t elapsed;
ObjectID id;
- StringName key;
+ Vector<StringName> key;
+ StringName concatenated_key;
Variant initial_val;
Variant delta_val;
Variant final_val;
ObjectID target_id;
- StringName target_key;
+ Vector<StringName> target_key;
real_t duration;
TransitionType trans_type;
EaseType ease_type;
@@ -132,7 +133,7 @@ private:
void _tween_process(float p_delta);
void _set_process(bool p_process, bool p_force = false);
- void _remove(Object *p_object, String p_key, bool first_only);
+ void _remove(Object *p_object, StringName p_key, bool first_only);
protected:
bool _set(const StringName &p_name, const Variant &p_value);
@@ -156,34 +157,34 @@ public:
float get_speed_scale() const;
bool start();
- bool reset(Object *p_object, String p_key);
+ bool reset(Object *p_object, StringName p_key);
bool reset_all();
- bool stop(Object *p_object, String p_key);
+ bool stop(Object *p_object, StringName p_key);
bool stop_all();
- bool resume(Object *p_object, String p_key);
+ bool resume(Object *p_object, StringName p_key);
bool resume_all();
- bool remove(Object *p_object, String p_key);
+ bool remove(Object *p_object, StringName p_key);
bool remove_all();
bool seek(real_t p_time);
real_t tell() const;
real_t get_runtime() const;
- bool interpolate_property(Object *p_object, String p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
+ bool interpolate_property(Object *p_object, NodePath p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
- bool interpolate_method(Object *p_object, String p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
+ bool interpolate_method(Object *p_object, StringName p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
bool interpolate_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE);
bool interpolate_deferred_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE);
- bool follow_property(Object *p_object, String p_property, Variant p_initial_val, Object *p_target, String p_target_property, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
+ bool follow_property(Object *p_object, NodePath p_property, Variant p_initial_val, Object *p_target, NodePath p_target_property, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
- bool follow_method(Object *p_object, String p_method, Variant p_initial_val, Object *p_target, String p_target_method, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
+ bool follow_method(Object *p_object, StringName p_method, Variant p_initial_val, Object *p_target, StringName p_target_method, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
- bool targeting_property(Object *p_object, String p_property, Object *p_initial, String p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
+ bool targeting_property(Object *p_object, NodePath p_property, Object *p_initial, NodePath p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
- bool targeting_method(Object *p_object, String p_method, Object *p_initial, String p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
+ bool targeting_method(Object *p_object, StringName p_method, Object *p_initial, StringName p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0);
Tween();
~Tween();
diff --git a/scene/animation/tween_interpolaters.cpp b/scene/animation/tween_interpolaters.cpp
index 8f543a575a..cbf941f3ed 100644
--- a/scene/animation/tween_interpolaters.cpp
+++ b/scene/animation/tween_interpolaters.cpp
@@ -50,7 +50,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return c * t / d + b;
}
-};
+}; // namespace linear
///////////////////////////////////////////////////////////////////////////
// sine
///////////////////////////////////////////////////////////////////////////
@@ -70,7 +70,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace sine
///////////////////////////////////////////////////////////////////////////
// quint
///////////////////////////////////////////////////////////////////////////
@@ -92,7 +92,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace quint
///////////////////////////////////////////////////////////////////////////
// quart
///////////////////////////////////////////////////////////////////////////
@@ -114,7 +114,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace quart
///////////////////////////////////////////////////////////////////////////
// quad
///////////////////////////////////////////////////////////////////////////
@@ -137,7 +137,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace quad
///////////////////////////////////////////////////////////////////////////
// expo
///////////////////////////////////////////////////////////////////////////
@@ -163,7 +163,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace expo
///////////////////////////////////////////////////////////////////////////
// elastic
///////////////////////////////////////////////////////////////////////////
@@ -205,7 +205,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace elastic
///////////////////////////////////////////////////////////////////////////
// cubic
///////////////////////////////////////////////////////////////////////////
@@ -227,7 +227,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace cubic
///////////////////////////////////////////////////////////////////////////
// circ
///////////////////////////////////////////////////////////////////////////
@@ -248,7 +248,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace circ
///////////////////////////////////////////////////////////////////////////
// bounce
///////////////////////////////////////////////////////////////////////////
@@ -281,7 +281,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace bounce
///////////////////////////////////////////////////////////////////////////
// back
///////////////////////////////////////////////////////////////////////////
@@ -307,7 +307,7 @@ static real_t in_out(real_t t, real_t b, real_t c, real_t d) {
static real_t out_in(real_t t, real_t b, real_t c, real_t d) {
return (t < d / 2) ? out(t * 2, b, c / 2, d) : in((t * 2) - d, b + c / 2, c / 2, d);
}
-};
+}; // namespace back
Tween::interpolater Tween::interpolaters[Tween::TRANS_COUNT][Tween::EASE_COUNT] = {
{ &linear::in, &linear::out, &linear::in_out, &linear::out_in },
diff --git a/scene/audio/audio_player.cpp b/scene/audio/audio_player.cpp
index 08b01c6a4c..81962901d9 100644
--- a/scene/audio/audio_player.cpp
+++ b/scene/audio/audio_player.cpp
@@ -36,7 +36,7 @@ void AudioStreamPlayer::_mix_internal(bool p_fadeout) {
int bus_index = AudioServer::get_singleton()->thread_find_bus_index(bus);
//get data
- AudioFrame *buffer = mix_buffer.ptr();
+ AudioFrame *buffer = mix_buffer.ptrw();
int buffer_size = mix_buffer.size();
if (p_fadeout) {
diff --git a/scene/gui/box_container.h b/scene/gui/box_container.h
index 4d00a2011f..ebbbbed1f9 100644
--- a/scene/gui/box_container.h
+++ b/scene/gui/box_container.h
@@ -70,8 +70,8 @@ class HBoxContainer : public BoxContainer {
GDCLASS(HBoxContainer, BoxContainer);
public:
- HBoxContainer()
- : BoxContainer(false) {}
+ HBoxContainer() :
+ BoxContainer(false) {}
};
class MarginContainer;
@@ -82,8 +82,8 @@ class VBoxContainer : public BoxContainer {
public:
MarginContainer *add_margin_child(const String &p_label, Control *p_control, bool p_expand = false);
- VBoxContainer()
- : BoxContainer(true) {}
+ VBoxContainer() :
+ BoxContainer(true) {}
};
VARIANT_ENUM_CAST(BoxContainer::AlignMode);
diff --git a/scene/gui/check_box.cpp b/scene/gui/check_box.cpp
index e2b10a948f..00f6153062 100644
--- a/scene/gui/check_box.cpp
+++ b/scene/gui/check_box.cpp
@@ -56,8 +56,8 @@ bool CheckBox::is_radio() {
return get_button_group().is_valid();
}
-CheckBox::CheckBox(const String &p_text)
- : Button(p_text) {
+CheckBox::CheckBox(const String &p_text) :
+ Button(p_text) {
set_toggle_mode(true);
set_text_align(ALIGN_LEFT);
}
diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp
index dbd7c1bbc0..cb6283507e 100644
--- a/scene/gui/color_picker.cpp
+++ b/scene/gui/color_picker.cpp
@@ -486,8 +486,8 @@ void ColorPicker::_bind_methods() {
ADD_SIGNAL(MethodInfo("color_changed", PropertyInfo(Variant::COLOR, "color")));
}
-ColorPicker::ColorPicker()
- : BoxContainer(true) {
+ColorPicker::ColorPicker() :
+ BoxContainer(true) {
updating = true;
edit_alpha = true;
@@ -664,11 +664,16 @@ ColorPicker *ColorPickerButton::get_picker() {
return picker;
}
+PopupPanel *ColorPickerButton::get_popup() {
+ return popup;
+}
+
void ColorPickerButton::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_pick_color", "color"), &ColorPickerButton::set_pick_color);
ClassDB::bind_method(D_METHOD("get_pick_color"), &ColorPickerButton::get_pick_color);
ClassDB::bind_method(D_METHOD("get_picker"), &ColorPickerButton::get_picker);
+ ClassDB::bind_method(D_METHOD("get_popup"), &ColorPickerButton::get_popup);
ClassDB::bind_method(D_METHOD("set_edit_alpha", "show"), &ColorPickerButton::set_edit_alpha);
ClassDB::bind_method(D_METHOD("is_editing_alpha"), &ColorPickerButton::is_editing_alpha);
ClassDB::bind_method(D_METHOD("_color_changed"), &ColorPickerButton::_color_changed);
diff --git a/scene/gui/color_picker.h b/scene/gui/color_picker.h
index 7de67a707c..c02cdc8608 100644
--- a/scene/gui/color_picker.h
+++ b/scene/gui/color_picker.h
@@ -130,6 +130,7 @@ public:
bool is_editing_alpha() const;
ColorPicker *get_picker();
+ PopupPanel *get_popup();
ColorPickerButton();
};
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index adca78d1d4..81d2b6731f 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -2470,6 +2470,16 @@ Control::MouseFilter Control::get_mouse_filter() const {
return data.mouse_filter;
}
+void Control::set_pass_on_modal_close_click(bool p_pass_on) {
+
+ data.pass_on_modal_close_click = p_pass_on;
+}
+
+bool Control::pass_on_modal_close_click() const {
+
+ return data.pass_on_modal_close_click;
+}
+
Control *Control::get_focus_owner() const {
ERR_FAIL_COND_V(!is_inside_tree(), NULL);
@@ -2934,6 +2944,7 @@ Control::Control() {
data.parent = NULL;
data.mouse_filter = MOUSE_FILTER_STOP;
+ data.pass_on_modal_close_click = true;
data.SI = NULL;
data.MI = NULL;
diff --git a/scene/gui/control.h b/scene/gui/control.h
index 92d1c969fc..9ac0eb0be3 100644
--- a/scene/gui/control.h
+++ b/scene/gui/control.h
@@ -165,6 +165,8 @@ private:
bool pending_min_size_update;
Point2 custom_minimum_size;
+ bool pass_on_modal_close_click;
+
MouseFilter mouse_filter;
bool clip_contents;
@@ -401,6 +403,9 @@ public:
void set_mouse_filter(MouseFilter p_filter);
MouseFilter get_mouse_filter() const;
+ void set_pass_on_modal_close_click(bool p_pass_on);
+ bool pass_on_modal_close_click() const;
+
/* SKINNING */
void add_icon_override(const StringName &p_name, const Ref<Texture> &p_icon);
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp
index 6aba535572..6af869c503 100644
--- a/scene/gui/file_dialog.cpp
+++ b/scene/gui/file_dialog.cpp
@@ -47,12 +47,7 @@ void FileDialog::_notification(int p_what) {
if (p_what == NOTIFICATION_ENTER_TREE) {
refresh->set_icon(get_icon("reload"));
- }
-
- if (p_what == NOTIFICATION_DRAW) {
-
- //RID ci = get_canvas_item();
- //get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
+ dir_up->set_icon(get_icon("parent_folder"));
}
if (p_what == NOTIFICATION_POPUP_HIDE) {
@@ -85,6 +80,10 @@ void FileDialog::_unhandled_input(const Ref<InputEvent> &p_event) {
invalidate();
} break;
+ case KEY_BACKSPACE: {
+
+ _dir_entered("..");
+ } break;
default: { handled = false; }
}
@@ -118,6 +117,9 @@ void FileDialog::update_dir() {
if (drives->is_visible()) {
drives->select(dir_access->get_current_drive());
}
+
+ // Deselect any item, to make "Select Current Folder" button text by default.
+ deselect_items();
}
void FileDialog::_dir_entered(String p_dir) {
@@ -152,6 +154,10 @@ void FileDialog::_post_popup() {
tree->grab_focus();
set_process_unhandled_input(true);
+
+ // For open dir mode, deselect all items on file dialog open.
+ if (mode == MODE_OPEN_DIR)
+ deselect_items();
}
void FileDialog::_action_pressed() {
@@ -189,7 +195,7 @@ void FileDialog::_action_pressed() {
TreeItem *item = tree->get_selected();
if (item) {
Dictionary d = item->get_metadata(0);
- if (d["dir"]) {
+ if (d["dir"] && d["name"] != "..") {
path = path.plus_file(d["name"]);
}
}
@@ -272,6 +278,57 @@ void FileDialog::_cancel_pressed() {
hide();
}
+bool FileDialog::_is_open_should_be_disabled() {
+
+ if (mode == MODE_OPEN_ANY || mode == MODE_SAVE_FILE)
+ return false;
+
+ TreeItem *ti = tree->get_selected();
+ // We have something that we can't select?
+ if (!ti)
+ return true;
+
+ Dictionary d = ti->get_metadata(0);
+
+ // Opening a file, but selected a folder? Forbidden.
+ if (((mode == MODE_OPEN_FILE || mode == MODE_OPEN_FILES) && d["dir"]) || // Flipped case, also forbidden.
+ (mode == MODE_OPEN_DIR && !d["dir"]))
+ return true;
+
+ return false;
+}
+
+void FileDialog::_go_up() {
+
+ dir_access->change_dir("..");
+ update_file_list();
+ update_dir();
+}
+
+void FileDialog::deselect_items() {
+
+ // Clear currently selected items in file manager.
+ tree->deselect_all();
+
+ // And change get_ok title.
+ if (!tree->is_anything_selected()) {
+ get_ok()->set_disabled(_is_open_should_be_disabled());
+
+ switch (mode) {
+
+ case MODE_OPEN_FILE:
+ case MODE_OPEN_FILES:
+ get_ok()->set_text(TTR("Open"));
+ get_ok()->set_disabled(false);
+ break;
+
+ case MODE_OPEN_DIR:
+ get_ok()->set_text(TTR("Select Current Folder"));
+ get_ok()->set_disabled(false);
+ break;
+ }
+ }
+}
void FileDialog::_tree_selected() {
TreeItem *ti = tree->get_selected();
@@ -282,7 +339,11 @@ void FileDialog::_tree_selected() {
if (!d["dir"]) {
file->set_text(d["name"]);
+ } else if (mode == MODE_OPEN_DIR) {
+ get_ok()->set_text(TTR("Select this Folder"));
}
+
+ get_ok()->set_disabled(_is_open_should_be_disabled());
}
void FileDialog::_tree_dc_selected() {
@@ -323,7 +384,7 @@ void FileDialog::update_file_list() {
while ((item = dir_access->get_next(&isdir)) != "") {
- if (item == ".")
+ if (item == "." || item == "..")
continue;
ishidden = dir_access->current_is_hidden();
@@ -336,11 +397,6 @@ void FileDialog::update_file_list() {
}
}
- if (dirs.find("..") == NULL) {
- //may happen if lacking permissions
- dirs.push_back("..");
- }
-
dirs.sort_custom<NaturalNoCaseComparator>();
files.sort_custom<NaturalNoCaseComparator>();
@@ -547,6 +603,14 @@ void FileDialog::set_current_path(const String &p_path) {
}
}
+void FileDialog::set_mode_overrides_title(bool p_override) {
+ mode_overrides_title = p_override;
+}
+
+bool FileDialog::is_mode_overriding_title() const {
+ return mode_overrides_title;
+}
+
void FileDialog::set_mode(Mode p_mode) {
mode = p_mode;
@@ -554,27 +618,32 @@ void FileDialog::set_mode(Mode p_mode) {
case MODE_OPEN_FILE:
get_ok()->set_text(RTR("Open"));
- set_title(RTR("Open a File"));
+ if (mode_overrides_title)
+ set_title(RTR("Open a File"));
makedir->hide();
break;
case MODE_OPEN_FILES:
get_ok()->set_text(RTR("Open"));
- set_title(RTR("Open File(s)"));
+ if (mode_overrides_title)
+ set_title(RTR("Open File(s)"));
makedir->hide();
break;
case MODE_OPEN_DIR:
- get_ok()->set_text(RTR("Open"));
- set_title(RTR("Open a Directory"));
+ get_ok()->set_text(RTR("Select Current Folder"));
+ if (mode_overrides_title)
+ set_title(RTR("Open a Directory"));
makedir->show();
break;
case MODE_OPEN_ANY:
get_ok()->set_text(RTR("Open"));
- set_title(RTR("Open a File or Directory"));
+ if (mode_overrides_title)
+ set_title(RTR("Open a File or Directory"));
makedir->show();
break;
case MODE_SAVE_FILE:
get_ok()->set_text(RTR("Save"));
- set_title(RTR("Save a File"));
+ if (mode_overrides_title)
+ set_title(RTR("Save a File"));
makedir->show();
break;
}
@@ -704,6 +773,8 @@ void FileDialog::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_current_dir", "dir"), &FileDialog::set_current_dir);
ClassDB::bind_method(D_METHOD("set_current_file", "file"), &FileDialog::set_current_file);
ClassDB::bind_method(D_METHOD("set_current_path", "path"), &FileDialog::set_current_path);
+ ClassDB::bind_method(D_METHOD("set_mode_overrides_title", "override"), &FileDialog::set_mode_overrides_title);
+ ClassDB::bind_method(D_METHOD("is_mode_overriding_title"), &FileDialog::is_mode_overriding_title);
ClassDB::bind_method(D_METHOD("set_mode", "mode"), &FileDialog::set_mode);
ClassDB::bind_method(D_METHOD("get_mode"), &FileDialog::get_mode);
ClassDB::bind_method(D_METHOD("get_vbox"), &FileDialog::get_vbox);
@@ -716,6 +787,8 @@ void FileDialog::_bind_methods() {
ClassDB::bind_method(D_METHOD("_make_dir_confirm"), &FileDialog::_make_dir_confirm);
ClassDB::bind_method(D_METHOD("_update_file_list"), &FileDialog::update_file_list);
ClassDB::bind_method(D_METHOD("_update_dir"), &FileDialog::update_dir);
+ ClassDB::bind_method(D_METHOD("_go_up"), &FileDialog::_go_up);
+ ClassDB::bind_method(D_METHOD("deselect_items"), &FileDialog::deselect_items);
ClassDB::bind_method(D_METHOD("invalidate"), &FileDialog::invalidate);
@@ -733,6 +806,7 @@ void FileDialog::_bind_methods() {
BIND_ENUM_CONSTANT(ACCESS_USERDATA);
BIND_ENUM_CONSTANT(ACCESS_FILESYSTEM);
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "mode_overrides_title"), "set_mode_overrides_title", "is_mode_overriding_title");
ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Open one,Open many,Open folder,Open any,Save"), "set_mode", "get_mode");
ADD_PROPERTY(PropertyInfo(Variant::INT, "access", PROPERTY_HINT_ENUM, "Resources,User data,File system"), "set_access", "get_access");
ADD_PROPERTY(PropertyInfo(Variant::POOL_STRING_ARRAY, "filters"), "set_filters", "get_filters");
@@ -756,6 +830,8 @@ FileDialog::FileDialog() {
show_hidden_files = default_show_hidden_files;
+ mode_overrides_title = true;
+
VBoxContainer *vbc = memnew(VBoxContainer);
add_child(vbc);
@@ -763,6 +839,12 @@ FileDialog::FileDialog() {
set_title(RTR("Save a File"));
HBoxContainer *hbc = memnew(HBoxContainer);
+
+ dir_up = memnew(ToolButton);
+ dir_up->set_tooltip(TTR("Go to parent folder"));
+ hbc->add_child(dir_up);
+ dir_up->connect("pressed", this, "_go_up");
+
hbc->add_child(memnew(Label(RTR("Path:"))));
dir = memnew(LineEdit);
hbc->add_child(dir);
@@ -807,6 +889,7 @@ FileDialog::FileDialog() {
//cancel->connect("pressed", this,"_cancel_pressed");
tree->connect("cell_selected", this, "_tree_selected", varray(), CONNECT_DEFERRED);
tree->connect("item_activated", this, "_tree_db_selected", varray());
+ tree->connect("nothing_selected", this, "deselect_items");
dir->connect("text_entered", this, "_dir_entered");
file->connect("text_entered", this, "_file_entered");
filter->connect("item_selected", this, "_filter_selected");
diff --git a/scene/gui/file_dialog.h b/scene/gui/file_dialog.h
index 34cecfe4d0..c8c1f23105 100644
--- a/scene/gui/file_dialog.h
+++ b/scene/gui/file_dialog.h
@@ -33,7 +33,6 @@
#include "box_container.h"
#include "os/dir_access.h"
#include "scene/gui/dialogs.h"
-#include "scene/gui/dialogs.h"
#include "scene/gui/line_edit.h"
#include "scene/gui/option_button.h"
#include "scene/gui/tool_button.h"
@@ -87,10 +86,14 @@ private:
DirAccess *dir_access;
ConfirmationDialog *confirm_save;
+ ToolButton *dir_up;
+
ToolButton *refresh;
Vector<String> filters;
+ bool mode_overrides_title;
+
static bool default_show_hidden_files;
bool show_hidden_files;
@@ -112,11 +115,14 @@ private:
void _filter_selected(int);
void _make_dir();
void _make_dir_confirm();
+ void _go_up();
void _update_drives();
void _unhandled_input(const Ref<InputEvent> &p_event);
+ bool _is_open_should_be_disabled();
+
virtual void _post_popup();
protected:
@@ -139,6 +145,9 @@ public:
void set_current_file(const String &p_file);
void set_current_path(const String &p_path);
+ void set_mode_overrides_title(bool p_override);
+ bool is_mode_overriding_title() const;
+
void set_mode(Mode p_mode);
Mode get_mode() const;
@@ -155,6 +164,8 @@ public:
void invalidate();
+ void deselect_items();
+
FileDialog();
~FileDialog();
};
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index 51ab49e643..197e474fd6 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -257,6 +257,20 @@ void ItemList::unselect(int p_idx) {
}
update();
}
+
+void ItemList::unselect_all() {
+
+ if (items.size() < 1)
+ return;
+
+ for (int i = 0; i < items.size(); i++) {
+
+ items[i].selected = false;
+ }
+
+ update();
+}
+
bool ItemList::is_selected(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx, items.size(), false);
@@ -530,6 +544,9 @@ void ItemList::_gui_input(const Ref<InputEvent> &p_event) {
return;
}
+
+ // Since closest is null, more likely we clicked on empty space, so send signal to interested controls. Allows, for example, implement items deselecting.
+ emit_signal("nothing_selected");
}
if (mb.is_valid() && mb->get_button_index() == BUTTON_WHEEL_UP && mb->is_pressed()) {
@@ -1249,6 +1266,15 @@ Vector<int> ItemList::get_selected_items() {
return selected;
}
+bool ItemList::is_anything_selected() {
+ for (int i = 0; i < items.size(); i++) {
+ if (items[i].selected)
+ return true;
+ }
+
+ return false;
+}
+
void ItemList::_set_items(const Array &p_items) {
ERR_FAIL_COND(p_items.size() % 3);
@@ -1409,6 +1435,7 @@ void ItemList::_bind_methods() {
ADD_SIGNAL(MethodInfo("multi_selected", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::BOOL, "selected")));
ADD_SIGNAL(MethodInfo("item_activated", PropertyInfo(Variant::INT, "index")));
ADD_SIGNAL(MethodInfo("rmb_clicked", PropertyInfo(Variant::VECTOR2, "at_position")));
+ ADD_SIGNAL(MethodInfo("nothing_selected"));
GLOBAL_DEF("gui/timers/incremental_search_max_interval_msec", 2000);
}
diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h
index ccdd705325..b1e1e5eeb0 100644
--- a/scene/gui/item_list.h
+++ b/scene/gui/item_list.h
@@ -156,8 +156,10 @@ public:
void select(int p_idx, bool p_single = true);
void unselect(int p_idx);
+ void unselect_all();
bool is_selected(int p_idx) const;
Vector<int> get_selected_items();
+ bool is_anything_selected();
void set_current(int p_current);
int get_current() const;
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index f7bf1cd9ea..85ae6d6241 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -1046,6 +1046,10 @@ void LineEdit::set_cursor_position(int p_pos) {
} else if (cursor_pos > window_pos) {
/* Adjust window if cursor goes too much to the right */
int window_width = get_size().width - style->get_minimum_size().width;
+ if (has_icon("right_icon")) {
+ Ref<Texture> r_icon = Control::get_icon("right_icon");
+ window_width -= r_icon->get_width();
+ }
if (window_width < 0)
return;
diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp
index ac450616d6..d850553957 100644
--- a/scene/gui/menu_button.cpp
+++ b/scene/gui/menu_button.cpp
@@ -111,6 +111,7 @@ MenuButton::MenuButton() {
popup->hide();
add_child(popup);
popup->set_as_toplevel(true);
+ popup->set_pass_on_modal_close_click(false);
connect("button_up", popup, "call_deferred", make_binds("grab_click_focus"));
set_process_unhandled_key_input(true);
set_action_mode(ACTION_MODE_BUTTON_PRESS);
diff --git a/scene/gui/option_button.cpp b/scene/gui/option_button.cpp
index b4d0799945..70f3d9ca83 100644
--- a/scene/gui/option_button.cpp
+++ b/scene/gui/option_button.cpp
@@ -323,6 +323,7 @@ OptionButton::OptionButton() {
popup = memnew(PopupMenu);
popup->hide();
popup->set_as_toplevel(true);
+ popup->set_pass_on_modal_close_click(false);
add_child(popup);
popup->connect("id_pressed", this, "_selected");
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index b94b785530..e37cdd5cc9 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -202,10 +202,10 @@ void PopupMenu::_activate_submenu(int over) {
void PopupMenu::_submenu_timeout() {
- if (mouse_over == submenu_over) {
+ if (mouse_over == submenu_over)
_activate_submenu(mouse_over);
- submenu_over = -1;
- }
+
+ submenu_over = -1;
}
void PopupMenu::_gui_input(const Ref<InputEvent> &p_event) {
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index 124c268c8a..9cf4c105b4 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -793,6 +793,17 @@ void RichTextLabel::_gui_input(Ref<InputEvent> p_event) {
selection.click = item;
selection.click_char = line;
+
+ // Erase previous selection.
+ if (selection.active) {
+ selection.from = NULL;
+ selection.from_char = NULL;
+ selection.to = NULL;
+ selection.to_char = NULL;
+ selection.active = false;
+
+ update();
+ }
}
}
diff --git a/scene/gui/scroll_bar.h b/scene/gui/scroll_bar.h
index 373483a8a0..753bd35de7 100644
--- a/scene/gui/scroll_bar.h
+++ b/scene/gui/scroll_bar.h
@@ -117,8 +117,8 @@ class HScrollBar : public ScrollBar {
GDCLASS(HScrollBar, ScrollBar);
public:
- HScrollBar()
- : ScrollBar(HORIZONTAL) { set_v_size_flags(0); }
+ HScrollBar() :
+ ScrollBar(HORIZONTAL) { set_v_size_flags(0); }
};
class VScrollBar : public ScrollBar {
@@ -126,8 +126,8 @@ class VScrollBar : public ScrollBar {
GDCLASS(VScrollBar, ScrollBar);
public:
- VScrollBar()
- : ScrollBar(VERTICAL) { set_h_size_flags(0); }
+ VScrollBar() :
+ ScrollBar(VERTICAL) { set_h_size_flags(0); }
};
#endif
diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp
index a71a1c5f92..ffe0db691f 100644
--- a/scene/gui/scroll_container.cpp
+++ b/scene/gui/scroll_container.cpp
@@ -354,6 +354,7 @@ void ScrollContainer::update_scrollbars() {
if (!scroll_v || min.height <= size.height - hmin.height) {
v_scroll->hide();
+ v_scroll->set_max(0);
scroll.y = 0;
} else {
@@ -366,6 +367,7 @@ void ScrollContainer::update_scrollbars() {
if (!scroll_h || min.width <= size.width - vmin.width) {
h_scroll->hide();
+ h_scroll->set_max(0);
scroll.x = 0;
} else {
diff --git a/scene/gui/slider.h b/scene/gui/slider.h
index a2334a69fc..95ae429d63 100644
--- a/scene/gui/slider.h
+++ b/scene/gui/slider.h
@@ -77,8 +77,8 @@ class HSlider : public Slider {
GDCLASS(HSlider, Slider);
public:
- HSlider()
- : Slider(HORIZONTAL) { set_v_size_flags(0); }
+ HSlider() :
+ Slider(HORIZONTAL) { set_v_size_flags(0); }
};
class VSlider : public Slider {
@@ -86,8 +86,8 @@ class VSlider : public Slider {
GDCLASS(VSlider, Slider);
public:
- VSlider()
- : Slider(VERTICAL) { set_h_size_flags(0); }
+ VSlider() :
+ Slider(VERTICAL) { set_h_size_flags(0); }
};
#endif // SLIDER_H
diff --git a/scene/gui/split_container.h b/scene/gui/split_container.h
index 8ec21b5eaa..c7a484c4c5 100644
--- a/scene/gui/split_container.h
+++ b/scene/gui/split_container.h
@@ -87,8 +87,8 @@ class HSplitContainer : public SplitContainer {
GDCLASS(HSplitContainer, SplitContainer);
public:
- HSplitContainer()
- : SplitContainer(false) { set_default_cursor_shape(CURSOR_HSPLIT); }
+ HSplitContainer() :
+ SplitContainer(false) { set_default_cursor_shape(CURSOR_HSPLIT); }
};
class VSplitContainer : public SplitContainer {
@@ -96,8 +96,8 @@ class VSplitContainer : public SplitContainer {
GDCLASS(VSplitContainer, SplitContainer);
public:
- VSplitContainer()
- : SplitContainer(true) { set_default_cursor_shape(CURSOR_VSPLIT); }
+ VSplitContainer() :
+ SplitContainer(true) { set_default_cursor_shape(CURSOR_VSPLIT); }
};
#endif // SPLIT_CONTAINER_H
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 69dc7b21fe..e5169089f2 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -251,13 +251,14 @@ void TextEdit::Text::clear() {
insert(0, "");
}
-int TextEdit::Text::get_max_width() const {
+int TextEdit::Text::get_max_width(bool p_exclude_hidden) const {
//quite some work.. but should be fast enough.
int max = 0;
-
- for (int i = 0; i < text.size(); i++)
- max = MAX(max, get_line_width(i));
+ for (int i = 0; i < text.size(); i++) {
+ if (!p_exclude_hidden || !is_hidden(i))
+ max = MAX(max, get_line_width(i));
+ }
return max;
}
@@ -307,7 +308,7 @@ void TextEdit::_update_scrollbars() {
int vscroll_pixels = v_scroll->get_combined_minimum_size().width;
int visible_width = size.width - cache.style_normal->get_minimum_size().width;
- int total_width = text.get_max_width() + vmin.x;
+ int total_width = text.get_max_width(true) + vmin.x;
if (line_numbers)
total_width += cache.line_number_w;
@@ -355,7 +356,12 @@ void TextEdit::_update_scrollbars() {
}
update_line_scroll_pos();
+ if (fabs(v_scroll->get_value() - get_line_scroll_pos()) >= 1) {
+ cursor.line_ofs += v_scroll->get_value() - get_line_scroll_pos();
+ }
+
} else {
+
cursor.line_ofs = 0;
line_scroll_pos = 0;
v_scroll->set_value(0);
@@ -367,12 +373,16 @@ void TextEdit::_update_scrollbars() {
h_scroll->show();
h_scroll->set_max(total_width);
h_scroll->set_page(visible_width);
+ if (cursor.x_ofs > (total_width - visible_width))
+ cursor.x_ofs = (total_width - visible_width);
if (fabs(h_scroll->get_value() - (double)cursor.x_ofs) >= 1) {
h_scroll->set_value(cursor.x_ofs);
}
} else {
+ cursor.x_ofs = 0;
+ h_scroll->set_value(0);
h_scroll->hide();
}
@@ -590,6 +600,12 @@ void TextEdit::_notification(int p_what) {
int xmargin_end = cache.size.width - cache.style_normal->get_margin(MARGIN_RIGHT);
//let's do it easy for now:
cache.style_normal->draw(ci, Rect2(Point2(), cache.size));
+ float readonly_alpha = 1.0; // used to set the input text color when in read-only mode
+ if (readonly) {
+ cache.style_readonly->draw(ci, Rect2(Point2(), cache.size));
+ readonly_alpha = .5;
+ draw_caret = false;
+ }
if (has_focus())
cache.style_focus->draw(ci, Rect2(Point2(), cache.size));
@@ -600,6 +616,8 @@ void TextEdit::_notification(int p_what) {
int tab_w = cache.font->get_char_size(' ').width * indent_size;
Color color = cache.font_color;
+ color.a *= readonly_alpha;
+
int in_region = -1;
if (syntax_coloring) {
@@ -796,7 +814,9 @@ void TextEdit::_notification(int p_what) {
update_line_scroll_pos();
int line = cursor.line_ofs - 1;
- for (int i = 0; i < visible_rows; i++) {
+ // another row may be visible during smooth scrolling
+ int draw_amount = visible_rows + (smooth_scroll_enabled ? 1 : 0);
+ for (int i = 0; i < draw_amount; i++) {
line++;
@@ -817,10 +837,16 @@ void TextEdit::_notification(int p_what) {
int char_margin = xmargin_beg - cursor.x_ofs;
int char_ofs = 0;
- int ofs_y = (i * get_row_height() + cache.line_spacing / 2);
- if (smooth_scroll_enabled) {
- ofs_y -= (v_scroll->get_value() - get_line_scroll_pos()) * get_row_height();
+
+ int ofs_readonly = 0;
+ int ofs_x = 0;
+ if (readonly) {
+ ofs_readonly = cache.style_readonly->get_offset().y / 2;
+ ofs_x = cache.style_readonly->get_offset().x / 2;
}
+ int ofs_y = (i * get_row_height() + cache.line_spacing / 2) + ofs_readonly;
+ if (smooth_scroll_enabled)
+ ofs_y -= ((v_scroll->get_value() - get_line_scroll_pos()) * get_row_height());
bool prev_is_char = false;
bool prev_is_number = false;
@@ -846,27 +872,32 @@ void TextEdit::_notification(int p_what) {
if (text.is_marked(line)) {
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg, ofs_y, xmargin_end - xmargin_beg, get_row_height()), cache.mark_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg + ofs_x, ofs_y, xmargin_end - xmargin_beg, get_row_height()), cache.mark_color);
}
if (str.length() == 0) {
// draw line background if empty as we won't loop at at all
if (line == cursor.line && highlight_current_line) {
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(0, ofs_y, xmargin_end, get_row_height()), cache.current_line_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(ofs_x, ofs_y, xmargin_end, get_row_height()), cache.current_line_color);
}
// give visual indication of empty selected line
if (selection.active && line >= selection.from_line && line <= selection.to_line) {
int char_w = cache.font->get_char_size(' ').width;
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg, ofs_y, char_w, get_row_height()), cache.selection_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg + ofs_x, ofs_y, char_w, get_row_height()), cache.selection_color);
+ }
+ } else {
+ // if it has text, then draw current line marker in the margin, as line number ect will draw over it, draw the rest of line marker later.
+ if (line == cursor.line && highlight_current_line) {
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(0, ofs_y, xmargin_beg, get_row_height()), cache.current_line_color);
}
}
if (text.is_breakpoint(line) && !draw_breakpoint_gutter) {
#ifdef TOOLS_ENABLED
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg, ofs_y + get_row_height() - EDSCALE, xmargin_end - xmargin_beg, EDSCALE), cache.breakpoint_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg + ofs_x, ofs_y + get_row_height() - EDSCALE, xmargin_end - xmargin_beg, EDSCALE), cache.breakpoint_color);
#else
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg, ofs_y, xmargin_end - xmargin_beg, get_row_height()), cache.breakpoint_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg + ofs_x, ofs_y, xmargin_end - xmargin_beg, get_row_height()), cache.breakpoint_color);
#endif
}
@@ -889,11 +920,11 @@ void TextEdit::_notification(int p_what) {
if (is_folded(line)) {
int xofs = horizontal_gap - (cache.can_fold_icon->get_width()) / 2;
int yofs = (get_row_height() - cache.folded_icon->get_height()) / 2;
- cache.folded_icon->draw(ci, Point2(gutter_left + xofs, ofs_y + yofs), Color(0.8f, 0.8f, 0.8f, 0.8f));
+ cache.folded_icon->draw(ci, Point2(gutter_left + xofs + ofs_x, ofs_y + yofs), cache.code_folding_color);
} else if (can_fold(line)) {
int xofs = -cache.can_fold_icon->get_width() / 2 - horizontal_gap + 3;
int yofs = (get_row_height() - cache.can_fold_icon->get_height()) / 2;
- cache.can_fold_icon->draw(ci, Point2(gutter_left + xofs, ofs_y + yofs), Color(0.8f, 0.8f, 0.8f, 0.8f));
+ cache.can_fold_icon->draw(ci, Point2(gutter_left + xofs + ofs_x, ofs_y + yofs), cache.code_folding_color);
}
}
@@ -903,7 +934,7 @@ void TextEdit::_notification(int p_what) {
fc = line_num_padding + fc;
}
- cache.font->draw(ci, Point2(cache.style_normal->get_margin(MARGIN_LEFT) + cache.breakpoint_gutter_width, ofs_y + cache.font->get_ascent()), fc, cache.line_number_color);
+ cache.font->draw(ci, Point2(cache.style_normal->get_margin(MARGIN_LEFT) + cache.breakpoint_gutter_width + ofs_x, ofs_y + cache.font->get_ascent()), fc, cache.line_number_color);
}
//loop through charcters in one line
for (int j = 0; j < str.length(); j++) {
@@ -918,6 +949,7 @@ void TextEdit::_notification(int p_what) {
if (syntax_coloring && deregion == 0) {
color = cache.font_color; //reset
+ color.a *= readonly_alpha;
//find keyword
bool is_char = _is_text_char(str[j]);
bool is_symbol = _is_symbol(str[j]);
@@ -1099,34 +1131,30 @@ void TextEdit::_notification(int p_what) {
bool in_selection = (selection.active && line >= selection.from_line && line <= selection.to_line && (line > selection.from_line || j >= selection.from_column) && (line < selection.to_line || j < selection.to_column));
if (line == cursor.line && highlight_current_line) {
- // if its the first char draw behind line numbers
- if (j == 0) {
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(0, ofs_y, (char_ofs + char_margin), get_row_height()), cache.current_line_color);
- }
// if its the last char draw to end of the line
if (j == str.length() - 1) {
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(char_ofs + char_margin + char_w, ofs_y, xmargin_end - (char_ofs + char_margin + char_w), get_row_height()), cache.current_line_color);
}
// actual text
if (!in_selection) {
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y), Size2i(char_w, get_row_height())), cache.current_line_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin + ofs_x, ofs_y), Size2i(char_w, get_row_height())), cache.current_line_color);
}
}
if (in_selection) {
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y), Size2i(char_w, get_row_height())), cache.selection_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin + ofs_x, ofs_y), Size2i(char_w, get_row_height())), cache.selection_color);
}
if (in_search_result) {
Color border_color = (line == search_result_line && j >= search_result_col && j < search_result_col + search_text.length()) ? cache.font_color : cache.search_result_border_color;
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y), Size2i(char_w, 1)), border_color);
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y + get_row_height() - 1), Size2i(char_w, 1)), border_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin + ofs_x, ofs_y), Size2i(char_w, 1)), border_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin + ofs_x, ofs_y + get_row_height() - 1), Size2i(char_w, 1)), border_color);
if (j == search_text_col)
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y), Size2i(1, get_row_height())), border_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin + ofs_x, ofs_y), Size2i(1, get_row_height())), border_color);
if (j == search_text_col + search_text.length() - 1)
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin + char_w - 1, ofs_y), Size2i(1, get_row_height())), border_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin + char_w + ofs_x - 1, ofs_y), Size2i(1, get_row_height())), border_color);
}
if (highlight_all_occurrences) {
@@ -1145,7 +1173,7 @@ void TextEdit::_notification(int p_what) {
}
if (in_highlighted_word) {
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y), Size2i(char_w, get_row_height())), cache.word_highlighted_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin + ofs_x, ofs_y), Size2i(char_w, get_row_height())), cache.word_highlighted_color);
}
}
}
@@ -1156,7 +1184,7 @@ void TextEdit::_notification(int p_what) {
if (brace_open_mismatch)
color = cache.brace_mismatch_color;
- cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
+ cache.font->draw_char(ci, Point2i(char_ofs + char_margin + ofs_x, ofs_y + ascent), '_', str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
}
if (
@@ -1165,13 +1193,13 @@ void TextEdit::_notification(int p_what) {
if (brace_close_mismatch)
color = cache.brace_mismatch_color;
- cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
+ cache.font->draw_char(ci, Point2i(char_ofs + char_margin + ofs_x, ofs_y + ascent), '_', str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
}
}
if (cursor.column == j && cursor.line == line) {
- cursor_pos = Point2i(char_ofs + char_margin, ofs_y);
+ cursor_pos = Point2i(char_ofs + char_margin + ofs_x, ofs_y);
if (insert_mode) {
cursor_pos.y += (get_row_height() - 3);
@@ -1198,7 +1226,7 @@ void TextEdit::_notification(int p_what) {
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2(char_ofs + char_margin, ofs_y + get_row_height()), Size2(im_char_width, 1)), color);
}
- cache.font->draw_char(ci, Point2(char_ofs + char_margin, ofs_y + ascent), cchar, next, color);
+ cache.font->draw_char(ci, Point2(char_ofs + char_margin + ofs_x, ofs_y + ascent), cchar, next, color);
char_ofs += im_char_width;
ofs++;
@@ -1221,18 +1249,19 @@ void TextEdit::_notification(int p_what) {
color = cache.caret_background_color;
} else if (!syntax_coloring && block_caret) {
color = cache.font_color;
+ color.a *= readonly_alpha;
}
if (str[j] >= 32) {
- int w = cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), str[j], str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
+ int w = cache.font->draw_char(ci, Point2i(char_ofs + char_margin + ofs_x, ofs_y + ascent), str[j], str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
if (underlined) {
- draw_rect(Rect2(char_ofs + char_margin, ofs_y + ascent + 2, w, 1), in_selection && override_selected_font_color ? cache.font_selected_color : color);
+ draw_rect(Rect2(char_ofs + char_margin + ofs_x, ofs_y + ascent + 2, w, 1), in_selection && override_selected_font_color ? cache.font_selected_color : color);
}
}
else if (draw_tabs && str[j] == '\t') {
int yofs = (get_row_height() - cache.tab_icon->get_height()) / 2;
- cache.tab_icon->draw(ci, Point2(char_ofs + char_margin, ofs_y + yofs), in_selection && override_selected_font_color ? cache.font_selected_color : color);
+ cache.tab_icon->draw(ci, Point2(char_ofs + char_margin + ofs_x, ofs_y + yofs), in_selection && override_selected_font_color ? cache.font_selected_color : color);
}
char_ofs += char_w;
@@ -1240,13 +1269,15 @@ void TextEdit::_notification(int p_what) {
if (j == str.length() - 1 && is_folded(line)) {
int yofs = (get_row_height() - cache.folded_eol_icon->get_height()) / 2;
int xofs = cache.folded_eol_icon->get_width() / 2;
- cache.folded_eol_icon->draw(ci, Point2(char_ofs + char_margin + xofs, ofs_y + yofs), Color(1, 1, 1, 1));
+ Color eol_color = cache.code_folding_color;
+ eol_color.a = 1;
+ cache.folded_eol_icon->draw(ci, Point2(char_ofs + char_margin + xofs + ofs_x, ofs_y + yofs), eol_color);
}
}
if (cursor.column == str.length() && cursor.line == line && (char_ofs + char_margin) >= xmargin_beg) {
- cursor_pos = Point2i(char_ofs + char_margin, ofs_y);
+ cursor_pos = Point2i(char_ofs + char_margin + ofs_x, ofs_y);
if (insert_mode) {
cursor_pos.y += (get_row_height() - 3);
@@ -1271,7 +1302,7 @@ void TextEdit::_notification(int p_what) {
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2(char_ofs + char_margin, ofs_y + get_row_height()), Size2(im_char_width, 1)), color);
}
- cache.font->draw_char(ci, Point2(char_ofs + char_margin, ofs_y + ascent), cchar, next, color);
+ cache.font->draw_char(ci, Point2(char_ofs + char_margin + ofs_x, ofs_y + ascent), cchar, next, color);
char_ofs += im_char_width;
ofs++;
@@ -1704,12 +1735,12 @@ void TextEdit::_get_mouse_pos(const Point2i &p_mouse, int &r_row, int &r_col) co
rows -= cache.style_normal->get_margin(MARGIN_TOP);
rows /= get_row_height();
int lsp = get_line_scroll_pos(true);
- int row = cursor.line_ofs + (rows + (v_scroll->get_value() - lsp));
+ int row = cursor.line_ofs + (rows + (round(v_scroll->get_value()) - lsp));
if (is_hiding_enabled()) {
// row will be offset by the hidden rows
int f_ofs = num_lines_from(CLAMP(cursor.line_ofs, 0, text.size() - 1), MIN(rows + 1, text.size() - cursor.line_ofs)) - 1;
- row = cursor.line_ofs + (f_ofs + (v_scroll->get_value() - lsp));
+ row = cursor.line_ofs + (f_ofs + (round(v_scroll->get_value()) - lsp));
row = CLAMP(row, 0, text.size() - num_lines_from(text.size() - 1, -1));
}
@@ -3114,12 +3145,12 @@ void TextEdit::_scroll_lines_up() {
scrolling = false;
// adjust the vertical scroll
- if (get_v_scroll() > 0) {
+ if (get_v_scroll() >= 0) {
set_v_scroll(get_v_scroll() - 1);
}
// adjust the cursor
- int num_lines = num_lines_from(CLAMP(cursor.line_ofs, 0, text.size() - 1), get_visible_rows()) - 1;
+ int num_lines = num_lines_from(CLAMP(cursor.line_ofs, 0, text.size() - 1), get_visible_rows());
if (cursor.line >= cursor.line_ofs + num_lines && !selection.active) {
cursor_set_line(cursor.line_ofs + num_lines, false, false);
}
@@ -3462,23 +3493,29 @@ void TextEdit::adjust_viewport_to_cursor() {
visible_width -= 20; // give it a little more space
int visible_rows = get_visible_rows();
- if (h_scroll->is_visible_in_tree())
+ if (h_scroll->is_visible_in_tree() && !scroll_past_end_of_file_enabled)
visible_rows -= ((h_scroll->get_combined_minimum_size().height - 1) / get_row_height());
int num_rows = num_lines_from(CLAMP(cursor.line_ofs, 0, text.size() - 1), MIN(visible_rows, text.size() - 1 - cursor.line_ofs));
- // if the cursor is off the screen
- if (cursor.line >= (cursor.line_ofs + MAX(num_rows, visible_rows))) {
- cursor.line_ofs = cursor.line - (num_lines_from(CLAMP(cursor.line, 0, text.size() - 1), -visible_rows) - 1);
+ // make sure the cursor is on the screen
+ // above the caret
+ if (cursor.line > (cursor.line_ofs + MAX(num_rows, visible_rows))) {
+ cursor.line_ofs = cursor.line - num_lines_from(cursor.line, -visible_rows) + 1;
}
- if (cursor.line < cursor.line_ofs) {
- cursor.line_ofs = cursor.line;
+ // below the caret
+ if (cursor.line_ofs == cursor.line) {
+ cursor.line_ofs = cursor.line - 2;
}
-
- // fixes deleting lines from moving the line ofs in a bad way
- if (!scroll_past_end_of_file_enabled && get_total_unhidden_rows() > visible_rows && num_rows < visible_rows) {
- cursor.line_ofs = text.size() - 1 - (num_lines_from(text.size() - 1, -visible_rows) - 1);
+ int line_ofs_max = text.size() - 1;
+ if (!scroll_past_end_of_file_enabled) {
+ line_ofs_max -= num_lines_from(text.size() - 1, -visible_rows) - 1;
+ line_ofs_max += (h_scroll->is_visible_in_tree() ? 1 : 0);
+ line_ofs_max += (cursor.line == text.size() - 1 ? 1 : 0);
}
+ line_ofs_max = MAX(line_ofs_max, 0);
+ cursor.line_ofs = CLAMP(cursor.line_ofs, 0, line_ofs_max);
+ // adjust x offset
int cursor_x = get_column_x_offset(cursor.column, text[cursor.line]);
if (cursor_x > (cursor.x_ofs + visible_width))
@@ -3487,19 +3524,17 @@ void TextEdit::adjust_viewport_to_cursor() {
if (cursor_x < cursor.x_ofs)
cursor.x_ofs = cursor_x;
+ updating_scrolls = true;
+ h_scroll->set_value(cursor.x_ofs);
update_line_scroll_pos();
- if (get_line_scroll_pos() == 0)
- v_scroll->set_value(0);
- else
- v_scroll->set_value(get_line_scroll_pos() + 1);
+ double new_v_scroll = get_line_scroll_pos();
+ // keep offset if smooth scroll is enabled
+ if (smooth_scroll_enabled) {
+ new_v_scroll += fmod(v_scroll->get_value(), 1.0);
+ }
+ v_scroll->set_value(new_v_scroll);
+ updating_scrolls = false;
update();
- /*
- get_range()->set_max(text.size());
-
- get_range()->set_page(get_visible_rows());
-
- get_range()->set((int)cursor.line_ofs);
-*/
}
void TextEdit::center_viewport_to_cursor() {
@@ -3530,9 +3565,16 @@ void TextEdit::center_viewport_to_cursor() {
if (cursor_x < cursor.x_ofs)
cursor.x_ofs = cursor_x;
+ updating_scrolls = true;
+ h_scroll->set_value(cursor.x_ofs);
update_line_scroll_pos();
- v_scroll->set_value(get_line_scroll_pos());
-
+ double new_v_scroll = get_line_scroll_pos();
+ // keep offset if smooth scroll is enabled
+ if (smooth_scroll_enabled) {
+ new_v_scroll += fmod(v_scroll->get_value(), 1.0);
+ }
+ v_scroll->set_value(new_v_scroll);
+ updating_scrolls = false;
update();
}
@@ -3655,7 +3697,7 @@ void TextEdit::_scroll_moved(double p_to_val) {
cursor.x_ofs = h_scroll->get_value();
if (v_scroll->is_visible_in_tree()) {
double val = v_scroll->get_value();
- cursor.line_ofs = num_lines_from(0, (int)floor(val)) - 1;
+ cursor.line_ofs = num_lines_from(0, (int)floor(val));
line_scroll_pos = (int)floor(val);
}
update();
@@ -3896,6 +3938,7 @@ void TextEdit::clear() {
void TextEdit::set_readonly(bool p_readonly) {
readonly = p_readonly;
+ update();
}
bool TextEdit::is_readonly() const {
@@ -3933,6 +3976,7 @@ void TextEdit::_update_caches() {
cache.style_normal = get_stylebox("normal");
cache.style_focus = get_stylebox("focus");
+ cache.style_readonly = get_stylebox("read_only");
cache.completion_background_color = get_color("completion_background_color");
cache.completion_selected_color = get_color("completion_selected_color");
cache.completion_existing_color = get_color("completion_existing_color");
@@ -3952,6 +3996,7 @@ void TextEdit::_update_caches() {
cache.current_line_color = get_color("current_line_color");
cache.line_length_guideline_color = get_color("line_length_guideline_color");
cache.breakpoint_color = get_color("breakpoint_color");
+ cache.code_folding_color = get_color("code_folding_color");
cache.brace_mismatch_color = get_color("brace_mismatch_color");
cache.word_highlighted_color = get_color("word_highlighted_color");
cache.search_result_color = get_color("search_result_color");
@@ -4448,7 +4493,7 @@ int TextEdit::num_lines_from(int p_line_from, int unhidden_amount) const {
ERR_FAIL_INDEX_V(p_line_from, text.size(), ABS(unhidden_amount));
if (!is_hiding_enabled())
- return unhidden_amount;
+ return ABS(unhidden_amount);
int num_visible = 0;
int num_total = 0;
if (unhidden_amount >= 0) {
@@ -4472,16 +4517,17 @@ int TextEdit::num_lines_from(int p_line_from, int unhidden_amount) const {
return num_total;
}
-int TextEdit::get_whitespace_level(int p_line) const {
+int TextEdit::get_indent_level(int p_line) const {
ERR_FAIL_INDEX_V(p_line, text.size(), 0);
// counts number of tabs and spaces before line starts
+ int tab_count = 0;
int whitespace_count = 0;
int line_length = text[p_line].size();
for (int i = 0; i < line_length - 1; i++) {
if (text[p_line][i] == '\t') {
- whitespace_count++;
+ tab_count++;
} else if (text[p_line][i] == ' ') {
whitespace_count++;
} else if (text[p_line][i] == '#') {
@@ -4490,7 +4536,7 @@ int TextEdit::get_whitespace_level(int p_line) const {
break;
}
}
- return whitespace_count;
+ return tab_count + whitespace_count / indent_size;
}
bool TextEdit::can_fold(int p_line) const {
@@ -4507,12 +4553,12 @@ bool TextEdit::can_fold(int p_line) const {
if (is_line_hidden(p_line))
return false;
- int start_indent = get_whitespace_level(p_line);
+ int start_indent = get_indent_level(p_line);
for (int i = p_line + 1; i < text.size(); i++) {
if (text[i].size() == 0)
continue;
- int next_indent = get_whitespace_level(i);
+ int next_indent = get_indent_level(i);
if (next_indent > start_indent)
return true;
else
@@ -4525,7 +4571,7 @@ bool TextEdit::can_fold(int p_line) const {
bool TextEdit::is_folded(int p_line) const {
ERR_FAIL_INDEX_V(p_line, text.size(), false);
- if (p_line + 1 >= text.size() - 1)
+ if (p_line + 1 >= text.size())
return false;
if (!is_line_hidden(p_line) && is_line_hidden(p_line + 1))
return true;
@@ -4541,22 +4587,20 @@ void TextEdit::fold_line(int p_line) {
return;
// hide lines below this one
- int start_indent = get_whitespace_level(p_line);
+ int start_indent = get_indent_level(p_line);
+ int last_line = start_indent;
for (int i = p_line + 1; i < text.size(); i++) {
- int cur_indent = get_whitespace_level(i);
- if (text[i].size() == 0 || cur_indent > start_indent) {
- set_line_as_hidden(i, true);
- } else {
- // exclude trailing empty lines
- for (int trail_i = i - 1; trail_i > p_line; trail_i--) {
- if (text[trail_i].size() == 0)
- set_line_as_hidden(trail_i, false);
- else
- break;
+ if (text[i].strip_edges().size() != 0) {
+ if (get_indent_level(i) > start_indent) {
+ last_line = i;
+ } else {
+ break;
}
- break;
}
}
+ for (int i = p_line + 1; i <= last_line; i++) {
+ set_line_as_hidden(i, true);
+ }
// fix selection
if (is_selection_active()) {
@@ -4602,6 +4646,16 @@ void TextEdit::unfold_line(int p_line) {
update();
}
+void TextEdit::toggle_fold_line(int p_line) {
+
+ ERR_FAIL_INDEX(p_line, text.size());
+
+ if (!is_folded(p_line))
+ fold_line(p_line);
+ else
+ unfold_line(p_line);
+}
+
int TextEdit::get_line_count() const {
return text.size();
@@ -5417,6 +5471,7 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("unhide_all_lines"), &TextEdit::unhide_all_lines);
ClassDB::bind_method(D_METHOD("fold_line", "line"), &TextEdit::fold_line);
ClassDB::bind_method(D_METHOD("unfold_line", "line"), &TextEdit::unfold_line);
+ ClassDB::bind_method(D_METHOD("toggle_fold_line", "line"), &TextEdit::toggle_fold_line);
ClassDB::bind_method(D_METHOD("can_fold", "line"), &TextEdit::can_fold);
ClassDB::bind_method(D_METHOD("is_folded", "line"), &TextEdit::is_folded);
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index bb9ca87d06..dd305d5822 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -78,6 +78,7 @@ class TextEdit : public Control {
Ref<Texture> folded_eol_icon;
Ref<StyleBox> style_normal;
Ref<StyleBox> style_focus;
+ Ref<StyleBox> style_readonly;
Ref<Font> font;
Color completion_background_color;
Color completion_selected_color;
@@ -95,6 +96,7 @@ class TextEdit : public Control {
Color selection_color;
Color mark_color;
Color breakpoint_color;
+ Color code_folding_color;
Color current_line_color;
Color line_length_guideline_color;
Color brace_mismatch_color;
@@ -158,7 +160,7 @@ class TextEdit : public Control {
void set_font(const Ref<Font> &p_font);
void set_color_regions(const Vector<ColorRegion> *p_regions) { color_regions = p_regions; }
int get_line_width(int p_line) const;
- int get_max_width() const;
+ int get_max_width(bool p_exclude_hidden = false) const;
const Map<int, ColorRegionInfo> &get_color_region_info(int p_line);
void set(int p_line, const String &p_text);
void set_marked(int p_line, bool p_marked) { text[p_line].marked = p_marked; }
@@ -430,11 +432,11 @@ public:
void fold_all_lines();
void unhide_all_lines();
int num_lines_from(int p_line_from, int unhidden_amount) const;
- int get_whitespace_level(int p_line) const;
bool can_fold(int p_line) const;
bool is_folded(int p_line) const;
void fold_line(int p_line);
void unfold_line(int p_line);
+ void toggle_fold_line(int p_line);
String get_text();
String get_line(int line) const;
@@ -443,6 +445,7 @@ public:
void indent_selection_left();
void indent_selection_right();
+ int get_indent_level(int p_line) const;
inline void set_scroll_pass_end_of_file(bool p_enabled) {
scroll_past_end_of_file_enabled = p_enabled;
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 9213296c55..ab12d123ba 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -2599,6 +2599,11 @@ void Tree::_gui_input(Ref<InputEvent> p_event) {
if (drag_touching) {
set_physics_process(true);
}
+
+ if (b->get_button_index() == BUTTON_LEFT) {
+ if (get_item_at_position(b->get_position()) == NULL && !b->get_shift() && !b->get_control() && !b->get_command())
+ emit_signal("nothing_selected");
+ }
}
} break;
@@ -3043,6 +3048,25 @@ void Tree::set_select_mode(SelectMode p_mode) {
select_mode = p_mode;
}
+void Tree::deselect_all() {
+
+ TreeItem *item = get_next_selected(get_root());
+ while (item) {
+ item->deselect(selected_col);
+ item = get_next_selected(get_root());
+ }
+
+ selected_item = NULL;
+ selected_col = -1;
+
+ update();
+}
+
+bool Tree::is_anything_selected() {
+
+ return (selected_item != NULL);
+}
+
void Tree::clear() {
if (blocked > 0) {
@@ -3750,6 +3774,7 @@ void Tree::_bind_methods() {
ADD_SIGNAL(MethodInfo("custom_popup_edited", PropertyInfo(Variant::BOOL, "arrow_clicked")));
ADD_SIGNAL(MethodInfo("item_activated"));
ADD_SIGNAL(MethodInfo("column_title_pressed", PropertyInfo(Variant::INT, "column")));
+ ADD_SIGNAL(MethodInfo("nothing_selected"));
BIND_ENUM_CONSTANT(SELECT_SINGLE);
BIND_ENUM_CONSTANT(SELECT_ROW);
diff --git a/scene/gui/tree.h b/scene/gui/tree.h
index 64d6016942..112de3165f 100644
--- a/scene/gui/tree.h
+++ b/scene/gui/tree.h
@@ -546,6 +546,8 @@ public:
int get_selected_column() const;
int get_pressed_button() const;
void set_select_mode(SelectMode p_mode);
+ void deselect_all();
+ bool is_anything_selected();
void set_columns(int p_columns);
int get_columns() const;
diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp
index 1b6bd30b58..8f567f9796 100644
--- a/scene/gui/video_player.cpp
+++ b/scene/gui/video_player.cpp
@@ -84,7 +84,7 @@ void VideoPlayer::_mix_audio() {
return;
}
- AudioFrame *buffer = mix_buffer.ptr();
+ AudioFrame *buffer = mix_buffer.ptrw();
int buffer_size = mix_buffer.size();
// Resample
@@ -490,6 +490,7 @@ VideoPlayer::VideoPlayer() {
expand = true;
audio_track = 0;
+ bus_index = 0;
buffering_ms = 500;
server_mix_rate = 44100;
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index 01e11962ff..cae368aeca 100755..100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -1198,7 +1198,7 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) {
unique = false;
} else {
//check if exists
- Node **childs = data.children.ptr();
+ Node **childs = data.children.ptrw();
int cc = data.children.size();
for (int i = 0; i < cc; i++) {
@@ -2104,37 +2104,65 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const
ERR_FAIL_COND_V(!node, NULL);
}
- List<PropertyInfo> plist;
-
- get_property_list(&plist);
+ if (get_filename() != "") { //an instance
+ node->set_filename(get_filename());
+ }
StringName script_property_name = CoreStringNames::get_singleton()->_script;
- if (p_flags & DUPLICATE_SCRIPTS) {
- bool is_valid = false;
- Variant script = get(script_property_name, &is_valid);
- if (is_valid) {
- node->set(script_property_name, script);
+ List<const Node *> node_tree;
+ node_tree.push_front(this);
+
+ if (instanced) {
+ // Since nodes in the instanced hierarchy won't be duplicated explicitly, we need to make an inventory
+ // of all the nodes in the tree of the instanced scene in order to transfer the values of the properties
+
+ for (List<const Node *>::Element *N = node_tree.front(); N; N = N->next()) {
+ for (int i = 0; i < N->get()->get_child_count(); ++i) {
+
+ // Skip nodes not really belonging to the instanced hierarchy; they'll be processed normally later
+ if (N->get()->get_child(i)->data.owner != this)
+ continue;
+
+ node_tree.push_back(N->get()->get_child(i));
+ }
}
}
- for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) {
+ for (List<const Node *>::Element *N = node_tree.front(); N; N = N->next()) {
- if (!(E->get().usage & PROPERTY_USAGE_STORAGE))
- continue;
- String name = E->get().name;
- if (name == script_property_name)
- continue;
+ Node *current_node = node->get_node(get_path_to(N->get()));
+ ERR_CONTINUE(!current_node);
- Variant value = get(name);
- // Duplicate dictionaries and arrays, mainly needed for __meta__
- if (value.get_type() == Variant::DICTIONARY) {
- value = Dictionary(value).copy();
- } else if (value.get_type() == Variant::ARRAY) {
- value = Array(value).duplicate();
+ if (p_flags & DUPLICATE_SCRIPTS) {
+ bool is_valid = false;
+ Variant script = N->get()->get(script_property_name, &is_valid);
+ if (is_valid) {
+ current_node->set(script_property_name, script);
+ }
}
- node->set(name, value);
+ List<PropertyInfo> plist;
+ N->get()->get_property_list(&plist);
+
+ for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) {
+
+ if (!(E->get().usage & PROPERTY_USAGE_STORAGE))
+ continue;
+ String name = E->get().name;
+ if (name == script_property_name)
+ continue;
+
+ Variant value = N->get()->get(name);
+ // Duplicate dictionaries and arrays, mainly needed for __meta__
+ if (value.get_type() == Variant::DICTIONARY) {
+ value = Dictionary(value).copy();
+ } else if (value.get_type() == Variant::ARRAY) {
+ value = Array(value).duplicate();
+ }
+
+ current_node->set(name, value);
+ }
}
node->set_name(get_name());
@@ -2502,24 +2530,19 @@ bool Node::has_node_and_resource(const NodePath &p_path) const {
return false;
Node *node = get_node(p_path);
- if (p_path.get_subname_count()) {
+ bool result = false;
- RES r;
- for (int j = 0; j < p_path.get_subname_count(); j++) {
- r = j == 0 ? node->get(p_path.get_subname(j)) : r->get(p_path.get_subname(j));
- if (r.is_null())
- return false;
- }
- }
+ node->get_indexed(p_path.get_subnames(), &result);
- return true;
+ return result;
}
Array Node::_get_node_and_resource(const NodePath &p_path) {
Node *node;
RES res;
- node = get_node_and_resource(p_path, res);
+ Vector<StringName> leftover_path;
+ node = get_node_and_resource(p_path, res, leftover_path);
Array result;
if (node)
@@ -2532,21 +2555,35 @@ Array Node::_get_node_and_resource(const NodePath &p_path) {
else
result.push_back(Variant());
+ result.push_back(NodePath(Vector<StringName>(), leftover_path, false));
+
return result;
}
-Node *Node::get_node_and_resource(const NodePath &p_path, RES &r_res) const {
+Node *Node::get_node_and_resource(const NodePath &p_path, RES &r_res, Vector<StringName> &r_leftover_subpath, bool p_last_is_property) const {
Node *node = get_node(p_path);
r_res = RES();
+ r_leftover_subpath = Vector<StringName>();
if (!node)
return NULL;
if (p_path.get_subname_count()) {
- for (int j = 0; j < p_path.get_subname_count(); j++) {
- r_res = j == 0 ? node->get(p_path.get_subname(j)) : r_res->get(p_path.get_subname(j));
- ERR_FAIL_COND_V(r_res.is_null(), node);
+ int j = 0;
+ // If not p_last_is_property, we shouldn't consider the last one as part of the resource
+ for (; j < p_path.get_subname_count() - p_last_is_property; j++) {
+ RES new_res = j == 0 ? node->get(p_path.get_subname(j)) : r_res->get(p_path.get_subname(j));
+
+ if (new_res.is_null()) {
+ break;
+ }
+
+ r_res = new_res;
+ }
+ for (; j < p_path.get_subname_count(); j++) {
+ // Put the rest of the subpath in the leftover path
+ r_leftover_subpath.push_back(p_path.get_subname(j));
}
}
diff --git a/scene/main/node.h b/scene/main/node.h
index bd0b18c87a..2b71b71c8d 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -245,7 +245,7 @@ public:
Node *get_node(const NodePath &p_path) const;
Node *find_node(const String &p_mask, bool p_recursive = true, bool p_owned = true) const;
bool has_node_and_resource(const NodePath &p_path) const;
- Node *get_node_and_resource(const NodePath &p_path, RES &r_res) const;
+ Node *get_node_and_resource(const NodePath &p_path, RES &r_res, Vector<StringName> &r_leftover_subpath, bool p_last_is_property = true) const;
Node *get_parent() const;
_FORCE_INLINE_ SceneTree *get_tree() const {
diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp
index d4be683a2b..deb40800bc 100644
--- a/scene/main/scene_tree.cpp
+++ b/scene/main/scene_tree.cpp
@@ -127,7 +127,7 @@ void SceneTree::remove_from_group(const StringName &p_group, Node *p_node) {
group_map.erase(E);
}
-void SceneTree::_flush_transform_notifications() {
+void SceneTree::flush_transform_notifications() {
SelfList<Node> *n = xform_change_list.first();
while (n) {
@@ -418,12 +418,12 @@ void SceneTree::input_event(const Ref<InputEvent> &p_event) {
if (!input_handled) {
call_group_flags(GROUP_CALL_REALTIME, "_viewports", "_vp_unhandled_input", ev); //special one for GUI, as controls use their own process check
- input_handled = true;
_flush_ugc();
+ // input_handled = true; - no reason to set this as handled
root_lock--;
//MessageQueue::get_singleton()->flush(); //flushing here causes UI and other places slowness
} else {
- input_handled = true;
+ // input_handled = true; - no reason to set this as handled
root_lock--;
}
@@ -448,7 +448,7 @@ bool SceneTree::iteration(float p_time) {
current_frame++;
- _flush_transform_notifications();
+ flush_transform_notifications();
MainLoop::iteration(p_time);
physics_process_time = p_time;
@@ -459,7 +459,7 @@ bool SceneTree::iteration(float p_time) {
_notify_group_pause("physics_process", Node::NOTIFICATION_PHYSICS_PROCESS);
_flush_ugc();
MessageQueue::get_singleton()->flush(); //small little hack
- _flush_transform_notifications();
+ flush_transform_notifications();
call_group_flags(GROUP_CALL_REALTIME, "_viewports", "update_worlds");
root_lock--;
@@ -487,7 +487,7 @@ bool SceneTree::idle(float p_time) {
MessageQueue::get_singleton()->flush(); //small little hack
- _flush_transform_notifications();
+ flush_transform_notifications();
_notify_group_pause("idle_process_internal", Node::NOTIFICATION_INTERNAL_PROCESS);
_notify_group_pause("idle_process", Node::NOTIFICATION_PROCESS);
@@ -503,7 +503,7 @@ bool SceneTree::idle(float p_time) {
_flush_ugc();
MessageQueue::get_singleton()->flush(); //small little hack
- _flush_transform_notifications(); //transforms after world update, to avoid unnecessary enter/exit notifications
+ flush_transform_notifications(); //transforms after world update, to avoid unnecessary enter/exit notifications
call_group_flags(GROUP_CALL_REALTIME, "_viewports", "update_worlds");
root_lock--;
@@ -794,6 +794,7 @@ Ref<ArrayMesh> SceneTree::get_debug_contact_mesh() {
Vector3(0, 0, 1)
};
+ /* clang-format off */
int diamond_faces[8 * 3] = {
0, 2, 4,
0, 3, 4,
@@ -804,6 +805,7 @@ Ref<ArrayMesh> SceneTree::get_debug_contact_mesh() {
1, 2, 5,
1, 3, 5,
};
+ /* clang-format on */
PoolVector<int> indices;
for (int i = 0; i < 8 * 3; i++)
@@ -1001,7 +1003,7 @@ Array SceneTree::_get_nodes_in_group(const StringName &p_group) {
ret.resize(nc);
- Node **ptr = E->get().nodes.ptr();
+ Node **ptr = E->get().nodes.ptrw();
for (int i = 0; i < nc; i++) {
ret[i] = ptr[i];
@@ -1024,7 +1026,7 @@ void SceneTree::get_nodes_in_group(const StringName &p_group, List<Node *> *p_li
int nc = E->get().nodes.size();
if (nc == 0)
return;
- Node **ptr = E->get().nodes.ptr();
+ Node **ptr = E->get().nodes.ptrw();
for (int i = 0; i < nc; i++) {
p_list->push_back(ptr[i]);
@@ -1997,9 +1999,9 @@ void SceneTree::_network_process_packet(int p_from, const uint8_t *p_packet, int
Variant::CallError ce;
- node->call(name, argp.ptr(), argc, ce);
+ node->call(name, (const Variant **)argp.ptr(), argc, ce);
if (ce.error != Variant::CallError::CALL_OK) {
- String error = Variant::get_call_error_text(node, name, argp.ptr(), argc, ce);
+ String error = Variant::get_call_error_text(node, name, (const Variant **)argp.ptr(), argc, ce);
error = "RPC - " + error;
ERR_PRINTS(error);
}
diff --git a/scene/main/scene_tree.h b/scene/main/scene_tree.h
index bc3efdc42f..244fc8da62 100644
--- a/scene/main/scene_tree.h
+++ b/scene/main/scene_tree.h
@@ -157,7 +157,6 @@ private:
Map<UGCall, Vector<Variant> > unique_group_calls;
bool ugc_locked;
void _flush_ugc();
- void _flush_transform_notifications();
_FORCE_INLINE_ void _update_group_order(Group &g);
void _update_listener();
@@ -344,6 +343,8 @@ public:
void notify_group(const StringName &p_group, int p_notification);
void set_group(const StringName &p_group, const String &p_name, const Variant &p_value);
+ void flush_transform_notifications();
+
virtual void input_text(const String &p_text);
virtual void input_event(const Ref<InputEvent> &p_event);
virtual void init();
@@ -419,8 +420,8 @@ public:
void set_screen_stretch(StretchMode p_mode, StretchAspect p_aspect, const Size2 p_minsize, real_t p_shrink = 1);
-//void change_scene(const String& p_path);
-//Node *get_loaded_scene();
+ //void change_scene(const String& p_path);
+ //Node *get_loaded_scene();
#ifdef TOOLS_ENABLED
void set_edited_scene_root(Node *p_node);
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 1f539041fd..4635de81e8 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -69,6 +69,8 @@ void ViewportTexture::setup_local_to_scene() {
ERR_FAIL_COND(!vp);
vp->viewport_textures.insert(this);
+
+ VS::get_singleton()->texture_set_proxy(proxy, vp->texture_rid);
}
void ViewportTexture::set_viewport_path_in_scene(const NodePath &p_path) {
@@ -105,8 +107,8 @@ Size2 ViewportTexture::get_size() const {
}
RID ViewportTexture::get_rid() const {
- ERR_FAIL_COND_V(!vp, RID());
- return vp->texture_rid;
+ //ERR_FAIL_COND_V(!vp, RID());
+ return proxy;
}
bool ViewportTexture::has_alpha() const {
@@ -147,6 +149,7 @@ ViewportTexture::ViewportTexture() {
vp = NULL;
set_local_to_scene(true);
+ proxy = VS::get_singleton()->texture_create();
}
ViewportTexture::~ViewportTexture() {
@@ -154,6 +157,8 @@ ViewportTexture::~ViewportTexture() {
if (vp) {
vp->viewport_textures.erase(this);
}
+
+ VS::get_singleton()->free(proxy);
}
/////////////////////////////////////
@@ -539,7 +544,7 @@ void Viewport::_notification(int p_what) {
Vector2 point = get_canvas_transform().affine_inverse().xform(pos);
Physics2DDirectSpaceState::ShapeResult res[64];
- int rc = ss2d->intersect_point(point, res, 64, Set<RID>(), 0xFFFFFFFF, 0xFFFFFFFF, true);
+ int rc = ss2d->intersect_point(point, res, 64, Set<RID>(), 0xFFFFFFFF, true);
for (int i = 0; i < rc; i++) {
if (res[i].collider_id && res[i].collider) {
@@ -622,7 +627,7 @@ void Viewport::_notification(int p_what) {
PhysicsDirectSpaceState *space = PhysicsServer::get_singleton()->space_get_direct_state(find_world()->get_space());
if (space) {
- bool col = space->intersect_ray(from, from + dir * 10000, result, Set<RID>(), 0xFFFFFFFF, 0xFFFFFFFF, true);
+ bool col = space->intersect_ray(from, from + dir * 10000, result, Set<RID>(), 0xFFFFFFFF, true);
ObjectID new_collider = 0;
if (col) {
@@ -658,7 +663,7 @@ void Viewport::_notification(int p_what) {
PhysicsDirectSpaceState *space = PhysicsServer::get_singleton()->space_get_direct_state(find_world()->get_space());
if (space) {
- bool col = space->intersect_ray(from, from + dir * 10000, result, Set<RID>(), 0xFFFFFFFF, 0xFFFFFFFF, true);
+ bool col = space->intersect_ray(from, from + dir * 10000, result, Set<RID>(), 0xFFFFFFFF, true);
ObjectID new_collider = 0;
if (col) {
CollisionObject *co = Object::cast_to<CollisionObject>(result.collider);
@@ -931,6 +936,9 @@ void Viewport::_camera_remove(Camera *p_camera) {
cameras.erase(p_camera);
if (camera == p_camera) {
+ if (camera && find_world().is_valid()) {
+ camera->notification(Camera::NOTIFICATION_LOST_CURRENT);
+ }
camera = NULL;
}
}
@@ -1261,12 +1269,9 @@ Transform2D Viewport::_get_input_pre_xform() const {
Vector2 Viewport::_get_window_offset() const {
- /*
- if (parent_control) {
- return (parent_control->get_viewport()->get_final_transform() * parent_control->get_global_transform_with_canvas()).get_origin();
+ if (get_parent() && get_parent()->has_method("get_global_position")) {
+ return get_parent()->call("get_global_position");
}
- */
-
return Vector2();
}
@@ -1641,6 +1646,8 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
} else {
+ bool is_handled = false;
+
_gui_sort_modal_stack();
while (!gui.modal_stack.empty()) {
@@ -1658,11 +1665,20 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
top->notification(Control::NOTIFICATION_MODAL_CLOSE);
top->_modal_stack_remove();
top->hide();
+
+ if (!top->pass_on_modal_close_click()) {
+ is_handled = true;
+ }
} else {
break;
}
}
+ if (is_handled) {
+ get_tree()->set_input_as_handled();
+ return;
+ }
+
//Matrix32 parent_xform;
/*
@@ -2813,6 +2829,7 @@ Viewport::Viewport() {
default_texture.instance();
default_texture->vp = const_cast<Viewport *>(this);
viewport_textures.insert(default_texture.ptr());
+ VS::get_singleton()->texture_set_proxy(default_texture->proxy, texture_rid);
//internal_listener = SpatialSoundServer::get_singleton()->listener_create();
audio_listener = false;
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 6bbd4b26b5..0835e3f69a 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -59,6 +59,8 @@ class ViewportTexture : public Texture {
friend class Viewport;
Viewport *vp;
+ RID proxy;
+
protected:
static void _bind_methods();
diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp
index c99bc3c9ef..d6557f508e 100644
--- a/scene/register_scene_types.cpp
+++ b/scene/register_scene_types.cpp
@@ -529,6 +529,7 @@ void register_scene_types() {
ClassDB::register_class<LargeTexture>();
ClassDB::register_class<CurveTexture>();
ClassDB::register_class<GradientTexture>();
+ ClassDB::register_class<ProxyTexture>();
ClassDB::register_class<CubeMap>();
ClassDB::register_class<Animation>();
ClassDB::register_virtual_class<Font>();
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index 8192074c17..4544549f94 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -77,6 +77,8 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) {
track_set_interpolation_loop_wrap(track, p_value);
else if (what == "imported")
track_set_imported(track, p_value);
+ else if (what == "enabled")
+ track_set_enabled(track, p_value);
else if (what == "keys" || what == "key_values") {
if (track_get_type(track) == TYPE_TRANSFORM) {
@@ -247,6 +249,8 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const {
r_ret = track_get_interpolation_loop_wrap(track);
else if (what == "imported")
r_ret = track_is_imported(track);
+ else if (what == "enabled")
+ r_ret = track_is_enabled(track);
else if (what == "keys") {
if (track_get_type(track) == TYPE_TRANSFORM) {
@@ -391,6 +395,7 @@ void Animation::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::INT, "tracks/" + itos(i) + "/interp", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/loop_wrap", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/imported", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::BOOL, "tracks/" + itos(i) + "/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
p_list->push_back(PropertyInfo(Variant::ARRAY, "tracks/" + itos(i) + "/keys", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
}
}
@@ -1575,6 +1580,19 @@ bool Animation::track_is_imported(int p_track) const {
return tracks[p_track]->imported;
}
+void Animation::track_set_enabled(int p_track, bool p_enabled) {
+
+ ERR_FAIL_INDEX(p_track, tracks.size());
+ tracks[p_track]->enabled = p_enabled;
+ emit_changed();
+}
+
+bool Animation::track_is_enabled(int p_track) const {
+
+ ERR_FAIL_INDEX_V(p_track, tracks.size(), false);
+ return tracks[p_track]->enabled;
+}
+
void Animation::track_move_down(int p_track) {
if (p_track > 0 && p_track < tracks.size()) {
@@ -1595,6 +1613,22 @@ float Animation::get_step() const {
return step;
}
+void Animation::copy_track(int src_track, Ref<Animation> p_to_animation) {
+ ERR_FAIL_COND(p_to_animation.is_null());
+ ERR_FAIL_INDEX(src_track, get_track_count());
+ int dst_track = p_to_animation->get_track_count();
+ p_to_animation->add_track(track_get_type(src_track));
+
+ p_to_animation->track_set_path(dst_track, track_get_path(src_track));
+ p_to_animation->track_set_imported(dst_track, track_is_imported(src_track));
+ p_to_animation->track_set_enabled(dst_track, track_is_enabled(src_track));
+ p_to_animation->track_set_interpolation_type(dst_track, track_get_interpolation_type(src_track));
+ p_to_animation->track_set_interpolation_loop_wrap(dst_track, track_get_interpolation_loop_wrap(src_track));
+ for (int i = 0; i < track_get_key_count(src_track); i++) {
+ p_to_animation->track_insert_key(dst_track, track_get_key_time(src_track, i), track_get_key_value(src_track, i), track_get_key_transition(src_track, i));
+ }
+}
+
void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_track", "type", "at_position"), &Animation::add_track, DEFVAL(-1));
@@ -1611,6 +1645,9 @@ void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("track_set_imported", "idx", "imported"), &Animation::track_set_imported);
ClassDB::bind_method(D_METHOD("track_is_imported", "idx"), &Animation::track_is_imported);
+ ClassDB::bind_method(D_METHOD("track_set_enabled", "idx", "enabled"), &Animation::track_set_enabled);
+ ClassDB::bind_method(D_METHOD("track_is_enabled", "idx"), &Animation::track_is_enabled);
+
ClassDB::bind_method(D_METHOD("transform_track_insert_key", "idx", "time", "location", "rotation", "scale"), &Animation::transform_track_insert_key);
ClassDB::bind_method(D_METHOD("track_insert_key", "idx", "time", "key", "transition"), &Animation::track_insert_key, DEFVAL(1));
ClassDB::bind_method(D_METHOD("track_remove_key", "idx", "key_idx"), &Animation::track_remove_key);
@@ -1650,6 +1687,7 @@ void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_step"), &Animation::get_step);
ClassDB::bind_method(D_METHOD("clear"), &Animation::clear);
+ ClassDB::bind_method(D_METHOD("copy_track", "track", "to_animation"), &Animation::copy_track);
BIND_ENUM_CONSTANT(TYPE_VALUE);
BIND_ENUM_CONSTANT(TYPE_TRANSFORM);
diff --git a/scene/resources/animation.h b/scene/resources/animation.h
index 6235e161a3..1f468b29b5 100644
--- a/scene/resources/animation.h
+++ b/scene/resources/animation.h
@@ -67,10 +67,12 @@ private:
bool loop_wrap;
NodePath path; // path to something
bool imported;
+ bool enabled;
Track() {
interpolation = INTERPOLATION_LINEAR;
imported = false;
loop_wrap = true;
+ enabled = true;
}
virtual ~Track() {}
};
@@ -239,6 +241,9 @@ public:
void track_set_imported(int p_track, bool p_imported);
bool track_is_imported(int p_track) const;
+ void track_set_enabled(int p_track, bool p_enabled);
+ bool track_is_enabled(int p_track) const;
+
int transform_track_insert_key(int p_track, float p_time, const Vector3 p_loc, const Quat &p_rot = Quat(), const Vector3 &p_scale = Vector3());
void track_insert_key(int p_track, float p_time, const Variant &p_key, float p_transition = 1);
void track_set_key_transition(int p_track, int p_key_idx, float p_transition);
@@ -269,6 +274,8 @@ public:
Vector<Variant> method_track_get_params(int p_track, int p_key_idx) const;
StringName method_track_get_name(int p_track, int p_key_idx) const;
+ void copy_track(int p_track, Ref<Animation> p_to_animation);
+
void set_length(float p_length);
float get_length() const;
diff --git a/scene/resources/bit_mask.cpp b/scene/resources/bit_mask.cpp
index 029a9ef0e8..eebc872dfb 100644
--- a/scene/resources/bit_mask.cpp
+++ b/scene/resources/bit_mask.cpp
@@ -38,7 +38,7 @@ void BitMap::create(const Size2 &p_size) {
width = p_size.width;
height = p_size.height;
bitmask.resize(((width * height) / 8) + 1);
- zeromem(bitmask.ptr(), bitmask.size());
+ zeromem(bitmask.ptrw(), bitmask.size());
}
void BitMap::create_from_image_alpha(const Ref<Image> &p_image) {
@@ -51,7 +51,7 @@ void BitMap::create_from_image_alpha(const Ref<Image> &p_image) {
create(Size2(img->get_width(), img->get_height()));
PoolVector<uint8_t>::Read r = img->get_data().read();
- uint8_t *w = bitmask.ptr();
+ uint8_t *w = bitmask.ptrw();
for (int i = 0; i < width * height; i++) {
@@ -65,7 +65,7 @@ void BitMap::create_from_image_alpha(const Ref<Image> &p_image) {
void BitMap::set_bit_rect(const Rect2 &p_rect, bool p_value) {
Rect2i current = Rect2i(0, 0, width, height).clip(p_rect);
- uint8_t *data = bitmask.ptr();
+ uint8_t *data = bitmask.ptrw();
for (int i = current.position.x; i < current.position.x + current.size.x; i++) {
diff --git a/scene/resources/box_shape.cpp b/scene/resources/box_shape.cpp
index 4b9843f3f5..858e19c9a6 100644
--- a/scene/resources/box_shape.cpp
+++ b/scene/resources/box_shape.cpp
@@ -73,8 +73,8 @@ void BoxShape::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents"), "set_extents", "get_extents");
}
-BoxShape::BoxShape()
- : Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_BOX)) {
+BoxShape::BoxShape() :
+ Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_BOX)) {
set_extents(Vector3(1, 1, 1));
}
diff --git a/scene/resources/capsule_shape.cpp b/scene/resources/capsule_shape.cpp
index e11b98f82e..f0eb8232e5 100644
--- a/scene/resources/capsule_shape.cpp
+++ b/scene/resources/capsule_shape.cpp
@@ -113,8 +113,8 @@ void CapsuleShape::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::REAL, "height", PROPERTY_HINT_RANGE, "0.01,4096,0.01"), "set_height", "get_height");
}
-CapsuleShape::CapsuleShape()
- : Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_CAPSULE)) {
+CapsuleShape::CapsuleShape() :
+ Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_CAPSULE)) {
radius = 1.0;
height = 1.0;
diff --git a/scene/resources/capsule_shape_2d.cpp b/scene/resources/capsule_shape_2d.cpp
index 912150b939..3caf12feb8 100644
--- a/scene/resources/capsule_shape_2d.cpp
+++ b/scene/resources/capsule_shape_2d.cpp
@@ -97,8 +97,8 @@ void CapsuleShape2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::REAL, "height"), "set_height", "get_height");
}
-CapsuleShape2D::CapsuleShape2D()
- : Shape2D(Physics2DServer::get_singleton()->capsule_shape_create()) {
+CapsuleShape2D::CapsuleShape2D() :
+ Shape2D(Physics2DServer::get_singleton()->capsule_shape_create()) {
radius = 10;
height = 20;
diff --git a/scene/resources/circle_shape_2d.cpp b/scene/resources/circle_shape_2d.cpp
index 287bde4bfb..bff3ed4d67 100644
--- a/scene/resources/circle_shape_2d.cpp
+++ b/scene/resources/circle_shape_2d.cpp
@@ -76,8 +76,8 @@ void CircleShape2D::draw(const RID &p_to_rid, const Color &p_color) {
VisualServer::get_singleton()->canvas_item_add_polygon(p_to_rid, points, col);
}
-CircleShape2D::CircleShape2D()
- : Shape2D(Physics2DServer::get_singleton()->circle_shape_create()) {
+CircleShape2D::CircleShape2D() :
+ Shape2D(Physics2DServer::get_singleton()->circle_shape_create()) {
radius = 10;
_update_shape();
diff --git a/scene/resources/concave_polygon_shape.cpp b/scene/resources/concave_polygon_shape.cpp
index 6ae4fde85e..1c48f0c30b 100644
--- a/scene/resources/concave_polygon_shape.cpp
+++ b/scene/resources/concave_polygon_shape.cpp
@@ -106,8 +106,8 @@ void ConcavePolygonShape::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_faces"), &ConcavePolygonShape::get_faces);
}
-ConcavePolygonShape::ConcavePolygonShape()
- : Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_CONCAVE_POLYGON)) {
+ConcavePolygonShape::ConcavePolygonShape() :
+ Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_CONCAVE_POLYGON)) {
//set_planes(Vector3(1,1,1));
}
diff --git a/scene/resources/concave_polygon_shape_2d.cpp b/scene/resources/concave_polygon_shape_2d.cpp
index bb91e33ec2..e90046fd28 100644
--- a/scene/resources/concave_polygon_shape_2d.cpp
+++ b/scene/resources/concave_polygon_shape_2d.cpp
@@ -84,6 +84,6 @@ void ConcavePolygonShape2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::POOL_VECTOR2_ARRAY, "segments"), "set_segments", "get_segments");
}
-ConcavePolygonShape2D::ConcavePolygonShape2D()
- : Shape2D(Physics2DServer::get_singleton()->concave_polygon_shape_create()) {
+ConcavePolygonShape2D::ConcavePolygonShape2D() :
+ Shape2D(Physics2DServer::get_singleton()->concave_polygon_shape_create()) {
}
diff --git a/scene/resources/convex_polygon_shape.cpp b/scene/resources/convex_polygon_shape.cpp
index bba52bd5ff..31c4ea55e9 100644
--- a/scene/resources/convex_polygon_shape.cpp
+++ b/scene/resources/convex_polygon_shape.cpp
@@ -81,8 +81,8 @@ void ConvexPolygonShape::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "points"), "set_points", "get_points");
}
-ConvexPolygonShape::ConvexPolygonShape()
- : Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_CONVEX_POLYGON)) {
+ConvexPolygonShape::ConvexPolygonShape() :
+ Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_CONVEX_POLYGON)) {
//set_points(Vector3(1,1,1));
}
diff --git a/scene/resources/convex_polygon_shape_2d.cpp b/scene/resources/convex_polygon_shape_2d.cpp
index a76b6a7cf4..9c25b6b467 100644
--- a/scene/resources/convex_polygon_shape_2d.cpp
+++ b/scene/resources/convex_polygon_shape_2d.cpp
@@ -86,8 +86,8 @@ Rect2 ConvexPolygonShape2D::get_rect() const {
return rect;
}
-ConvexPolygonShape2D::ConvexPolygonShape2D()
- : Shape2D(Physics2DServer::get_singleton()->convex_polygon_shape_create()) {
+ConvexPolygonShape2D::ConvexPolygonShape2D() :
+ Shape2D(Physics2DServer::get_singleton()->convex_polygon_shape_create()) {
int pcount = 3;
for (int i = 0; i < pcount; i++)
diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp
index cd28c9d203..bb2c8750e3 100644
--- a/scene/resources/default_theme/default_theme.cpp
+++ b/scene/resources/default_theme/default_theme.cpp
@@ -257,6 +257,8 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
// LinkButton
+ theme->set_stylebox("focus", "LinkButton", focus);
+
theme->set_font("font", "LinkButton", default_font);
theme->set_color("font_color", "LinkButton", control_font_color);
@@ -310,7 +312,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_stylebox("pressed", "OptionButton", sb_optbutton_pressed);
theme->set_stylebox("hover", "OptionButton", sb_optbutton_hover);
theme->set_stylebox("disabled", "OptionButton", sb_optbutton_disabled);
- theme->set_stylebox("focus", "OptionButton", sb_button_focus);
+ theme->set_stylebox("focus", "OptionButton", sb_optbutton_focus);
theme->set_icon("arrow", "OptionButton", make_icon(option_arrow_png));
@@ -328,8 +330,8 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_stylebox("normal", "MenuButton", sb_button_normal);
theme->set_stylebox("pressed", "MenuButton", sb_button_pressed);
- theme->set_stylebox("hover", "MenuButton", sb_button_pressed);
- theme->set_stylebox("disabled", "MenuButton", make_empty_stylebox(0, 0, 0, 0));
+ theme->set_stylebox("hover", "MenuButton", sb_button_hover);
+ theme->set_stylebox("disabled", "MenuButton", sb_button_disabled);
theme->set_stylebox("focus", "MenuButton", sb_button_focus);
theme->set_font("font", "MenuButton", default_font);
@@ -448,6 +450,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_stylebox("normal", "TextEdit", make_stylebox(tree_bg_png, 3, 3, 3, 3));
theme->set_stylebox("focus", "TextEdit", focus);
+ theme->set_stylebox("read_only", "TextEdit", make_stylebox(tree_bg_disabled_png, 4, 4, 4, 4));
theme->set_stylebox("completion", "TextEdit", make_stylebox(tree_bg_png, 3, 3, 3, 3));
theme->set_icon("tab", "TextEdit", make_icon(tab_png));
@@ -465,6 +468,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("selection_color", "TextEdit", font_color_selection);
theme->set_color("mark_color", "TextEdit", Color(1.0, 0.4, 0.4, 0.4));
theme->set_color("breakpoint_color", "TextEdit", Color(0.8, 0.8, 0.4, 0.2));
+ theme->set_color("code_folding_color", "TextEdit", Color(0.8, 0.8, 0.8, 0.8));
theme->set_color("current_line_color", "TextEdit", Color(0.25, 0.25, 0.26, 0.8));
theme->set_color("caret_color", "TextEdit", control_font_color);
theme->set_color("caret_background_color", "TextEdit", Color::html("000000"));
@@ -556,6 +560,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
// File Dialog
theme->set_icon("reload", "FileDialog", make_icon(icon_reload_png));
+ theme->set_icon("parent_folder", "FileDialog", make_icon(icon_parent_folder_png));
// Popup
diff --git a/scene/resources/default_theme/icon_parent_folder.png b/scene/resources/default_theme/icon_parent_folder.png
new file mode 100644
index 0000000000..47fee1ad81
--- /dev/null
+++ b/scene/resources/default_theme/icon_parent_folder.png
Binary files differ
diff --git a/scene/resources/default_theme/theme_data.h b/scene/resources/default_theme/theme_data.h
index 38e5f58b0d..c6b37cad5a 100644
--- a/scene/resources/default_theme/theme_data.h
+++ b/scene/resources/default_theme/theme_data.h
@@ -174,6 +174,10 @@ static const unsigned char icon_folder_png[] = {
0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x8f, 0xc1, 0xd, 0x80, 0x30, 0x8, 0x45, 0x9f, 0x9d, 0x84, 0x39, 0x4c, 0x3b, 0xbd, 0x75, 0x8f, 0x32, 0x9, 0x5e, 0xec, 0xa5, 0x9, 0xa4, 0xc6, 0x26, 0x5e, 0x7c, 0x17, 0xe, 0xc0, 0xe3, 0x3, 0x5f, 0xb3, 0x1, 0xb4, 0xd6, 0x4e, 0x60, 0x77, 0x66, 0xaa, 0x88, 0x14, 0x4f, 0x90, 0xee, 0xea, 0x2d, 0x3, 0xe4, 0x28, 0x41, 0x8a, 0x9a, 0x1d, 0x55, 0x75, 0x25, 0xfd, 0x5, 0x9b, 0x11, 0xd, 0x54, 0x11, 0x29, 0x53, 0x9, 0x1c, 0x32, 0x4c, 0xbe, 0x10, 0xf1, 0xb, 0x16, 0xa, 0xea, 0xd3, 0x45, 0x33, 0x3b, 0xde, 0x1e, 0x5f, 0xc3, 0x5, 0x1f, 0xc5, 0x12, 0x2c, 0xc5, 0x88, 0xe1, 0xb4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
+static const unsigned char icon_parent_folder_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x4, 0x73, 0x42, 0x49, 0x54, 0x8, 0x8, 0x8, 0x8, 0x7c, 0x8, 0x64, 0x88, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xe, 0xc4, 0x0, 0x0, 0xe, 0xc4, 0x1, 0x95, 0x2b, 0xe, 0x1b, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x0, 0x0, 0x0, 0xc6, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xdd, 0x90, 0xbd, 0x6a, 0x2, 0x51, 0x10, 0x46, 0xcf, 0x8c, 0xbb, 0xaf, 0x10, 0xdb, 0xcb, 0x2e, 0x4b, 0x40, 0xf2, 0x14, 0x51, 0x8b, 0x3c, 0x70, 0x44, 0x48, 0x48, 0x15, 0x4c, 0x61, 0x67, 0xd2, 0x4, 0x96, 0xb, 0x5b, 0x89, 0x58, 0x59, 0xee, 0x8f, 0x3b, 0x36, 0xbb, 0x8d, 0x78, 0xa3, 0x92, 0x4a, 0x4f, 0xf9, 0xcd, 0xcc, 0x99, 0x61, 0xe0, 0xe6, 0x91, 0x50, 0xc1, 0x7b, 0x3f, 0x54, 0xd5, 0x39, 0x60, 0x6d, 0xdb, 0xbe, 0x24, 0x49, 0xb2, 0xb9, 0x58, 0x90, 0xe7, 0xf9, 0x43, 0x1c, 0xc7, 0xef, 0x66, 0xf6, 0xd4, 0x45, 0xbf, 0xc0, 0xb3, 0x73, 0x6e, 0x7d, 0x56, 0x70, 0x62, 0xb8, 0xe7, 0xa4, 0x44, 0x8f, 0xcf, 0x8e, 0xa2, 0xe8, 0xa3, 0x1b, 0xfe, 0xee, 0x62, 0x13, 0x91, 0x1f, 0xe0, 0x11, 0x78, 0xf3, 0xde, 0xf, 0x83, 0x2, 0x55, 0x9d, 0x1, 0x23, 0x60, 0xd5, 0x34, 0xcd, 0xb4, 0xcf, 0xab, 0xaa, 0x1a, 0x77, 0xc2, 0x91, 0xaa, 0xbe, 0x6, 0x5, 0xc0, 0xe, 0xf8, 0x2a, 0xcb, 0x72, 0x92, 0xa6, 0xe9, 0xb6, 0xf, 0xb3, 0x2c, 0xdb, 0xd6, 0x75, 0x3d, 0x11, 0x91, 0x25, 0x50, 0xfe, 0xf9, 0x83, 0x1e, 0x33, 0x93, 0xa2, 0x28, 0xf6, 0x80, 0x39, 0xe7, 0x6, 0xa1, 0xbe, 0xe3, 0xb, 0xae, 0x26, 0x28, 0x10, 0x11, 0x3, 0x16, 0x22, 0xf2, 0xf9, 0xdf, 0x25, 0xf7, 0xce, 0x1, 0x9e, 0x13, 0x48, 0xe9, 0x87, 0xc5, 0x3a, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
static const unsigned char icon_play_png[] = {
0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xa2, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x60, 0x18, 0xf2, 0x80, 0x11, 0x99, 0xf3, 0xe0, 0xc1, 0x83, 0xc3, 0xc, 0xc, 0xc, 0xc2, 0xc, 0xc, 0xc, 0xa5, 0xa, 0xa, 0xa, 0x5b, 0xc9, 0x31, 0xe0, 0x3f, 0x5c, 0x82, 0x91, 0x71, 0x27, 0x3, 0x3, 0x43, 0x91, 0xbc, 0xbc, 0xfc, 0x35, 0x7c, 0x6, 0x30, 0xe1, 0x92, 0xf8, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0x2f, 0x3e, 0x78, 0xf0, 0x60, 0xca, 0x93, 0x27, 0x4f, 0x84, 0x49, 0x76, 0x1, 0x1a, 0xf8, 0xc0, 0xc8, 0xc8, 0xd8, 0xf1, 0xeb, 0xd7, 0xaf, 0x9, 0xaa, 0xaa, 0xaa, 0x3f, 0x89, 0x72, 0x1, 0x1a, 0x10, 0xf8, 0xff, 0xff, 0x7f, 0x7, 0x2b, 0x2b, 0xeb, 0x1e, 0x74, 0x9, 0x62, 0xd, 0xc0, 0x9, 0x88, 0x35, 0xe0, 0x3d, 0x23, 0x23, 0x63, 0xc5, 0xef, 0xdf, 0xbf, 0x5d, 0xd0, 0x25, 0x58, 0x8, 0x68, 0xfc, 0xc3, 0xc0, 0xc0, 0x30, 0x93, 0x85, 0x85, 0xa5, 0x5e, 0x46, 0x46, 0xe6, 0x2d, 0x36, 0x5, 0x38, 0xd, 0x20, 0x36, 0x1a, 0xd1, 0xd, 0x38, 0xc2, 0x0, 0x4d, 0x48, 0xf2, 0xf2, 0xf2, 0x44, 0x25, 0xa4, 0x61, 0x0, 0x0, 0x1e, 0x57, 0x33, 0x3c, 0xcc, 0xe7, 0x34, 0x69, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
@@ -406,6 +410,10 @@ static const unsigned char tree_bg_png[] = {
0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xa, 0x4, 0x3, 0x0, 0x0, 0x0, 0x7f, 0x1c, 0xd2, 0x8e, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x2a, 0x50, 0x4c, 0x54, 0x45, 0x17, 0x16, 0x1a, 0x1d, 0x1c, 0x21, 0x20, 0x1e, 0x24, 0x21, 0x1f, 0x25, 0x1d, 0x1c, 0x21, 0x20, 0x1e, 0x24, 0x1d, 0x1c, 0x21, 0x1d, 0x1c, 0x21, 0x24, 0x22, 0x29, 0x28, 0x26, 0x2d, 0x28, 0x26, 0x2e, 0x2b, 0x2a, 0x31, 0x2c, 0x2a, 0x32, 0xff, 0xff, 0xff, 0xb9, 0x11, 0x56, 0x3e, 0x0, 0x0, 0x0, 0x8, 0x74, 0x52, 0x4e, 0x53, 0x6f, 0xef, 0xf7, 0xf7, 0xf0, 0xf9, 0xf1, 0xee, 0xcf, 0x21, 0xd2, 0xdf, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0xd, 0xf6, 0xb4, 0x61, 0xf5, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0x2d, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x63, 0x60, 0x54, 0x36, 0x36, 0x12, 0x60, 0xf0, 0x98, 0xb5, 0x6a, 0x65, 0xb, 0x43, 0xe4, 0x9e, 0x33, 0xa7, 0xa7, 0x32, 0x58, 0x9d, 0x39, 0x73, 0x66, 0x31, 0x16, 0x12, 0x22, 0xb, 0x52, 0xd9, 0xc6, 0xc0, 0x2, 0xd4, 0x55, 0x0, 0x0, 0xc, 0x14, 0x1a, 0x90, 0x55, 0x1a, 0xec, 0xdb, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe, 0x17, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
+static const unsigned char tree_bg_disabled_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xa, 0x8, 0x4, 0x0, 0x0, 0x0, 0x27, 0x3b, 0x7, 0x36, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0x64, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x95, 0xce, 0x31, 0x12, 0x2, 0x21, 0x10, 0x44, 0xd1, 0x3f, 0x40, 0xa1, 0x44, 0xa6, 0x46, 0xde, 0x63, 0x4f, 0xe5, 0x15, 0x38, 0xb2, 0xd6, 0x6, 0xb0, 0xc8, 0x30, 0x6, 0x96, 0xac, 0x56, 0x99, 0xf8, 0xb3, 0x7e, 0x51, 0xcb, 0xf9, 0x1a, 0xb3, 0x3f, 0xa, 0xaf, 0xc, 0xad, 0x2d, 0xcb, 0xe5, 0x76, 0x38, 0x5, 0x76, 0xec, 0x6c, 0xf7, 0xe0, 0x53, 0xe0, 0x13, 0xa1, 0x27, 0x27, 0x43, 0x26, 0x81, 0x20, 0xc8, 0x70, 0xfc, 0xe8, 0xf, 0x34, 0x67, 0xd8, 0x9c, 0x86, 0x61, 0x2e, 0x68, 0xe9, 0x91, 0xaf, 0x4b, 0x5a, 0x7d, 0x2a, 0x2c, 0x3, 0xed, 0xef, 0x1e, 0x6b, 0xcb, 0x4f, 0xa6, 0x66, 0x2b, 0x25, 0x6, 0x1, 0x37, 0x40, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe, 0x17, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
static const unsigned char tree_bg_focus_png[] = {
0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x20, 0x8, 0x6, 0x0, 0x0, 0x0, 0x73, 0x7a, 0x7a, 0xf4, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xdb, 0xb, 0x4, 0x12, 0x2d, 0x3a, 0xb5, 0x1b, 0x14, 0x49, 0x0, 0x0, 0x2, 0xd9, 0x49, 0x44, 0x41, 0x54, 0x58, 0xc3, 0xc5, 0x57, 0x31, 0x8e, 0x14, 0x31, 0x10, 0xac, 0xea, 0x3d, 0x11, 0x91, 0xdf, 0x49, 0xf7, 0xf, 0x78, 0x1, 0xf, 0x40, 0x84, 0x44, 0x10, 0xf2, 0x20, 0x42, 0x62, 0x12, 0xc4, 0x3, 0x78, 0x1, 0xff, 0x21, 0x42, 0xb8, 0x8a, 0xc0, 0x1e, 0x4f, 0xdb, 0xe3, 0xb9, 0xbb, 0x45, 0x20, 0x7c, 0x1a, 0xdd, 0x8c, 0xec, 0xed, 0xae, 0xae, 0xea, 0xee, 0xe9, 0xe1, 0xfd, 0xed, 0xdd, 0xb, 0x0, 0xdf, 0xf1, 0x7f, 0xd6, 0x4b, 0xde, 0xdf, 0xde, 0xf9, 0xcb, 0xeb, 0x9f, 0xff, 0xc5, 0xfb, 0x9b, 0xaf, 0xcf, 0x70, 0xb3, 0x3d, 0x3c, 0xff, 0xf0, 0xd, 0x24, 0x11, 0x71, 0x1, 0x49, 0x90, 0x4, 0x0, 0x4, 0xd3, 0x2f, 0xb6, 0x7b, 0xf, 0xff, 0x86, 0x2d, 0x8c, 0x47, 0x60, 0x1b, 0x0, 0x61, 0x1b, 0xb6, 0x21, 0x15, 0xd8, 0xc6, 0x8f, 0x8f, 0xaf, 0x0, 0x60, 0x7, 0x0, 0xa2, 0x2, 0x20, 0x11, 0x41, 0x30, 0xa2, 0x2, 0xc1, 0xb5, 0x0, 0x8c, 0x79, 0xd9, 0x80, 0x24, 0x48, 0x0, 0x48, 0x28, 0x9d, 0xb9, 0xd9, 0xd, 0xb0, 0x31, 0x40, 0x5c, 0x2e, 0x1, 0x46, 0x0, 0xd, 0xd0, 0xb6, 0xef, 0x35, 0x8e, 0x13, 0x6, 0xbc, 0x33, 0x60, 0xa3, 0x9a, 0x11, 0x6c, 0x82, 0xe6, 0xa, 0x0, 0x86, 0xe8, 0x2f, 0x71, 0xa9, 0xf7, 0x9c, 0x4d, 0x1f, 0x69, 0x5e, 0x1, 0xd8, 0xa3, 0x37, 0xa4, 0xa, 0x27, 0x1a, 0x13, 0x79, 0x25, 0x9, 0xaa, 0xe3, 0xd8, 0x9c, 0x5f, 0xea, 0x7d, 0x67, 0x80, 0xd7, 0x31, 0x20, 0xab, 0x3, 0x20, 0x5, 0x20, 0x2a, 0x13, 0x41, 0x40, 0x2b, 0x0, 0x76, 0x22, 0xb9, 0xb1, 0xd1, 0x92, 0x91, 0x5d, 0x86, 0xf3, 0x35, 0xef, 0x5, 0xa3, 0x25, 0x60, 0xd, 0x6e, 0x66, 0xe5, 0x0, 0xc0, 0xa8, 0x54, 0x1, 0x6, 0xe9, 0x16, 0x9f, 0x4f, 0xdc, 0x1c, 0x13, 0xed, 0xb1, 0x55, 0x31, 0x78, 0x70, 0x8e, 0xca, 0xcb, 0x8e, 0x6a, 0xbe, 0x56, 0x88, 0x67, 0x38, 0xdb, 0x75, 0x58, 0x76, 0xdf, 0x1b, 0x6c, 0x7a, 0xc, 0x6c, 0x90, 0x0, 0xfd, 0xe0, 0xe8, 0x98, 0xe4, 0x4, 0xe2, 0x69, 0xc, 0xe4, 0x40, 0xaa, 0xf9, 0x63, 0x70, 0xbb, 0x4, 0x16, 0x9c, 0x12, 0xa7, 0x3e, 0xe7, 0x38, 0xb3, 0x4, 0x2b, 0x6f, 0xc7, 0x23, 0xbb, 0xc3, 0x66, 0xdb, 0x38, 0x7, 0x0, 0xcf, 0x32, 0x34, 0xb6, 0x52, 0xb4, 0x3c, 0xf7, 0x35, 0x10, 0xd9, 0xf7, 0x6, 0x56, 0x93, 0x4, 0x4b, 0x0, 0x43, 0x28, 0xf9, 0x4a, 0x3d, 0x6e, 0xb0, 0x3e, 0x9, 0x31, 0xa9, 0x62, 0xd6, 0xc4, 0x36, 0x9c, 0xf2, 0xd9, 0xbd, 0x41, 0x2d, 0x24, 0x68, 0xc7, 0x1f, 0x62, 0x60, 0x6a, 0xc1, 0x7f, 0x95, 0x81, 0xaa, 0x13, 0x61, 0x9, 0xa6, 0xf6, 0x1c, 0x30, 0x17, 0x11, 0x6f, 0x48, 0x12, 0x3b, 0xf3, 0x7b, 0xc2, 0xeb, 0xca, 0x92, 0xb7, 0x72, 0x5f, 0x31, 0x90, 0x11, 0x4e, 0x48, 0xb3, 0x13, 0xa6, 0xcc, 0x3e, 0x51, 0x60, 0x91, 0x53, 0x55, 0x87, 0xf3, 0x2a, 0x98, 0xff, 0x7c, 0x6c, 0x1a, 0xf9, 0xec, 0xda, 0xeb, 0x94, 0x13, 0x43, 0xdd, 0x3f, 0x2a, 0x41, 0xd2, 0xb, 0x27, 0x65, 0xe8, 0x13, 0x20, 0x29, 0x3f, 0xc6, 0x7c, 0x48, 0x65, 0x8, 0x41, 0xda, 0xa4, 0xd5, 0x11, 0xc0, 0x2a, 0x61, 0xce, 0x18, 0x58, 0xd2, 0xbe, 0x98, 0x48, 0x96, 0xdd, 0xf5, 0xbc, 0x11, 0x65, 0xb6, 0x12, 0x55, 0xcb, 0xde, 0xb3, 0x78, 0x27, 0x78, 0xdc, 0xcb, 0x72, 0xe6, 0xd7, 0x8a, 0x27, 0xe6, 0x52, 0x1f, 0x10, 0xe0, 0xb8, 0x92, 0x81, 0xb4, 0x3f, 0x1, 0x1d, 0xed, 0x6c, 0xd4, 0xef, 0x12, 0x2f, 0x73, 0xa0, 0xe, 0xf, 0x42, 0x24, 0x20, 0xf, 0x91, 0xbf, 0x6e, 0x44, 0xfb, 0xde, 0xa1, 0x4, 0xa5, 0x7, 0xaa, 0xa0, 0x23, 0xad, 0xd4, 0x4b, 0xaa, 0x73, 0x0, 0xb7, 0xa1, 0x82, 0x87, 0x46, 0x74, 0x9a, 0xf, 0x48, 0x5d, 0xb3, 0xd, 0xa2, 0xb0, 0x96, 0xe5, 0x7d, 0xc8, 0x81, 0x19, 0xf1, 0x36, 0x2b, 0xba, 0xbd, 0x5e, 0xb3, 0xb7, 0x55, 0x12, 0x76, 0x90, 0xc4, 0x3a, 0x1, 0xa7, 0x66, 0xbc, 0x3, 0x90, 0xe0, 0x8, 0xc8, 0x42, 0x29, 0xa5, 0x7b, 0xa2, 0x63, 0x9f, 0x88, 0x26, 0xa, 0x9c, 0x85, 0x6f, 0x7b, 0x2b, 0x0, 0x92, 0x51, 0x4a, 0x81, 0x5c, 0x2a, 0xcb, 0x2a, 0x47, 0x0, 0xb0, 0x2b, 0x8, 0x11, 0x62, 0x20, 0x58, 0x20, 0x47, 0x77, 0x5a, 0xe5, 0x98, 0x43, 0x3f, 0x2, 0xd8, 0xc1, 0xa5, 0x39, 0x40, 0x82, 0xb5, 0xd9, 0xd7, 0x5a, 0x2, 0x59, 0x80, 0x9, 0x8a, 0x0, 0x7f, 0x1, 0x8, 0x44, 0x8, 0x64, 0xe0, 0xe8, 0x6e, 0x4b, 0xb4, 0x87, 0xa6, 0xc4, 0x3d, 0x17, 0x24, 0xa3, 0xa8, 0xc0, 0x32, 0x8a, 0xea, 0x33, 0x67, 0x0, 0x6e, 0xc, 0x94, 0x5e, 0xe2, 0x46, 0x11, 0x3a, 0x0, 0x82, 0x57, 0x1, 0x98, 0xbf, 0xb, 0xa4, 0xf6, 0x55, 0xd4, 0x2a, 0xe1, 0x0, 0x40, 0xf5, 0xf3, 0xa5, 0xd3, 0x16, 0x6a, 0xb4, 0xa7, 0x19, 0xfa, 0x4f, 0x18, 0xe8, 0x2c, 0x34, 0xfb, 0x92, 0x20, 0xbb, 0xf, 0xa3, 0x1d, 0xc0, 0xcd, 0xe7, 0xb7, 0x83, 0xf9, 0xf2, 0x24, 0xd3, 0xd7, 0xaf, 0x40, 0x9a, 0x84, 0x1, 0xf0, 0xfe, 0xf6, 0xee, 0x1d, 0x80, 0x4f, 0xff, 0xc8, 0xdf, 0x63, 0xeb, 0xfd, 0x6f, 0x3, 0x74, 0x35, 0xa7, 0x2a, 0xf0, 0x17, 0xed, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe, 0x17, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
diff --git a/scene/resources/default_theme/tree_bg_disabled.png b/scene/resources/default_theme/tree_bg_disabled.png
new file mode 100644
index 0000000000..a0fa505e4c
--- /dev/null
+++ b/scene/resources/default_theme/tree_bg_disabled.png
Binary files differ
diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp
index 48c6add586..a40417f24d 100644
--- a/scene/resources/dynamic_font.cpp
+++ b/scene/resources/dynamic_font.cpp
@@ -125,7 +125,7 @@ Error DynamicFontAtSize::_load() {
_fontdata[font->font_path] = Vector<uint8_t>();
Vector<uint8_t> &fontdata = _fontdata[font->font_path];
fontdata.resize(len);
- f->get_buffer(fontdata.ptr(), len);
+ f->get_buffer(fontdata.ptrw(), len);
font->set_font_ptr(fontdata.ptr(), len);
f->close();
}
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp
index 286840656b..c8ab7c2a04 100644
--- a/scene/resources/material.cpp
+++ b/scene/resources/material.cpp
@@ -215,6 +215,13 @@ bool ShaderMaterial::_can_do_next_pass() const {
return shader.is_valid() && shader->get_mode() == Shader::MODE_SPATIAL;
}
+Shader::Mode ShaderMaterial::get_shader_mode() const {
+ if (shader.is_valid())
+ return shader->get_mode();
+ else
+ return Shader::MODE_SPATIAL;
+}
+
ShaderMaterial::ShaderMaterial() {
}
@@ -653,16 +660,16 @@ void SpatialMaterial::_update_shader() {
code += "\t\tvec2 P = view_dir.xy * depth_scale;\n";
code += "\t\tvec2 delta = P / num_layers;\n";
code += "\t\tvec2 ofs = base_uv;\n";
- code += "\t\tfloat depth = texture(texture_depth, ofs).r;\n";
+ code += "\t\tfloat depth = textureLod(texture_depth, ofs,0.0).r;\n";
code += "\t\tfloat current_depth = 0.0;\n";
code += "\t\twhile(current_depth < depth) {\n";
code += "\t\t\tofs -= delta;\n";
- code += "\t\t\tdepth = texture(texture_depth, ofs).r;\n";
+ code += "\t\t\tdepth = textureLod(texture_depth, ofs,0.0).r;\n";
code += "\t\t\tcurrent_depth += layer_depth;\n";
code += "\t\t}\n";
code += "\t\tvec2 prev_ofs = ofs + delta;\n";
code += "\t\tfloat after_depth = depth - current_depth;\n";
- code += "\t\tfloat before_depth = texture(texture_depth, prev_ofs).r - current_depth + layer_depth;\n";
+ code += "\t\tfloat before_depth = textureLod(texture_depth, prev_ofs, 0.0).r - current_depth + layer_depth;\n";
code += "\t\tfloat weight = after_depth / (after_depth - before_depth);\n";
code += "\t\tofs = mix(ofs,prev_ofs,weight);\n";
@@ -689,6 +696,10 @@ void SpatialMaterial::_update_shader() {
}
}
+ if (flags[FLAG_ALBEDO_TEXTURE_FORCE_SRGB]) {
+ code += "\talbedo_tex.rgb = mix(pow((albedo_tex.rgb + vec3(0.055)) * (1.0 / (1.0 + 0.055)),vec3(2.4)),albedo_tex.rgb.rgb * (1.0 / 12.92),lessThan(albedo_tex.rgb,vec3(0.04045)));\n";
+ }
+
if (flags[FLAG_ALBEDO_FROM_VERTEX_COLOR]) {
code += "\talbedo_tex *= COLOR;\n";
}
@@ -1658,6 +1669,11 @@ RID SpatialMaterial::get_shader_rid() const {
return shader_map[current_key].shader;
}
+Shader::Mode SpatialMaterial::get_shader_mode() const {
+
+ return Shader::MODE_SPATIAL;
+}
+
void SpatialMaterial::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_albedo", "albedo"), &SpatialMaterial::set_albedo);
@@ -1833,6 +1849,7 @@ void SpatialMaterial::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_use_point_size"), "set_flag", "get_flag", FLAG_USE_POINT_SIZE);
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_world_triplanar"), "set_flag", "get_flag", FLAG_TRIPLANAR_USE_WORLD);
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_fixed_size"), "set_flag", "get_flag", FLAG_FIXED_SIZE);
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_albedo_tex_force_srgb"), "set_flag", "get_flag", FLAG_ALBEDO_TEXTURE_FORCE_SRGB);
ADD_GROUP("Vertex Color", "vertex_color");
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "vertex_color_use_as_albedo"), "set_flag", "get_flag", FLAG_ALBEDO_FROM_VERTEX_COLOR);
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "vertex_color_is_srgb"), "set_flag", "get_flag", FLAG_SRGB_VERTEX_COLOR);
@@ -2019,6 +2036,7 @@ void SpatialMaterial::_bind_methods() {
BIND_ENUM_CONSTANT(FLAG_AO_ON_UV2);
BIND_ENUM_CONSTANT(FLAG_USE_ALPHA_SCISSOR);
BIND_ENUM_CONSTANT(FLAG_TRIPLANAR_USE_WORLD);
+ BIND_ENUM_CONSTANT(FLAG_ALBEDO_TEXTURE_FORCE_SRGB);
BIND_ENUM_CONSTANT(FLAG_MAX);
BIND_ENUM_CONSTANT(DIFFUSE_BURLEY);
@@ -2048,8 +2066,8 @@ void SpatialMaterial::_bind_methods() {
BIND_ENUM_CONSTANT(EMISSION_OP_MULTIPLY);
}
-SpatialMaterial::SpatialMaterial()
- : element(this) {
+SpatialMaterial::SpatialMaterial() :
+ element(this) {
//initialize to right values
set_albedo(Color(1.0, 1.0, 1.0, 1.0));
diff --git a/scene/resources/material.h b/scene/resources/material.h
index 877d4dfd41..7cfa38fce4 100644
--- a/scene/resources/material.h
+++ b/scene/resources/material.h
@@ -69,6 +69,8 @@ public:
int get_render_priority() const;
virtual RID get_rid() const;
+
+ virtual Shader::Mode get_shader_mode() const = 0;
Material();
virtual ~Material();
};
@@ -96,6 +98,8 @@ public:
void set_shader_param(const StringName &p_param, const Variant &p_value);
Variant get_shader_param(const StringName &p_param) const;
+ virtual Shader::Mode get_shader_mode() const;
+
ShaderMaterial();
~ShaderMaterial();
};
@@ -181,6 +185,7 @@ public:
FLAG_TRIPLANAR_USE_WORLD,
FLAG_AO_ON_UV2,
FLAG_USE_ALPHA_SCISSOR,
+ FLAG_ALBEDO_TEXTURE_FORCE_SRGB,
FLAG_MAX
};
@@ -229,7 +234,7 @@ private:
uint64_t blend_mode : 2;
uint64_t depth_draw_mode : 2;
uint64_t cull_mode : 2;
- uint64_t flags : 12;
+ uint64_t flags : 13;
uint64_t detail_blend_mode : 2;
uint64_t diffuse_mode : 3;
uint64_t specular_mode : 2;
@@ -599,6 +604,8 @@ public:
RID get_shader_rid() const;
+ virtual Shader::Mode get_shader_mode() const;
+
SpatialMaterial();
virtual ~SpatialMaterial();
};
diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp
index 0a886c25b1..0b352efca2 100644
--- a/scene/resources/mesh.cpp
+++ b/scene/resources/mesh.cpp
@@ -28,10 +28,14 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "mesh.h"
+
+#include "pair.h"
#include "scene/resources/concave_polygon_shape.h"
#include "scene/resources/convex_polygon_shape.h"
#include "surface_tool.h"
+#include <stdlib.h>
+
void Mesh::_clear_triangle_mesh() const {
triangle_mesh.unref();
@@ -413,8 +417,21 @@ Ref<Mesh> Mesh::create_outline(float p_margin) const {
return newmesh;
}
+void Mesh::set_lightmap_size_hint(const Vector2 &p_size) {
+ lightmap_size_hint = p_size;
+}
+
+Size2 Mesh::get_lightmap_size_hint() const {
+ return lightmap_size_hint;
+}
+
void Mesh::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_lightmap_size_hint", "size"), &Mesh::set_lightmap_size_hint);
+ ClassDB::bind_method(D_METHOD("get_lightmap_size_hint"), &Mesh::get_lightmap_size_hint);
+
+ ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "lightmap_size_hint"), "set_lightmap_size_hint", "get_lightmap_size_hint");
+
BIND_ENUM_CONSTANT(PRIMITIVE_POINTS);
BIND_ENUM_CONSTANT(PRIMITIVE_LINES);
BIND_ENUM_CONSTANT(PRIMITIVE_LINE_STRIP);
@@ -1035,6 +1052,200 @@ void ArrayMesh::regen_normalmaps() {
}
}
+//dirty hack
+bool (*array_mesh_lightmap_unwrap_callback)(float p_texel_size, const float *p_vertices, const float *p_normals, int p_vertex_count, const int *p_indices, const int *p_face_materials, int p_index_count, float **r_uv, int **r_vertex, int *r_vertex_count, int **r_index, int *r_index_count, int *r_size_hint_x, int *r_size_hint_y) = NULL;
+
+struct ArrayMeshLightmapSurface {
+
+ Ref<Material> material;
+ Vector<SurfaceTool::Vertex> vertices;
+ Mesh::PrimitiveType primitive;
+ uint32_t format;
+};
+
+Error ArrayMesh::lightmap_unwrap(const Transform &p_base_transform, float p_texel_size) {
+
+ ERR_FAIL_COND_V(!array_mesh_lightmap_unwrap_callback, ERR_UNCONFIGURED);
+ ERR_EXPLAIN("Can't unwrap mesh with blend shapes");
+ ERR_FAIL_COND_V(blend_shapes.size() != 0, ERR_UNAVAILABLE);
+
+ Vector<float> vertices;
+ Vector<float> normals;
+ Vector<int> indices;
+ Vector<int> face_materials;
+ Vector<float> uv;
+ Vector<Pair<int, int> > uv_index;
+
+ Vector<ArrayMeshLightmapSurface> surfaces;
+ for (int i = 0; i < get_surface_count(); i++) {
+ ArrayMeshLightmapSurface s;
+ s.primitive = surface_get_primitive_type(i);
+
+ if (s.primitive != Mesh::PRIMITIVE_TRIANGLES) {
+ ERR_EXPLAIN("Only triangles are supported for lightmap unwrap");
+ ERR_FAIL_V(ERR_UNAVAILABLE);
+ }
+ s.format = surface_get_format(i);
+ if (!(s.format & ARRAY_FORMAT_NORMAL)) {
+ ERR_EXPLAIN("Normals are required for lightmap unwrap");
+ ERR_FAIL_V(ERR_UNAVAILABLE);
+ }
+
+ Array arrays = surface_get_arrays(i);
+ s.material = surface_get_material(i);
+ s.vertices = SurfaceTool::create_vertex_array_from_triangle_arrays(arrays);
+
+ PoolVector<Vector3> rvertices = arrays[Mesh::ARRAY_VERTEX];
+ int vc = rvertices.size();
+ PoolVector<Vector3>::Read r = rvertices.read();
+
+ PoolVector<Vector3> rnormals = arrays[Mesh::ARRAY_NORMAL];
+ PoolVector<Vector3>::Read rn = rnormals.read();
+
+ int vertex_ofs = vertices.size() / 3;
+
+ vertices.resize((vertex_ofs + vc) * 3);
+ normals.resize((vertex_ofs + vc) * 3);
+ uv_index.resize(vertex_ofs + vc);
+
+ for (int j = 0; j < vc; j++) {
+
+ Vector3 v = p_base_transform.xform(r[j]);
+
+ vertices[(j + vertex_ofs) * 3 + 0] = v.x;
+ vertices[(j + vertex_ofs) * 3 + 1] = v.y;
+ vertices[(j + vertex_ofs) * 3 + 2] = v.z;
+ normals[(j + vertex_ofs) * 3 + 0] = rn[j].x;
+ normals[(j + vertex_ofs) * 3 + 1] = rn[j].y;
+ normals[(j + vertex_ofs) * 3 + 2] = rn[j].z;
+ uv_index[j + vertex_ofs] = Pair<int, int>(i, j);
+ }
+
+ PoolVector<int> rindices = arrays[Mesh::ARRAY_INDEX];
+ int ic = rindices.size();
+ int index_ofs = indices.size();
+
+ if (ic == 0) {
+ indices.resize(index_ofs + vc);
+ face_materials.resize((index_ofs + vc) / 3);
+ for (int j = 0; j < vc; j++) {
+ indices[index_ofs + j] = vertex_ofs + j;
+ }
+ for (int j = 0; j < vc / 3; j++) {
+ face_materials[(index_ofs / 3) + j] = i;
+ }
+
+ } else {
+ PoolVector<int>::Read ri = rindices.read();
+ indices.resize(index_ofs + ic);
+ face_materials.resize((index_ofs + ic) / 3);
+ for (int j = 0; j < ic; j++) {
+ indices[index_ofs + j] = vertex_ofs + ri[j];
+ }
+ for (int j = 0; j < ic / 3; j++) {
+ face_materials[(index_ofs / 3) + j] = i;
+ }
+ }
+
+ surfaces.push_back(s);
+ }
+
+ //unwrap
+
+ float *gen_uvs;
+ int *gen_vertices;
+ int *gen_indices;
+ int gen_vertex_count;
+ int gen_index_count;
+ int size_x;
+ int size_y;
+
+ bool ok = array_mesh_lightmap_unwrap_callback(p_texel_size, vertices.ptr(), normals.ptr(), vertices.size() / 3, indices.ptr(), face_materials.ptr(), indices.size(), &gen_uvs, &gen_vertices, &gen_vertex_count, &gen_indices, &gen_index_count, &size_x, &size_y);
+
+ if (!ok) {
+ return ERR_CANT_CREATE;
+ }
+
+ //remove surfaces
+ while (get_surface_count()) {
+ surface_remove(0);
+ }
+
+ //create surfacetools for each surface..
+ Vector<Ref<SurfaceTool> > surfaces_tools;
+
+ for (int i = 0; i < surfaces.size(); i++) {
+ Ref<SurfaceTool> st;
+ st.instance();
+ st->begin(Mesh::PRIMITIVE_TRIANGLES);
+ st->set_material(surfaces[i].material);
+ surfaces_tools.push_back(st); //stay there
+ }
+
+ print_line("gen indices: " + itos(gen_index_count));
+ //go through all indices
+ for (int i = 0; i < gen_index_count; i += 3) {
+
+ ERR_FAIL_INDEX_V(gen_vertices[gen_indices[i + 0]], uv_index.size(), ERR_BUG);
+ ERR_FAIL_INDEX_V(gen_vertices[gen_indices[i + 1]], uv_index.size(), ERR_BUG);
+ ERR_FAIL_INDEX_V(gen_vertices[gen_indices[i + 2]], uv_index.size(), ERR_BUG);
+
+ ERR_FAIL_COND_V(uv_index[gen_vertices[gen_indices[i + 0]]].first != uv_index[gen_vertices[gen_indices[i + 1]]].first || uv_index[gen_vertices[gen_indices[i + 0]]].first != uv_index[gen_vertices[gen_indices[i + 2]]].first, ERR_BUG);
+
+ int surface = uv_index[gen_vertices[gen_indices[i + 0]]].first;
+
+ for (int j = 0; j < 3; j++) {
+
+ int vertex_idx = gen_vertices[gen_indices[i + j]];
+
+ SurfaceTool::Vertex v = surfaces[surface].vertices[uv_index[gen_vertices[gen_indices[i + j]]].second];
+
+ if (surfaces[surface].format & ARRAY_FORMAT_COLOR) {
+ surfaces_tools[surface]->add_color(v.color);
+ }
+ if (surfaces[surface].format & ARRAY_FORMAT_TEX_UV) {
+ surfaces_tools[surface]->add_uv(v.uv);
+ }
+ if (surfaces[surface].format & ARRAY_FORMAT_NORMAL) {
+ surfaces_tools[surface]->add_normal(v.normal);
+ }
+ if (surfaces[surface].format & ARRAY_FORMAT_TANGENT) {
+ Plane t;
+ t.normal = v.tangent;
+ t.d = v.binormal.dot(v.normal.cross(v.tangent)) < 0 ? -1 : 1;
+ surfaces_tools[surface]->add_tangent(t);
+ }
+ if (surfaces[surface].format & ARRAY_FORMAT_BONES) {
+ surfaces_tools[surface]->add_bones(v.bones);
+ }
+ if (surfaces[surface].format & ARRAY_FORMAT_WEIGHTS) {
+ surfaces_tools[surface]->add_weights(v.weights);
+ }
+
+ Vector2 uv2(gen_uvs[gen_indices[i + j] * 2 + 0], gen_uvs[gen_indices[i + j] * 2 + 1]);
+ surfaces_tools[surface]->add_uv2(uv2);
+
+ surfaces_tools[surface]->add_vertex(v.vertex);
+ }
+ }
+
+ //free stuff
+ ::free(gen_vertices);
+ ::free(gen_indices);
+ ::free(gen_uvs);
+
+ //generate surfaces
+
+ for (int i = 0; i < surfaces_tools.size(); i++) {
+ surfaces_tools[i]->index();
+ surfaces_tools[i]->commit(Ref<ArrayMesh>((ArrayMesh *)this), surfaces[i].format);
+ }
+
+ set_lightmap_size_hint(Size2(size_x, size_y));
+
+ return OK;
+}
+
void ArrayMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_blend_shape", "name"), &ArrayMesh::add_blend_shape);
diff --git a/scene/resources/mesh.h b/scene/resources/mesh.h
index b85a6a84af..ea38ebf2ff 100644
--- a/scene/resources/mesh.h
+++ b/scene/resources/mesh.h
@@ -43,6 +43,8 @@ class Mesh : public Resource {
GDCLASS(Mesh, Resource);
mutable Ref<TriangleMesh> triangle_mesh; //cached
+ Size2 lightmap_size_hint;
+
protected:
void _clear_triangle_mesh() const;
@@ -138,6 +140,9 @@ public:
virtual AABB get_aabb() const = 0;
+ void set_lightmap_size_hint(const Vector2 &p_size);
+ Size2 get_lightmap_size_hint() const;
+
Mesh();
};
@@ -216,6 +221,8 @@ public:
void center_geometry();
void regen_normalmaps();
+ Error lightmap_unwrap(const Transform &p_base_transform = Transform(), float p_texel_size = 0.05);
+
virtual void reload_from_file();
ArrayMesh();
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp
index 5d6f44dfef..3a5cb7da2e 100644
--- a/scene/resources/packed_scene.cpp
+++ b/scene/resources/packed_scene.cpp
@@ -177,7 +177,7 @@ Node *SceneState::instance(GenEditState p_edit_state) const {
node = Object::cast_to<Node>(obj);
} else {
- print_line("wtf class is disabled for: " + itos(n.type));
+ print_line("Class is disabled for: " + itos(n.type));
print_line("name: " + String(snames[n.type]));
}
@@ -232,11 +232,11 @@ Node *SceneState::instance(GenEditState p_edit_state) const {
Node *base = i == 0 ? node : ret_nodes[0];
if (p_edit_state == GEN_EDIT_STATE_MAIN) {
-
- res->local_scene = base;
- resources_local_to_scene[res] = res;
+ //for the main scene, use the resource as is
+ res->configure_for_local_scene(base, resources_local_to_scene);
} else {
+ //for instances, a copy must be made
Node *base = i == 0 ? node : ret_nodes[0];
Ref<Resource> local_dupe = res->duplicate_for_local_scene(base, resources_local_to_scene);
resources_local_to_scene[res] = local_dupe;
diff --git a/scene/resources/plane_shape.cpp b/scene/resources/plane_shape.cpp
index 2b1e890a5d..2eb2ceff24 100644
--- a/scene/resources/plane_shape.cpp
+++ b/scene/resources/plane_shape.cpp
@@ -86,8 +86,8 @@ void PlaneShape::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::PLANE, "plane"), "set_plane", "get_plane");
}
-PlaneShape::PlaneShape()
- : Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_PLANE)) {
+PlaneShape::PlaneShape() :
+ Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_PLANE)) {
set_plane(Plane(0, 1, 0, 0));
}
diff --git a/scene/resources/primitive_meshes.cpp b/scene/resources/primitive_meshes.cpp
index 3b80db291c..2e8f9cbb33 100644
--- a/scene/resources/primitive_meshes.cpp
+++ b/scene/resources/primitive_meshes.cpp
@@ -164,7 +164,7 @@ void PrimitiveMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_mesh_arrays"), &PrimitiveMesh::get_mesh_arrays);
- ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "Material"), "set_material", "get_material");
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "SpatialMaterial,ShaderMaterial"), "set_material", "get_material");
}
void PrimitiveMesh::set_material(const Ref<Material> &p_material) {
diff --git a/scene/resources/ray_shape.cpp b/scene/resources/ray_shape.cpp
index ccce7660c6..b03a81b6bd 100644
--- a/scene/resources/ray_shape.cpp
+++ b/scene/resources/ray_shape.cpp
@@ -66,8 +66,8 @@ void RayShape::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::REAL, "length", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_length", "get_length");
}
-RayShape::RayShape()
- : Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_RAY)) {
+RayShape::RayShape() :
+ Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_RAY)) {
set_length(1.0);
}
diff --git a/scene/resources/rectangle_shape_2d.cpp b/scene/resources/rectangle_shape_2d.cpp
index 69dbb76744..202024aa96 100644
--- a/scene/resources/rectangle_shape_2d.cpp
+++ b/scene/resources/rectangle_shape_2d.cpp
@@ -66,8 +66,8 @@ void RectangleShape2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "extents"), "set_extents", "get_extents");
}
-RectangleShape2D::RectangleShape2D()
- : Shape2D(Physics2DServer::get_singleton()->rectangle_shape_create()) {
+RectangleShape2D::RectangleShape2D() :
+ Shape2D(Physics2DServer::get_singleton()->rectangle_shape_create()) {
extents = Vector2(10, 10);
_update_shape();
diff --git a/scene/resources/segment_shape_2d.cpp b/scene/resources/segment_shape_2d.cpp
index 7c7ec0d112..e8ef448e23 100644
--- a/scene/resources/segment_shape_2d.cpp
+++ b/scene/resources/segment_shape_2d.cpp
@@ -86,8 +86,8 @@ void SegmentShape2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "b"), "set_b", "get_b");
}
-SegmentShape2D::SegmentShape2D()
- : Shape2D(Physics2DServer::get_singleton()->segment_shape_create()) {
+SegmentShape2D::SegmentShape2D() :
+ Shape2D(Physics2DServer::get_singleton()->segment_shape_create()) {
a = Vector2();
b = Vector2(0, 10);
@@ -145,8 +145,8 @@ real_t RayShape2D::get_length() const {
return length;
}
-RayShape2D::RayShape2D()
- : Shape2D(Physics2DServer::get_singleton()->ray_shape_create()) {
+RayShape2D::RayShape2D() :
+ Shape2D(Physics2DServer::get_singleton()->ray_shape_create()) {
length = 20;
_update_shape();
diff --git a/scene/resources/shape_line_2d.cpp b/scene/resources/shape_line_2d.cpp
index d046ce876c..512ff3bc56 100644
--- a/scene/resources/shape_line_2d.cpp
+++ b/scene/resources/shape_line_2d.cpp
@@ -95,8 +95,8 @@ void LineShape2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::REAL, "d"), "set_d", "get_d");
}
-LineShape2D::LineShape2D()
- : Shape2D(Physics2DServer::get_singleton()->line_shape_create()) {
+LineShape2D::LineShape2D() :
+ Shape2D(Physics2DServer::get_singleton()->line_shape_create()) {
normal = Vector2(0, -1);
d = 0;
diff --git a/scene/resources/sphere_shape.cpp b/scene/resources/sphere_shape.cpp
index 00203c2b4b..042988dcd3 100644
--- a/scene/resources/sphere_shape.cpp
+++ b/scene/resources/sphere_shape.cpp
@@ -80,8 +80,8 @@ void SphereShape::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::REAL, "radius", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_radius", "get_radius");
}
-SphereShape::SphereShape()
- : Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_SPHERE)) {
+SphereShape::SphereShape() :
+ Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_SPHERE)) {
set_radius(1.0);
}
diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp
index bf89e704bc..d8600e041d 100644
--- a/scene/resources/surface_tool.cpp
+++ b/scene/resources/surface_tool.cpp
@@ -101,6 +101,7 @@ void SurfaceTool::add_vertex(const Vector3 &p_vertex) {
vtx.color = last_color;
vtx.normal = last_normal;
vtx.uv = last_uv;
+ vtx.uv2 = last_uv2;
vtx.weights = last_weights;
vtx.bones = last_bones;
vtx.tangent = last_tangent.normal;
@@ -401,7 +402,7 @@ Array SurfaceTool::commit_to_arrays() {
return a;
}
-Ref<ArrayMesh> SurfaceTool::commit(const Ref<ArrayMesh> &p_existing) {
+Ref<ArrayMesh> SurfaceTool::commit(const Ref<ArrayMesh> &p_existing, uint32_t p_flags) {
Ref<ArrayMesh> mesh;
if (p_existing.is_valid())
@@ -418,7 +419,7 @@ Ref<ArrayMesh> SurfaceTool::commit(const Ref<ArrayMesh> &p_existing) {
Array a = commit_to_arrays();
- mesh->add_surface_from_arrays(primitive, a);
+ mesh->add_surface_from_arrays(primitive, a, Array(), p_flags);
if (material.is_valid())
mesh->surface_set_material(surface, material);
@@ -482,6 +483,113 @@ void SurfaceTool::_create_list(const Ref<Mesh> &p_existing, int p_surface, List<
_create_list_from_arrays(arr, r_vertex, r_index, lformat);
}
+Vector<SurfaceTool::Vertex> SurfaceTool::create_vertex_array_from_triangle_arrays(const Array &p_arrays) {
+
+ Vector<SurfaceTool::Vertex> ret;
+
+ PoolVector<Vector3> varr = p_arrays[VS::ARRAY_VERTEX];
+ PoolVector<Vector3> narr = p_arrays[VS::ARRAY_NORMAL];
+ PoolVector<float> tarr = p_arrays[VS::ARRAY_TANGENT];
+ PoolVector<Color> carr = p_arrays[VS::ARRAY_COLOR];
+ PoolVector<Vector2> uvarr = p_arrays[VS::ARRAY_TEX_UV];
+ PoolVector<Vector2> uv2arr = p_arrays[VS::ARRAY_TEX_UV2];
+ PoolVector<int> barr = p_arrays[VS::ARRAY_BONES];
+ PoolVector<float> warr = p_arrays[VS::ARRAY_WEIGHTS];
+
+ int vc = varr.size();
+
+ if (vc == 0)
+ return ret;
+ int lformat = 0;
+
+ PoolVector<Vector3>::Read rv;
+ if (varr.size()) {
+ lformat |= VS::ARRAY_FORMAT_VERTEX;
+ rv = varr.read();
+ }
+ PoolVector<Vector3>::Read rn;
+ if (narr.size()) {
+ lformat |= VS::ARRAY_FORMAT_NORMAL;
+ rn = narr.read();
+ }
+ PoolVector<float>::Read rt;
+ if (tarr.size()) {
+ lformat |= VS::ARRAY_FORMAT_TANGENT;
+ rt = tarr.read();
+ }
+ PoolVector<Color>::Read rc;
+ if (carr.size()) {
+ lformat |= VS::ARRAY_FORMAT_COLOR;
+ rc = carr.read();
+ }
+
+ PoolVector<Vector2>::Read ruv;
+ if (uvarr.size()) {
+ lformat |= VS::ARRAY_FORMAT_TEX_UV;
+ ruv = uvarr.read();
+ }
+
+ PoolVector<Vector2>::Read ruv2;
+ if (uv2arr.size()) {
+ lformat |= VS::ARRAY_FORMAT_TEX_UV2;
+ ruv2 = uv2arr.read();
+ }
+
+ PoolVector<int>::Read rb;
+ if (barr.size()) {
+ lformat |= VS::ARRAY_FORMAT_BONES;
+ rb = barr.read();
+ }
+
+ PoolVector<float>::Read rw;
+ if (warr.size()) {
+ lformat |= VS::ARRAY_FORMAT_WEIGHTS;
+ rw = warr.read();
+ }
+
+ for (int i = 0; i < vc; i++) {
+
+ Vertex v;
+ if (lformat & VS::ARRAY_FORMAT_VERTEX)
+ v.vertex = varr[i];
+ if (lformat & VS::ARRAY_FORMAT_NORMAL)
+ v.normal = narr[i];
+ if (lformat & VS::ARRAY_FORMAT_TANGENT) {
+ Plane p(tarr[i * 4 + 0], tarr[i * 4 + 1], tarr[i * 4 + 2], tarr[i * 4 + 3]);
+ v.tangent = p.normal;
+ v.binormal = p.normal.cross(v.tangent).normalized() * p.d;
+ }
+ if (lformat & VS::ARRAY_FORMAT_COLOR)
+ v.color = carr[i];
+ if (lformat & VS::ARRAY_FORMAT_TEX_UV)
+ v.uv = uvarr[i];
+ if (lformat & VS::ARRAY_FORMAT_TEX_UV2)
+ v.uv2 = uv2arr[i];
+ if (lformat & VS::ARRAY_FORMAT_BONES) {
+ Vector<int> b;
+ b.resize(4);
+ b[0] = barr[i * 4 + 0];
+ b[1] = barr[i * 4 + 1];
+ b[2] = barr[i * 4 + 2];
+ b[3] = barr[i * 4 + 3];
+ v.bones = b;
+ }
+ if (lformat & VS::ARRAY_FORMAT_WEIGHTS) {
+ Vector<float> w;
+ w.resize(4);
+ w[0] = warr[i * 4 + 0];
+ w[1] = warr[i * 4 + 1];
+ w[2] = warr[i * 4 + 2];
+ w[3] = warr[i * 4 + 3];
+ v.weights = w;
+ }
+
+ ret.push_back(v);
+ }
+
+ return ret;
+}
+
void SurfaceTool::_create_list_from_arrays(Array arr, List<Vertex> *r_vertex, List<int> *r_index, int &lformat) {
PoolVector<Vector3> varr = arr[VS::ARRAY_VERTEX];
@@ -882,7 +990,7 @@ void SurfaceTool::_bind_methods() {
ClassDB::bind_method(D_METHOD("create_from", "existing", "surface"), &SurfaceTool::create_from);
ClassDB::bind_method(D_METHOD("append_from", "existing", "surface", "transform"), &SurfaceTool::append_from);
- ClassDB::bind_method(D_METHOD("commit", "existing"), &SurfaceTool::commit, DEFVAL(Variant()));
+ ClassDB::bind_method(D_METHOD("commit", "existing", "flags"), &SurfaceTool::commit, DEFVAL(Variant()), DEFVAL(Mesh::ARRAY_COMPRESS_DEFAULT));
}
SurfaceTool::SurfaceTool() {
diff --git a/scene/resources/surface_tool.h b/scene/resources/surface_tool.h
index cdaac643de..b180ffe260 100644
--- a/scene/resources/surface_tool.h
+++ b/scene/resources/surface_tool.h
@@ -127,10 +127,11 @@ public:
List<Vertex> &get_vertex_array() { return vertex_array; }
void create_from_triangle_arrays(const Array &p_arrays);
+ static Vector<Vertex> create_vertex_array_from_triangle_arrays(const Array &p_arrays);
Array commit_to_arrays();
void create_from(const Ref<Mesh> &p_existing, int p_surface);
void append_from(const Ref<Mesh> &p_existing, int p_surface, const Transform &p_xform);
- Ref<ArrayMesh> commit(const Ref<ArrayMesh> &p_existing = Ref<ArrayMesh>());
+ Ref<ArrayMesh> commit(const Ref<ArrayMesh> &p_existing = Ref<ArrayMesh>(), uint32_t p_flags = Mesh::ARRAY_COMPRESS_DEFAULT);
SurfaceTool();
};
diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp
index 162edd0d1c..987d6c5f6a 100644
--- a/scene/resources/texture.cpp
+++ b/scene/resources/texture.cpp
@@ -1601,3 +1601,72 @@ int GradientTexture::get_width() const {
Ref<Image> GradientTexture::get_data() const {
return VisualServer::get_singleton()->texture_get_data(texture);
}
+
+//////////////////////////////////////
+
+void ProxyTexture::_bind_methods() {
+
+ ClassDB::bind_method(D_METHOD("set_base", "base"), &ProxyTexture::set_base);
+ ClassDB::bind_method(D_METHOD("get_base"), &ProxyTexture::get_base);
+
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "base", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_base", "get_base");
+}
+
+void ProxyTexture::set_base(const Ref<Texture> &p_texture) {
+
+ base = p_texture;
+ if (base.is_valid()) {
+ VS::get_singleton()->texture_set_proxy(proxy, base->get_rid());
+ } else {
+ VS::get_singleton()->texture_set_proxy(proxy, RID());
+ }
+}
+
+Ref<Texture> ProxyTexture::get_base() const {
+
+ return base;
+}
+
+int ProxyTexture::get_width() const {
+
+ if (base.is_valid())
+ return base->get_width();
+ return 1;
+}
+int ProxyTexture::get_height() const {
+
+ if (base.is_valid())
+ return base->get_height();
+ return 1;
+}
+RID ProxyTexture::get_rid() const {
+
+ return proxy;
+}
+
+bool ProxyTexture::has_alpha() const {
+
+ if (base.is_valid())
+ return base->has_alpha();
+ return false;
+}
+
+void ProxyTexture::set_flags(uint32_t p_flags) {
+}
+
+uint32_t ProxyTexture::get_flags() const {
+
+ if (base.is_valid())
+ return base->get_flags();
+ return 0;
+}
+
+ProxyTexture::ProxyTexture() {
+
+ proxy = VS::get_singleton()->texture_create();
+}
+
+ProxyTexture::~ProxyTexture() {
+
+ VS::get_singleton()->free(proxy);
+}
diff --git a/scene/resources/texture.h b/scene/resources/texture.h
index ee54156647..76c0195ef9 100644
--- a/scene/resources/texture.h
+++ b/scene/resources/texture.h
@@ -493,4 +493,31 @@ public:
virtual ~GradientTexture();
};
+class ProxyTexture : public Texture {
+ GDCLASS(ProxyTexture, Texture)
+
+private:
+ RID proxy;
+ Ref<Texture> base;
+
+protected:
+ static void _bind_methods();
+
+public:
+ void set_base(const Ref<Texture> &p_texture);
+ Ref<Texture> get_base() const;
+
+ virtual int get_width() const;
+ virtual int get_height() const;
+ virtual RID get_rid() const;
+
+ virtual bool has_alpha() const;
+
+ virtual void set_flags(uint32_t p_flags);
+ virtual uint32_t get_flags() const;
+
+ ProxyTexture();
+ ~ProxyTexture();
+};
+
#endif
diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp
index 29ac7852bf..1a46353fe3 100644
--- a/scene/resources/tile_set.cpp
+++ b/scene/resources/tile_set.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "tile_set.h"
+#include "array.h"
bool TileSet::_set(const StringName &p_name, const Variant &p_value) {
@@ -55,7 +56,74 @@ bool TileSet::_set(const StringName &p_name, const Variant &p_value) {
tile_set_modulate(id, p_value);
else if (what == "region")
tile_set_region(id, p_value);
- else if (what == "shape")
+ else if (what == "is_autotile")
+ tile_set_is_autotile(id, p_value);
+ else if (what.left(9) == "autotile/") {
+ what = what.right(9);
+ if (what == "bitmask_mode")
+ autotile_set_bitmask_mode(id, (BitmaskMode)((int)p_value));
+ else if (what == "icon_coordinate")
+ autotile_set_icon_coordinate(id, p_value);
+ else if (what == "tile_size")
+ autotile_set_size(id, p_value);
+ else if (what == "spacing")
+ autotile_set_spacing(id, p_value);
+ else if (what == "bitmask_flags") {
+ tile_map[id].autotile_data.flags.clear();
+ if (p_value.is_array()) {
+ Array p = p_value;
+ Vector2 last_coord;
+ while (p.size() > 0) {
+ if (p[0].get_type() == Variant::VECTOR2) {
+ last_coord = p[0];
+ } else if (p[0].get_type() == Variant::INT) {
+ autotile_set_bitmask(id, last_coord, p[0]);
+ }
+ p.pop_front();
+ }
+ }
+ } else if (what == "occluder_map") {
+ tile_map[id].autotile_data.occluder_map.clear();
+ Array p = p_value;
+ Vector2 last_coord;
+ while (p.size() > 0) {
+ if (p[0].get_type() == Variant::VECTOR2) {
+ last_coord = p[0];
+ } else if (p[0].get_type() == Variant::OBJECT) {
+ autotile_set_light_occluder(id, p[0], last_coord);
+ }
+ p.pop_front();
+ }
+ } else if (what == "navpoly_map") {
+ tile_map[id].autotile_data.navpoly_map.clear();
+ Array p = p_value;
+ Vector2 last_coord;
+ while (p.size() > 0) {
+ if (p[0].get_type() == Variant::VECTOR2) {
+ last_coord = p[0];
+ } else if (p[0].get_type() == Variant::OBJECT) {
+ autotile_set_navigation_polygon(id, p[0], last_coord);
+ }
+ p.pop_front();
+ }
+ } else if (what == "priority_map") {
+ tile_map[id].autotile_data.priority_map.clear();
+ Array p = p_value;
+ Vector3 val;
+ Vector2 v;
+ int priority;
+ while (p.size() > 0) {
+ val = p[0];
+ if (val.z > 1) {
+ v.x = val.x;
+ v.y = val.y;
+ priority = (int)val.z;
+ tile_map[id].autotile_data.priority_map[v] = priority;
+ }
+ p.pop_front();
+ }
+ }
+ } else if (what == "shape")
tile_set_shape(id, 0, p_value);
else if (what == "shape_offset")
tile_set_shape_offset(id, 0, p_value);
@@ -105,7 +173,54 @@ bool TileSet::_get(const StringName &p_name, Variant &r_ret) const {
r_ret = tile_get_modulate(id);
else if (what == "region")
r_ret = tile_get_region(id);
- else if (what == "shape")
+ else if (what == "is_autotile")
+ r_ret = tile_get_is_autotile(id);
+ else if (what.left(9) == "autotile/") {
+ what = what.right(9);
+ if (what == "bitmask_mode")
+ r_ret = autotile_get_bitmask_mode(id);
+ else if (what == "icon_coordinate")
+ r_ret = autotile_get_icon_coordinate(id);
+ else if (what == "tile_size")
+ r_ret = autotile_get_size(id);
+ else if (what == "spacing")
+ r_ret = autotile_get_spacing(id);
+ else if (what == "bitmask_flags") {
+ Array p;
+ for (Map<Vector2, uint16_t>::Element *E = tile_map[id].autotile_data.flags.front(); E; E = E->next()) {
+ p.push_back(E->key());
+ p.push_back(E->value());
+ }
+ r_ret = p;
+ } else if (what == "occluder_map") {
+ Array p;
+ for (Map<Vector2, Ref<OccluderPolygon2D> >::Element *E = tile_map[id].autotile_data.occluder_map.front(); E; E = E->next()) {
+ p.push_back(E->key());
+ p.push_back(E->value());
+ }
+ r_ret = p;
+ } else if (what == "navpoly_map") {
+ Array p;
+ for (Map<Vector2, Ref<NavigationPolygon> >::Element *E = tile_map[id].autotile_data.navpoly_map.front(); E; E = E->next()) {
+ p.push_back(E->key());
+ p.push_back(E->value());
+ }
+ r_ret = p;
+ } else if (what == "priority_map") {
+ Array p;
+ Vector3 v;
+ for (Map<Vector2, int>::Element *E = tile_map[id].autotile_data.priority_map.front(); E; E = E->next()) {
+ if (E->value() > 1) {
+ //Dont save default value
+ v.x = E->key().x;
+ v.y = E->key().y;
+ v.z = E->value();
+ p.push_back(v);
+ }
+ }
+ r_ret = p;
+ }
+ } else if (what == "shape")
r_ret = tile_get_shape(id, 0);
else if (what == "shape_offset")
r_ret = tile_get_shape_offset(id, 0);
@@ -142,6 +257,17 @@ void TileSet::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::OBJECT, pre + "material", PROPERTY_HINT_RESOURCE_TYPE, "ShaderMaterial"));
p_list->push_back(PropertyInfo(Variant::COLOR, pre + "modulate"));
p_list->push_back(PropertyInfo(Variant::RECT2, pre + "region"));
+ p_list->push_back(PropertyInfo(Variant::BOOL, pre + "is_autotile", PROPERTY_HINT_NONE, ""));
+ if (tile_get_is_autotile(id)) {
+ p_list->push_back(PropertyInfo(Variant::INT, pre + "autotile/bitmask_mode", PROPERTY_HINT_ENUM, "2X2,3X3", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2, pre + "autotile/icon_coordinate", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2, pre + "autotile/tile_size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::INT, pre + "autotile/spacing", PROPERTY_HINT_RANGE, "0,256,1", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/bitmask_flags", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/occluder_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/navpoly_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/priority_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
+ }
p_list->push_back(PropertyInfo(Variant::VECTOR2, pre + "occluder_offset"));
p_list->push_back(PropertyInfo(Variant::OBJECT, pre + "occluder", PROPERTY_HINT_RESOURCE_TYPE, "OccluderPolygon2D"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, pre + "navigation_offset"));
@@ -158,10 +284,25 @@ void TileSet::create_tile(int p_id) {
ERR_FAIL_COND(tile_map.has(p_id));
tile_map[p_id] = TileData();
+ tile_map[p_id].autotile_data = AutotileData();
+ _change_notify("");
+ emit_changed();
+}
+
+void TileSet::autotile_set_bitmask_mode(int p_id, BitmaskMode p_mode) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ tile_map[p_id].autotile_data.bitmask_mode = p_mode;
_change_notify("");
emit_changed();
}
+TileSet::BitmaskMode TileSet::autotile_get_bitmask_mode(int p_id) const {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), BITMASK_2X2);
+ return tile_map[p_id].autotile_data.bitmask_mode;
+}
+
void TileSet::tile_set_texture(int p_id, const Ref<Texture> &p_texture) {
ERR_FAIL_COND(!tile_map.has(p_id));
@@ -240,6 +381,152 @@ Rect2 TileSet::tile_get_region(int p_id) const {
return tile_map[p_id].region;
}
+void TileSet::tile_set_is_autotile(int p_id, bool p_is_autotile) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ tile_map[p_id].is_autotile = p_is_autotile;
+ _change_notify("");
+ emit_changed();
+}
+
+bool TileSet::tile_get_is_autotile(int p_id) const {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), false);
+ return tile_map[p_id].is_autotile;
+}
+
+void TileSet::autotile_set_icon_coordinate(int p_id, Vector2 coord) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ tile_map[p_id].autotile_data.icon_coord = coord;
+ emit_changed();
+}
+
+Vector2 TileSet::autotile_get_icon_coordinate(int p_id) const {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), Vector2());
+ return tile_map[p_id].autotile_data.icon_coord;
+}
+
+void TileSet::autotile_set_spacing(int p_id, int p_spacing) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ ERR_FAIL_COND(p_spacing < 0);
+ tile_map[p_id].autotile_data.spacing = p_spacing;
+ emit_changed();
+}
+
+int TileSet::autotile_get_spacing(int p_id) const {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), 0);
+ return tile_map[p_id].autotile_data.spacing;
+}
+
+void TileSet::autotile_set_size(int p_id, Size2 p_size) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ ERR_FAIL_COND(p_size.x <= 0 || p_size.y <= 0);
+ tile_map[p_id].autotile_data.size = p_size;
+}
+
+Size2 TileSet::autotile_get_size(int p_id) const {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), Size2());
+ return tile_map[p_id].autotile_data.size;
+}
+
+void TileSet::autotile_clear_bitmask_map(int p_id) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ tile_map[p_id].autotile_data.flags.clear();
+}
+
+void TileSet::autotile_set_subtile_priority(int p_id, const Vector2 &p_coord, int p_priority) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ ERR_FAIL_COND(p_priority <= 0);
+ tile_map[p_id].autotile_data.priority_map[p_coord] = p_priority;
+}
+
+int TileSet::autotile_get_subtile_priority(int p_id, const Vector2 &p_coord) {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), 1);
+ if (tile_map[p_id].autotile_data.priority_map.has(p_coord)) {
+ return tile_map[p_id].autotile_data.priority_map[p_coord];
+ }
+ //When not custom priority set return the default value
+ return 1;
+}
+
+const Map<Vector2, int> &TileSet::autotile_get_priority_map(int p_id) const {
+
+ static Map<Vector2, int> dummy;
+ ERR_FAIL_COND_V(!tile_map.has(p_id), dummy);
+ return tile_map[p_id].autotile_data.priority_map;
+}
+
+void TileSet::autotile_set_bitmask(int p_id, Vector2 p_coord, uint16_t p_flag) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ if (p_flag == 0) {
+ if (tile_map[p_id].autotile_data.flags.has(p_coord))
+ tile_map[p_id].autotile_data.flags.erase(p_coord);
+ } else {
+ tile_map[p_id].autotile_data.flags[p_coord] = p_flag;
+ }
+}
+
+uint16_t TileSet::autotile_get_bitmask(int p_id, Vector2 p_coord) {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), 0);
+ if (!tile_map[p_id].autotile_data.flags.has(p_coord)) {
+ return 0;
+ }
+ return tile_map[p_id].autotile_data.flags[p_coord];
+}
+
+const Map<Vector2, uint16_t> &TileSet::autotile_get_bitmask_map(int p_id) {
+
+ static Map<Vector2, uint16_t> dummy;
+ ERR_FAIL_COND_V(!tile_map.has(p_id), dummy);
+ return tile_map[p_id].autotile_data.flags;
+}
+
+Vector2 TileSet::autotile_get_subtile_for_bitmask(int p_id, uint16_t p_bitmask, const Node *p_tilemap_node, const Vector2 &p_tile_location) {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), Vector2());
+ //First try to forward selection to script
+ if (p_tilemap_node->get_class_name() == "TileMap") {
+ if (get_script_instance() != NULL) {
+ if (get_script_instance()->has_method("_forward_subtile_selection")) {
+ Variant ret = get_script_instance()->call("_forward_subtile_selection", p_id, p_bitmask, p_tilemap_node, p_tile_location);
+ if (ret.get_type() == Variant::VECTOR2) {
+ return ret;
+ }
+ }
+ }
+ }
+
+ List<Vector2> coords;
+ uint16_t mask;
+ for (Map<Vector2, uint16_t>::Element *E = tile_map[p_id].autotile_data.flags.front(); E; E = E->next()) {
+ mask = E->get();
+ if (tile_map[p_id].autotile_data.bitmask_mode == BITMASK_2X2) {
+ mask &= (BIND_BOTTOMLEFT | BIND_BOTTOMRIGHT | BIND_TOPLEFT | BIND_TOPRIGHT);
+ }
+ if (mask == p_bitmask) {
+ for (int i = 0; i < autotile_get_subtile_priority(p_id, E->key()); i++) {
+ coords.push_back(E->key());
+ }
+ }
+ }
+ if (coords.size() == 0) {
+ return autotile_get_icon_coordinate(p_id);
+ } else {
+ return coords[Math::random(0, (int)coords.size())];
+ }
+}
+
void TileSet::tile_set_name(int p_id, const String &p_name) {
ERR_FAIL_COND(!tile_map.has(p_id));
@@ -257,7 +544,7 @@ void TileSet::tile_clear_shapes(int p_id) {
tile_map[p_id].shapes_data.clear();
}
-void TileSet::tile_add_shape(int p_id, const Ref<Shape2D> &p_shape, const Transform2D &p_transform, bool p_one_way) {
+void TileSet::tile_add_shape(int p_id, const Ref<Shape2D> &p_shape, const Transform2D &p_transform, bool p_one_way, const Vector2 &p_autotile_coord) {
ERR_FAIL_COND(!tile_map.has(p_id));
@@ -265,15 +552,17 @@ void TileSet::tile_add_shape(int p_id, const Ref<Shape2D> &p_shape, const Transf
new_data.shape = p_shape;
new_data.shape_transform = p_transform;
new_data.one_way_collision = p_one_way;
+ new_data.autotile_coord = p_autotile_coord;
tile_map[p_id].shapes_data.push_back(new_data);
-};
+}
+
int TileSet::tile_get_shape_count(int p_id) const {
ERR_FAIL_COND_V(!tile_map.has(p_id), 0);
return tile_map[p_id].shapes_data.size();
-};
+}
void TileSet::tile_set_shape(int p_id, int p_shape_id, const Ref<Shape2D> &p_shape) {
@@ -351,6 +640,26 @@ Ref<OccluderPolygon2D> TileSet::tile_get_light_occluder(int p_id) const {
return tile_map[p_id].occluder;
}
+void TileSet::autotile_set_light_occluder(int p_id, const Ref<OccluderPolygon2D> &p_light_occluder, const Vector2 &p_coord) {
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ if (p_light_occluder.is_null()) {
+ if (tile_map[p_id].autotile_data.occluder_map.has(p_coord)) {
+ tile_map[p_id].autotile_data.occluder_map.erase(p_coord);
+ }
+ } else {
+ tile_map[p_id].autotile_data.occluder_map[p_coord] = p_light_occluder;
+ }
+}
+
+Ref<OccluderPolygon2D> TileSet::autotile_get_light_occluder(int p_id, const Vector2 &p_coord) const {
+ ERR_FAIL_COND_V(!tile_map.has(p_id), Ref<OccluderPolygon2D>());
+ if (!tile_map[p_id].autotile_data.occluder_map.has(p_coord)) {
+ return Ref<OccluderPolygon2D>();
+ } else {
+ return tile_map[p_id].autotile_data.occluder_map[p_coord];
+ }
+}
+
void TileSet::tile_set_navigation_polygon_offset(int p_id, const Vector2 &p_offset) {
ERR_FAIL_COND(!tile_map.has(p_id));
@@ -358,6 +667,7 @@ void TileSet::tile_set_navigation_polygon_offset(int p_id, const Vector2 &p_offs
}
Vector2 TileSet::tile_get_navigation_polygon_offset(int p_id) const {
+
ERR_FAIL_COND_V(!tile_map.has(p_id), Vector2());
return tile_map[p_id].navigation_polygon_offset;
}
@@ -374,6 +684,42 @@ Ref<NavigationPolygon> TileSet::tile_get_navigation_polygon(int p_id) const {
return tile_map[p_id].navigation_polygon;
}
+const Map<Vector2, Ref<OccluderPolygon2D> > &TileSet::autotile_get_light_oclusion_map(int p_id) const {
+
+ static Map<Vector2, Ref<OccluderPolygon2D> > dummy;
+ ERR_FAIL_COND_V(!tile_map.has(p_id), dummy);
+ return tile_map[p_id].autotile_data.occluder_map;
+}
+
+void TileSet::autotile_set_navigation_polygon(int p_id, const Ref<NavigationPolygon> &p_navigation_polygon, const Vector2 &p_coord) {
+
+ ERR_FAIL_COND(!tile_map.has(p_id));
+ if (p_navigation_polygon.is_null()) {
+ if (tile_map[p_id].autotile_data.navpoly_map.has(p_coord)) {
+ tile_map[p_id].autotile_data.navpoly_map.erase(p_coord);
+ }
+ } else {
+ tile_map[p_id].autotile_data.navpoly_map[p_coord] = p_navigation_polygon;
+ }
+}
+
+Ref<NavigationPolygon> TileSet::autotile_get_navigation_polygon(int p_id, const Vector2 &p_coord) const {
+
+ ERR_FAIL_COND_V(!tile_map.has(p_id), Ref<NavigationPolygon>());
+ if (!tile_map[p_id].autotile_data.navpoly_map.has(p_coord)) {
+ return Ref<NavigationPolygon>();
+ } else {
+ return tile_map[p_id].autotile_data.navpoly_map[p_coord];
+ }
+}
+
+const Map<Vector2, Ref<NavigationPolygon> > &TileSet::autotile_get_navigation_map(int p_id) const {
+
+ static Map<Vector2, Ref<NavigationPolygon> > dummy;
+ ERR_FAIL_COND_V(!tile_map.has(p_id), dummy);
+ return tile_map[p_id].autotile_data.navpoly_map;
+}
+
void TileSet::tile_set_occluder_offset(int p_id, const Vector2 &p_offset) {
ERR_FAIL_COND(!tile_map.has(p_id));
@@ -381,6 +727,7 @@ void TileSet::tile_set_occluder_offset(int p_id, const Vector2 &p_offset) {
}
Vector2 TileSet::tile_get_occluder_offset(int p_id) const {
+
ERR_FAIL_COND_V(!tile_map.has(p_id), Vector2());
return tile_map[p_id].occluder_offset;
}
@@ -405,6 +752,7 @@ void TileSet::_tile_set_shapes(int p_id, const Array &p_shapes) {
Vector<ShapeData> shapes_data;
Transform2D default_transform = tile_get_shape_transform(p_id, 0);
bool default_one_way = tile_get_shape_one_way(p_id, 0);
+ Vector2 default_autotile_coord = Vector2();
for (int i = 0; i < p_shapes.size(); i++) {
ShapeData s = ShapeData();
@@ -415,6 +763,7 @@ void TileSet::_tile_set_shapes(int p_id, const Array &p_shapes) {
s.shape = shape;
s.shape_transform = default_transform;
s.one_way_collision = default_one_way;
+ s.autotile_coord = default_autotile_coord;
} else if (p_shapes[i].get_type() == Variant::DICTIONARY) {
Dictionary d = p_shapes[i];
@@ -435,6 +784,11 @@ void TileSet::_tile_set_shapes(int p_id, const Array &p_shapes) {
else
s.one_way_collision = default_one_way;
+ if (d.has("autotile_coord") && d["autotile_coord"].get_type() == Variant::VECTOR2)
+ s.autotile_coord = d["autotile_coord"];
+ else
+ s.autotile_coord = default_autotile_coord;
+
} else {
ERR_EXPLAIN("Expected an array of objects or dictionaries for tile_set_shapes");
ERR_CONTINUE(true);
@@ -457,6 +811,7 @@ Array TileSet::_tile_get_shapes(int p_id) const {
shape_data["shape"] = data[i].shape;
shape_data["shape_transform"] = data[i].shape_transform;
shape_data["one_way"] = data[i].one_way_collision;
+ shape_data["autotile_coord"] = data[i].autotile_coord;
arr.push_back(shape_data);
}
@@ -487,6 +842,21 @@ bool TileSet::has_tile(int p_id) const {
return tile_map.has(p_id);
}
+bool TileSet::is_tile_bound(int p_drawn_id, int p_neighbor_id) {
+
+ if (p_drawn_id == p_neighbor_id) {
+ return true;
+ } else if (get_script_instance() != NULL) {
+ if (get_script_instance()->has_method("_is_tile_bound")) {
+ Variant ret = get_script_instance()->call("_is_tile_bound", p_drawn_id, p_neighbor_id);
+ if (ret.get_type() == Variant::BOOL) {
+ return ret;
+ }
+ }
+ }
+ return false;
+}
+
void TileSet::remove_tile(int p_id) {
ERR_FAIL_COND(!tile_map.has(p_id));
@@ -523,6 +893,8 @@ void TileSet::clear() {
void TileSet::_bind_methods() {
ClassDB::bind_method(D_METHOD("create_tile", "id"), &TileSet::create_tile);
+ ClassDB::bind_method(D_METHOD("autotile_set_bitmask_mode", "mode"), &TileSet::autotile_set_bitmask_mode);
+ ClassDB::bind_method(D_METHOD("autotile_get_bitmask_mode"), &TileSet::autotile_get_bitmask_mode);
ClassDB::bind_method(D_METHOD("tile_set_name", "id", "name"), &TileSet::tile_set_name);
ClassDB::bind_method(D_METHOD("tile_get_name", "id"), &TileSet::tile_get_name);
ClassDB::bind_method(D_METHOD("tile_set_texture", "id", "texture"), &TileSet::tile_set_texture);
@@ -541,7 +913,7 @@ void TileSet::_bind_methods() {
ClassDB::bind_method(D_METHOD("tile_get_shape_transform", "id", "shape_id"), &TileSet::tile_get_shape_transform);
ClassDB::bind_method(D_METHOD("tile_set_shape_one_way", "id", "shape_id", "one_way"), &TileSet::tile_set_shape_one_way);
ClassDB::bind_method(D_METHOD("tile_get_shape_one_way", "id", "shape_id"), &TileSet::tile_get_shape_one_way);
- ClassDB::bind_method(D_METHOD("tile_add_shape", "id", "shape", "shape_transform", "one_way"), &TileSet::tile_add_shape, DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("tile_add_shape", "id", "shape", "shape_transform", "one_way", "autotile_coord"), &TileSet::tile_add_shape, DEFVAL(false), DEFVAL(Vector2()));
ClassDB::bind_method(D_METHOD("tile_get_shape_count", "id"), &TileSet::tile_get_shape_count);
ClassDB::bind_method(D_METHOD("tile_set_shapes", "id", "shapes"), &TileSet::_tile_set_shapes);
ClassDB::bind_method(D_METHOD("tile_get_shapes", "id"), &TileSet::_tile_get_shapes);
@@ -559,6 +931,21 @@ void TileSet::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_last_unused_tile_id"), &TileSet::get_last_unused_tile_id);
ClassDB::bind_method(D_METHOD("find_tile_by_name", "name"), &TileSet::find_tile_by_name);
ClassDB::bind_method(D_METHOD("get_tiles_ids"), &TileSet::_get_tiles_ids);
+
+ BIND_VMETHOD(MethodInfo("_is_tile_bound", PropertyInfo(Variant::INT, "drawn_id"), PropertyInfo(Variant::INT, "neighbor_id")));
+ BIND_VMETHOD(MethodInfo("_forward_subtile_selection", PropertyInfo(Variant::INT, "autotile_id"), PropertyInfo(Variant::INT, "bitmask"), PropertyInfo(Variant::OBJECT, "tilemap", PROPERTY_HINT_NONE, "TileMap"), PropertyInfo(Variant::VECTOR2, "tile_location")));
+
+ BIND_ENUM_CONSTANT(BITMASK_2X2);
+ BIND_ENUM_CONSTANT(BITMASK_3X3);
+
+ BIND_ENUM_CONSTANT(BIND_TOPLEFT);
+ BIND_ENUM_CONSTANT(BIND_TOP);
+ BIND_ENUM_CONSTANT(BIND_TOPRIGHT);
+ BIND_ENUM_CONSTANT(BIND_LEFT);
+ BIND_ENUM_CONSTANT(BIND_RIGHT);
+ BIND_ENUM_CONSTANT(BIND_BOTTOMLEFT);
+ BIND_ENUM_CONSTANT(BIND_BOTTOM);
+ BIND_ENUM_CONSTANT(BIND_BOTTOMRIGHT);
}
TileSet::TileSet() {
diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h
index 3ef3f00cef..deac583f62 100644
--- a/scene/resources/tile_set.h
+++ b/scene/resources/tile_set.h
@@ -30,6 +30,7 @@
#ifndef TILE_SET_H
#define TILE_SET_H
+#include "core/array.h"
#include "resource.h"
#include "scene/2d/light_occluder_2d.h"
#include "scene/2d/navigation_polygon.h"
@@ -44,6 +45,7 @@ public:
struct ShapeData {
Ref<Shape2D> shape;
Transform2D shape_transform;
+ Vector2 autotile_coord;
bool one_way_collision;
ShapeData() {
@@ -51,6 +53,41 @@ public:
}
};
+ enum BitmaskMode {
+ BITMASK_2X2,
+ BITMASK_3X3
+ };
+
+ enum AutotileBindings {
+ BIND_TOPLEFT = 1,
+ BIND_TOP = 2,
+ BIND_TOPRIGHT = 4,
+ BIND_LEFT = 8,
+ BIND_CENTER = 16,
+ BIND_RIGHT = 32,
+ BIND_BOTTOMLEFT = 64,
+ BIND_BOTTOM = 128,
+ BIND_BOTTOMRIGHT = 256
+ };
+
+ struct AutotileData {
+ BitmaskMode bitmask_mode;
+ int spacing;
+ Size2 size;
+ Vector2 icon_coord;
+ Map<Vector2, uint16_t> flags;
+ Map<Vector2, Ref<OccluderPolygon2D> > occluder_map;
+ Map<Vector2, Ref<NavigationPolygon> > navpoly_map;
+ Map<Vector2, int> priority_map;
+
+ // Default size to prevent invalid value
+ explicit AutotileData() :
+ size(64, 64),
+ icon_coord(0, 0) {
+ bitmask_mode = BITMASK_2X2;
+ }
+ };
+
private:
struct TileData {
@@ -66,10 +103,13 @@ private:
Ref<NavigationPolygon> navigation_polygon;
Ref<ShaderMaterial> material;
Color modulate;
+ bool is_autotile;
+ AutotileData autotile_data;
// Default modulate for back-compat
- explicit TileData()
- : modulate(1, 1, 1) {}
+ explicit TileData() :
+ modulate(1, 1, 1),
+ is_autotile(false) {}
};
Map<int, TileData> tile_map;
@@ -87,6 +127,9 @@ protected:
public:
void create_tile(int p_id);
+ void autotile_set_bitmask_mode(int p_id, BitmaskMode p_mode);
+ BitmaskMode autotile_get_bitmask_mode(int p_id) const;
+
void tile_set_name(int p_id, const String &p_name);
String tile_get_name(int p_id) const;
@@ -102,6 +145,28 @@ public:
void tile_set_region(int p_id, const Rect2 &p_region);
Rect2 tile_get_region(int p_id) const;
+ void tile_set_is_autotile(int p_id, bool p_is_autotile);
+ bool tile_get_is_autotile(int p_id) const;
+
+ void autotile_set_icon_coordinate(int p_id, Vector2 coord);
+ Vector2 autotile_get_icon_coordinate(int p_id) const;
+
+ void autotile_set_spacing(int p_id, int p_spacing);
+ int autotile_get_spacing(int p_id) const;
+
+ void autotile_set_size(int p_id, Size2 p_size);
+ Size2 autotile_get_size(int p_id) const;
+
+ void autotile_clear_bitmask_map(int p_id);
+ void autotile_set_subtile_priority(int p_id, const Vector2 &p_coord, int p_priority);
+ int autotile_get_subtile_priority(int p_id, const Vector2 &p_coord);
+ const Map<Vector2, int> &autotile_get_priority_map(int p_id) const;
+
+ void autotile_set_bitmask(int p_id, Vector2 p_coord, uint16_t p_flag);
+ uint16_t autotile_get_bitmask(int p_id, Vector2 p_coord);
+ const Map<Vector2, uint16_t> &autotile_get_bitmask_map(int p_id);
+ Vector2 autotile_get_subtile_for_bitmask(int p_id, uint16_t p_bitmask, const Node *p_tilemap_node = NULL, const Vector2 &p_tile_location = Vector2());
+
void tile_set_shape(int p_id, int p_shape_id, const Ref<Shape2D> &p_shape);
Ref<Shape2D> tile_get_shape(int p_id, int p_shape_id) const;
@@ -115,7 +180,7 @@ public:
bool tile_get_shape_one_way(int p_id, int p_shape_id) const;
void tile_clear_shapes(int p_id);
- void tile_add_shape(int p_id, const Ref<Shape2D> &p_shape, const Transform2D &p_transform, bool p_one_way = false);
+ void tile_add_shape(int p_id, const Ref<Shape2D> &p_shape, const Transform2D &p_transform, bool p_one_way = false, const Vector2 &p_autotile_coord = Vector2());
int tile_get_shape_count(int p_id) const;
void tile_set_shapes(int p_id, const Vector<ShapeData> &p_shapes);
@@ -133,16 +198,26 @@ public:
void tile_set_light_occluder(int p_id, const Ref<OccluderPolygon2D> &p_light_occluder);
Ref<OccluderPolygon2D> tile_get_light_occluder(int p_id) const;
+ void autotile_set_light_occluder(int p_id, const Ref<OccluderPolygon2D> &p_light_occluder, const Vector2 &p_coord);
+ Ref<OccluderPolygon2D> autotile_get_light_occluder(int p_id, const Vector2 &p_coord) const;
+ const Map<Vector2, Ref<OccluderPolygon2D> > &autotile_get_light_oclusion_map(int p_id) const;
+
void tile_set_navigation_polygon_offset(int p_id, const Vector2 &p_offset);
Vector2 tile_get_navigation_polygon_offset(int p_id) const;
void tile_set_navigation_polygon(int p_id, const Ref<NavigationPolygon> &p_navigation_polygon);
Ref<NavigationPolygon> tile_get_navigation_polygon(int p_id) const;
+ void autotile_set_navigation_polygon(int p_id, const Ref<NavigationPolygon> &p_navigation_polygon, const Vector2 &p_coord);
+ Ref<NavigationPolygon> autotile_get_navigation_polygon(int p_id, const Vector2 &p_coord) const;
+ const Map<Vector2, Ref<NavigationPolygon> > &autotile_get_navigation_map(int p_id) const;
+
void remove_tile(int p_id);
bool has_tile(int p_id) const;
+ bool is_tile_bound(int p_drawn_id, int p_neighbor_id);
+
int find_tile_by_name(const String &p_name) const;
void get_tile_list(List<int> *p_tiles) const;
@@ -153,4 +228,7 @@ public:
TileSet();
};
+VARIANT_ENUM_CAST(TileSet::AutotileBindings);
+VARIANT_ENUM_CAST(TileSet::BitmaskMode);
+
#endif // TILE_SET_H
diff --git a/scene/resources/world.cpp b/scene/resources/world.cpp
index 86b32a5cdd..c63ba24cbd 100644
--- a/scene/resources/world.cpp
+++ b/scene/resources/world.cpp
@@ -159,9 +159,9 @@ struct SpatialIndexer {
Vector<Plane> planes = c->get_frustum();
- int culled = octree.cull_convex(planes, cull.ptr(), cull.size());
+ int culled = octree.cull_convex(planes, cull.ptrw(), cull.size());
- VisibilityNotifier **ptr = cull.ptr();
+ VisibilityNotifier **ptr = cull.ptrw();
List<VisibilityNotifier *> added;
List<VisibilityNotifier *> removed;
diff --git a/servers/SCsub b/servers/SCsub
index df55010a36..252a18ffd3 100644
--- a/servers/SCsub
+++ b/servers/SCsub
@@ -13,6 +13,6 @@ SConscript('physics_2d/SCsub')
SConscript('visual/SCsub')
SConscript('audio/SCsub')
-lib = env.Library("servers", env.servers_sources)
+lib = env.add_library("servers", env.servers_sources)
env.Prepend(LIBS=[lib])
diff --git a/servers/audio/effects/audio_effect_chorus.cpp b/servers/audio/effects/audio_effect_chorus.cpp
index 32631beb2c..cfcad24bb3 100644
--- a/servers/audio/effects/audio_effect_chorus.cpp
+++ b/servers/audio/effects/audio_effect_chorus.cpp
@@ -68,7 +68,7 @@ void AudioEffectChorusInstance::_process_chunk(const AudioFrame *p_src_frames, A
unsigned int local_rb_pos = buffer_pos;
AudioFrame *dst_buff = p_dst_frames;
- AudioFrame *rb_buff = audio_buffer.ptr();
+ AudioFrame *rb_buff = audio_buffer.ptrw();
double delay_msec = v.delay;
unsigned int delay_frames = Math::fast_ftoi((delay_msec / 1000.0) * mix_rate);
diff --git a/servers/audio/effects/audio_effect_delay.cpp b/servers/audio/effects/audio_effect_delay.cpp
index b8a8603546..59b6a8da2a 100644
--- a/servers/audio/effects/audio_effect_delay.cpp
+++ b/servers/audio/effects/audio_effect_delay.cpp
@@ -82,8 +82,8 @@ void AudioEffectDelayInstance::_process_chunk(const AudioFrame *p_src_frames, Au
const AudioFrame *src = p_src_frames;
AudioFrame *dst = p_dst_frames;
- AudioFrame *rb_buf = ring_buffer.ptr();
- AudioFrame *fb_buf = feedback_buffer.ptr();
+ AudioFrame *rb_buf = ring_buffer.ptrw();
+ AudioFrame *fb_buf = feedback_buffer.ptrw();
for (int i = 0; i < p_frame_count; i++) {
diff --git a/servers/audio/effects/audio_effect_eq.cpp b/servers/audio/effects/audio_effect_eq.cpp
index 15905e3e0e..dc0e00e9a3 100644
--- a/servers/audio/effects/audio_effect_eq.cpp
+++ b/servers/audio/effects/audio_effect_eq.cpp
@@ -33,9 +33,9 @@
void AudioEffectEQInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) {
int band_count = bands[0].size();
- EQ::BandProcess *proc_l = bands[0].ptr();
- EQ::BandProcess *proc_r = bands[1].ptr();
- float *bgain = gains.ptr();
+ EQ::BandProcess *proc_l = bands[0].ptrw();
+ EQ::BandProcess *proc_r = bands[1].ptrw();
+ float *bgain = gains.ptrw();
for (int i = 0; i < band_count; i++) {
bgain[i] = Math::db2linear(base->gain[i]);
}
diff --git a/servers/audio/effects/audio_effect_eq.h b/servers/audio/effects/audio_effect_eq.h
index 440f46c0c2..5d0c3d9729 100644
--- a/servers/audio/effects/audio_effect_eq.h
+++ b/servers/audio/effects/audio_effect_eq.h
@@ -76,22 +76,22 @@ public:
class AudioEffectEQ6 : public AudioEffectEQ {
GDCLASS(AudioEffectEQ6, AudioEffectEQ)
public:
- AudioEffectEQ6()
- : AudioEffectEQ(EQ::PRESET_6_BANDS) {}
+ AudioEffectEQ6() :
+ AudioEffectEQ(EQ::PRESET_6_BANDS) {}
};
class AudioEffectEQ10 : public AudioEffectEQ {
GDCLASS(AudioEffectEQ10, AudioEffectEQ)
public:
- AudioEffectEQ10()
- : AudioEffectEQ(EQ::PRESET_10_BANDS) {}
+ AudioEffectEQ10() :
+ AudioEffectEQ(EQ::PRESET_10_BANDS) {}
};
class AudioEffectEQ21 : public AudioEffectEQ {
GDCLASS(AudioEffectEQ21, AudioEffectEQ)
public:
- AudioEffectEQ21()
- : AudioEffectEQ(EQ::PRESET_21_BANDS) {}
+ AudioEffectEQ21() :
+ AudioEffectEQ(EQ::PRESET_21_BANDS) {}
};
#endif // AUDIOEFFECTEQ_H
diff --git a/servers/audio/effects/audio_effect_filter.h b/servers/audio/effects/audio_effect_filter.h
index 903977cb97..7fb5ba4c83 100644
--- a/servers/audio/effects/audio_effect_filter.h
+++ b/servers/audio/effects/audio_effect_filter.h
@@ -96,50 +96,50 @@ VARIANT_ENUM_CAST(AudioEffectFilter::FilterDB)
class AudioEffectLowPassFilter : public AudioEffectFilter {
GDCLASS(AudioEffectLowPassFilter, AudioEffectFilter)
public:
- AudioEffectLowPassFilter()
- : AudioEffectFilter(AudioFilterSW::LOWPASS) {}
+ AudioEffectLowPassFilter() :
+ AudioEffectFilter(AudioFilterSW::LOWPASS) {}
};
class AudioEffectHighPassFilter : public AudioEffectFilter {
GDCLASS(AudioEffectHighPassFilter, AudioEffectFilter)
public:
- AudioEffectHighPassFilter()
- : AudioEffectFilter(AudioFilterSW::HIGHPASS) {}
+ AudioEffectHighPassFilter() :
+ AudioEffectFilter(AudioFilterSW::HIGHPASS) {}
};
class AudioEffectBandPassFilter : public AudioEffectFilter {
GDCLASS(AudioEffectBandPassFilter, AudioEffectFilter)
public:
- AudioEffectBandPassFilter()
- : AudioEffectFilter(AudioFilterSW::BANDPASS) {}
+ AudioEffectBandPassFilter() :
+ AudioEffectFilter(AudioFilterSW::BANDPASS) {}
};
class AudioEffectNotchFilter : public AudioEffectFilter {
GDCLASS(AudioEffectNotchFilter, AudioEffectFilter)
public:
- AudioEffectNotchFilter()
- : AudioEffectFilter(AudioFilterSW::NOTCH) {}
+ AudioEffectNotchFilter() :
+ AudioEffectFilter(AudioFilterSW::NOTCH) {}
};
class AudioEffectBandLimitFilter : public AudioEffectFilter {
GDCLASS(AudioEffectBandLimitFilter, AudioEffectFilter)
public:
- AudioEffectBandLimitFilter()
- : AudioEffectFilter(AudioFilterSW::BANDLIMIT) {}
+ AudioEffectBandLimitFilter() :
+ AudioEffectFilter(AudioFilterSW::BANDLIMIT) {}
};
class AudioEffectLowShelfFilter : public AudioEffectFilter {
GDCLASS(AudioEffectLowShelfFilter, AudioEffectFilter)
public:
- AudioEffectLowShelfFilter()
- : AudioEffectFilter(AudioFilterSW::LOWSHELF) {}
+ AudioEffectLowShelfFilter() :
+ AudioEffectFilter(AudioFilterSW::LOWSHELF) {}
};
class AudioEffectHighShelfFilter : public AudioEffectFilter {
GDCLASS(AudioEffectHighShelfFilter, AudioEffectFilter)
public:
- AudioEffectHighShelfFilter()
- : AudioEffectFilter(AudioFilterSW::HIGHSHELF) {}
+ AudioEffectHighShelfFilter() :
+ AudioEffectFilter(AudioFilterSW::HIGHSHELF) {}
};
#endif // AUDIOEFFECTFILTER_H
diff --git a/servers/audio/reverb_sw.cpp b/servers/audio/reverb_sw.cpp
index 96d2ad848b..e2bb04c213 100644
--- a/servers/audio/reverb_sw.cpp
+++ b/servers/audio/reverb_sw.cpp
@@ -252,15 +252,13 @@ static ReverbParamsSW *reverb_param_modes[] = {
bool ReverbSW::process(int *p_input, int *p_output, int p_frames, int p_stereo_stride) {
+ // p_input must point to a non-looping buffer.
+ // BOTH p_input and p_output must be touched (use ClearModuleBuffer).
+
if (!reverb_buffer)
return false;
-//
-// p_input must point to a non-looping buffer.
-// BOTH p_input and p_output must be touched (use ClearModuleBuffer).
-
// LOCAL MACROS
-
#undef LM_SETSRCOFFSET
#define LM_SETSRCOFFSET(x) \
(x) = current_params->x + Offset; \
diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp
index 6a10d7539d..a08733de87 100644
--- a/servers/audio_server.cpp
+++ b/servers/audio_server.cpp
@@ -191,7 +191,7 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) {
if (master->channels[k].active) {
- AudioFrame *buf = master->channels[k].buffer.ptr();
+ const AudioFrame *buf = master->channels[k].buffer.ptr();
for (int j = 0; j < to_copy; j++) {
@@ -296,7 +296,7 @@ void AudioServer::_mix_step() {
if (bus->channels[k].active && !bus->channels[k].used) {
//buffer was not used, but it's still active, so it must be cleaned
- AudioFrame *buf = bus->channels[k].buffer.ptr();
+ AudioFrame *buf = bus->channels[k].buffer.ptrw();
for (uint32_t j = 0; j < buffer_size; j++) {
@@ -316,7 +316,7 @@ void AudioServer::_mix_step() {
if (!bus->channels[k].active)
continue;
- bus->channels[k].effect_instances[j]->process(bus->channels[k].buffer.ptr(), temp_buffer[k].ptr(), buffer_size);
+ bus->channels[k].effect_instances[j]->process(bus->channels[k].buffer.ptr(), temp_buffer[k].ptrw(), buffer_size);
}
//swap buffers, so internal buffer always has the right data
@@ -350,7 +350,7 @@ void AudioServer::_mix_step() {
if (!bus->channels[k].active)
continue;
- AudioFrame *buf = bus->channels[k].buffer.ptr();
+ AudioFrame *buf = bus->channels[k].buffer.ptrw();
AudioFrame peak = AudioFrame(0, 0);
@@ -414,7 +414,7 @@ AudioFrame *AudioServer::thread_get_channel_mix_buffer(int p_bus, int p_buffer)
ERR_FAIL_INDEX_V(p_bus, buses.size(), NULL);
ERR_FAIL_INDEX_V(p_buffer, buses[p_bus]->channels.size(), NULL);
- AudioFrame *data = buses[p_bus]->channels[p_buffer].buffer.ptr();
+ AudioFrame *data = buses[p_bus]->channels[p_buffer].buffer.ptrw();
if (!buses[p_bus]->channels[p_buffer].used) {
buses[p_bus]->channels[p_buffer].used = true;
diff --git a/servers/physics/area_sw.cpp b/servers/physics/area_sw.cpp
index 387230a478..9615708f1d 100644
--- a/servers/physics/area_sw.cpp
+++ b/servers/physics/area_sw.cpp
@@ -237,8 +237,10 @@ void AreaSW::call_queries() {
//get_space()->area_remove_from_monitor_query_list(&monitor_query_list);
}
-AreaSW::AreaSW()
- : CollisionObjectSW(TYPE_AREA), monitor_query_list(this), moved_list(this) {
+AreaSW::AreaSW() :
+ CollisionObjectSW(TYPE_AREA),
+ monitor_query_list(this),
+ moved_list(this) {
_set_static(true); //areas are never active
space_override_mode = PhysicsServer::AREA_SPACE_OVERRIDE_DISABLED;
diff --git a/servers/physics/body_pair_sw.cpp b/servers/physics/body_pair_sw.cpp
index ef54eb58cf..80e0ad1b07 100644
--- a/servers/physics/body_pair_sw.cpp
+++ b/servers/physics/body_pair_sw.cpp
@@ -464,8 +464,8 @@ void BodyPairSW::solve(real_t p_step) {
}
}
-BodyPairSW::BodyPairSW(BodySW *p_A, int p_shape_A, BodySW *p_B, int p_shape_B)
- : ConstraintSW(_arr, 2) {
+BodyPairSW::BodyPairSW(BodySW *p_A, int p_shape_A, BodySW *p_B, int p_shape_B) :
+ ConstraintSW(_arr, 2) {
A = p_A;
B = p_B;
diff --git a/servers/physics/body_sw.cpp b/servers/physics/body_sw.cpp
index f8cd6ca858..bba4d7a147 100644
--- a/servers/physics/body_sw.cpp
+++ b/servers/physics/body_sw.cpp
@@ -559,32 +559,30 @@ void BodySW::integrate_velocities(real_t p_step) {
if (fi_callback)
get_space()->body_add_to_state_query_list(&direct_state_query_list);
- if (mode == PhysicsServer::BODY_MODE_KINEMATIC) {
-
- _set_transform(new_transform, false);
- _set_inv_transform(new_transform.affine_inverse());
- if (contacts.size() == 0 && linear_velocity == Vector3() && angular_velocity == Vector3())
- set_active(false); //stopped moving, deactivate
-
- return;
- }
-
//apply axis lock
- if (axis_lock != PhysicsServer::BODY_AXIS_LOCK_DISABLED) {
-
- int axis = axis_lock - 1;
+ if (locked_axis[0] || locked_axis[1] || locked_axis[2]) {
for (int i = 0; i < 3; i++) {
- if (i == axis) {
+ if (locked_axis[i]) {
linear_velocity[i] = 0;
biased_linear_velocity[i] = 0;
+ new_transform.origin[i] = get_transform().origin[i];
} else {
-
angular_velocity[i] = 0;
biased_angular_velocity[i] = 0;
}
}
}
+ if (mode == PhysicsServer::BODY_MODE_KINEMATIC) {
+
+ _set_transform(new_transform, false);
+ _set_inv_transform(new_transform.affine_inverse());
+ if (contacts.size() == 0 && linear_velocity == Vector3() && angular_velocity == Vector3())
+ set_active(false); //stopped moving, deactivate
+
+ return;
+ }
+
Vector3 total_angular_velocity = angular_velocity + biased_angular_velocity;
real_t ang_vel = total_angular_velocity.length();
@@ -740,8 +738,11 @@ void BodySW::set_kinematic_margin(real_t p_margin) {
kinematic_safe_margin = p_margin;
}
-BodySW::BodySW()
- : CollisionObjectSW(TYPE_BODY), active_list(this), inertia_update_list(this), direct_state_query_list(this) {
+BodySW::BodySW() :
+ CollisionObjectSW(TYPE_BODY),
+ active_list(this),
+ inertia_update_list(this),
+ direct_state_query_list(this) {
mode = PhysicsServer::BODY_MODE_RIGID;
active = true;
@@ -772,7 +773,6 @@ BodySW::BodySW()
continuous_cd = false;
can_sleep = false;
fi_callback = NULL;
- axis_lock = PhysicsServer::BODY_AXIS_LOCK_DISABLED;
}
BodySW::~BodySW() {
diff --git a/servers/physics/body_sw.h b/servers/physics/body_sw.h
index 738d99c764..aab6def1a9 100644
--- a/servers/physics/body_sw.h
+++ b/servers/physics/body_sw.h
@@ -53,7 +53,7 @@ class BodySW : public CollisionObjectSW {
real_t angular_damp;
real_t gravity_scale;
- PhysicsServer::BodyAxisLock axis_lock;
+ bool locked_axis[3] = { false, false, false };
real_t kinematic_safe_margin;
real_t _inv_mass;
@@ -288,8 +288,8 @@ public:
_FORCE_INLINE_ Vector3 get_gravity() const { return gravity; }
_FORCE_INLINE_ real_t get_bounce() const { return bounce; }
- _FORCE_INLINE_ void set_axis_lock(PhysicsServer::BodyAxisLock p_lock) { axis_lock = p_lock; }
- _FORCE_INLINE_ PhysicsServer::BodyAxisLock get_axis_lock() const { return axis_lock; }
+ _FORCE_INLINE_ void set_axis_lock(int axis, bool lock) { locked_axis[axis] = lock; }
+ _FORCE_INLINE_ bool get_axis_lock() const { return locked_axis; }
void integrate_forces(real_t p_step);
void integrate_velocities(real_t p_step);
diff --git a/servers/physics/collision_object_sw.cpp b/servers/physics/collision_object_sw.cpp
index 126f8141ff..ef7cd0780f 100644
--- a/servers/physics/collision_object_sw.cpp
+++ b/servers/physics/collision_object_sw.cpp
@@ -217,8 +217,8 @@ void CollisionObjectSW::_shape_changed() {
_shapes_changed();
}
-CollisionObjectSW::CollisionObjectSW(Type p_type)
- : pending_shape_update_list(this) {
+CollisionObjectSW::CollisionObjectSW(Type p_type) :
+ pending_shape_update_list(this) {
_static = true;
type = p_type;
diff --git a/servers/physics/collision_solver_sat.cpp b/servers/physics/collision_solver_sat.cpp
index a044df7f31..f56d311a59 100644
--- a/servers/physics/collision_solver_sat.cpp
+++ b/servers/physics/collision_solver_sat.cpp
@@ -255,7 +255,8 @@ static void _generate_contacts_from_supports(const Vector3 *p_points_A, int p_po
_generate_contacts_face_face,
},
{
- 0, 0,
+ 0,
+ 0,
_generate_contacts_face_face,
}
};
diff --git a/servers/physics/joints/cone_twist_joint_sw.cpp b/servers/physics/joints/cone_twist_joint_sw.cpp
index 3c900d4fbe..617ce125b3 100644
--- a/servers/physics/joints/cone_twist_joint_sw.cpp
+++ b/servers/physics/joints/cone_twist_joint_sw.cpp
@@ -85,8 +85,8 @@ static _FORCE_INLINE_ real_t atan2fast(real_t y, real_t x) {
return (y < 0.0f) ? -angle : angle;
}
-ConeTwistJointSW::ConeTwistJointSW(BodySW *rbA, BodySW *rbB, const Transform &rbAFrame, const Transform &rbBFrame)
- : JointSW(_arr, 2) {
+ConeTwistJointSW::ConeTwistJointSW(BodySW *rbA, BodySW *rbB, const Transform &rbAFrame, const Transform &rbBFrame) :
+ JointSW(_arr, 2) {
A = rbA;
B = rbB;
diff --git a/servers/physics/joints/generic_6dof_joint_sw.cpp b/servers/physics/joints/generic_6dof_joint_sw.cpp
index 1e323be36c..b8234be4d9 100644
--- a/servers/physics/joints/generic_6dof_joint_sw.cpp
+++ b/servers/physics/joints/generic_6dof_joint_sw.cpp
@@ -209,9 +209,11 @@ real_t G6DOFTranslationalLimitMotorSW::solveLinearAxis(
//////////////////////////// G6DOFTranslationalLimitMotorSW ////////////////////////////////////
-Generic6DOFJointSW::Generic6DOFJointSW(BodySW *rbA, BodySW *rbB, const Transform &frameInA, const Transform &frameInB, bool useLinearReferenceFrameA)
- : JointSW(_arr, 2), m_frameInA(frameInA), m_frameInB(frameInB),
- m_useLinearReferenceFrameA(useLinearReferenceFrameA) {
+Generic6DOFJointSW::Generic6DOFJointSW(BodySW *rbA, BodySW *rbB, const Transform &frameInA, const Transform &frameInB, bool useLinearReferenceFrameA) :
+ JointSW(_arr, 2),
+ m_frameInA(frameInA),
+ m_frameInB(frameInB),
+ m_useLinearReferenceFrameA(useLinearReferenceFrameA) {
A = rbA;
B = rbB;
A->add_constraint(this, 0);
diff --git a/servers/physics/joints/hinge_joint_sw.cpp b/servers/physics/joints/hinge_joint_sw.cpp
index fe20a55b60..2edccc26c2 100644
--- a/servers/physics/joints/hinge_joint_sw.cpp
+++ b/servers/physics/joints/hinge_joint_sw.cpp
@@ -68,8 +68,8 @@ static void plane_space(const Vector3 &n, Vector3 &p, Vector3 &q) {
}
}
-HingeJointSW::HingeJointSW(BodySW *rbA, BodySW *rbB, const Transform &frameA, const Transform &frameB)
- : JointSW(_arr, 2) {
+HingeJointSW::HingeJointSW(BodySW *rbA, BodySW *rbB, const Transform &frameA, const Transform &frameB) :
+ JointSW(_arr, 2) {
A = rbA;
B = rbB;
@@ -101,8 +101,8 @@ HingeJointSW::HingeJointSW(BodySW *rbA, BodySW *rbB, const Transform &frameA, co
}
HingeJointSW::HingeJointSW(BodySW *rbA, BodySW *rbB, const Vector3 &pivotInA, const Vector3 &pivotInB,
- const Vector3 &axisInA, const Vector3 &axisInB)
- : JointSW(_arr, 2) {
+ const Vector3 &axisInA, const Vector3 &axisInB) :
+ JointSW(_arr, 2) {
A = rbA;
B = rbB;
diff --git a/servers/physics/joints/jacobian_entry_sw.h b/servers/physics/joints/jacobian_entry_sw.h
index 79ce0e6157..7aeb06ddd8 100644
--- a/servers/physics/joints/jacobian_entry_sw.h
+++ b/servers/physics/joints/jacobian_entry_sw.h
@@ -64,8 +64,8 @@ public:
const Vector3 &inertiaInvA,
const real_t massInvA,
const Vector3 &inertiaInvB,
- const real_t massInvB)
- : m_linearJointAxis(jointAxis) {
+ const real_t massInvB) :
+ m_linearJointAxis(jointAxis) {
m_aJ = world2A.xform(rel_pos1.cross(m_linearJointAxis));
m_bJ = world2B.xform(rel_pos2.cross(-m_linearJointAxis));
m_0MinvJt = inertiaInvA * m_aJ;
@@ -80,8 +80,8 @@ public:
const Basis &world2A,
const Basis &world2B,
const Vector3 &inertiaInvA,
- const Vector3 &inertiaInvB)
- : m_linearJointAxis(Vector3(real_t(0.), real_t(0.), real_t(0.))) {
+ const Vector3 &inertiaInvB) :
+ m_linearJointAxis(Vector3(real_t(0.), real_t(0.), real_t(0.))) {
m_aJ = world2A.xform(jointAxis);
m_bJ = world2B.xform(-jointAxis);
m_0MinvJt = inertiaInvA * m_aJ;
@@ -95,8 +95,10 @@ public:
JacobianEntrySW(const Vector3 &axisInA,
const Vector3 &axisInB,
const Vector3 &inertiaInvA,
- const Vector3 &inertiaInvB)
- : m_linearJointAxis(Vector3(real_t(0.), real_t(0.), real_t(0.))), m_aJ(axisInA), m_bJ(-axisInB) {
+ const Vector3 &inertiaInvB) :
+ m_linearJointAxis(Vector3(real_t(0.), real_t(0.), real_t(0.))),
+ m_aJ(axisInA),
+ m_bJ(-axisInB) {
m_0MinvJt = inertiaInvA * m_aJ;
m_1MinvJt = inertiaInvB * m_bJ;
m_Adiag = m_0MinvJt.dot(m_aJ) + m_1MinvJt.dot(m_bJ);
@@ -110,8 +112,8 @@ public:
const Vector3 &rel_pos1, const Vector3 &rel_pos2,
const Vector3 &jointAxis,
const Vector3 &inertiaInvA,
- const real_t massInvA)
- : m_linearJointAxis(jointAxis) {
+ const real_t massInvA) :
+ m_linearJointAxis(jointAxis) {
m_aJ = world2A.xform(rel_pos1.cross(jointAxis));
m_bJ = world2A.xform(rel_pos2.cross(-jointAxis));
m_0MinvJt = inertiaInvA * m_aJ;
diff --git a/servers/physics/joints/pin_joint_sw.cpp b/servers/physics/joints/pin_joint_sw.cpp
index 779e086858..ab2ab2299a 100644
--- a/servers/physics/joints/pin_joint_sw.cpp
+++ b/servers/physics/joints/pin_joint_sw.cpp
@@ -146,8 +146,8 @@ real_t PinJointSW::get_param(PhysicsServer::PinJointParam p_param) const {
return 0;
}
-PinJointSW::PinJointSW(BodySW *p_body_a, const Vector3 &p_pos_a, BodySW *p_body_b, const Vector3 &p_pos_b)
- : JointSW(_arr, 2) {
+PinJointSW::PinJointSW(BodySW *p_body_a, const Vector3 &p_pos_a, BodySW *p_body_b, const Vector3 &p_pos_b) :
+ JointSW(_arr, 2) {
A = p_body_a;
B = p_body_b;
diff --git a/servers/physics/joints/slider_joint_sw.cpp b/servers/physics/joints/slider_joint_sw.cpp
index 66585f2605..7777de0324 100644
--- a/servers/physics/joints/slider_joint_sw.cpp
+++ b/servers/physics/joints/slider_joint_sw.cpp
@@ -112,8 +112,10 @@ void SliderJointSW::initParams() {
//-----------------------------------------------------------------------------
-SliderJointSW::SliderJointSW(BodySW *rbA, BodySW *rbB, const Transform &frameInA, const Transform &frameInB)
- : JointSW(_arr, 2), m_frameInA(frameInA), m_frameInB(frameInB) {
+SliderJointSW::SliderJointSW(BodySW *rbA, BodySW *rbB, const Transform &frameInA, const Transform &frameInB) :
+ JointSW(_arr, 2),
+ m_frameInA(frameInA),
+ m_frameInB(frameInB) {
A = rbA;
B = rbB;
diff --git a/servers/physics/joints_sw.h b/servers/physics/joints_sw.h
index b15ae08049..29581c7337 100644
--- a/servers/physics/joints_sw.h
+++ b/servers/physics/joints_sw.h
@@ -37,8 +37,8 @@ class JointSW : public ConstraintSW {
public:
virtual PhysicsServer::JointType get_type() const = 0;
- _FORCE_INLINE_ JointSW(BodySW **p_body_ptr = NULL, int p_body_count = 0)
- : ConstraintSW(p_body_ptr, p_body_count) {
+ _FORCE_INLINE_ JointSW(BodySW **p_body_ptr = NULL, int p_body_count = 0) :
+ ConstraintSW(p_body_ptr, p_body_count) {
}
};
diff --git a/servers/physics/physics_server_sw.cpp b/servers/physics/physics_server_sw.cpp
index ce63d84617..2909308366 100644
--- a/servers/physics/physics_server_sw.cpp
+++ b/servers/physics/physics_server_sw.cpp
@@ -794,19 +794,19 @@ void PhysicsServerSW::body_set_axis_velocity(RID p_body, const Vector3 &p_axis_v
body->wakeup();
};
-void PhysicsServerSW::body_set_axis_lock(RID p_body, BodyAxisLock p_lock) {
+void PhysicsServerSW::body_set_axis_lock(RID p_body, int axis, bool lock) {
BodySW *body = body_owner.get(p_body);
ERR_FAIL_COND(!body);
- body->set_axis_lock(p_lock);
+ body->set_axis_lock(axis, lock);
body->wakeup();
}
-PhysicsServerSW::BodyAxisLock PhysicsServerSW::body_get_axis_lock(RID p_body) const {
+bool PhysicsServerSW::body_get_axis_lock(RID p_body) const {
const BodySW *body = body_owner.get(p_body);
- ERR_FAIL_COND_V(!body, BODY_AXIS_LOCK_DISABLED);
+ ERR_FAIL_COND_V(!body, 0);
return body->get_axis_lock();
}
diff --git a/servers/physics/physics_server_sw.h b/servers/physics/physics_server_sw.h
index fa754a1c8f..fea6e34ebd 100644
--- a/servers/physics/physics_server_sw.h
+++ b/servers/physics/physics_server_sw.h
@@ -203,8 +203,8 @@ public:
virtual void body_apply_torque_impulse(RID p_body, const Vector3 &p_impulse);
virtual void body_set_axis_velocity(RID p_body, const Vector3 &p_axis_velocity);
- virtual void body_set_axis_lock(RID p_body, BodyAxisLock p_lock);
- virtual BodyAxisLock body_get_axis_lock(RID p_body) const;
+ virtual void body_set_axis_lock(RID p_body, int axis, bool p_lock);
+ virtual bool body_get_axis_lock(RID p_body) const;
virtual void body_add_collision_exception(RID p_body, RID p_body_b);
virtual void body_remove_collision_exception(RID p_body, RID p_body_b);
diff --git a/servers/physics/space_sw.cpp b/servers/physics/space_sw.cpp
index a6426b7ee0..9de90fccb2 100644
--- a/servers/physics/space_sw.cpp
+++ b/servers/physics/space_sw.cpp
@@ -33,20 +33,12 @@
#include "physics_server_sw.h"
#include "project_settings.h"
-_FORCE_INLINE_ static bool _match_object_type_query(CollisionObjectSW *p_object, uint32_t p_collision_mask, uint32_t p_type_mask) {
+_FORCE_INLINE_ static bool _can_collide_with(CollisionObjectSW *p_object, uint32_t p_collision_mask) {
- if ((p_object->get_collision_layer() & p_collision_mask) == 0)
- return false;
-
- if (p_object->get_type() == CollisionObjectSW::TYPE_AREA)
- return p_type_mask & PhysicsDirectSpaceState::TYPE_MASK_AREA;
-
- BodySW *body = static_cast<BodySW *>(p_object);
-
- return (1 << body->get_mode()) & p_type_mask;
+ return p_object->get_collision_layer() & p_collision_mask;
}
-int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
ERR_FAIL_COND_V(space->locked, false);
int amount = space->broadphase->cull_point(p_point, space->intersection_query_results, SpaceSW::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
@@ -59,7 +51,7 @@ int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResu
if (cc >= p_result_max)
break;
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
//area can't be picked by ray (default)
@@ -90,7 +82,7 @@ int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResu
return cc;
}
-bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask, bool p_pick_ray) {
+bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_pick_ray) {
ERR_FAIL_COND_V(space->locked, false);
@@ -112,7 +104,7 @@ bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vecto
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
if (p_pick_ray && !(static_cast<CollisionObjectSW *>(space->intersection_query_results[i])->is_ray_pickable()))
@@ -168,7 +160,7 @@ bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vecto
return true;
}
-int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
if (p_result_max <= 0)
return 0;
@@ -189,7 +181,7 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transfo
if (cc >= p_result_max)
break;
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
//area can't be picked by ray (default)
@@ -219,7 +211,7 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transfo
return cc;
}
-bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask, ShapeRestInfo *r_info) {
+bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, ShapeRestInfo *r_info) {
ShapeSW *shape = static_cast<PhysicsServerSW *>(PhysicsServer::get_singleton())->shape_owner.get(p_shape);
ERR_FAIL_COND_V(!shape, false);
@@ -249,7 +241,7 @@ bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
if (p_exclude.has(space->intersection_query_results[i]->get_self()))
@@ -333,7 +325,7 @@ bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform
return true;
}
-bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
if (p_result_max <= 0)
return 0;
@@ -363,7 +355,7 @@ bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_sh
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
const CollisionObjectSW *col_obj = space->intersection_query_results[i];
@@ -412,7 +404,7 @@ static void _rest_cbk_result(const Vector3 &p_point_A, const Vector3 &p_point_B,
rd->best_object = rd->object;
rd->best_shape = rd->shape;
}
-bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
ShapeSW *shape = static_cast<PhysicsServerSW *>(PhysicsServer::get_singleton())->shape_owner.get(p_shape);
ERR_FAIL_COND_V(!shape, 0);
@@ -429,7 +421,7 @@ bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
const CollisionObjectSW *col_obj = space->intersection_query_results[i];
diff --git a/servers/physics/space_sw.h b/servers/physics/space_sw.h
index fd7e6d16a9..a7c975fbf6 100644
--- a/servers/physics/space_sw.h
+++ b/servers/physics/space_sw.h
@@ -47,12 +47,12 @@ class PhysicsDirectSpaceStateSW : public PhysicsDirectSpaceState {
public:
SpaceSW *space;
- virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_ray = false);
- virtual int intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, ShapeRestInfo *r_info = NULL);
- virtual bool collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
+ virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_pick_ray = false);
+ virtual int intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, ShapeRestInfo *r_info = NULL);
+ virtual bool collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
virtual Vector3 get_closest_point_to_object_volume(RID p_object, const Vector3 p_point) const;
PhysicsDirectSpaceStateSW();
diff --git a/servers/physics_2d/area_2d_sw.cpp b/servers/physics_2d/area_2d_sw.cpp
index 6c0bc2c186..d73619ba13 100644
--- a/servers/physics_2d/area_2d_sw.cpp
+++ b/servers/physics_2d/area_2d_sw.cpp
@@ -238,8 +238,10 @@ void Area2DSW::call_queries() {
//get_space()->area_remove_from_monitor_query_list(&monitor_query_list);
}
-Area2DSW::Area2DSW()
- : CollisionObject2DSW(TYPE_AREA), monitor_query_list(this), moved_list(this) {
+Area2DSW::Area2DSW() :
+ CollisionObject2DSW(TYPE_AREA),
+ monitor_query_list(this),
+ moved_list(this) {
_set_static(true); //areas are not active by default
space_override_mode = Physics2DServer::AREA_SPACE_OVERRIDE_DISABLED;
diff --git a/servers/physics_2d/body_2d_sw.cpp b/servers/physics_2d/body_2d_sw.cpp
index eb5fb5a729..2bdde244df 100644
--- a/servers/physics_2d/body_2d_sw.cpp
+++ b/servers/physics_2d/body_2d_sw.cpp
@@ -650,8 +650,11 @@ void Body2DSW::set_force_integration_callback(ObjectID p_id, const StringName &p
}
}
-Body2DSW::Body2DSW()
- : CollisionObject2DSW(TYPE_BODY), active_list(this), inertia_update_list(this), direct_state_query_list(this) {
+Body2DSW::Body2DSW() :
+ CollisionObject2DSW(TYPE_BODY),
+ active_list(this),
+ inertia_update_list(this),
+ direct_state_query_list(this) {
mode = Physics2DServer::BODY_MODE_RIGID;
active = true;
diff --git a/servers/physics_2d/body_pair_2d_sw.cpp b/servers/physics_2d/body_pair_2d_sw.cpp
index 828b90e5d0..b106b37db0 100644
--- a/servers/physics_2d/body_pair_2d_sw.cpp
+++ b/servers/physics_2d/body_pair_2d_sw.cpp
@@ -417,7 +417,7 @@ bool BodyPair2DSW::setup(real_t p_step) {
c.bias = -bias * inv_dt * MIN(0.0f, -depth + max_penetration);
c.depth = depth;
-//c.acc_bias_impulse=0;
+ //c.acc_bias_impulse=0;
#ifdef ACCUMULATE_IMPULSES
{
@@ -500,8 +500,8 @@ void BodyPair2DSW::solve(real_t p_step) {
}
}
-BodyPair2DSW::BodyPair2DSW(Body2DSW *p_A, int p_shape_A, Body2DSW *p_B, int p_shape_B)
- : Constraint2DSW(_arr, 2) {
+BodyPair2DSW::BodyPair2DSW(Body2DSW *p_A, int p_shape_A, Body2DSW *p_B, int p_shape_B) :
+ Constraint2DSW(_arr, 2) {
A = p_A;
B = p_B;
diff --git a/servers/physics_2d/joints_2d_sw.cpp b/servers/physics_2d/joints_2d_sw.cpp
index 897e145a3e..caeb62d74f 100644
--- a/servers/physics_2d/joints_2d_sw.cpp
+++ b/servers/physics_2d/joints_2d_sw.cpp
@@ -178,8 +178,8 @@ real_t PinJoint2DSW::get_param(Physics2DServer::PinJointParam p_param) const {
ERR_FAIL_V(0);
}
-PinJoint2DSW::PinJoint2DSW(const Vector2 &p_pos, Body2DSW *p_body_a, Body2DSW *p_body_b)
- : Joint2DSW(_arr, p_body_b ? 2 : 1) {
+PinJoint2DSW::PinJoint2DSW(const Vector2 &p_pos, Body2DSW *p_body_a, Body2DSW *p_body_b) :
+ Joint2DSW(_arr, p_body_b ? 2 : 1) {
A = p_body_a;
B = p_body_b;
@@ -323,8 +323,8 @@ void GrooveJoint2DSW::solve(real_t p_step) {
B->apply_impulse(rB, j);
}
-GrooveJoint2DSW::GrooveJoint2DSW(const Vector2 &p_a_groove1, const Vector2 &p_a_groove2, const Vector2 &p_b_anchor, Body2DSW *p_body_a, Body2DSW *p_body_b)
- : Joint2DSW(_arr, 2) {
+GrooveJoint2DSW::GrooveJoint2DSW(const Vector2 &p_a_groove1, const Vector2 &p_a_groove2, const Vector2 &p_b_anchor, Body2DSW *p_body_a, Body2DSW *p_body_b) :
+ Joint2DSW(_arr, 2) {
A = p_body_a;
B = p_body_b;
@@ -432,8 +432,8 @@ real_t DampedSpringJoint2DSW::get_param(Physics2DServer::DampedStringParam p_par
ERR_FAIL_V(0);
}
-DampedSpringJoint2DSW::DampedSpringJoint2DSW(const Vector2 &p_anchor_a, const Vector2 &p_anchor_b, Body2DSW *p_body_a, Body2DSW *p_body_b)
- : Joint2DSW(_arr, 2) {
+DampedSpringJoint2DSW::DampedSpringJoint2DSW(const Vector2 &p_anchor_a, const Vector2 &p_anchor_b, Body2DSW *p_body_a, Body2DSW *p_body_b) :
+ Joint2DSW(_arr, 2) {
A = p_body_a;
B = p_body_b;
diff --git a/servers/physics_2d/joints_2d_sw.h b/servers/physics_2d/joints_2d_sw.h
index 11cb41d9d1..0e5e8012b6 100644
--- a/servers/physics_2d/joints_2d_sw.h
+++ b/servers/physics_2d/joints_2d_sw.h
@@ -50,8 +50,8 @@ public:
_FORCE_INLINE_ real_t get_max_bias() const { return max_bias; }
virtual Physics2DServer::JointType get_type() const = 0;
- Joint2DSW(Body2DSW **p_body_ptr = NULL, int p_body_count = 0)
- : Constraint2DSW(p_body_ptr, p_body_count) {
+ Joint2DSW(Body2DSW **p_body_ptr = NULL, int p_body_count = 0) :
+ Constraint2DSW(p_body_ptr, p_body_count) {
bias = 0;
max_force = max_bias = 3.40282e+38;
};
diff --git a/servers/physics_2d/physics_2d_server_wrap_mt.cpp b/servers/physics_2d/physics_2d_server_wrap_mt.cpp
index f92ed18de2..0e5bd82599 100644
--- a/servers/physics_2d/physics_2d_server_wrap_mt.cpp
+++ b/servers/physics_2d/physics_2d_server_wrap_mt.cpp
@@ -151,8 +151,8 @@ void Physics2DServerWrapMT::finish() {
memdelete(step_sem);
}
-Physics2DServerWrapMT::Physics2DServerWrapMT(Physics2DServer *p_contained, bool p_create_thread)
- : command_queue(p_create_thread) {
+Physics2DServerWrapMT::Physics2DServerWrapMT(Physics2DServer *p_contained, bool p_create_thread) :
+ command_queue(p_create_thread) {
physics_2d_server = p_contained;
create_thread = p_create_thread;
diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp
index 3b8eb19dd1..6de58cfbc0 100644
--- a/servers/physics_2d/space_2d_sw.cpp
+++ b/servers/physics_2d/space_2d_sw.cpp
@@ -32,20 +32,12 @@
#include "collision_solver_2d_sw.h"
#include "pair.h"
#include "physics_2d_server_sw.h"
-_FORCE_INLINE_ static bool _match_object_type_query(CollisionObject2DSW *p_object, uint32_t p_collision_mask, uint32_t p_type_mask) {
+_FORCE_INLINE_ static bool _can_collide_with(CollisionObject2DSW *p_object, uint32_t p_collision_mask) {
- if ((p_object->get_collision_layer() & p_collision_mask) == 0)
- return false;
-
- if (p_object->get_type() == CollisionObject2DSW::TYPE_AREA)
- return p_type_mask & Physics2DDirectSpaceState::TYPE_MASK_AREA;
-
- Body2DSW *body = static_cast<Body2DSW *>(p_object);
-
- return (1 << body->get_mode()) & p_type_mask;
+ return p_object->get_collision_layer() & p_collision_mask;
}
-int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask, bool p_pick_point) {
+int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_pick_point) {
if (p_result_max <= 0)
return 0;
@@ -60,7 +52,7 @@ int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeRe
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
if (p_exclude.has(space->intersection_query_results[i]->get_self()))
@@ -96,7 +88,7 @@ int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeRe
return cc;
}
-bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
ERR_FAIL_COND_V(space->locked, false);
@@ -118,7 +110,7 @@ bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vec
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
if (p_exclude.has(space->intersection_query_results[i]->get_self()))
@@ -176,7 +168,7 @@ bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vec
return true;
}
-int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
if (p_result_max <= 0)
return 0;
@@ -193,7 +185,7 @@ int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Trans
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
if (p_exclude.has(space->intersection_query_results[i]->get_self()))
@@ -218,7 +210,7 @@ int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Trans
return cc;
}
-bool Physics2DDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+bool Physics2DDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
Shape2DSW *shape = Physics2DServerSW::singletonsw->shape_owner.get(p_shape);
ERR_FAIL_COND_V(!shape, false);
@@ -239,7 +231,7 @@ bool Physics2DDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transfor
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
if (p_exclude.has(space->intersection_query_results[i]->get_self()))
@@ -302,7 +294,7 @@ bool Physics2DDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transfor
return true;
}
-bool Physics2DDirectSpaceStateSW::collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+bool Physics2DDirectSpaceStateSW::collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
if (p_result_max <= 0)
return 0;
@@ -333,7 +325,7 @@ bool Physics2DDirectSpaceStateSW::collide_shape(RID p_shape, const Transform2D &
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
const CollisionObject2DSW *col_obj = space->intersection_query_results[i];
@@ -391,7 +383,7 @@ static void _rest_cbk_result(const Vector2 &p_point_A, const Vector2 &p_point_B,
rd->best_shape = rd->shape;
}
-bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
+bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask) {
Shape2DSW *shape = Physics2DServerSW::singletonsw->shape_owner.get(p_shape);
ERR_FAIL_COND_V(!shape, 0);
@@ -409,7 +401,7 @@ bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Transform2D &p_sh
for (int i = 0; i < amount; i++) {
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
+ if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
continue;
const CollisionObject2DSW *col_obj = space->intersection_query_results[i];
diff --git a/servers/physics_2d/space_2d_sw.h b/servers/physics_2d/space_2d_sw.h
index bf0796fb22..f41a0dbeb1 100644
--- a/servers/physics_2d/space_2d_sw.h
+++ b/servers/physics_2d/space_2d_sw.h
@@ -47,12 +47,12 @@ class Physics2DDirectSpaceStateSW : public Physics2DDirectSpaceState {
public:
Space2DSW *space;
- virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_point = false);
- virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
- virtual bool rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
+ virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_pick_point = false);
+ virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
+ virtual bool rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF);
Physics2DDirectSpaceStateSW();
};
diff --git a/servers/physics_2d_server.cpp b/servers/physics_2d_server.cpp
index 650d3d0f62..dc58cd36dd 100644
--- a/servers/physics_2d_server.cpp
+++ b/servers/physics_2d_server.cpp
@@ -156,23 +156,15 @@ float Physics2DShapeQueryParameters::get_margin() const {
return margin;
}
-void Physics2DShapeQueryParameters::set_collision_layer(int p_collision_layer) {
+void Physics2DShapeQueryParameters::set_collision_mask(int p_collision_layer) {
- collision_layer = p_collision_layer;
+ collision_mask = p_collision_layer;
}
-int Physics2DShapeQueryParameters::get_collision_layer() const {
+int Physics2DShapeQueryParameters::get_collision_mask() const {
- return collision_layer;
+ return collision_mask;
}
-void Physics2DShapeQueryParameters::set_object_type_mask(int p_object_type_mask) {
-
- object_type_mask = p_object_type_mask;
-}
-int Physics2DShapeQueryParameters::get_object_type_mask() const {
-
- return object_type_mask;
-}
void Physics2DShapeQueryParameters::set_exclude(const Vector<RID> &p_exclude) {
exclude.clear();
@@ -206,11 +198,8 @@ void Physics2DShapeQueryParameters::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_margin", "margin"), &Physics2DShapeQueryParameters::set_margin);
ClassDB::bind_method(D_METHOD("get_margin"), &Physics2DShapeQueryParameters::get_margin);
- ClassDB::bind_method(D_METHOD("set_collision_layer", "collision_layer"), &Physics2DShapeQueryParameters::set_collision_layer);
- ClassDB::bind_method(D_METHOD("get_collision_layer"), &Physics2DShapeQueryParameters::get_collision_layer);
-
- ClassDB::bind_method(D_METHOD("set_object_type_mask", "object_type_mask"), &Physics2DShapeQueryParameters::set_object_type_mask);
- ClassDB::bind_method(D_METHOD("get_object_type_mask"), &Physics2DShapeQueryParameters::get_object_type_mask);
+ ClassDB::bind_method(D_METHOD("set_collision_layer", "collision_layer"), &Physics2DShapeQueryParameters::set_collision_mask);
+ ClassDB::bind_method(D_METHOD("get_collision_layer"), &Physics2DShapeQueryParameters::get_collision_mask);
ClassDB::bind_method(D_METHOD("set_exclude", "exclude"), &Physics2DShapeQueryParameters::set_exclude);
ClassDB::bind_method(D_METHOD("get_exclude"), &Physics2DShapeQueryParameters::get_exclude);
@@ -219,18 +208,17 @@ void Physics2DShapeQueryParameters::_bind_methods() {
Physics2DShapeQueryParameters::Physics2DShapeQueryParameters() {
margin = 0;
- collision_layer = 0x7FFFFFFF;
- object_type_mask = Physics2DDirectSpaceState::TYPE_MASK_COLLISION;
+ collision_mask = 0x7FFFFFFF;
}
-Dictionary Physics2DDirectSpaceState::_intersect_ray(const Vector2 &p_from, const Vector2 &p_to, const Vector<RID> &p_exclude, uint32_t p_layers, uint32_t p_object_type_mask) {
+Dictionary Physics2DDirectSpaceState::_intersect_ray(const Vector2 &p_from, const Vector2 &p_to, const Vector<RID> &p_exclude, uint32_t p_layers) {
RayResult inters;
Set<RID> exclude;
for (int i = 0; i < p_exclude.size(); i++)
exclude.insert(p_exclude[i]);
- bool res = intersect_ray(p_from, p_to, inters, exclude, p_layers, p_object_type_mask);
+ bool res = intersect_ray(p_from, p_to, inters, exclude, p_layers);
if (!res)
return Dictionary();
@@ -251,7 +239,7 @@ Array Physics2DDirectSpaceState::_intersect_shape(const Ref<Physics2DShapeQueryP
Vector<ShapeResult> sr;
sr.resize(p_max_results);
- int rc = intersect_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, sr.ptr(), sr.size(), p_shape_query->exclude, p_shape_query->collision_layer, p_shape_query->object_type_mask);
+ int rc = intersect_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, sr.ptrw(), sr.size(), p_shape_query->exclude, p_shape_query->collision_mask);
Array ret;
ret.resize(rc);
for (int i = 0; i < rc; i++) {
@@ -271,7 +259,7 @@ Array Physics2DDirectSpaceState::_intersect_shape(const Ref<Physics2DShapeQueryP
Array Physics2DDirectSpaceState::_cast_motion(const Ref<Physics2DShapeQueryParameters> &p_shape_query) {
float closest_safe, closest_unsafe;
- bool res = cast_motion(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, closest_safe, closest_unsafe, p_shape_query->exclude, p_shape_query->collision_layer, p_shape_query->object_type_mask);
+ bool res = cast_motion(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, closest_safe, closest_unsafe, p_shape_query->exclude, p_shape_query->collision_mask);
if (!res)
return Array();
Array ret;
@@ -281,7 +269,7 @@ Array Physics2DDirectSpaceState::_cast_motion(const Ref<Physics2DShapeQueryParam
return ret;
}
-Array Physics2DDirectSpaceState::_intersect_point(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers, uint32_t p_object_type_mask) {
+Array Physics2DDirectSpaceState::_intersect_point(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers) {
Set<RID> exclude;
for (int i = 0; i < p_exclude.size(); i++)
@@ -290,7 +278,7 @@ Array Physics2DDirectSpaceState::_intersect_point(const Vector2 &p_point, int p_
Vector<ShapeResult> ret;
ret.resize(p_max_results);
- int rc = intersect_point(p_point, ret.ptr(), ret.size(), exclude, p_layers, p_object_type_mask);
+ int rc = intersect_point(p_point, ret.ptrw(), ret.size(), exclude, p_layers);
if (rc == 0)
return Array();
@@ -314,7 +302,7 @@ Array Physics2DDirectSpaceState::_collide_shape(const Ref<Physics2DShapeQueryPar
Vector<Vector2> ret;
ret.resize(p_max_results * 2);
int rc = 0;
- bool res = collide_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, ret.ptr(), p_max_results, rc, p_shape_query->exclude, p_shape_query->collision_layer, p_shape_query->object_type_mask);
+ bool res = collide_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, ret.ptrw(), p_max_results, rc, p_shape_query->exclude, p_shape_query->collision_mask);
if (!res)
return Array();
Array r;
@@ -327,7 +315,7 @@ Dictionary Physics2DDirectSpaceState::_get_rest_info(const Ref<Physics2DShapeQue
ShapeRestInfo sri;
- bool res = rest_info(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, &sri, p_shape_query->exclude, p_shape_query->collision_layer, p_shape_query->object_type_mask);
+ bool res = rest_info(p_shape_query->shape, p_shape_query->transform, p_shape_query->motion, p_shape_query->margin, &sri, p_shape_query->exclude, p_shape_query->collision_mask);
Dictionary r;
if (!res)
return r;
@@ -348,20 +336,13 @@ Physics2DDirectSpaceState::Physics2DDirectSpaceState() {
void Physics2DDirectSpaceState::_bind_methods() {
- ClassDB::bind_method(D_METHOD("intersect_point", "point", "max_results", "exclude", "collision_layer", "type_mask"), &Physics2DDirectSpaceState::_intersect_point, DEFVAL(32), DEFVAL(Array()), DEFVAL(0x7FFFFFFF), DEFVAL(TYPE_MASK_COLLISION));
- ClassDB::bind_method(D_METHOD("intersect_ray", "from", "to", "exclude", "collision_layer", "type_mask"), &Physics2DDirectSpaceState::_intersect_ray, DEFVAL(Array()), DEFVAL(0x7FFFFFFF), DEFVAL(TYPE_MASK_COLLISION));
+ ClassDB::bind_method(D_METHOD("intersect_point", "point", "max_results", "exclude", "collision_layer"), &Physics2DDirectSpaceState::_intersect_point, DEFVAL(32), DEFVAL(Array()), DEFVAL(0x7FFFFFFF));
+ ClassDB::bind_method(D_METHOD("intersect_ray", "from", "to", "exclude", "collision_layer"), &Physics2DDirectSpaceState::_intersect_ray, DEFVAL(Array()), DEFVAL(0x7FFFFFFF));
ClassDB::bind_method(D_METHOD("intersect_shape", "shape", "max_results"), &Physics2DDirectSpaceState::_intersect_shape, DEFVAL(32));
ClassDB::bind_method(D_METHOD("cast_motion", "shape"), &Physics2DDirectSpaceState::_cast_motion);
ClassDB::bind_method(D_METHOD("collide_shape", "shape", "max_results"), &Physics2DDirectSpaceState::_collide_shape, DEFVAL(32));
ClassDB::bind_method(D_METHOD("get_rest_info", "shape"), &Physics2DDirectSpaceState::_get_rest_info);
//ClassDB::bind_method(D_METHOD("cast_motion","shape","xform","motion","exclude","umask"),&Physics2DDirectSpaceState::_intersect_shape,DEFVAL(Array()),DEFVAL(0));
-
- BIND_ENUM_CONSTANT(TYPE_MASK_STATIC_BODY);
- BIND_ENUM_CONSTANT(TYPE_MASK_KINEMATIC_BODY);
- BIND_ENUM_CONSTANT(TYPE_MASK_RIGID_BODY);
- BIND_ENUM_CONSTANT(TYPE_MASK_CHARACTER_BODY);
- BIND_ENUM_CONSTANT(TYPE_MASK_COLLISION);
- BIND_ENUM_CONSTANT(TYPE_MASK_AREA);
}
int Physics2DShapeQueryResult::get_result_count() const {
diff --git a/servers/physics_2d_server.h b/servers/physics_2d_server.h
index 241255bdb5..c57503f06e 100644
--- a/servers/physics_2d_server.h
+++ b/servers/physics_2d_server.h
@@ -97,8 +97,7 @@ class Physics2DShapeQueryParameters : public Reference {
Vector2 motion;
float margin;
Set<RID> exclude;
- uint32_t collision_layer;
- uint32_t object_type_mask;
+ uint32_t collision_mask;
protected:
static void _bind_methods();
@@ -117,11 +116,8 @@ public:
void set_margin(float p_margin);
float get_margin() const;
- void set_collision_layer(int p_collision_layer);
- int get_collision_layer() const;
-
- void set_object_type_mask(int p_object_type_mask);
- int get_object_type_mask() const;
+ void set_collision_mask(int p_collision_mask);
+ int get_collision_mask() const;
void set_exclude(const Vector<RID> &p_exclude);
Vector<RID> get_exclude() const;
@@ -133,9 +129,9 @@ class Physics2DDirectSpaceState : public Object {
GDCLASS(Physics2DDirectSpaceState, Object);
- Dictionary _intersect_ray(const Vector2 &p_from, const Vector2 &p_to, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
+ Dictionary _intersect_ray(const Vector2 &p_from, const Vector2 &p_to, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0);
- Array _intersect_point(const Vector2 &p_point, int p_max_results = 32, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
+ Array _intersect_point(const Vector2 &p_point, int p_max_results = 32, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0);
Array _intersect_shape(const Ref<Physics2DShapeQueryParameters> &p_shape_query, int p_max_results = 32);
Array _cast_motion(const Ref<Physics2DShapeQueryParameters> &p_shape_query);
Array _collide_shape(const Ref<Physics2DShapeQueryParameters> &p_shape_query, int p_max_results = 32);
@@ -145,16 +141,6 @@ protected:
static void _bind_methods();
public:
- enum ObjectTypeMask {
- TYPE_MASK_STATIC_BODY = 1 << 0,
- TYPE_MASK_KINEMATIC_BODY = 1 << 1,
- TYPE_MASK_RIGID_BODY = 1 << 2,
- TYPE_MASK_CHARACTER_BODY = 1 << 3,
- TYPE_MASK_AREA = 1 << 4,
- TYPE_MASK_COLLISION = TYPE_MASK_STATIC_BODY | TYPE_MASK_CHARACTER_BODY | TYPE_MASK_KINEMATIC_BODY | TYPE_MASK_RIGID_BODY
-
- };
-
struct RayResult {
Vector2 position;
@@ -166,7 +152,7 @@ public:
Variant metadata;
};
- virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF) = 0;
struct ShapeResult {
@@ -177,13 +163,13 @@ public:
Variant metadata;
};
- virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_point = false) = 0;
+ virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, bool p_pick_point = false) = 0;
- virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, float p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, float p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF) = 0;
- virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, float p_margin, float &p_closest_safe, float &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, float p_margin, float &p_closest_safe, float &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF) = 0;
- virtual bool collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, float p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual bool collide_shape(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, float p_margin, Vector2 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF) = 0;
struct ShapeRestInfo {
@@ -196,13 +182,11 @@ public:
Variant metadata;
};
- virtual bool rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, float p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual bool rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, float p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF) = 0;
Physics2DDirectSpaceState();
};
-VARIANT_ENUM_CAST(Physics2DDirectSpaceState::ObjectTypeMask);
-
class Physics2DShapeQueryResult : public Reference {
GDCLASS(Physics2DShapeQueryResult, Reference);
@@ -605,14 +589,17 @@ class Physics2DServerManager {
String name;
CreatePhysics2DServerCallback create_callback;
- ClassInfo()
- : name(""), create_callback(NULL) {}
+ ClassInfo() :
+ name(""),
+ create_callback(NULL) {}
- ClassInfo(String p_name, CreatePhysics2DServerCallback p_create_callback)
- : name(p_name), create_callback(p_create_callback) {}
+ ClassInfo(String p_name, CreatePhysics2DServerCallback p_create_callback) :
+ name(p_name),
+ create_callback(p_create_callback) {}
- ClassInfo(const ClassInfo &p_ci)
- : name(p_ci.name), create_callback(p_ci.create_callback) {}
+ ClassInfo(const ClassInfo &p_ci) :
+ name(p_ci.name),
+ create_callback(p_ci.create_callback) {}
};
static Vector<ClassInfo> physics_2d_servers;
diff --git a/servers/physics_server.cpp b/servers/physics_server.cpp
index 88cd728a94..9a9b20bf28 100644
--- a/servers/physics_server.cpp
+++ b/servers/physics_server.cpp
@@ -153,23 +153,15 @@ float PhysicsShapeQueryParameters::get_margin() const {
return margin;
}
-void PhysicsShapeQueryParameters::set_collision_layer(int p_collision_layer) {
+void PhysicsShapeQueryParameters::set_collision_mask(int p_collision_mask) {
- collision_layer = p_collision_layer;
+ collision_mask = p_collision_mask;
}
-int PhysicsShapeQueryParameters::get_collision_layer() const {
+int PhysicsShapeQueryParameters::get_collision_mask() const {
- return collision_layer;
+ return collision_mask;
}
-void PhysicsShapeQueryParameters::set_object_type_mask(int p_object_type_mask) {
-
- object_type_mask = p_object_type_mask;
-}
-int PhysicsShapeQueryParameters::get_object_type_mask() const {
-
- return object_type_mask;
-}
void PhysicsShapeQueryParameters::set_exclude(const Vector<RID> &p_exclude) {
exclude.clear();
@@ -200,11 +192,8 @@ void PhysicsShapeQueryParameters::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_margin", "margin"), &PhysicsShapeQueryParameters::set_margin);
ClassDB::bind_method(D_METHOD("get_margin"), &PhysicsShapeQueryParameters::get_margin);
- ClassDB::bind_method(D_METHOD("set_collision_layer", "collision_layer"), &PhysicsShapeQueryParameters::set_collision_layer);
- ClassDB::bind_method(D_METHOD("get_collision_layer"), &PhysicsShapeQueryParameters::get_collision_layer);
-
- ClassDB::bind_method(D_METHOD("set_object_type_mask", "object_type_mask"), &PhysicsShapeQueryParameters::set_object_type_mask);
- ClassDB::bind_method(D_METHOD("get_object_type_mask"), &PhysicsShapeQueryParameters::get_object_type_mask);
+ ClassDB::bind_method(D_METHOD("set_collision_mask", "collision_mask"), &PhysicsShapeQueryParameters::set_collision_mask);
+ ClassDB::bind_method(D_METHOD("get_collision_mask"), &PhysicsShapeQueryParameters::get_collision_mask);
ClassDB::bind_method(D_METHOD("set_exclude", "exclude"), &PhysicsShapeQueryParameters::set_exclude);
ClassDB::bind_method(D_METHOD("get_exclude"), &PhysicsShapeQueryParameters::get_exclude);
@@ -213,8 +202,7 @@ void PhysicsShapeQueryParameters::_bind_methods() {
PhysicsShapeQueryParameters::PhysicsShapeQueryParameters() {
margin = 0;
- collision_layer = 0x7FFFFFFF;
- object_type_mask = PhysicsDirectSpaceState::TYPE_MASK_COLLISION;
+ collision_mask = 0x7FFFFFFF;
}
/////////////////////////////////////
@@ -249,14 +237,14 @@ Variant PhysicsDirectSpaceState::_intersect_shape(const RID& p_shape, const Tran
}
*/
-Dictionary PhysicsDirectSpaceState::_intersect_ray(const Vector3 &p_from, const Vector3 &p_to, const Vector<RID> &p_exclude, uint32_t p_layers, uint32_t p_object_type_mask) {
+Dictionary PhysicsDirectSpaceState::_intersect_ray(const Vector3 &p_from, const Vector3 &p_to, const Vector<RID> &p_exclude, uint32_t p_collision_mask) {
RayResult inters;
Set<RID> exclude;
for (int i = 0; i < p_exclude.size(); i++)
exclude.insert(p_exclude[i]);
- bool res = intersect_ray(p_from, p_to, inters, exclude, p_layers, p_object_type_mask);
+ bool res = intersect_ray(p_from, p_to, inters, exclude, p_collision_mask);
if (!res)
return Dictionary();
@@ -276,7 +264,7 @@ Array PhysicsDirectSpaceState::_intersect_shape(const Ref<PhysicsShapeQueryParam
Vector<ShapeResult> sr;
sr.resize(p_max_results);
- int rc = intersect_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, sr.ptr(), sr.size(), p_shape_query->exclude, p_shape_query->collision_layer, p_shape_query->object_type_mask);
+ int rc = intersect_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, sr.ptrw(), sr.size(), p_shape_query->exclude, p_shape_query->collision_mask);
Array ret;
ret.resize(rc);
for (int i = 0; i < rc; i++) {
@@ -295,7 +283,7 @@ Array PhysicsDirectSpaceState::_intersect_shape(const Ref<PhysicsShapeQueryParam
Array PhysicsDirectSpaceState::_cast_motion(const Ref<PhysicsShapeQueryParameters> &p_shape_query, const Vector3 &p_motion) {
float closest_safe, closest_unsafe;
- bool res = cast_motion(p_shape_query->shape, p_shape_query->transform, p_motion, p_shape_query->margin, closest_safe, closest_unsafe, p_shape_query->exclude, p_shape_query->collision_layer, p_shape_query->object_type_mask);
+ bool res = cast_motion(p_shape_query->shape, p_shape_query->transform, p_motion, p_shape_query->margin, closest_safe, closest_unsafe, p_shape_query->exclude, p_shape_query->collision_mask);
if (!res)
return Array();
Array ret;
@@ -309,7 +297,7 @@ Array PhysicsDirectSpaceState::_collide_shape(const Ref<PhysicsShapeQueryParamet
Vector<Vector3> ret;
ret.resize(p_max_results * 2);
int rc = 0;
- bool res = collide_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, ret.ptr(), p_max_results, rc, p_shape_query->exclude, p_shape_query->collision_layer, p_shape_query->object_type_mask);
+ bool res = collide_shape(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, ret.ptrw(), p_max_results, rc, p_shape_query->exclude, p_shape_query->collision_mask);
if (!res)
return Array();
Array r;
@@ -322,7 +310,7 @@ Dictionary PhysicsDirectSpaceState::_get_rest_info(const Ref<PhysicsShapeQueryPa
ShapeRestInfo sri;
- bool res = rest_info(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, &sri, p_shape_query->exclude, p_shape_query->collision_layer, p_shape_query->object_type_mask);
+ bool res = rest_info(p_shape_query->shape, p_shape_query->transform, p_shape_query->margin, &sri, p_shape_query->exclude, p_shape_query->collision_mask);
Dictionary r;
if (!res)
return r;
@@ -345,18 +333,11 @@ void PhysicsDirectSpaceState::_bind_methods() {
//ClassDB::bind_method(D_METHOD("intersect_ray","from","to","exclude","umask"),&PhysicsDirectSpaceState::_intersect_ray,DEFVAL(Array()),DEFVAL(0));
//ClassDB::bind_method(D_METHOD("intersect_shape","shape","xform","result_max","exclude","umask"),&PhysicsDirectSpaceState::_intersect_shape,DEFVAL(Array()),DEFVAL(0));
- ClassDB::bind_method(D_METHOD("intersect_ray", "from", "to", "exclude", "collision_layer", "type_mask"), &PhysicsDirectSpaceState::_intersect_ray, DEFVAL(Array()), DEFVAL(0x7FFFFFFF), DEFVAL(TYPE_MASK_COLLISION));
+ ClassDB::bind_method(D_METHOD("intersect_ray", "from", "to", "exclude", "collision_layer"), &PhysicsDirectSpaceState::_intersect_ray, DEFVAL(Array()), DEFVAL(0x7FFFFFFF));
ClassDB::bind_method(D_METHOD("intersect_shape", "shape", "max_results"), &PhysicsDirectSpaceState::_intersect_shape, DEFVAL(32));
ClassDB::bind_method(D_METHOD("cast_motion", "shape", "motion"), &PhysicsDirectSpaceState::_cast_motion);
ClassDB::bind_method(D_METHOD("collide_shape", "shape", "max_results"), &PhysicsDirectSpaceState::_collide_shape, DEFVAL(32));
ClassDB::bind_method(D_METHOD("get_rest_info", "shape"), &PhysicsDirectSpaceState::_get_rest_info);
-
- BIND_ENUM_CONSTANT(TYPE_MASK_STATIC_BODY);
- BIND_ENUM_CONSTANT(TYPE_MASK_KINEMATIC_BODY);
- BIND_ENUM_CONSTANT(TYPE_MASK_RIGID_BODY);
- BIND_ENUM_CONSTANT(TYPE_MASK_CHARACTER_BODY);
- BIND_ENUM_CONSTANT(TYPE_MASK_COLLISION);
- BIND_ENUM_CONSTANT(TYPE_MASK_AREA);
}
int PhysicsShapeQueryResult::get_result_count() const {
@@ -491,7 +472,7 @@ void PhysicsServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("body_apply_torque_impulse", "body", "impulse"), &PhysicsServer::body_apply_torque_impulse);
ClassDB::bind_method(D_METHOD("body_set_axis_velocity", "body", "axis_velocity"), &PhysicsServer::body_set_axis_velocity);
- ClassDB::bind_method(D_METHOD("body_set_axis_lock", "body", "axis"), &PhysicsServer::body_set_axis_lock);
+ ClassDB::bind_method(D_METHOD("body_set_axis_lock", "body", "axis", "lock"), &PhysicsServer::body_set_axis_lock);
ClassDB::bind_method(D_METHOD("body_get_axis_lock", "body"), &PhysicsServer::body_get_axis_lock);
ClassDB::bind_method(D_METHOD("body_add_collision_exception", "body", "excepted_body"), &PhysicsServer::body_add_collision_exception);
@@ -721,11 +702,6 @@ void PhysicsServer::_bind_methods() {
BIND_ENUM_CONSTANT(SPACE_PARAM_BODY_TIME_TO_SLEEP);
BIND_ENUM_CONSTANT(SPACE_PARAM_BODY_ANGULAR_VELOCITY_DAMP_RATIO);
BIND_ENUM_CONSTANT(SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS);
-
- BIND_ENUM_CONSTANT(BODY_AXIS_LOCK_DISABLED);
- BIND_ENUM_CONSTANT(BODY_AXIS_LOCK_X);
- BIND_ENUM_CONSTANT(BODY_AXIS_LOCK_Y);
- BIND_ENUM_CONSTANT(BODY_AXIS_LOCK_Z);
}
PhysicsServer::PhysicsServer() {
diff --git a/servers/physics_server.h b/servers/physics_server.h
index 64c67eae2a..66c3a0afc4 100644
--- a/servers/physics_server.h
+++ b/servers/physics_server.h
@@ -101,8 +101,7 @@ class PhysicsShapeQueryParameters : public Reference {
Transform transform;
float margin;
Set<RID> exclude;
- uint32_t collision_layer;
- uint32_t object_type_mask;
+ uint32_t collision_mask;
protected:
static void _bind_methods();
@@ -118,11 +117,8 @@ public:
void set_margin(float p_margin);
float get_margin() const;
- void set_collision_layer(int p_collision_layer);
- int get_collision_layer() const;
-
- void set_object_type_mask(int p_object_type_mask);
- int get_object_type_mask() const;
+ void set_collision_mask(int p_collision_layer);
+ int get_collision_mask() const;
void set_exclude(const Vector<RID> &p_exclude);
Vector<RID> get_exclude() const;
@@ -134,18 +130,8 @@ class PhysicsDirectSpaceState : public Object {
GDCLASS(PhysicsDirectSpaceState, Object);
-public:
- enum ObjectTypeMask {
- TYPE_MASK_STATIC_BODY = 1 << 0,
- TYPE_MASK_KINEMATIC_BODY = 1 << 1,
- TYPE_MASK_RIGID_BODY = 1 << 2,
- TYPE_MASK_CHARACTER_BODY = 1 << 3,
- TYPE_MASK_AREA = 1 << 4,
- TYPE_MASK_COLLISION = TYPE_MASK_STATIC_BODY | TYPE_MASK_CHARACTER_BODY | TYPE_MASK_KINEMATIC_BODY | TYPE_MASK_RIGID_BODY
- };
-
private:
- Dictionary _intersect_ray(const Vector3 &p_from, const Vector3 &p_to, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, uint32_t p_object_type_mask = TYPE_MASK_COLLISION);
+ Dictionary _intersect_ray(const Vector3 &p_from, const Vector3 &p_to, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_collision_mask = 0);
Array _intersect_shape(const Ref<PhysicsShapeQueryParameters> &p_shape_query, int p_max_results = 32);
Array _cast_motion(const Ref<PhysicsShapeQueryParameters> &p_shape_query, const Vector3 &p_motion);
Array _collide_shape(const Ref<PhysicsShapeQueryParameters> &p_shape_query, int p_max_results = 32);
@@ -163,7 +149,7 @@ public:
int shape;
};
- virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual int intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF) = 0;
struct RayResult {
@@ -175,9 +161,9 @@ public:
int shape;
};
- virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, bool p_pick_ray = false) = 0;
+ virtual bool intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_pick_ray = false) = 0;
- virtual int intersect_shape(const RID &p_shape, const Transform &p_xform, float p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual int intersect_shape(const RID &p_shape, const Transform &p_xform, float p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF) = 0;
struct ShapeRestInfo {
@@ -189,19 +175,17 @@ public:
Vector3 linear_velocity; //velocity at contact point
};
- virtual bool cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, float p_margin, float &p_closest_safe, float &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION, ShapeRestInfo *r_info = NULL) = 0;
+ virtual bool cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, float p_margin, float &p_closest_safe, float &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, ShapeRestInfo *r_info = NULL) = 0;
- virtual bool collide_shape(RID p_shape, const Transform &p_shape_xform, float p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual bool collide_shape(RID p_shape, const Transform &p_shape_xform, float p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF) = 0;
- virtual bool rest_info(RID p_shape, const Transform &p_shape_xform, float p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, uint32_t p_object_type_mask = TYPE_MASK_COLLISION) = 0;
+ virtual bool rest_info(RID p_shape, const Transform &p_shape_xform, float p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF) = 0;
virtual Vector3 get_closest_point_to_object_volume(RID p_object, const Vector3 p_point) const = 0;
PhysicsDirectSpaceState();
};
-VARIANT_ENUM_CAST(PhysicsDirectSpaceState::ObjectTypeMask);
-
class PhysicsShapeQueryResult : public Reference {
GDCLASS(PhysicsShapeQueryResult, Reference);
@@ -437,15 +421,8 @@ public:
virtual void body_apply_torque_impulse(RID p_body, const Vector3 &p_impulse) = 0;
virtual void body_set_axis_velocity(RID p_body, const Vector3 &p_axis_velocity) = 0;
- enum BodyAxisLock {
- BODY_AXIS_LOCK_DISABLED,
- BODY_AXIS_LOCK_X,
- BODY_AXIS_LOCK_Y,
- BODY_AXIS_LOCK_Z,
- };
-
- virtual void body_set_axis_lock(RID p_body, BodyAxisLock p_lock) = 0;
- virtual BodyAxisLock body_get_axis_lock(RID p_body) const = 0;
+ virtual void body_set_axis_lock(RID p_body, int axis, bool lock) = 0;
+ virtual bool body_get_axis_lock(RID p_body) const = 0;
//fix
virtual void body_add_collision_exception(RID p_body, RID p_body_b) = 0;
@@ -668,14 +645,17 @@ class PhysicsServerManager {
String name;
CreatePhysicsServerCallback create_callback;
- ClassInfo()
- : name(""), create_callback(NULL) {}
+ ClassInfo() :
+ name(""),
+ create_callback(NULL) {}
- ClassInfo(String p_name, CreatePhysicsServerCallback p_create_callback)
- : name(p_name), create_callback(p_create_callback) {}
+ ClassInfo(String p_name, CreatePhysicsServerCallback p_create_callback) :
+ name(p_name),
+ create_callback(p_create_callback) {}
- ClassInfo(const ClassInfo &p_ci)
- : name(p_ci.name), create_callback(p_ci.create_callback) {}
+ ClassInfo(const ClassInfo &p_ci) :
+ name(p_ci.name),
+ create_callback(p_ci.create_callback) {}
};
static Vector<ClassInfo> physics_servers;
@@ -705,7 +685,6 @@ VARIANT_ENUM_CAST(PhysicsServer::AreaSpaceOverrideMode);
VARIANT_ENUM_CAST(PhysicsServer::BodyMode);
VARIANT_ENUM_CAST(PhysicsServer::BodyParameter);
VARIANT_ENUM_CAST(PhysicsServer::BodyState);
-VARIANT_ENUM_CAST(PhysicsServer::BodyAxisLock);
VARIANT_ENUM_CAST(PhysicsServer::PinJointParam);
VARIANT_ENUM_CAST(PhysicsServer::JointType);
VARIANT_ENUM_CAST(PhysicsServer::HingeJointParam);
diff --git a/servers/server_wrap_mt_common.h b/servers/server_wrap_mt_common.h
index 51e7f446ea..0416dc6762 100644
--- a/servers/server_wrap_mt_common.h
+++ b/servers/server_wrap_mt_common.h
@@ -61,6 +61,7 @@
if (m_type##_id_pool.size() == 0) { \
int ret; \
command_queue.push_and_ret(this, &ServerNameWrapMT::m_type##allocn, &ret); \
+ SYNC_DEBUG \
} \
rid = m_type##_id_pool.front()->get(); \
m_type##_id_pool.pop_front(); \
@@ -91,6 +92,7 @@
if (m_type##_id_pool.size() == 0) { \
int ret; \
command_queue.push_and_ret(this, &ServerNameWrapMT::m_type##allocn, p1, &ret); \
+ SYNC_DEBUG \
} \
rid = m_type##_id_pool.front()->get(); \
m_type##_id_pool.pop_front(); \
@@ -121,6 +123,7 @@
if (m_type##_id_pool.size() == 0) { \
int ret; \
command_queue.push_and_ret(this, &ServerNameWrapMT::m_type##allocn, p1, p2, &ret); \
+ SYNC_DEBUG \
} \
rid = m_type##_id_pool.front()->get(); \
m_type##_id_pool.pop_front(); \
@@ -151,6 +154,7 @@
if (m_type##_id_pool.size() == 0) { \
int ret; \
command_queue.push_and_ret(this, &ServerNameWrapMT::m_type##allocn, p1, p2, p3, &ret); \
+ SYNC_DEBUG \
} \
rid = m_type##_id_pool.front()->get(); \
m_type##_id_pool.pop_front(); \
@@ -181,6 +185,7 @@
if (m_type##_id_pool.size() == 0) { \
int ret; \
command_queue.push_and_ret(this, &ServerNameWrapMT::m_type##allocn, p1, p2, p3, p4, &ret); \
+ SYNC_DEBUG \
} \
rid = m_type##_id_pool.front()->get(); \
m_type##_id_pool.pop_front(); \
@@ -211,6 +216,7 @@
if (m_type##_id_pool.size() == 0) { \
int ret; \
command_queue.push_and_ret(this, &ServerNameWrapMT::m_type##allocn, p1, p2, p3, p4, p5, &ret); \
+ SYNC_DEBUG \
} \
rid = m_type##_id_pool.front()->get(); \
m_type##_id_pool.pop_front(); \
@@ -255,6 +261,7 @@
virtual void m_type() { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(); \
} \
@@ -264,6 +271,7 @@
virtual void m_type() const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(); \
} \
@@ -299,6 +307,7 @@
virtual void m_type(m_arg1 p1) { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1); \
} \
@@ -308,6 +317,7 @@
virtual void m_type(m_arg1 p1) const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1); \
} \
@@ -359,6 +369,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2) { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2); \
} \
@@ -368,6 +379,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2) const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2); \
} \
@@ -408,6 +420,7 @@
if (Thread::get_caller_id() != server_thread) { \
m_r ret; \
command_queue.push_and_ret(server_name, &ServerName::m_type, p1, p2, p3, &ret); \
+ SYNC_DEBUG \
return ret; \
} else { \
return server_name->m_type(p1, p2, p3); \
@@ -418,6 +431,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3); \
} \
@@ -427,6 +441,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3); \
} \
@@ -478,6 +493,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4); \
} \
@@ -487,6 +503,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4); \
} \
@@ -538,6 +555,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4, p5); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4, p5); \
} \
@@ -547,6 +565,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4, p5); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4, p5); \
} \
@@ -587,6 +606,7 @@
if (Thread::get_caller_id() != server_thread) { \
m_r ret; \
command_queue.push_and_ret(server_name, &ServerName::m_type, p1, p2, p3, p4, p5, p6, &ret); \
+ SYNC_DEBUG \
return ret; \
} else { \
return server_name->m_type(p1, p2, p3, p4, p5, p6); \
@@ -597,6 +617,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4, p5, p6); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4, p5, p6); \
} \
@@ -606,6 +627,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4, p5, p6); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4, p5, p6); \
} \
@@ -657,6 +679,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7) { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4, p5, p6, p7); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4, p5, p6, p7); \
} \
@@ -666,6 +689,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7) const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4, p5, p6, p7); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4, p5, p6, p7); \
} \
@@ -717,6 +741,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7, m_arg8 p8) { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4, p5, p6, p7, p8); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8); \
} \
@@ -726,6 +751,7 @@
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7, m_arg8 p8) const { \
if (Thread::get_caller_id() != server_thread) { \
command_queue.push_and_sync(server_name, &ServerName::m_type, p1, p2, p3, p4, p5, p6, p7, p8); \
+ SYNC_DEBUG \
} else { \
server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8); \
} \
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h
index 21d059c48e..df41c3b5ce 100644
--- a/servers/visual/rasterizer.h
+++ b/servers/visual/rasterizer.h
@@ -116,8 +116,8 @@ public:
virtual void base_changed() = 0;
virtual void base_material_changed() = 0;
- InstanceBase()
- : dependency_item(this) {
+ InstanceBase() :
+ dependency_item(this) {
base_type = VS::INSTANCE_NONE;
cast_shadows = VS::SHADOW_CASTING_SETTING_ON;
@@ -193,6 +193,8 @@ public:
virtual void textures_keep_original(bool p_enable) = 0;
+ virtual void texture_set_proxy(RID p_proxy, RID p_base) = 0;
+
/* SKY API */
virtual RID sky_create() = 0;
@@ -634,6 +636,7 @@ public:
struct CommandPolyLine : public Command {
bool antialiased;
+ bool multiline;
Vector<Point2> triangles;
Vector<Color> triangle_colors;
Vector<Point2> lines;
@@ -641,6 +644,7 @@ public:
CommandPolyLine() {
type = TYPE_POLYLINE;
antialiased = false;
+ multiline = false;
}
};
@@ -1027,7 +1031,7 @@ public:
virtual void restore_render_target() = 0;
virtual void clear_render_target(const Color &p_color) = 0;
virtual void blit_render_target_to_screen(RID p_render_target, const Rect2 &p_screen_rect, int p_screen = 0) = 0;
- virtual void end_frame() = 0;
+ virtual void end_frame(bool p_swap_buffers) = 0;
virtual void finalize() = 0;
virtual ~Rasterizer() {}
diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp
index 8fee6050a0..e10a57c571 100644
--- a/servers/visual/shader_language.cpp
+++ b/servers/visual/shader_language.cpp
@@ -254,6 +254,9 @@ const ShaderLanguage::KeyWord ShaderLanguage::keyword_list[] = {
{ TK_TYPE_ISAMPLER2D, "isampler2D" },
{ TK_TYPE_USAMPLER2D, "usampler2D" },
{ TK_TYPE_SAMPLERCUBE, "samplerCube" },
+ { TK_INTERPOLATION_FLAT, "flat" },
+ { TK_INTERPOLATION_NO_PERSPECTIVE, "noperspective" },
+ { TK_INTERPOLATION_SMOOTH, "smooth" },
{ TK_PRECISION_LOW, "lowp" },
{ TK_PRECISION_MID, "mediump" },
{ TK_PRECISION_HIGH, "highp" },
@@ -658,6 +661,24 @@ ShaderLanguage::DataType ShaderLanguage::get_token_datatype(TokenType p_type) {
return DataType(p_type - TK_TYPE_VOID);
}
+bool ShaderLanguage::is_token_interpolation(TokenType p_type) {
+
+ return (
+ p_type == TK_INTERPOLATION_FLAT ||
+ p_type == TK_INTERPOLATION_NO_PERSPECTIVE ||
+ p_type == TK_INTERPOLATION_SMOOTH);
+}
+
+ShaderLanguage::DataInterpolation ShaderLanguage::get_token_interpolation(TokenType p_type) {
+
+ if (p_type == TK_INTERPOLATION_FLAT)
+ return INTERPOLATION_FLAT;
+ else if (p_type == TK_INTERPOLATION_NO_PERSPECTIVE)
+ return INTERPOLATION_NO_PERSPECTIVE;
+ else
+ return INTERPOLATION_SMOOTH;
+}
+
bool ShaderLanguage::is_token_precision(TokenType p_type) {
return (
@@ -1352,15 +1373,54 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = {
//builtins - trigonometry
{ "sin", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
+ { "sin", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "sin", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "sin", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+
{ "cos", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
+ { "cos", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "cos", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "cos", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+
{ "tan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
+ { "tan", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "tan", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "tan", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+
{ "asin", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
+ { "asin", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "asin", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "asin", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+
{ "acos", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
+ { "acos", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "acos", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "acos", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+
{ "atan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
- { "atan2", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID } },
+ { "atan", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "atan", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "atan", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+ { "atan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID } },
+ { "atan", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID } },
+ { "atan", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID } },
+ { "atan", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID } },
+
{ "sinh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
+ { "sinh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "sinh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "sinh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+
{ "cosh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
+ { "cosh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "cosh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "cosh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+
{ "tanh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID } },
+ { "tanh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID } },
+ { "tanh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID } },
+ { "tanh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID } },
+
//builtins - exponential
{ "pow", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID } },
{ "pow", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID } },
@@ -3537,10 +3597,16 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct
bool uniform = tk.type == TK_UNIFORM;
DataPrecision precision = PRECISION_DEFAULT;
+ DataInterpolation interpolation = INTERPOLATION_SMOOTH;
DataType type;
StringName name;
tk = _get_token();
+ if (is_token_interpolation(tk.type)) {
+ interpolation = get_token_interpolation(tk.type);
+ tk = _get_token();
+ }
+
if (is_token_precision(tk.type)) {
precision = get_token_precision(tk.type);
tk = _get_token();
@@ -3606,7 +3672,7 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct
uniform.default_value.resize(cn->values.size());
- if (!convert_constant(cn, uniform.type, uniform.default_value.ptr())) {
+ if (!convert_constant(cn, uniform.type, uniform.default_value.ptrw())) {
_set_error("Can't convert constant to " + get_datatype_name(uniform.type));
return ERR_PARSE_ERROR;
}
@@ -3738,6 +3804,7 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct
ShaderNode::Varying varying;
varying.type = type;
varying.precission = precision;
+ varying.interpolation = interpolation;
shader->varyings[name] = varying;
tk = _get_token();
diff --git a/servers/visual/shader_language.h b/servers/visual/shader_language.h
index 7a7f6dd71c..e092bf931f 100644
--- a/servers/visual/shader_language.h
+++ b/servers/visual/shader_language.h
@@ -72,6 +72,9 @@ public:
TK_TYPE_ISAMPLER2D,
TK_TYPE_USAMPLER2D,
TK_TYPE_SAMPLERCUBE,
+ TK_INTERPOLATION_FLAT,
+ TK_INTERPOLATION_NO_PERSPECTIVE,
+ TK_INTERPOLATION_SMOOTH,
TK_PRECISION_LOW,
TK_PRECISION_MID,
TK_PRECISION_HIGH,
@@ -192,6 +195,12 @@ public:
PRECISION_DEFAULT,
};
+ enum DataInterpolation {
+ INTERPOLATION_FLAT,
+ INTERPOLATION_NO_PERSPECTIVE,
+ INTERPOLATION_SMOOTH,
+ };
+
enum Operator {
OP_EQUAL,
OP_NOT_EQUAL,
@@ -431,6 +440,7 @@ public:
struct Varying {
DataType type;
+ DataInterpolation interpolation;
DataPrecision precission;
};
@@ -511,6 +521,8 @@ public:
static bool is_token_datatype(TokenType p_type);
static DataType get_token_datatype(TokenType p_type);
+ static bool is_token_interpolation(TokenType p_type);
+ static DataInterpolation get_token_interpolation(TokenType p_type);
static bool is_token_precision(TokenType p_type);
static DataPrecision get_token_precision(TokenType p_type);
static String get_datatype_name(DataType p_type);
diff --git a/servers/visual/visual_server_canvas.cpp b/servers/visual/visual_server_canvas.cpp
index 25724981eb..0fed9cc961 100644
--- a/servers/visual/visual_server_canvas.cpp
+++ b/servers/visual/visual_server_canvas.cpp
@@ -182,7 +182,7 @@ void VisualServerCanvas::render_canvas(Canvas *p_canvas, const Transform2D &p_tr
}
int l = p_canvas->child_items.size();
- Canvas::ChildItem *ci = p_canvas->child_items.ptr();
+ Canvas::ChildItem *ci = p_canvas->child_items.ptrw();
bool has_mirror = false;
for (int i = 0; i < l; i++) {
@@ -416,6 +416,7 @@ void VisualServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Point
ERR_FAIL_COND(!pline);
pline->antialiased = p_antialiased;
+ pline->multiline = false;
if (p_width <= 1) {
pline->lines = p_points;
@@ -486,6 +487,90 @@ void VisualServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Point
canvas_item->commands.push_back(pline);
}
+void VisualServerCanvas::canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width, bool p_antialiased) {
+
+ ERR_FAIL_COND(p_points.size() < 2);
+ Item *canvas_item = canvas_item_owner.getornull(p_item);
+ ERR_FAIL_COND(!canvas_item);
+
+ Item::CommandPolyLine *pline = memnew(Item::CommandPolyLine);
+ ERR_FAIL_COND(!pline);
+
+ pline->antialiased = false; //todo
+ pline->multiline = true;
+
+ // if (p_width <= 1) {
+ pline->lines = p_points;
+ pline->line_colors = p_colors;
+ if (pline->line_colors.size() == 0) {
+ pline->line_colors.push_back(Color(1, 1, 1, 1));
+ } else if (pline->line_colors.size() > 1 && pline->line_colors.size() != pline->lines.size()) {
+ pline->line_colors.resize(1);
+ }
+#if 0
+//width not yet
+ } else {
+ //make a trianglestrip for drawing the line...
+ Vector2 prev_t;
+ pline->triangles.resize(p_points.size() * 2);
+ if (p_antialiased) {
+ pline->lines.resize(p_points.size() * 2);
+ }
+
+ if (p_colors.size() == 0) {
+ pline->triangle_colors.push_back(Color(1, 1, 1, 1));
+ if (p_antialiased) {
+ pline->line_colors.push_back(Color(1, 1, 1, 1));
+ }
+ }
+ if (p_colors.size() == 1) {
+ pline->triangle_colors = p_colors;
+ pline->line_colors = p_colors;
+ } else {
+ pline->triangle_colors.resize(pline->triangles.size());
+ pline->line_colors.resize(pline->lines.size());
+ }
+
+ for (int i = 0; i < p_points.size(); i++) {
+
+ Vector2 t;
+ if (i == p_points.size() - 1) {
+ t = prev_t;
+ } else {
+ t = (p_points[i + 1] - p_points[i]).normalized().tangent();
+ if (i == 0) {
+ prev_t = t;
+ }
+ }
+
+ Vector2 tangent = ((t + prev_t).normalized()) * p_width * 0.5;
+
+ if (p_antialiased) {
+ pline->lines[i] = p_points[i] + tangent;
+ pline->lines[p_points.size() * 2 - i - 1] = p_points[i] - tangent;
+ if (pline->line_colors.size() > 1) {
+ pline->line_colors[i] = p_colors[i];
+ pline->line_colors[p_points.size() * 2 - i - 1] = p_colors[i];
+ }
+ }
+
+ pline->triangles[i * 2 + 0] = p_points[i] + tangent;
+ pline->triangles[i * 2 + 1] = p_points[i] - tangent;
+
+ if (pline->triangle_colors.size() > 1) {
+
+ pline->triangle_colors[i * 2 + 0] = p_colors[i];
+ pline->triangle_colors[i * 2 + 1] = p_colors[i];
+ }
+
+ prev_t = t;
+ }
+ }
+#endif
+ canvas_item->rect_dirty = true;
+ canvas_item->commands.push_back(pline);
+}
+
void VisualServerCanvas::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color) {
Item *canvas_item = canvas_item_owner.getornull(p_item);
diff --git a/servers/visual/visual_server_canvas.h b/servers/visual/visual_server_canvas.h
index a92370f1f0..3143ac847f 100644
--- a/servers/visual/visual_server_canvas.h
+++ b/servers/visual/visual_server_canvas.h
@@ -172,6 +172,7 @@ public:
void canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = 1.0, bool p_antialiased = false);
void canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = 1.0, bool p_antialiased = false);
+ void canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = 1.0, bool p_antialiased = false);
void canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color);
void canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color);
void canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false, RID p_normal_map = RID());
diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp
index 9432d3fdd9..6b527b5cd1 100644
--- a/servers/visual/visual_server_raster.cpp
+++ b/servers/visual/visual_server_raster.cpp
@@ -92,7 +92,7 @@ void VisualServerRaster::request_frame_drawn_callback(Object *p_where, const Str
frame_drawn_callbacks.push_back(fdc);
}
-void VisualServerRaster::draw() {
+void VisualServerRaster::draw(bool p_swap_buffers) {
changes = 0;
@@ -103,7 +103,7 @@ void VisualServerRaster::draw() {
VSG::viewport->draw_viewports();
VSG::scene->render_probes();
_draw_margins();
- VSG::rasterizer->end_frame();
+ VSG::rasterizer->end_frame(p_swap_buffers);
while (frame_drawn_callbacks.front()) {
diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h
index 7551485919..d843c443a2 100644
--- a/servers/visual/visual_server_raster.h
+++ b/servers/visual/visual_server_raster.h
@@ -96,7 +96,6 @@ public:
#define DISPLAY_CHANGED \
changes++;
#endif
- // print_line(String("CHANGED: ") + __FUNCTION__);
#define BIND0R(m_r, m_name) \
m_r m_name() { return BINDBASE->m_name(); }
@@ -168,6 +167,8 @@ public:
BIND1(textures_keep_original, bool)
+ BIND2(texture_set_proxy, RID, RID)
+
/* SKY API */
BIND0R(RID, sky_create)
@@ -550,6 +551,7 @@ public:
BIND6(canvas_item_add_line, RID, const Point2 &, const Point2 &, const Color &, float, bool)
BIND5(canvas_item_add_polyline, RID, const Vector<Point2> &, const Vector<Color> &, float, bool)
+ BIND5(canvas_item_add_multiline, RID, const Vector<Point2> &, const Vector<Color> &, float, bool)
BIND3(canvas_item_add_rect, RID, const Rect2 &, const Color &)
BIND4(canvas_item_add_circle, RID, const Point2 &, float, const Color &)
BIND7(canvas_item_add_texture_rect, RID, const Rect2 &, RID, bool, const Color &, bool, RID)
@@ -625,7 +627,7 @@ public:
virtual void request_frame_drawn_callback(Object *p_where, const StringName &p_method, const Variant &p_userdata);
- virtual void draw();
+ virtual void draw(bool p_swap_buffers);
virtual void sync();
virtual bool has_changed() const;
virtual void init();
diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp
index 5b1eb8357d..dde69eedd3 100644
--- a/servers/visual/visual_server_scene.cpp
+++ b/servers/visual/visual_server_scene.cpp
@@ -303,6 +303,23 @@ void VisualServerScene::instance_set_base(RID p_instance, RID p_base) {
VSG::storage->instance_remove_dependency(instance->base, instance);
+ if (instance->base_type == VS::INSTANCE_GI_PROBE) {
+ //if gi probe is baking, wait until done baking, else race condition may happen when removing it
+ //from octree
+ InstanceGIProbeData *gi_probe = static_cast<InstanceGIProbeData *>(instance->base_data);
+
+ //make sure probes are done baking
+ while (!probe_bake_list.empty()) {
+ OS::get_singleton()->delay_usec(1);
+ }
+ //make sure this one is done baking
+
+ while (gi_probe->dynamic.updating_stage == GI_UPDATE_STAGE_LIGHTING) {
+ //wait until bake is done if it's baking
+ OS::get_singleton()->delay_usec(1);
+ }
+ }
+
if (scenario && instance->octree_id) {
scenario->octree.erase(instance->octree_id); //make dependencies generated by the octree go away
instance->octree_id = 0;
@@ -331,10 +348,6 @@ void VisualServerScene::instance_set_base(RID p_instance, RID p_base) {
InstanceGIProbeData *gi_probe = static_cast<InstanceGIProbeData *>(instance->base_data);
- while (gi_probe->dynamic.updating_stage == GI_UPDATE_STAGE_LIGHTING) {
- //wait until bake is done if it's baking
- OS::get_singleton()->delay_usec(1);
- }
if (gi_probe->update_element.in_list()) {
gi_probe_update_list.remove(&gi_probe->update_element);
}
@@ -597,7 +610,7 @@ void VisualServerScene::instance_set_custom_aabb(RID p_instance, AABB p_aabb) {
ERR_FAIL_COND(!instance);
ERR_FAIL_COND(!is_geometry_instance(instance->base_type));
- if(p_aabb != AABB()) {
+ if (p_aabb != AABB()) {
// Set custom AABB
if (instance->custom_aabb == NULL)
@@ -677,7 +690,7 @@ Vector<ObjectID> VisualServerScene::instances_cull_ray(const Vector3 &p_from, co
int culled = 0;
Instance *cull[1024];
- culled = scenario->octree.cull_segment(p_from, p_to * 10000, cull, 1024);
+ culled = scenario->octree.cull_segment(p_from, p_from + p_to * 10000, cull, 1024);
for (int i = 0; i < culled; i++) {
Instance *instance = cull[i];
@@ -1320,9 +1333,7 @@ void VisualServerScene::render_camera(RID p_camera, RID p_scenario, Size2 p_view
p_viewport_size.width / (float)p_viewport_size.height,
camera->znear,
camera->zfar,
- camera->vaspect
-
- );
+ camera->vaspect);
ortho = true;
} break;
case Camera::PERSPECTIVE: {
@@ -1332,9 +1343,7 @@ void VisualServerScene::render_camera(RID p_camera, RID p_scenario, Size2 p_view
p_viewport_size.width / (float)p_viewport_size.height,
camera->znear,
camera->zfar,
- camera->vaspect
-
- );
+ camera->vaspect);
ortho = false;
} break;
@@ -1855,7 +1864,7 @@ void VisualServerScene::_setup_gi_probe(Instance *p_instance) {
probe->dynamic.level_cell_lists.resize(header->cell_subdiv);
- _gi_probe_fill_local_data(0, 0, 0, 0, 0, cells, header, ldw.ptr(), probe->dynamic.level_cell_lists.ptr());
+ _gi_probe_fill_local_data(0, 0, 0, 0, 0, cells, header, ldw.ptr(), probe->dynamic.level_cell_lists.ptrw());
bool compress = VSG::storage->gi_probe_is_compressed(p_instance->base);
@@ -2274,7 +2283,7 @@ void VisualServerScene::_bake_gi_probe_light(const GIProbeDataHeader *header, co
if (angle > light_cache.spot_angle)
continue;
- float d = CLAMP(angle / light_cache.spot_angle, 1, 0);
+ float d = CLAMP(angle / light_cache.spot_angle, 0, 1);
att *= powf(1.0 - d, light_cache.spot_attenuation);
}
@@ -2589,7 +2598,15 @@ void VisualServerScene::_bake_gi_probe(Instance *p_gi_probe) {
}
//send back to main thread to update un little chunks
+ if (probe_bake_mutex) {
+ probe_bake_mutex->lock();
+ }
+
probe_data->dynamic.updating_stage = GI_UPDATE_STAGE_UPLOADING;
+
+ if (probe_bake_mutex) {
+ probe_bake_mutex->unlock();
+ }
}
bool VisualServerScene::_check_gi_probe(Instance *p_gi_probe) {
@@ -2721,12 +2738,11 @@ void VisualServerScene::render_probes() {
switch (probe->dynamic.updating_stage) {
case GI_UPDATE_STAGE_CHECK: {
- if (_check_gi_probe(instance_probe) || force_lighting) {
- //send to lighting thread
- probe->dynamic.updating_stage = GI_UPDATE_STAGE_LIGHTING;
+ if (_check_gi_probe(instance_probe) || force_lighting) { //send to lighting thread
#ifndef NO_THREADS
probe_bake_mutex->lock();
+ probe->dynamic.updating_stage = GI_UPDATE_STAGE_LIGHTING;
probe_bake_list.push_back(instance_probe);
probe_bake_mutex->unlock();
probe_bake_sem->post();
diff --git a/servers/visual/visual_server_scene.h b/servers/visual/visual_server_scene.h
index d075be76ca..9e4701de65 100644
--- a/servers/visual/visual_server_scene.h
+++ b/servers/visual/visual_server_scene.h
@@ -120,9 +120,9 @@ public:
Camera() {
visible_layers = 0xFFFFFFFF;
- fov = 65;
+ fov = 70;
type = PERSPECTIVE;
- znear = 0.1;
+ znear = 0.05;
zfar = 100;
size = 1.0;
vaspect = false;
@@ -229,8 +229,9 @@ public:
singleton->_instance_queue_update(this, false, true);
}
- Instance()
- : scenario_item(this), update_item(this) {
+ Instance() :
+ scenario_item(this),
+ update_item(this) {
octree_id = 0;
scenario = NULL;
@@ -305,8 +306,8 @@ public:
int render_step;
- InstanceReflectionProbeData()
- : update_list(this) {
+ InstanceReflectionProbeData() :
+ update_list(this) {
reflection_dirty = true;
render_step = -1;
@@ -434,10 +435,11 @@ public:
SelfList<InstanceGIProbeData> update_element;
- InstanceGIProbeData()
- : update_element(this) {
+ InstanceGIProbeData() :
+ update_element(this) {
invalid = true;
base_version = 0;
+ dynamic.updating_stage = GI_UPDATE_STAGE_CHECK;
}
};
diff --git a/servers/visual/visual_server_wrap_mt.cpp b/servers/visual/visual_server_wrap_mt.cpp
index 1a03c72529..b86a0ae3f6 100644
--- a/servers/visual/visual_server_wrap_mt.cpp
+++ b/servers/visual/visual_server_wrap_mt.cpp
@@ -37,14 +37,7 @@ void VisualServerWrapMT::thread_exit() {
void VisualServerWrapMT::thread_draw() {
- draw_mutex->lock();
-
- draw_pending--;
- bool draw = (draw_pending == 0); // only draw when no more flushes are pending
-
- draw_mutex->unlock();
-
- if (draw) {
+ if (!atomic_decrement(&draw_pending)) {
visual_server->draw();
}
@@ -52,11 +45,7 @@ void VisualServerWrapMT::thread_draw() {
void VisualServerWrapMT::thread_flush() {
- draw_mutex->lock();
-
- draw_pending--;
-
- draw_mutex->unlock();
+ atomic_decrement(&draw_pending);
}
void VisualServerWrapMT::_thread_callback(void *_instance) {
@@ -92,36 +81,23 @@ void VisualServerWrapMT::sync() {
if (create_thread) {
- /* TODO: sync with the thread */
-
- /*
- ERR_FAIL_COND(!draw_mutex);
- draw_mutex->lock();
- draw_pending++; //cambiar por un saferefcount
- draw_mutex->unlock();
- */
- //command_queue.push( this, &VisualServerWrapMT::thread_flush);
+ atomic_increment(&draw_pending);
+ command_queue.push_and_sync(this, &VisualServerWrapMT::thread_flush);
} else {
command_queue.flush_all(); //flush all pending from other threads
}
}
-void VisualServerWrapMT::draw() {
+void VisualServerWrapMT::draw(bool p_swap_buffers) {
if (create_thread) {
- /* TODO: Make it draw
- ERR_FAIL_COND(!draw_mutex);
- draw_mutex->lock();
- draw_pending++; //cambiar por un saferefcount
- draw_mutex->unlock();
-
- command_queue.push( this, &VisualServerWrapMT::thread_draw);
- */
+ atomic_increment(&draw_pending);
+ command_queue.push(this, &VisualServerWrapMT::thread_draw);
} else {
- visual_server->draw();
+ visual_server->draw(p_swap_buffers);
}
}
@@ -129,7 +105,6 @@ void VisualServerWrapMT::init() {
if (create_thread) {
- draw_mutex = Mutex::create();
print_line("CREATING RENDER THREAD");
OS::get_singleton()->release_rendering_thread();
if (create_thread) {
@@ -181,18 +156,14 @@ void VisualServerWrapMT::finish() {
canvas_item_free_cached_ids();
canvas_light_occluder_free_cached_ids();
canvas_occluder_polygon_free_cached_ids();
-
- if (draw_mutex)
- memdelete(draw_mutex);
}
-VisualServerWrapMT::VisualServerWrapMT(VisualServer *p_contained, bool p_create_thread)
- : command_queue(p_create_thread) {
+VisualServerWrapMT::VisualServerWrapMT(VisualServer *p_contained, bool p_create_thread) :
+ command_queue(p_create_thread) {
visual_server = p_contained;
create_thread = p_create_thread;
thread = NULL;
- draw_mutex = NULL;
draw_pending = 0;
draw_thread_up = false;
alloc_mutex = Mutex::create();
diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h
index e120eb5ad3..94f450c024 100644
--- a/servers/visual/visual_server_wrap_mt.h
+++ b/servers/visual/visual_server_wrap_mt.h
@@ -52,8 +52,7 @@ class VisualServerWrapMT : public VisualServer {
volatile bool draw_thread_up;
bool create_thread;
- Mutex *draw_mutex;
- int draw_pending;
+ uint64_t draw_pending;
void thread_draw();
void thread_flush();
@@ -101,6 +100,8 @@ public:
FUNC1(textures_keep_original, bool)
+ FUNC2(texture_set_proxy, RID, RID)
+
/* SKY API */
FUNCRID(sky)
@@ -466,6 +467,7 @@ public:
FUNC6(canvas_item_add_line, RID, const Point2 &, const Point2 &, const Color &, float, bool)
FUNC5(canvas_item_add_polyline, RID, const Vector<Point2> &, const Vector<Color> &, float, bool)
+ FUNC5(canvas_item_add_multiline, RID, const Vector<Point2> &, const Vector<Color> &, float, bool)
FUNC3(canvas_item_add_rect, RID, const Rect2 &, const Color &)
FUNC4(canvas_item_add_circle, RID, const Point2 &, float, const Color &)
FUNC7(canvas_item_add_texture_rect, RID, const Rect2 &, RID, bool, const Color &, bool, RID)
@@ -543,7 +545,7 @@ public:
virtual void init();
virtual void finish();
- virtual void draw();
+ virtual void draw(bool p_swap_buffers);
virtual void sync();
FUNC0RC(bool, has_changed)
diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp
index 10f350d667..153cff2f22 100644
--- a/servers/visual_server.cpp
+++ b/servers/visual_server.cpp
@@ -728,7 +728,7 @@ Error VisualServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint32_
PoolVector<int>::Read rb = bones.read();
PoolVector<float>::Read rw = weights.read();
- AABB *bptr = r_bone_aabb.ptr();
+ AABB *bptr = r_bone_aabb.ptrw();
for (int i = 0; i < vs; i++) {
@@ -1347,7 +1347,7 @@ Array VisualServer::_get_array_from_surface(uint32_t p_format, PoolVector<uint8_
const uint16_t *v = (const uint16_t *)&r[j * total_elem_size + offsets[i]];
for (int k = 0; k < 4; k++) {
- w[j * 4 + k] = float(v[k] / 65535.0) * 2.0 - 1.0;
+ w[j * 4 + k] = float(v[k] / 65535.0);
}
}
} else {
@@ -1481,7 +1481,7 @@ Array VisualServer::_mesh_surface_get_skeleton_aabb_bind(RID p_mesh, int p_surfa
void VisualServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("force_sync"), &VisualServer::sync);
- ClassDB::bind_method(D_METHOD("force_draw"), &VisualServer::draw);
+ ClassDB::bind_method(D_METHOD("force_draw", "swap_buffers"), &VisualServer::draw, DEFVAL(true));
ClassDB::bind_method(D_METHOD("texture_create"), &VisualServer::texture_create);
ClassDB::bind_method(D_METHOD("texture_create_from_image", "image", "flags"), &VisualServer::texture_create_from_image, DEFVAL(TEXTURE_FLAGS_DEFAULT));
@@ -1658,7 +1658,7 @@ void VisualServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("free", "rid"), &VisualServer::free);
ClassDB::bind_method(D_METHOD("request_frame_drawn_callback", "where", "method", "userdata"), &VisualServer::request_frame_drawn_callback);
- ClassDB::bind_method(D_METHOD("draw"), &VisualServer::draw);
+ ClassDB::bind_method(D_METHOD("draw", "swap_buffers"), &VisualServer::draw, DEFVAL(true));
ClassDB::bind_method(D_METHOD("sync"), &VisualServer::sync);
ClassDB::bind_method(D_METHOD("has_changed"), &VisualServer::has_changed);
ClassDB::bind_method(D_METHOD("init"), &VisualServer::init);
diff --git a/servers/visual_server.h b/servers/visual_server.h
index c4b1583009..de5ef7da0a 100644
--- a/servers/visual_server.h
+++ b/servers/visual_server.h
@@ -141,6 +141,8 @@ public:
virtual void textures_keep_original(bool p_enable) = 0;
+ virtual void texture_set_proxy(RID p_proxy, RID p_base) = 0;
+
/* SKY API */
virtual RID sky_create() = 0;
@@ -813,6 +815,7 @@ public:
virtual void canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = 1.0, bool p_antialiased = false) = 0;
virtual void canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = 1.0, bool p_antialiased = false) = 0;
+ virtual void canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = 1.0, bool p_antialiased = false) = 0;
virtual void canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color) = 0;
virtual void canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color) = 0;
virtual void canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false, RID p_normal_map = RID()) = 0;
@@ -909,7 +912,7 @@ public:
/* EVENT QUEUING */
- virtual void draw() = 0;
+ virtual void draw(bool p_swap_buffers = true) = 0;
virtual void sync() = 0;
virtual bool has_changed() const = 0;
virtual void init() = 0;
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 05aface43b..7d2009cdd9 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -57,7 +57,7 @@ Files extracted from upstream source:
- Version: 1.06
- License: OFL-1.1
-Use UI font if exists, because it has tight vertial metrix and good for UI.
+Use UI font if exists, because it has tight vertical metrics and good for UI.
### Hack Regular
@@ -86,7 +86,7 @@ Files extracted from upstream source:
## glad
- Upstream: https://github.com/Dav1dde/glad
-- Version: 0.1.14a0
+- Version: 0.1.16a0
- License: MIT
The files we package are automatically generated.
@@ -239,7 +239,7 @@ Collection of single-file libraries used in Godot components.
* License: RSA Message-Digest License
- `pcg.{cpp,h}`
* Upstream: http://www.pcg-random.org
- * Version: minimal C implemention, http://www.pcg-random.org/download.html
+ * Version: minimal C implementation, http://www.pcg-random.org/download.html
* License: Apache 2.0
- `sha256.{c,h}`
* Upstream: https://github.com/ilvn/SHA256
@@ -266,6 +266,19 @@ Collection of single-file libraries used in Godot components.
* Version: ?
* License: BSD
+### poshlib
+
+- Upstream: http://poshlib.hookatooka.com/poshlib/trac.cgi (username guest, password guest123)
+- Version: 1.3.002
+- License: MIT
+
+Files extracted from the upstream source:
+
+- posh.c
+- posh.h
+
+(no license file was included with the upstream distribution)
+
### scene
- `mikktspace.{c,h}`
@@ -281,6 +294,16 @@ Collection of single-file libraries used in Godot components.
* Version: 1.11
* License: Public Domain (Unlicense) or MIT
+## thekla_atlas
+
+- Upstream: https://github.com/Thekla/thekla_atlas
+- Version: 80a1430 (git)
+- License: zlib
+
+Files extracted from the upstream source:
+
+- Relevant sources from src/
+- License.txt
## nanosvg
@@ -390,17 +413,13 @@ Files extracted from upstream source:
## tinyexr
- Upstream: https://github.com/syoyo/tinyexr
-- Version: 0.9.5+ (git a145d69)
+- Version: 0.9.5+ (git 9f784ca - 24 October 2017)
- License: BSD-3-Clause
Files extracted from upstream source:
- `tinyexr.{cc,h}`
-Important: Some changes were made to get TinyEXR to build on the ancient
-MinGW-w64 toolchain of Travis CI.
-https://github.com/godotengine/godot/commit/37f5e1dcd94611dd5b670f013abf0323e8b47def
-
## zlib
diff --git a/thirdparty/glad/KHR/khrplatform.h b/thirdparty/glad/KHR/khrplatform.h
index 07b61b9bd6..1ad3554a76 100644
--- a/thirdparty/glad/KHR/khrplatform.h
+++ b/thirdparty/glad/KHR/khrplatform.h
@@ -102,8 +102,7 @@
#elif defined (__SYMBIAN32__)
# define KHRONOS_APICALL IMPORT_C
#elif defined(__ANDROID__)
-# include <sys/cdefs.h>
-# define KHRONOS_APICALL __attribute__((visibility("default"))) __NDK_FPABI__
+# define KHRONOS_APICALL __attribute__((visibility("default")))
#else
# define KHRONOS_APICALL
#endif
diff --git a/thirdparty/glad/glad.c b/thirdparty/glad/glad.c
index 2d756ec3f6..f87ec8cf93 100644
--- a/thirdparty/glad/glad.c
+++ b/thirdparty/glad/glad.c
@@ -1,6 +1,6 @@
/*
- OpenGL loader generated by glad 0.1.14a0 on Wed Jun 14 20:12:45 2017.
+ OpenGL loader generated by glad 0.1.16a0 on Thu Nov 30 06:21:28 2017.
Language/Generator: C/C++
Specification: gl
@@ -92,7 +92,7 @@ int open_gl(void) {
}
static
-void close_gl() {
+void close_gl(void) {
if(libGL != NULL) {
dlclose(libGL);
libGL = NULL;
@@ -165,7 +165,18 @@ static int get_exts(void) {
}
for(index = 0; index < (unsigned)num_exts_i; index++) {
- exts_i[index] = (const char*)glGetStringi(GL_EXTENSIONS, index);
+ const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index);
+ size_t len = strlen(gl_str_tmp);
+
+ char *local_str = (char*)malloc((len+1) * sizeof(*exts_i));
+ if(local_str != NULL) {
+#if _MSC_VER >= 1400
+ strncpy_s(local_str, len+1, gl_str_tmp, len);
+#else
+ strncpy(local_str, gl_str_tmp, len+1);
+#endif
+ }
+ exts_i[index] = local_str;
}
}
#endif
@@ -174,6 +185,10 @@ static int get_exts(void) {
static void free_exts(void) {
if (exts_i != NULL) {
+ int index;
+ for(index = 0; index < num_exts_i; index++) {
+ free((char *)exts_i[index]);
+ }
free((void *)exts_i);
exts_i = NULL;
}
@@ -207,11 +222,11 @@ static int has_ext(const char *ext) {
#ifdef _GLAD_IS_SOME_NEW_VERSION
} else {
int index;
-
+ if(exts_i == NULL) return 0;
for(index = 0; index < num_exts_i; index++) {
const char *e = exts_i[index];
- if(strcmp(e, ext) == 0) {
+ if(exts_i[index] != NULL && strcmp(e, ext) == 0) {
return 1;
}
}
diff --git a/thirdparty/glad/glad/glad.h b/thirdparty/glad/glad/glad.h
index cb78df071e..69413ef65f 100644
--- a/thirdparty/glad/glad/glad.h
+++ b/thirdparty/glad/glad/glad.h
@@ -1,6 +1,6 @@
/*
- OpenGL loader generated by glad 0.1.14a0 on Wed Jun 14 20:12:45 2017.
+ OpenGL loader generated by glad 0.1.16a0 on Thu Nov 30 06:21:28 2017.
Language/Generator: C/C++
Specification: gl
@@ -31,6 +31,9 @@
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
#endif
+#ifndef NOMINMAX
+#define NOMINMAX 1
+#endif
#include <windows.h>
#endif
@@ -139,6 +142,7 @@ typedef float GLfloat;
typedef float GLclampf;
typedef double GLdouble;
typedef double GLclampd;
+typedef void *GLeglClientBufferEXT;
typedef void *GLeglImageOES;
typedef char GLchar;
typedef char GLcharARB;
@@ -888,15 +892,17 @@ typedef void (APIENTRY *GLVULKANPROCNV)(void);
#define GL_TEXTURE_FILTER_CONTROL 0x8500
#define GL_DEPTH_TEXTURE_MODE 0x884B
#define GL_COMPARE_R_TO_TEXTURE 0x884E
-#define GL_FUNC_ADD 0x8006
-#define GL_FUNC_SUBTRACT 0x800A
-#define GL_FUNC_REVERSE_SUBTRACT 0x800B
-#define GL_MIN 0x8007
-#define GL_MAX 0x8008
+#define GL_BLEND_COLOR 0x8005
+#define GL_BLEND_EQUATION 0x8009
#define GL_CONSTANT_COLOR 0x8001
#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
#define GL_CONSTANT_ALPHA 0x8003
#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_FUNC_ADD 0x8006
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
#define GL_BUFFER_SIZE 0x8764
#define GL_BUFFER_USAGE 0x8765
#define GL_QUERY_COUNTER_BITS 0x8864
@@ -1504,10 +1510,10 @@ GLAPI PFNGLDISABLEPROC glad_glDisable;
typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap);
GLAPI PFNGLENABLEPROC glad_glEnable;
#define glEnable glad_glEnable
-typedef void (APIENTRYP PFNGLFINISHPROC)();
+typedef void (APIENTRYP PFNGLFINISHPROC)(void);
GLAPI PFNGLFINISHPROC glad_glFinish;
#define glFinish glad_glFinish
-typedef void (APIENTRYP PFNGLFLUSHPROC)();
+typedef void (APIENTRYP PFNGLFLUSHPROC)(void);
GLAPI PFNGLFLUSHPROC glad_glFlush;
#define glFlush glad_glFlush
typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor);
@@ -1543,7 +1549,7 @@ GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv;
typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data);
GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev;
#define glGetDoublev glad_glGetDoublev
-typedef GLenum (APIENTRYP PFNGLGETERRORPROC)();
+typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void);
GLAPI PFNGLGETERRORPROC glad_glGetError;
#define glGetError glad_glGetError
typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data);
@@ -1582,7 +1588,7 @@ GLAPI PFNGLVIEWPORTPROC glad_glViewport;
typedef void (APIENTRYP PFNGLNEWLISTPROC)(GLuint list, GLenum mode);
GLAPI PFNGLNEWLISTPROC glad_glNewList;
#define glNewList glad_glNewList
-typedef void (APIENTRYP PFNGLENDLISTPROC)();
+typedef void (APIENTRYP PFNGLENDLISTPROC)(void);
GLAPI PFNGLENDLISTPROC glad_glEndList;
#define glEndList glad_glEndList
typedef void (APIENTRYP PFNGLCALLLISTPROC)(GLuint list);
@@ -1708,7 +1714,7 @@ GLAPI PFNGLEDGEFLAGPROC glad_glEdgeFlag;
typedef void (APIENTRYP PFNGLEDGEFLAGVPROC)(const GLboolean *flag);
GLAPI PFNGLEDGEFLAGVPROC glad_glEdgeFlagv;
#define glEdgeFlagv glad_glEdgeFlagv
-typedef void (APIENTRYP PFNGLENDPROC)();
+typedef void (APIENTRYP PFNGLENDPROC)(void);
GLAPI PFNGLENDPROC glad_glEnd;
#define glEnd glad_glEnd
typedef void (APIENTRYP PFNGLINDEXDPROC)(GLdouble c);
@@ -2131,7 +2137,7 @@ GLAPI PFNGLSELECTBUFFERPROC glad_glSelectBuffer;
typedef GLint (APIENTRYP PFNGLRENDERMODEPROC)(GLenum mode);
GLAPI PFNGLRENDERMODEPROC glad_glRenderMode;
#define glRenderMode glad_glRenderMode
-typedef void (APIENTRYP PFNGLINITNAMESPROC)();
+typedef void (APIENTRYP PFNGLINITNAMESPROC)(void);
GLAPI PFNGLINITNAMESPROC glad_glInitNames;
#define glInitNames glad_glInitNames
typedef void (APIENTRYP PFNGLLOADNAMEPROC)(GLuint name);
@@ -2140,7 +2146,7 @@ GLAPI PFNGLLOADNAMEPROC glad_glLoadName;
typedef void (APIENTRYP PFNGLPASSTHROUGHPROC)(GLfloat token);
GLAPI PFNGLPASSTHROUGHPROC glad_glPassThrough;
#define glPassThrough glad_glPassThrough
-typedef void (APIENTRYP PFNGLPOPNAMEPROC)();
+typedef void (APIENTRYP PFNGLPOPNAMEPROC)(void);
GLAPI PFNGLPOPNAMEPROC glad_glPopName;
#define glPopName glad_glPopName
typedef void (APIENTRYP PFNGLPUSHNAMEPROC)(GLuint name);
@@ -2158,7 +2164,7 @@ GLAPI PFNGLINDEXMASKPROC glad_glIndexMask;
typedef void (APIENTRYP PFNGLACCUMPROC)(GLenum op, GLfloat value);
GLAPI PFNGLACCUMPROC glad_glAccum;
#define glAccum glad_glAccum
-typedef void (APIENTRYP PFNGLPOPATTRIBPROC)();
+typedef void (APIENTRYP PFNGLPOPATTRIBPROC)(void);
GLAPI PFNGLPOPATTRIBPROC glad_glPopAttrib;
#define glPopAttrib glad_glPopAttrib
typedef void (APIENTRYP PFNGLPUSHATTRIBPROC)(GLbitfield mask);
@@ -2308,7 +2314,7 @@ GLAPI PFNGLISLISTPROC glad_glIsList;
typedef void (APIENTRYP PFNGLFRUSTUMPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
GLAPI PFNGLFRUSTUMPROC glad_glFrustum;
#define glFrustum glad_glFrustum
-typedef void (APIENTRYP PFNGLLOADIDENTITYPROC)();
+typedef void (APIENTRYP PFNGLLOADIDENTITYPROC)(void);
GLAPI PFNGLLOADIDENTITYPROC glad_glLoadIdentity;
#define glLoadIdentity glad_glLoadIdentity
typedef void (APIENTRYP PFNGLLOADMATRIXFPROC)(const GLfloat *m);
@@ -2329,10 +2335,10 @@ GLAPI PFNGLMULTMATRIXDPROC glad_glMultMatrixd;
typedef void (APIENTRYP PFNGLORTHOPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
GLAPI PFNGLORTHOPROC glad_glOrtho;
#define glOrtho glad_glOrtho
-typedef void (APIENTRYP PFNGLPOPMATRIXPROC)();
+typedef void (APIENTRYP PFNGLPOPMATRIXPROC)(void);
GLAPI PFNGLPOPMATRIXPROC glad_glPopMatrix;
#define glPopMatrix glad_glPopMatrix
-typedef void (APIENTRYP PFNGLPUSHMATRIXPROC)();
+typedef void (APIENTRYP PFNGLPUSHMATRIXPROC)(void);
GLAPI PFNGLPUSHMATRIXPROC glad_glPushMatrix;
#define glPushMatrix glad_glPushMatrix
typedef void (APIENTRYP PFNGLROTATEDPROC)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
@@ -2441,7 +2447,7 @@ GLAPI PFNGLINDEXUBPROC glad_glIndexub;
typedef void (APIENTRYP PFNGLINDEXUBVPROC)(const GLubyte *c);
GLAPI PFNGLINDEXUBVPROC glad_glIndexubv;
#define glIndexubv glad_glIndexubv
-typedef void (APIENTRYP PFNGLPOPCLIENTATTRIBPROC)();
+typedef void (APIENTRYP PFNGLPOPCLIENTATTRIBPROC)(void);
GLAPI PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib;
#define glPopClientAttrib glad_glPopClientAttrib
typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBPROC)(GLbitfield mask);
@@ -2839,7 +2845,7 @@ GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation;
typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader);
GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader;
#define glCompileShader glad_glCompileShader
-typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)();
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void);
GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram;
#define glCreateProgram glad_glCreateProgram
typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type);
@@ -3141,7 +3147,7 @@ GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi;
typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode);
GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback;
#define glBeginTransformFeedback glad_glBeginTransformFeedback
-typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)();
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void);
GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback;
#define glEndTransformFeedback glad_glEndTransformFeedback
typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
@@ -3162,7 +3168,7 @@ GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor;
typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode);
GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender;
#define glBeginConditionalRender glad_glBeginConditionalRender
-typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)();
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void);
GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender;
#define glEndConditionalRender glad_glEndConditionalRender
typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
diff --git a/thirdparty/thekla_atlas/LICENSE b/thirdparty/thekla_atlas/LICENSE
new file mode 100644
index 0000000000..164e7d3a2b
--- /dev/null
+++ b/thirdparty/thekla_atlas/LICENSE
@@ -0,0 +1,8 @@
+Copyright (c) 2013 Thekla, Inc
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/thirdparty/thekla_atlas/nvconfig.h b/thirdparty/thekla_atlas/nvconfig.h
new file mode 100644
index 0000000000..815bc3ec75
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvconfig.h
@@ -0,0 +1,37 @@
+#ifndef NV_CONFIG
+#define NV_CONFIG
+
+#if NV_OS_DARWIN
+
+// Hardcoded.
+
+#define NV_HAVE_UNISTD_H
+#define NV_HAVE_STDARG_H
+#define NV_HAVE_SIGNAL_H
+#define NV_HAVE_EXECINFO_H
+//#define NV_HAVE_MALLOC_H
+
+#else
+
+//#define HAVE_UNISTD_H
+#define NV_HAVE_STDARG_H
+//#define HAVE_SIGNAL_H
+//#define HAVE_EXECINFO_H
+//#define HAVE_MALLOC_H
+
+#endif
+
+//#define HAVE_OPENMP // Only in MSVC pro edition.
+
+//#cmakedefine HAVE_PNG
+//#cmakedefine HAVE_JPEG
+//#cmakedefine HAVE_TIFF
+//#cmakedefine HAVE_OPENEXR
+//#cmakedefine HAVE_FREEIMAGE
+#if !NV_OS_IOS
+#define NV_HAVE_STBIMAGE
+#endif
+
+//#cmakedefine HAVE_MAYA
+
+#endif // NV_CONFIG
diff --git a/thirdparty/thekla_atlas/nvcore/Array.h b/thirdparty/thekla_atlas/nvcore/Array.h
new file mode 100644
index 0000000000..b295cb2b0c
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Array.h
@@ -0,0 +1,182 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_ARRAY_H
+#define NV_CORE_ARRAY_H
+
+/*
+This array class requires the elements to be relocable; it uses memmove and realloc. Ideally I should be
+using swap, but I honestly don't care. The only thing that you should be aware of is that internal pointers
+are not supported.
+
+Note also that push_back and resize does not support inserting arguments elements that are in the same
+container. This is forbidden to prevent an extra copy.
+*/
+
+
+#include "Memory.h"
+#include "Debug.h"
+#include "ForEach.h" // PseudoIndex
+
+
+namespace nv
+{
+ class Stream;
+
+ /**
+ * Replacement for std::vector that is easier to debug and provides
+ * some nice foreach enumerators.
+ */
+ template<typename T>
+ class NVCORE_CLASS Array {
+ public:
+ typedef uint size_type;
+
+ // Default constructor.
+ NV_FORCEINLINE Array() : m_buffer(NULL), m_capacity(0), m_size(0) {}
+
+ // Copy constructor.
+ NV_FORCEINLINE Array(const Array & a) : m_buffer(NULL), m_capacity(0), m_size(0) {
+ copy(a.m_buffer, a.m_size);
+ }
+
+ // Constructor that initializes the vector with the given elements.
+ NV_FORCEINLINE Array(const T * ptr, uint num) : m_buffer(NULL), m_capacity(0), m_size(0) {
+ copy(ptr, num);
+ }
+
+ // Allocate array.
+ NV_FORCEINLINE explicit Array(uint capacity) : m_buffer(NULL), m_capacity(0), m_size(0) {
+ setArrayCapacity(capacity);
+ }
+
+ // Destructor.
+ NV_FORCEINLINE ~Array() {
+ clear();
+ free<T>(m_buffer);
+ }
+
+
+ /// Const element access.
+ NV_FORCEINLINE const T & operator[]( uint index ) const
+ {
+ nvDebugCheck(index < m_size);
+ return m_buffer[index];
+ }
+ NV_FORCEINLINE const T & at( uint index ) const
+ {
+ nvDebugCheck(index < m_size);
+ return m_buffer[index];
+ }
+
+ /// Element access.
+ NV_FORCEINLINE T & operator[] ( uint index )
+ {
+ nvDebugCheck(index < m_size);
+ return m_buffer[index];
+ }
+ NV_FORCEINLINE T & at( uint index )
+ {
+ nvDebugCheck(index < m_size);
+ return m_buffer[index];
+ }
+
+ /// Get vector size.
+ NV_FORCEINLINE uint size() const { return m_size; }
+
+ /// Get vector size.
+ NV_FORCEINLINE uint count() const { return m_size; }
+
+ /// Get vector capacity.
+ NV_FORCEINLINE uint capacity() const { return m_capacity; }
+
+ /// Get const vector pointer.
+ NV_FORCEINLINE const T * buffer() const { return m_buffer; }
+
+ /// Get vector pointer.
+ NV_FORCEINLINE T * buffer() { return m_buffer; }
+
+ /// Provide begin/end pointers for C++11 range-based for loops.
+ NV_FORCEINLINE T * begin() { return m_buffer; }
+ NV_FORCEINLINE T * end() { return m_buffer + m_size; }
+ NV_FORCEINLINE const T * begin() const { return m_buffer; }
+ NV_FORCEINLINE const T * end() const { return m_buffer + m_size; }
+
+ /// Is vector empty.
+ NV_FORCEINLINE bool isEmpty() const { return m_size == 0; }
+
+ /// Is a null vector.
+ NV_FORCEINLINE bool isNull() const { return m_buffer == NULL; }
+
+
+ T & append();
+ void push_back( const T & val );
+ void pushBack( const T & val );
+ Array<T> & append( const T & val );
+ Array<T> & operator<< ( T & t );
+ void pop_back();
+ void popBack(uint count = 1);
+ void popFront(uint count = 1);
+ const T & back() const;
+ T & back();
+ const T & front() const;
+ T & front();
+ bool contains(const T & e) const;
+ bool find(const T & element, uint * indexPtr) const;
+ bool find(const T & element, uint begin, uint end, uint * indexPtr) const;
+ void removeAt(uint index);
+ bool remove(const T & element);
+ void insertAt(uint index, const T & val = T());
+ void append(const Array<T> & other);
+ void append(const T other[], uint count);
+ void replaceWithLast(uint index);
+ void resize(uint new_size);
+ void resize(uint new_size, const T & elem);
+ void fill(const T & elem);
+ void clear();
+ void shrink();
+ void reserve(uint desired_size);
+ void copy(const T * data, uint count);
+ Array<T> & operator=( const Array<T> & a );
+ T * release();
+
+
+ // Array enumerator.
+ typedef uint PseudoIndex;
+
+ NV_FORCEINLINE PseudoIndex start() const { return 0; }
+ NV_FORCEINLINE bool isDone(const PseudoIndex & i) const { nvDebugCheck(i <= this->m_size); return i == this->m_size; }
+ NV_FORCEINLINE void advance(PseudoIndex & i) const { nvDebugCheck(i <= this->m_size); i++; }
+
+#if NV_NEED_PSEUDOINDEX_WRAPPER
+ NV_FORCEINLINE T & operator[]( const PseudoIndexWrapper & i ) {
+ return m_buffer[i(this)];
+ }
+ NV_FORCEINLINE const T & operator[]( const PseudoIndexWrapper & i ) const {
+ return m_buffer[i(this)];
+ }
+#endif
+
+ // Friends.
+ template <typename Typ>
+ friend Stream & operator<< ( Stream & s, Array<Typ> & p );
+
+ template <typename Typ>
+ friend void swap(Array<Typ> & a, Array<Typ> & b);
+
+
+ protected:
+
+ void setArraySize(uint new_size);
+ void setArrayCapacity(uint new_capacity);
+
+ T * m_buffer;
+ uint m_capacity;
+ uint m_size;
+
+ };
+
+
+} // nv namespace
+
+#endif // NV_CORE_ARRAY_H
diff --git a/thirdparty/thekla_atlas/nvcore/Array.inl b/thirdparty/thekla_atlas/nvcore/Array.inl
new file mode 100644
index 0000000000..0b4de28ba9
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Array.inl
@@ -0,0 +1,452 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_ARRAY_INL
+#define NV_CORE_ARRAY_INL
+
+#include "Array.h"
+
+#include "Stream.h"
+#include "Utils.h" // swap
+
+#include <string.h> // memmove
+#include <new> // for placement new
+
+
+
+namespace nv
+{
+ template <typename T>
+ NV_FORCEINLINE T & Array<T>::append()
+ {
+ uint old_size = m_size;
+ uint new_size = m_size + 1;
+
+ setArraySize(new_size);
+
+ construct_range(m_buffer, new_size, old_size);
+
+ return m_buffer[old_size]; // Return reference to last element.
+ }
+
+ // Push an element at the end of the vector.
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::push_back( const T & val )
+ {
+#if 1
+ nvDebugCheck(&val < m_buffer || &val >= m_buffer+m_size);
+
+ uint old_size = m_size;
+ uint new_size = m_size + 1;
+
+ setArraySize(new_size);
+
+ construct_range(m_buffer, new_size, old_size, val);
+#else
+ uint new_size = m_size + 1;
+
+ if (new_size > m_capacity)
+ {
+ // @@ Is there any way to avoid this copy?
+ // @@ Can we create a copy without side effects? Ie. without calls to constructor/destructor. Use alloca + memcpy?
+ // @@ Assert instead of copy?
+ const T copy(val); // create a copy in case value is inside of this array.
+
+ setArraySize(new_size);
+
+ new (m_buffer+new_size-1) T(copy);
+ }
+ else
+ {
+ m_size = new_size;
+ new(m_buffer+new_size-1) T(val);
+ }
+#endif // 0/1
+ }
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::pushBack( const T & val )
+ {
+ push_back(val);
+ }
+ template <typename T>
+ NV_FORCEINLINE Array<T> & Array<T>::append( const T & val )
+ {
+ push_back(val);
+ return *this;
+ }
+
+ // Qt like push operator.
+ template <typename T>
+ NV_FORCEINLINE Array<T> & Array<T>::operator<< ( T & t )
+ {
+ push_back(t);
+ return *this;
+ }
+
+ // Pop the element at the end of the vector.
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::pop_back()
+ {
+ nvDebugCheck( m_size > 0 );
+ resize( m_size - 1 );
+ }
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::popBack(uint count)
+ {
+ nvDebugCheck(m_size >= count);
+ resize(m_size - count);
+ }
+
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::popFront(uint count)
+ {
+ nvDebugCheck(m_size >= count);
+ //resize(m_size - count);
+
+ if (m_size == count) {
+ clear();
+ }
+ else {
+ destroy_range(m_buffer, 0, count);
+
+ memmove(m_buffer, m_buffer + count, sizeof(T) * (m_size - count));
+
+ m_size -= count;
+ }
+
+ }
+
+
+ // Get back element.
+ template <typename T>
+ NV_FORCEINLINE const T & Array<T>::back() const
+ {
+ nvDebugCheck( m_size > 0 );
+ return m_buffer[m_size-1];
+ }
+
+ // Get back element.
+ template <typename T>
+ NV_FORCEINLINE T & Array<T>::back()
+ {
+ nvDebugCheck( m_size > 0 );
+ return m_buffer[m_size-1];
+ }
+
+ // Get front element.
+ template <typename T>
+ NV_FORCEINLINE const T & Array<T>::front() const
+ {
+ nvDebugCheck( m_size > 0 );
+ return m_buffer[0];
+ }
+
+ // Get front element.
+ template <typename T>
+ NV_FORCEINLINE T & Array<T>::front()
+ {
+ nvDebugCheck( m_size > 0 );
+ return m_buffer[0];
+ }
+
+ // Check if the given element is contained in the array.
+ template <typename T>
+ NV_FORCEINLINE bool Array<T>::contains(const T & e) const
+ {
+ return find(e, NULL);
+ }
+
+ // Return true if element found.
+ template <typename T>
+ NV_FORCEINLINE bool Array<T>::find(const T & element, uint * indexPtr) const
+ {
+ return find(element, 0, m_size, indexPtr);
+ }
+
+ // Return true if element found within the given range.
+ template <typename T>
+ NV_FORCEINLINE bool Array<T>::find(const T & element, uint begin, uint end, uint * indexPtr) const
+ {
+ return ::nv::find(element, m_buffer, begin, end, indexPtr);
+ }
+
+
+ // Remove the element at the given index. This is an expensive operation!
+ template <typename T>
+ void Array<T>::removeAt(uint index)
+ {
+ nvDebugCheck(index >= 0 && index < m_size);
+
+ if (m_size == 1) {
+ clear();
+ }
+ else {
+ m_buffer[index].~T();
+
+ memmove(m_buffer+index, m_buffer+index+1, sizeof(T) * (m_size - 1 - index));
+ m_size--;
+ }
+ }
+
+ // Remove the first instance of the given element.
+ template <typename T>
+ bool Array<T>::remove(const T & element)
+ {
+ uint index;
+ if (find(element, &index)) {
+ removeAt(index);
+ return true;
+ }
+ return false;
+ }
+
+ // Insert the given element at the given index shifting all the elements up.
+ template <typename T>
+ void Array<T>::insertAt(uint index, const T & val/*=T()*/)
+ {
+ nvDebugCheck( index >= 0 && index <= m_size );
+
+ setArraySize(m_size + 1);
+
+ if (index < m_size - 1) {
+ memmove(m_buffer+index+1, m_buffer+index, sizeof(T) * (m_size - 1 - index));
+ }
+
+ // Copy-construct into the newly opened slot.
+ new(m_buffer+index) T(val);
+ }
+
+ // Append the given data to our vector.
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::append(const Array<T> & other)
+ {
+ append(other.m_buffer, other.m_size);
+ }
+
+ // Append the given data to our vector.
+ template <typename T>
+ void Array<T>::append(const T other[], uint count)
+ {
+ if (count > 0) {
+ const uint old_size = m_size;
+
+ setArraySize(m_size + count);
+
+ for (uint i = 0; i < count; i++ ) {
+ new(m_buffer + old_size + i) T(other[i]);
+ }
+ }
+ }
+
+
+ // Remove the given element by replacing it with the last one.
+ template <typename T>
+ void Array<T>::replaceWithLast(uint index)
+ {
+ nvDebugCheck( index < m_size );
+ nv::swap(m_buffer[index], back()); // @@ Is this OK when index == size-1?
+ (m_buffer+m_size-1)->~T();
+ m_size--;
+ }
+
+ // Resize the vector preserving existing elements.
+ template <typename T>
+ void Array<T>::resize(uint new_size)
+ {
+ uint old_size = m_size;
+
+ // Destruct old elements (if we're shrinking).
+ destroy_range(m_buffer, new_size, old_size);
+
+ setArraySize(new_size);
+
+ // Call default constructors
+ construct_range(m_buffer, new_size, old_size);
+ }
+
+
+ // Resize the vector preserving existing elements and initializing the
+ // new ones with the given value.
+ template <typename T>
+ void Array<T>::resize(uint new_size, const T & elem)
+ {
+ nvDebugCheck(&elem < m_buffer || &elem > m_buffer+m_size);
+
+ uint old_size = m_size;
+
+ // Destruct old elements (if we're shrinking).
+ destroy_range(m_buffer, new_size, old_size);
+
+ setArraySize(new_size);
+
+ // Call copy constructors
+ construct_range(m_buffer, new_size, old_size, elem);
+ }
+
+ // Fill array with the given value.
+ template <typename T>
+ void Array<T>::fill(const T & elem)
+ {
+ fill(m_buffer, m_size, elem);
+ }
+
+ // Clear the buffer.
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::clear()
+ {
+ nvDebugCheck(isValidPtr(m_buffer));
+
+ // Destruct old elements
+ destroy_range(m_buffer, 0, m_size);
+
+ m_size = 0;
+ }
+
+ // Shrink the allocated vector.
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::shrink()
+ {
+ if (m_size < m_capacity) {
+ setArrayCapacity(m_size);
+ }
+ }
+
+ // Preallocate space.
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::reserve(uint desired_size)
+ {
+ if (desired_size > m_capacity) {
+ setArrayCapacity(desired_size);
+ }
+ }
+
+ // Copy elements to this array. Resizes it if needed.
+ template <typename T>
+ NV_FORCEINLINE void Array<T>::copy(const T * data, uint count)
+ {
+#if 1 // More simple, but maybe not be as efficient?
+ destroy_range(m_buffer, 0, m_size);
+
+ setArraySize(count);
+
+ construct_range(m_buffer, count, 0, data);
+#else
+ const uint old_size = m_size;
+
+ destroy_range(m_buffer, count, old_size);
+
+ setArraySize(count);
+
+ copy_range(m_buffer, data, old_size);
+
+ construct_range(m_buffer, count, old_size, data);
+#endif
+ }
+
+ // Assignment operator.
+ template <typename T>
+ NV_FORCEINLINE Array<T> & Array<T>::operator=( const Array<T> & a )
+ {
+ copy(a.m_buffer, a.m_size);
+ return *this;
+ }
+
+ // Release ownership of allocated memory and returns pointer to it.
+ template <typename T>
+ T * Array<T>::release() {
+ T * tmp = m_buffer;
+ m_buffer = NULL;
+ m_capacity = 0;
+ m_size = 0;
+ return tmp;
+ }
+
+
+
+ // Change array size.
+ template <typename T>
+ inline void Array<T>::setArraySize(uint new_size) {
+ m_size = new_size;
+
+ if (new_size > m_capacity) {
+ uint new_buffer_size;
+ if (m_capacity == 0) {
+ // first allocation is exact
+ new_buffer_size = new_size;
+ }
+ else {
+ // following allocations grow array by 25%
+ new_buffer_size = new_size + (new_size >> 2);
+ }
+
+ setArrayCapacity( new_buffer_size );
+ }
+ }
+
+ // Change array capacity.
+ template <typename T>
+ inline void Array<T>::setArrayCapacity(uint new_capacity) {
+ nvDebugCheck(new_capacity >= m_size);
+
+ if (new_capacity == 0) {
+ // free the buffer.
+ if (m_buffer != NULL) {
+ free<T>(m_buffer);
+ m_buffer = NULL;
+ }
+ }
+ else {
+ // realloc the buffer
+ m_buffer = realloc<T>(m_buffer, new_capacity);
+ }
+
+ m_capacity = new_capacity;
+ }
+
+ // Array serialization.
+ template <typename Typ>
+ inline Stream & operator<< ( Stream & s, Array<Typ> & p )
+ {
+ if (s.isLoading()) {
+ uint size;
+ s << size;
+ p.resize( size );
+ }
+ else {
+ s << p.m_size;
+ }
+
+ for (uint i = 0; i < p.m_size; i++) {
+ s << p.m_buffer[i];
+ }
+
+ return s;
+ }
+
+ // Swap the members of the two given vectors.
+ template <typename Typ>
+ inline void swap(Array<Typ> & a, Array<Typ> & b)
+ {
+ nv::swap(a.m_buffer, b.m_buffer);
+ nv::swap(a.m_capacity, b.m_capacity);
+ nv::swap(a.m_size, b.m_size);
+ }
+
+
+} // nv namespace
+
+// IC: These functions are for compatibility with the Foreach macro in The Witness.
+template <typename T> inline int item_count(const nv::Array<T> & array) { return array.count(); }
+template <typename T> inline const T & item_at(const nv::Array<T> & array, int i) { return array.at(i); }
+template <typename T> inline T & item_at(nv::Array<T> & array, int i) { return array.at(i); }
+template <typename T> inline int item_advance(const nv::Array<T> & array, int i) { return ++i; }
+template <typename T> inline int item_remove(nv::Array<T> & array, int i) { array.replaceWithLast(i); return i - 1; }
+
+template <typename T> inline int item_count(const nv::Array<T> * array) { return array->count(); }
+template <typename T> inline const T & item_at(const nv::Array<T> * array, int i) { return array->at(i); }
+template <typename T> inline T & item_at(nv::Array<T> * array, int i) { return array->at(i); }
+template <typename T> inline int item_advance(const nv::Array<T> * array, int i) { return ++i; }
+template <typename T> inline int item_remove(nv::Array<T> * array, int i) { array->replaceWithLast(i); return i - 1; }
+
+
+#endif // NV_CORE_ARRAY_INL
diff --git a/thirdparty/thekla_atlas/nvcore/BitArray.h b/thirdparty/thekla_atlas/nvcore/BitArray.h
new file mode 100644
index 0000000000..23cf880694
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/BitArray.h
@@ -0,0 +1,250 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_BITARRAY_H
+#define NV_CORE_BITARRAY_H
+
+#include "nvcore.h"
+#include "Array.inl"
+
+namespace nv
+{
+
+ // @@ Uh, this could be much faster.
+ inline uint countSetBits(uint32 x) {
+ uint count = 0;
+ for(; x != 0; x >>= 1) {
+ count += (x & 1);
+ }
+ return count;
+ }
+
+ // @@ This is even more lame. What was I thinking?
+ inline uint countSetBits(uint32 x, int bits) {
+ uint count = 0;
+ for(; x != 0 && bits != 0; x >>= 1, bits--) {
+ count += (x & 1);
+ }
+ return count;
+ }
+
+ // See "Conditionally set or clear bits without branching" at http://graphics.stanford.edu/~seander/bithacks.html
+ inline uint setBits(uint w, uint m, bool b) {
+ return (w & ~m) | (-int(b) & m);
+ }
+
+
+
+ // Simple bit array.
+ class BitArray
+ {
+ public:
+
+ BitArray() {}
+ BitArray(uint sz) {
+ resize(sz);
+ }
+
+ uint size() const { return m_size; }
+ void clear() { resize(0); }
+
+ void resize(uint new_size)
+ {
+ m_size = new_size;
+ m_wordArray.resize( (m_size + 31) >> 5 );
+ }
+
+ void resize(uint new_size, bool init)
+ {
+ //if (new_size == m_size) return;
+
+ uint old_size = m_size;
+ uint size_mod_32 = old_size & 31;
+ uint last_word_index = ((old_size + 31) >> 5) - 1;
+ uint mask = (1 << size_mod_32) - 1;
+
+ uint init_dword;
+ if (init) {
+ if (size_mod_32) m_wordArray[last_word_index] |= ~mask;
+ init_dword = ~0;
+ }
+ else {
+ if (size_mod_32) m_wordArray[last_word_index] &= mask;
+ init_dword = 0;
+ }
+
+ m_size = new_size;
+ m_wordArray.resize((new_size + 31) >> 5, init_dword);
+
+ // Make sure new bits are initialized correctly.
+ /*for (uint i = old_size; i < new_size; i++) {
+ nvCheck(bitAt(i) == init);
+ }*/
+ }
+
+
+ /// Get bit.
+ bool bitAt(uint b) const
+ {
+ nvDebugCheck( b < m_size );
+ return (m_wordArray[b >> 5] & (1 << (b & 31))) != 0;
+ }
+
+ // It may be useful to pack mulitple bit arrays together interleaving their bits.
+ uint bitsAt(uint idx, uint count) const
+ {
+ //nvDebugCheck(count == 2 || count == 4 || count == 8 || count == 16 || count == 32);
+ nvDebugCheck(count == 2); // @@ Hardcoded for two.
+ uint b = idx * count;
+ nvDebugCheck(b < m_size);
+ return (m_wordArray[b >> 5] & (0x3 << (b & 31))) >> (b & 31);
+ }
+
+ // It would be useful to have a function to set two bits simultaneously.
+ /*void setBitsAt(uint idx, uint count, uint bits) const
+ {
+ //nvDebugCheck(count == 2 || count == 4 || count == 8 || count == 16 || count == 32);
+ nvDebugCheck(count == 2); // @@ Hardcoded for two.
+ uint b = idx * count;
+ nvDebugCheck(b < m_size);
+ return (m_wordArray[b >> 5] & (0x3 << (b & 31))) >> (b & 31);
+ }*/
+
+
+
+ // Set a bit.
+ void setBitAt(uint idx)
+ {
+ nvDebugCheck(idx < m_size);
+ m_wordArray[idx >> 5] |= (1 << (idx & 31));
+ }
+
+ // Clear a bit.
+ void clearBitAt(uint idx)
+ {
+ nvDebugCheck(idx < m_size);
+ m_wordArray[idx >> 5] &= ~(1 << (idx & 31));
+ }
+
+ // Toggle a bit.
+ void toggleBitAt(uint idx)
+ {
+ nvDebugCheck(idx < m_size);
+ m_wordArray[idx >> 5] ^= (1 << (idx & 31));
+ }
+
+ // Set a bit to the given value. @@ Rename modifyBitAt?
+ void setBitAt(uint idx, bool b)
+ {
+ nvDebugCheck(idx < m_size);
+ m_wordArray[idx >> 5] = setBits(m_wordArray[idx >> 5], 1 << (idx & 31), b);
+ nvDebugCheck(bitAt(idx) == b);
+ }
+
+ void append(bool value)
+ {
+ resize(m_size + 1);
+ setBitAt(m_size - 1, value);
+ }
+
+
+ // Clear all the bits.
+ void clearAll()
+ {
+ memset(m_wordArray.buffer(), 0, m_wordArray.size() * sizeof(uint));
+ }
+
+ // Set all the bits.
+ void setAll()
+ {
+ memset(m_wordArray.buffer(), 0xFF, m_wordArray.size() * sizeof(uint));
+ }
+
+ // Toggle all the bits.
+ void toggleAll()
+ {
+ const uint wordCount = m_wordArray.count();
+ for(uint b = 0; b < wordCount; b++) {
+ m_wordArray[b] ^= 0xFFFFFFFF;
+ }
+ }
+
+ // Count the number of bits set.
+ uint countSetBits() const
+ {
+ const uint num = m_wordArray.size();
+ if( num == 0 ) {
+ return 0;
+ }
+
+ uint count = 0;
+ for(uint i = 0; i < num - 1; i++) {
+ count += nv::countSetBits(m_wordArray[i]);
+ }
+ count += nv::countSetBits(m_wordArray[num - 1], m_size & 31);
+
+ //piDebugCheck(count + countClearBits() == m_size);
+ return count;
+ }
+
+ // Count the number of bits clear.
+ uint countClearBits() const {
+
+ const uint num = m_wordArray.size();
+ if( num == 0 ) {
+ return 0;
+ }
+
+ uint count = 0;
+ for(uint i = 0; i < num - 1; i++) {
+ count += nv::countSetBits(~m_wordArray[i]);
+ }
+ count += nv::countSetBits(~m_wordArray[num - 1], m_size & 31);
+
+ //piDebugCheck(count + countSetBits() == m_size);
+ return count;
+ }
+
+ friend void swap(BitArray & a, BitArray & b)
+ {
+ swap(a.m_size, b.m_size);
+ swap(a.m_wordArray, b.m_wordArray);
+ }
+
+ void operator &= (const BitArray & other) {
+ if (other.m_size != m_size) {
+ resize(other.m_size);
+ }
+
+ const uint wordCount = m_wordArray.count();
+ for (uint i = 0; i < wordCount; i++) {
+ m_wordArray[i] &= other.m_wordArray[i];
+ }
+ }
+
+ void operator |= (const BitArray & other) {
+ if (other.m_size != m_size) {
+ resize(other.m_size);
+ }
+
+ const uint wordCount = m_wordArray.count();
+ for (uint i = 0; i < wordCount; i++) {
+ m_wordArray[i] |= other.m_wordArray[i];
+ }
+ }
+
+
+ private:
+
+ // Number of bits stored.
+ uint m_size;
+
+ // Array of bits.
+ Array<uint> m_wordArray;
+
+ };
+
+} // nv namespace
+
+#endif // NV_CORE_BITARRAY_H
+
diff --git a/thirdparty/thekla_atlas/nvcore/Debug.cpp b/thirdparty/thekla_atlas/nvcore/Debug.cpp
new file mode 100644
index 0000000000..75ac6beb75
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Debug.cpp
@@ -0,0 +1,1347 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "Debug.h"
+#include "Array.inl"
+#include "StrLib.h" // StringBuilder
+
+#include "StdStream.h" // fileOpen
+
+#include <stdlib.h>
+
+// Extern
+#if NV_OS_WIN32 //&& NV_CC_MSVC
+# define WIN32_LEAN_AND_MEAN
+# define VC_EXTRALEAN
+# include <windows.h>
+# include <direct.h>
+# if NV_CC_MSVC
+# include <crtdbg.h>
+# if _MSC_VER < 1300
+# define DECLSPEC_DEPRECATED
+// VC6: change this path to your Platform SDK headers
+# include <dbghelp.h> // must be XP version of file
+// include "M:\\dev7\\vs\\devtools\\common\\win32sdk\\include\\dbghelp.h"
+# else
+// VC7: ships with updated headers
+# include <dbghelp.h>
+# endif
+# endif
+# pragma comment(lib,"dbghelp.lib")
+#endif
+
+#if NV_OS_XBOX
+# include <Xtl.h>
+# ifdef _DEBUG
+# include <xbdm.h>
+# endif //_DEBUG
+#endif //NV_OS_XBOX
+
+#if !NV_OS_WIN32 && defined(NV_HAVE_SIGNAL_H)
+# include <signal.h>
+#endif
+
+#if NV_OS_UNIX
+# include <unistd.h> // getpid
+#endif
+
+#if NV_OS_LINUX && defined(NV_HAVE_EXECINFO_H)
+# include <execinfo.h> // backtrace
+# if NV_CC_GNUC // defined(NV_HAVE_CXXABI_H)
+# include <cxxabi.h>
+# endif
+#endif
+
+#if NV_OS_DARWIN || NV_OS_FREEBSD || NV_OS_OPENBSD
+# include <sys/types.h>
+# include <sys/param.h>
+# include <sys/sysctl.h> // sysctl
+# if !defined(NV_OS_OPENBSD)
+# include <sys/ucontext.h>
+# endif
+# if defined(NV_HAVE_EXECINFO_H) // only after OSX 10.5
+# include <execinfo.h> // backtrace
+# if NV_CC_GNUC // defined(NV_HAVE_CXXABI_H)
+# include <cxxabi.h>
+# endif
+# endif
+#endif
+
+#if NV_OS_ORBIS
+#include <libdbg.h>
+#endif
+
+#if NV_OS_DURANGO
+#include "Windows.h"
+#include <winnt.h>
+#include <crtdbg.h>
+#include <dbghelp.h>
+#include <errhandlingapi.h>
+#define NV_USE_SEPARATE_THREAD 0
+#else
+#define NV_USE_SEPARATE_THREAD 1
+#endif
+
+
+
+using namespace nv;
+
+namespace
+{
+
+ static MessageHandler * s_message_handler = NULL;
+ static AssertHandler * s_assert_handler = NULL;
+
+ static bool s_sig_handler_enabled = false;
+ static bool s_interactive = true;
+
+#if (NV_OS_WIN32 && NV_CC_MSVC) || NV_OS_DURANGO
+
+ // Old exception filter.
+ static LPTOP_LEVEL_EXCEPTION_FILTER s_old_exception_filter = NULL;
+
+#elif !NV_OS_WIN32 && defined(NV_HAVE_SIGNAL_H)
+
+ // Old signal handlers.
+ struct sigaction s_old_sigsegv;
+ struct sigaction s_old_sigtrap;
+ struct sigaction s_old_sigfpe;
+ struct sigaction s_old_sigbus;
+
+#endif
+
+
+#if (NV_OS_WIN32 && NV_CC_MSVC) || NV_OS_DURANGO
+
+ // We should try to simplify the top level filter as much as possible.
+ // http://www.nynaeve.net/?p=128
+
+ // The critical section enforcing the requirement that only one exception be
+ // handled by a handler at a time.
+ static CRITICAL_SECTION s_handler_critical_section;
+
+#if NV_USE_SEPARATE_THREAD
+ // Semaphores used to move exception handling between the exception thread
+ // and the handler thread. handler_start_semaphore_ is signalled by the
+ // exception thread to wake up the handler thread when an exception occurs.
+ // handler_finish_semaphore_ is signalled by the handler thread to wake up
+ // the exception thread when handling is complete.
+ static HANDLE s_handler_start_semaphore = NULL;
+ static HANDLE s_handler_finish_semaphore = NULL;
+
+ // The exception handler thread.
+ static HANDLE s_handler_thread = NULL;
+
+ static DWORD s_requesting_thread_id = 0;
+ static EXCEPTION_POINTERS * s_exception_info = NULL;
+
+#endif // NV_USE_SEPARATE_THREAD
+
+
+ struct MinidumpCallbackContext {
+ ULONG64 memory_base;
+ ULONG memory_size;
+ bool finished;
+ };
+
+#if NV_OS_WIN32
+ // static
+ static BOOL CALLBACK miniDumpWriteDumpCallback(PVOID context, const PMINIDUMP_CALLBACK_INPUT callback_input, PMINIDUMP_CALLBACK_OUTPUT callback_output)
+ {
+ switch (callback_input->CallbackType)
+ {
+ case MemoryCallback: {
+ MinidumpCallbackContext* callback_context = reinterpret_cast<MinidumpCallbackContext*>(context);
+ if (callback_context->finished)
+ return FALSE;
+
+ // Include the specified memory region.
+ callback_output->MemoryBase = callback_context->memory_base;
+ callback_output->MemorySize = callback_context->memory_size;
+ callback_context->finished = true;
+ return TRUE;
+ }
+
+ // Include all modules.
+ case IncludeModuleCallback:
+ case ModuleCallback:
+ return TRUE;
+
+ // Include all threads.
+ case IncludeThreadCallback:
+ case ThreadCallback:
+ return TRUE;
+
+ // Stop receiving cancel callbacks.
+ case CancelCallback:
+ callback_output->CheckCancel = FALSE;
+ callback_output->Cancel = FALSE;
+ return TRUE;
+ }
+
+ // Ignore other callback types.
+ return FALSE;
+ }
+#endif
+
+ static bool writeMiniDump(EXCEPTION_POINTERS * pExceptionInfo)
+ {
+#if NV_OS_DURANGO
+ // Get a handle to the minidump method.
+ typedef BOOL(WINAPI* MiniDumpWriteDumpPfn) (
+ _In_ HANDLE hProcess,
+ _In_ DWORD ProcessId,
+ _In_ HANDLE hFile,
+ _In_ MINIDUMP_TYPE DumpType,
+ _In_opt_ PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
+ _In_opt_ PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
+ _Reserved_ PVOID CallbackParam
+ );
+ MiniDumpWriteDumpPfn MiniDumpWriteDump = NULL;
+ HMODULE hToolHelpModule = ::LoadLibraryW(L"toolhelpx.dll");
+ if (hToolHelpModule != INVALID_HANDLE_VALUE) {
+ MiniDumpWriteDump = reinterpret_cast<MiniDumpWriteDumpPfn>(::GetProcAddress(hToolHelpModule, "MiniDumpWriteDump"));
+ if (!MiniDumpWriteDump) {
+ FreeLibrary(hToolHelpModule);
+ return false;
+ }
+ }
+ else
+ return false;
+
+ // Generate a decent filename.
+ nv::Path application_path(256);
+ HINSTANCE hinstance = GetModuleHandle(NULL);
+ GetModuleFileName(hinstance, application_path.str(), 256);
+ application_path.stripExtension();
+ const char * application_name = application_path.fileName();
+
+ SYSTEMTIME local_time;
+ GetLocalTime(&local_time);
+
+ char dump_filename[MAX_PATH] = {};
+ sprintf_s(dump_filename, "d:\\%s-%04d%02d%02d-%02d%02d%02d.dmp",
+ application_name,
+ local_time.wYear, local_time.wMonth, local_time.wDay,
+ local_time.wHour, local_time.wMinute, local_time.wSecond );
+#else
+ const char* dump_filename = "crash.dmp";
+#endif
+
+ // create the file
+ HANDLE hFile = CreateFileA(dump_filename, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (hFile == INVALID_HANDLE_VALUE) {
+ //nvDebug("*** Failed to create dump file.\n");
+#if NV_OS_DURANGO
+ FreeLibrary(hToolHelpModule);
+#endif
+ return false;
+ }
+
+ MINIDUMP_EXCEPTION_INFORMATION * pExInfo = NULL;
+#if NV_OS_WIN32
+ MINIDUMP_CALLBACK_INFORMATION * pCallback = NULL;
+#else
+ void * pCallback = NULL;
+#endif
+
+ MINIDUMP_EXCEPTION_INFORMATION ExInfo;
+ if (pExceptionInfo != NULL) {
+ ExInfo.ThreadId = ::GetCurrentThreadId();
+ ExInfo.ExceptionPointers = pExceptionInfo;
+ ExInfo.ClientPointers = NULL;
+ pExInfo = &ExInfo;
+
+#if NV_OS_WIN32
+ MINIDUMP_CALLBACK_INFORMATION callback;
+ MinidumpCallbackContext context;
+
+ // Find a memory region of 256 bytes centered on the
+ // faulting instruction pointer.
+ const ULONG64 instruction_pointer =
+ #if defined(_M_IX86)
+ pExceptionInfo->ContextRecord->Eip;
+ #elif defined(_M_AMD64)
+ pExceptionInfo->ContextRecord->Rip;
+ #else
+ #error Unsupported platform
+ #endif
+
+ MEMORY_BASIC_INFORMATION info;
+
+ if (VirtualQuery(reinterpret_cast<LPCVOID>(instruction_pointer), &info, sizeof(MEMORY_BASIC_INFORMATION)) != 0 && info.State == MEM_COMMIT)
+ {
+ // Attempt to get 128 bytes before and after the instruction
+ // pointer, but settle for whatever's available up to the
+ // boundaries of the memory region.
+ const ULONG64 kIPMemorySize = 256;
+ context.memory_base = max(reinterpret_cast<ULONG64>(info.BaseAddress), instruction_pointer - (kIPMemorySize / 2));
+ ULONG64 end_of_range = min(instruction_pointer + (kIPMemorySize / 2), reinterpret_cast<ULONG64>(info.BaseAddress) + info.RegionSize);
+ context.memory_size = static_cast<ULONG>(end_of_range - context.memory_base);
+ context.finished = false;
+
+ callback.CallbackRoutine = miniDumpWriteDumpCallback;
+ callback.CallbackParam = reinterpret_cast<void*>(&context);
+ pCallback = &callback;
+ }
+#endif
+ }
+
+ MINIDUMP_TYPE miniDumpType = (MINIDUMP_TYPE)(MiniDumpNormal|MiniDumpWithHandleData|MiniDumpWithThreadInfo);
+
+ // write the dump
+ BOOL ok = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, miniDumpType, pExInfo, NULL, pCallback) != 0;
+ CloseHandle(hFile);
+#if NV_OS_DURANGO
+ FreeLibrary(hToolHelpModule);
+#endif
+
+ if (ok == FALSE) {
+ //nvDebug("*** Failed to save dump file.\n");
+ return false;
+ }
+
+ //nvDebug("\nDump file saved.\n");
+
+ return true;
+ }
+
+#if NV_USE_SEPARATE_THREAD
+
+ static DWORD WINAPI ExceptionHandlerThreadMain(void* lpParameter) {
+ nvDebugCheck(s_handler_start_semaphore != NULL);
+ nvDebugCheck(s_handler_finish_semaphore != NULL);
+
+ while (true) {
+ if (WaitForSingleObject(s_handler_start_semaphore, INFINITE) == WAIT_OBJECT_0) {
+ writeMiniDump(s_exception_info);
+
+ // Allow the requesting thread to proceed.
+ ReleaseSemaphore(s_handler_finish_semaphore, 1, NULL);
+ }
+ }
+
+ // This statement is not reached when the thread is unconditionally
+ // terminated by the ExceptionHandler destructor.
+ return 0;
+ }
+
+#endif // NV_USE_SEPARATE_THREAD
+
+ static bool hasStackTrace() {
+ return true;
+ }
+
+ /*static NV_NOINLINE int backtrace(void * trace[], int maxcount) {
+
+ // In Windows XP and Windows Server 2003, the sum of the FramesToSkip and FramesToCapture parameters must be less than 63.
+ int xp_maxcount = min(63-1, maxcount);
+
+ int count = RtlCaptureStackBackTrace(1, xp_maxcount, trace, NULL);
+ nvDebugCheck(count <= maxcount);
+
+ return count;
+ }*/
+
+#if NV_OS_WIN32
+ static NV_NOINLINE int backtraceWithSymbols(CONTEXT * ctx, void * trace[], int maxcount, int skip = 0) {
+
+ // Init the stack frame for this function
+ STACKFRAME64 stackFrame = { 0 };
+
+ #if NV_CPU_X86_64
+ DWORD dwMachineType = IMAGE_FILE_MACHINE_AMD64;
+ stackFrame.AddrPC.Offset = ctx->Rip;
+ stackFrame.AddrFrame.Offset = ctx->Rbp;
+ stackFrame.AddrStack.Offset = ctx->Rsp;
+ #elif NV_CPU_X86
+ DWORD dwMachineType = IMAGE_FILE_MACHINE_I386;
+ stackFrame.AddrPC.Offset = ctx->Eip;
+ stackFrame.AddrFrame.Offset = ctx->Ebp;
+ stackFrame.AddrStack.Offset = ctx->Esp;
+ #else
+ #error "Platform not supported!"
+ #endif
+ stackFrame.AddrPC.Mode = AddrModeFlat;
+ stackFrame.AddrFrame.Mode = AddrModeFlat;
+ stackFrame.AddrStack.Mode = AddrModeFlat;
+
+ // Walk up the stack
+ const HANDLE hThread = GetCurrentThread();
+ const HANDLE hProcess = GetCurrentProcess();
+ int i;
+ for (i = 0; i < maxcount; i++)
+ {
+ // walking once first makes us skip self
+ if (!StackWalk64(dwMachineType, hProcess, hThread, &stackFrame, ctx, NULL, &SymFunctionTableAccess64, &SymGetModuleBase64, NULL)) {
+ break;
+ }
+
+ /*if (stackFrame.AddrPC.Offset == stackFrame.AddrReturn.Offset || stackFrame.AddrPC.Offset == 0) {
+ break;
+ }*/
+
+ if (i >= skip) {
+ trace[i - skip] = (PVOID)stackFrame.AddrPC.Offset;
+ }
+ }
+
+ return i - skip;
+ }
+
+#pragma warning(push)
+#pragma warning(disable:4748)
+ static NV_NOINLINE int backtrace(void * trace[], int maxcount) {
+ CONTEXT ctx = { 0 };
+#if NV_CPU_X86 && !NV_CPU_X86_64
+ ctx.ContextFlags = CONTEXT_CONTROL;
+ _asm {
+ call x
+ x: pop eax
+ mov ctx.Eip, eax
+ mov ctx.Ebp, ebp
+ mov ctx.Esp, esp
+ }
+#else
+ RtlCaptureContext(&ctx); // Not implemented correctly in x86.
+#endif
+
+ return backtraceWithSymbols(&ctx, trace, maxcount, 1);
+ }
+#pragma warning(pop)
+
+ static NV_NOINLINE void writeStackTrace(void * trace[], int size, int start, Array<const char *> & lines)
+ {
+ StringBuilder builder(512);
+
+ HANDLE hProcess = GetCurrentProcess();
+
+ // Resolve PC to function names
+ for (int i = start; i < size; i++)
+ {
+ // Check for end of stack walk
+ DWORD64 ip = (DWORD64)trace[i];
+ if (ip == NULL)
+ break;
+
+ // Get function name
+ #define MAX_STRING_LEN (512)
+ unsigned char byBuffer[sizeof(IMAGEHLP_SYMBOL64) + MAX_STRING_LEN] = { 0 };
+ IMAGEHLP_SYMBOL64 * pSymbol = (IMAGEHLP_SYMBOL64*)byBuffer;
+ pSymbol->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64);
+ pSymbol->MaxNameLength = MAX_STRING_LEN;
+
+ DWORD64 dwDisplacement;
+
+ if (SymGetSymFromAddr64(hProcess, ip, &dwDisplacement, pSymbol))
+ {
+ pSymbol->Name[MAX_STRING_LEN-1] = 0;
+
+ /*
+ // Make the symbol readable for humans
+ UnDecorateSymbolName( pSym->Name, lpszNonUnicodeUnDSymbol, BUFFERSIZE,
+ UNDNAME_COMPLETE |
+ UNDNAME_NO_THISTYPE |
+ UNDNAME_NO_SPECIAL_SYMS |
+ UNDNAME_NO_MEMBER_TYPE |
+ UNDNAME_NO_MS_KEYWORDS |
+ UNDNAME_NO_ACCESS_SPECIFIERS );
+ */
+
+ // pSymbol->Name
+ const char * pFunc = pSymbol->Name;
+
+ // Get file/line number
+ IMAGEHLP_LINE64 theLine = { 0 };
+ theLine.SizeOfStruct = sizeof(theLine);
+
+ DWORD dwDisplacement;
+ if (!SymGetLineFromAddr64(hProcess, ip, &dwDisplacement, &theLine))
+ {
+ // Do not print unknown symbols anymore.
+ //break;
+ builder.format("unknown(%08X) : %s\n", (uint32)ip, pFunc);
+ }
+ else
+ {
+ /*
+ const char* pFile = strrchr(theLine.FileName, '\\');
+ if ( pFile == NULL ) pFile = theLine.FileName;
+ else pFile++;
+ */
+ const char * pFile = theLine.FileName;
+
+ int line = theLine.LineNumber;
+
+ builder.format("%s(%d) : %s\n", pFile, line, pFunc);
+ }
+
+ lines.append(builder.release());
+
+ if (pFunc != NULL && strcmp(pFunc, "WinMain") == 0) {
+ break;
+ }
+ }
+ }
+ }
+#endif
+
+ // Write mini dump and print stack trace.
+ static LONG WINAPI handleException(EXCEPTION_POINTERS * pExceptionInfo)
+ {
+ EnterCriticalSection(&s_handler_critical_section);
+#if NV_USE_SEPARATE_THREAD
+ s_requesting_thread_id = GetCurrentThreadId();
+ s_exception_info = pExceptionInfo;
+
+ // This causes the handler thread to call writeMiniDump.
+ ReleaseSemaphore(s_handler_start_semaphore, 1, NULL);
+
+ // Wait until WriteMinidumpWithException is done and collect its return value.
+ WaitForSingleObject(s_handler_finish_semaphore, INFINITE);
+ //bool status = s_handler_return_value;
+
+ // Clean up.
+ s_requesting_thread_id = 0;
+ s_exception_info = NULL;
+#else
+ // First of all, write mini dump.
+ writeMiniDump(pExceptionInfo);
+#endif
+ LeaveCriticalSection(&s_handler_critical_section);
+
+ nvDebug("\nDump file saved.\n");
+
+ // Try to attach to debugger.
+ if (s_interactive && debug::attachToDebugger()) {
+ nvDebugBreak();
+ return EXCEPTION_CONTINUE_EXECUTION;
+ }
+
+#if NV_OS_WIN32
+ // If that fails, then try to pretty print a stack trace and terminate.
+ void * trace[64];
+
+ int size = backtraceWithSymbols(pExceptionInfo->ContextRecord, trace, 64);
+
+ // @@ Use win32's CreateFile?
+ FILE * fp = fileOpen("crash.txt", "wb");
+ if (fp != NULL) {
+ Array<const char *> lines;
+ writeStackTrace(trace, size, 0, lines);
+
+ for (uint i = 0; i < lines.count(); i++) {
+ fputs(lines[i], fp);
+ delete lines[i];
+ }
+
+ // @@ Add more info to crash.txt?
+
+ fclose(fp);
+ }
+#endif
+
+ // This should terminate the process and set the error exit code.
+ TerminateProcess(GetCurrentProcess(), EXIT_FAILURE + 2);
+
+ return EXCEPTION_EXECUTE_HANDLER; // Terminate app. In case terminate process did not succeed.
+ }
+
+ static void handlePureVirtualCall() {
+ nvDebugBreak();
+ TerminateProcess(GetCurrentProcess(), EXIT_FAILURE + 8);
+ }
+
+ static void handleInvalidParameter(const wchar_t * wexpresion, const wchar_t * wfunction, const wchar_t * wfile, unsigned int line, uintptr_t reserved) {
+
+ size_t convertedCharCount = 0;
+
+ StringBuilder expresion;
+ if (wexpresion != NULL) {
+ uint size = U32(wcslen(wexpresion) + 1);
+ expresion.reserve(size);
+ wcstombs_s(&convertedCharCount, expresion.str(), size, wexpresion, _TRUNCATE);
+ }
+
+ StringBuilder file;
+ if (wfile != NULL) {
+ uint size = U32(wcslen(wfile) + 1);
+ file.reserve(size);
+ wcstombs_s(&convertedCharCount, file.str(), size, wfile, _TRUNCATE);
+ }
+
+ StringBuilder function;
+ if (wfunction != NULL) {
+ uint size = U32(wcslen(wfunction) + 1);
+ function.reserve(size);
+ wcstombs_s(&convertedCharCount, function.str(), size, wfunction, _TRUNCATE);
+ }
+
+ int result = nvAbort(expresion.str(), file.str(), line, function.str());
+ if (result == NV_ABORT_DEBUG) {
+ nvDebugBreak();
+ }
+ }
+
+#elif !NV_OS_WIN32 && defined(NV_HAVE_SIGNAL_H) // NV_OS_LINUX || NV_OS_DARWIN
+
+#if defined(NV_HAVE_EXECINFO_H)
+
+ static bool hasStackTrace() {
+ return true;
+ }
+
+
+ static void writeStackTrace(void * trace[], int size, int start, Array<const char *> & lines) {
+ StringBuilder builder(512);
+ char ** string_array = backtrace_symbols(trace, size);
+
+ for(int i = start; i < size-1; i++ ) {
+ // IC: Just in case.
+ if (string_array[i] == NULL || string_array[i][0] == '\0') break;
+
+# if NV_CC_GNUC // defined(NV_HAVE_CXXABI_H)
+ // @@ Write a better parser for the possible formats.
+ char * begin = strchr(string_array[i], '(');
+ char * end = strrchr(string_array[i], '+');
+ char * module = string_array[i];
+
+ if (begin == 0 && end != 0) {
+ *(end - 1) = '\0';
+ begin = strrchr(string_array[i], ' ');
+ module = NULL; // Ignore module.
+ }
+
+ if (begin != 0 && begin < end) {
+ int stat;
+ *end = '\0';
+ *begin = '\0';
+ char * name = abi::__cxa_demangle(begin+1, 0, 0, &stat);
+ if (module == NULL) {
+ if (name == NULL || stat != 0) {
+ builder.format(" In: '%s'\n", begin+1);
+ }
+ else {
+ builder.format(" In: '%s'\n", name);
+ }
+ }
+ else {
+ if (name == NULL || stat != 0) {
+ builder.format(" In: [%s] '%s'\n", module, begin+1);
+ }
+ else {
+ builder.format(" In: [%s] '%s'\n", module, name);
+ }
+ }
+ free(name);
+ }
+ else {
+ builder.format(" In: '%s'\n", string_array[i]);
+ }
+# else
+ builder.format(" In: '%s'\n", string_array[i]);
+# endif
+ lines.append(builder.release());
+ }
+
+ free(string_array);
+ }
+
+ static void printStackTrace(void * trace[], int size, int start=0) {
+ nvDebug( "\nDumping stacktrace:\n" );
+
+ Array<const char *> lines;
+ writeStackTrace(trace, size, 1, lines);
+
+ for (uint i = 0; i < lines.count(); i++) {
+ nvDebug("%s", lines[i]);
+ delete lines[i];
+ }
+
+ nvDebug("\n");
+ }
+
+#endif // defined(NV_HAVE_EXECINFO_H)
+
+ static void * callerAddress(void * secret)
+ {
+#if NV_OS_DARWIN
+# if defined(_STRUCT_MCONTEXT)
+# if NV_CPU_PPC
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *) ucp->uc_mcontext->__ss.__srr0;
+# elif NV_CPU_X86_64
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *) ucp->uc_mcontext->__ss.__rip;
+# elif NV_CPU_X86
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *) ucp->uc_mcontext->__ss.__eip;
+# elif NV_CPU_ARM
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *) ucp->uc_mcontext->__ss.__pc;
+# else
+# error "Unknown CPU"
+# endif
+# else
+# if NV_CPU_PPC
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *) ucp->uc_mcontext->ss.srr0;
+# elif NV_CPU_X86
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *) ucp->uc_mcontext->ss.eip;
+# else
+# error "Unknown CPU"
+# endif
+# endif
+#elif NV_OS_FREEBSD
+# if NV_CPU_X86_64
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *)ucp->uc_mcontext.mc_rip;
+# elif NV_CPU_X86
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *)ucp->uc_mcontext.mc_eip;
+# else
+# error "Unknown CPU"
+# endif
+#elif NV_OS_OPENBSD
+# if NV_CPU_X86_64
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *)ucp->sc_rip;
+# elif NV_CPU_X86
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *)ucp->sc_eip;
+# else
+# error "Unknown CPU"
+# endif
+#else
+# if NV_CPU_X86_64
+ // #define REG_RIP REG_INDEX(rip) // seems to be 16
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *)ucp->uc_mcontext.gregs[REG_RIP];
+# elif NV_CPU_X86
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *)ucp->uc_mcontext.gregs[14/*REG_EIP*/];
+# elif NV_CPU_PPC
+ ucontext_t * ucp = (ucontext_t *)secret;
+ return (void *) ucp->uc_mcontext.regs->nip;
+# else
+# error "Unknown CPU"
+# endif
+#endif
+
+ // How to obtain the instruction pointers in different platforms, from mlton's source code.
+ // http://mlton.org/
+ // OpenBSD && NetBSD
+ // ucp->sc_eip
+ // FreeBSD:
+ // ucp->uc_mcontext.mc_eip
+ // HPUX:
+ // ucp->uc_link
+ // Solaris:
+ // ucp->uc_mcontext.gregs[REG_PC]
+ // Linux hppa:
+ // uc->uc_mcontext.sc_iaoq[0] & ~0x3UL
+ // Linux sparc:
+ // ((struct sigcontext*) secret)->sigc_regs.tpc
+ // Linux sparc64:
+ // ((struct sigcontext*) secret)->si_regs.pc
+
+ // potentially correct for other archs:
+ // Linux alpha: ucp->m_context.sc_pc
+ // Linux arm: ucp->m_context.ctx.arm_pc
+ // Linux ia64: ucp->m_context.sc_ip & ~0x3UL
+ // Linux mips: ucp->m_context.sc_pc
+ // Linux s390: ucp->m_context.sregs->regs.psw.addr
+ }
+
+ static void nvSigHandler(int sig, siginfo_t *info, void *secret)
+ {
+ void * pnt = callerAddress(secret);
+
+ // Do something useful with siginfo_t
+ if (sig == SIGSEGV) {
+ if (pnt != NULL) nvDebug("Got signal %d, faulty address is %p, from %p\n", sig, info->si_addr, pnt);
+ else nvDebug("Got signal %d, faulty address is %p\n", sig, info->si_addr);
+ }
+ else if(sig == SIGTRAP) {
+ nvDebug("Breakpoint hit.\n");
+ }
+ else {
+ nvDebug("Got signal %d\n", sig);
+ }
+
+#if defined(NV_HAVE_EXECINFO_H)
+ if (hasStackTrace()) // in case of weak linking
+ {
+ void * trace[64];
+ int size = backtrace(trace, 64);
+
+ if (pnt != NULL) {
+ // Overwrite sigaction with caller's address.
+ trace[1] = pnt;
+ }
+
+ printStackTrace(trace, size, 1);
+ }
+#endif // defined(NV_HAVE_EXECINFO_H)
+
+ exit(0);
+ }
+
+#endif // defined(NV_HAVE_SIGNAL_H)
+
+
+
+#if NV_OS_WIN32 //&& NV_CC_MSVC
+
+ /** Win32 assert handler. */
+ struct Win32AssertHandler : public AssertHandler
+ {
+ // Flush the message queue. This is necessary for the message box to show up.
+ static void flushMessageQueue()
+ {
+ MSG msg;
+ while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) {
+ //if( msg.message == WM_QUIT ) break;
+ TranslateMessage( &msg );
+ DispatchMessage( &msg );
+ }
+ }
+
+ // Assert handler method.
+ virtual int assertion(const char * exp, const char * file, int line, const char * func, const char * msg, va_list arg)
+ {
+ int ret = NV_ABORT_EXIT;
+
+ StringBuilder error_string;
+ error_string.format("*** Assertion failed: %s\n On file: %s\n On line: %d\n", exp, file, line );
+ if (func != NULL) {
+ error_string.appendFormat(" On function: %s\n", func);
+ }
+ if (msg != NULL) {
+ error_string.append(" Message: ");
+ va_list tmp;
+ va_copy(tmp, arg);
+ error_string.appendFormatList(msg, tmp);
+ va_end(tmp);
+ error_string.append("\n");
+ }
+ nvDebug( error_string.str() );
+
+ // Print stack trace:
+ debug::dumpInfo();
+
+ if (debug::isDebuggerPresent()) {
+ return NV_ABORT_DEBUG;
+ }
+
+ if (s_interactive) {
+ flushMessageQueue();
+ int action = MessageBoxA(NULL, error_string.str(), "Assertion failed", MB_ABORTRETRYIGNORE | MB_ICONERROR | MB_TOPMOST);
+ switch( action ) {
+ case IDRETRY:
+ ret = NV_ABORT_DEBUG;
+ break;
+ case IDIGNORE:
+ ret = NV_ABORT_IGNORE;
+ break;
+ case IDABORT:
+ default:
+ ret = NV_ABORT_EXIT;
+ break;
+ }
+ /*if( _CrtDbgReport( _CRT_ASSERT, file, line, module, exp ) == 1 ) {
+ return NV_ABORT_DEBUG;
+ }*/
+ }
+
+ if (ret == NV_ABORT_EXIT) {
+ // Exit cleanly.
+ exit(EXIT_FAILURE + 1);
+ }
+
+ return ret;
+ }
+ };
+#elif NV_OS_XBOX
+
+ /** Xbox360 assert handler. */
+ struct Xbox360AssertHandler : public AssertHandler
+ {
+ // Assert handler method.
+ virtual int assertion(const char * exp, const char * file, int line, const char * func, const char * msg, va_list arg)
+ {
+ int ret = NV_ABORT_EXIT;
+
+ StringBuilder error_string;
+ if( func != NULL ) {
+ error_string.format( "*** Assertion failed: %s\n On file: %s\n On function: %s\n On line: %d\n ", exp, file, func, line );
+ nvDebug( error_string.str() );
+ }
+ else {
+ error_string.format( "*** Assertion failed: %s\n On file: %s\n On line: %d\n ", exp, file, line );
+ nvDebug( error_string.str() );
+ }
+
+ if (debug::isDebuggerPresent()) {
+ return NV_ABORT_DEBUG;
+ }
+
+ if( ret == NV_ABORT_EXIT ) {
+ // Exit cleanly.
+ exit(EXIT_FAILURE + 1);
+ }
+
+ return ret;
+ }
+ };
+#elif NV_OS_ORBIS || NV_OS_DURANGO
+
+ /** Console assert handler. */
+ struct ConsoleAssertHandler : public AssertHandler
+ {
+ // Assert handler method.
+ virtual int assertion(const char * exp, const char * file, int line, const char * func, const char * msg, va_list arg)
+ {
+ if( func != NULL ) {
+ nvDebug( "*** Assertion failed: %s\n On file: %s\n On function: %s\n On line: %d\n ", exp, file, func, line );
+ }
+ else {
+ nvDebug( "*** Assertion failed: %s\n On file: %s\n On line: %d\n ", exp, file, line );
+ }
+
+ //SBtodoORBIS print stack trace
+ /*if (hasStackTrace())
+ {
+ void * trace[64];
+ int size = backtrace(trace, 64);
+ printStackTrace(trace, size, 2);
+ }*/
+
+ if (debug::isDebuggerPresent())
+ return NV_ABORT_DEBUG;
+
+ return NV_ABORT_IGNORE;
+ }
+ };
+
+#else
+
+ /** Unix assert handler. */
+ struct UnixAssertHandler : public AssertHandler
+ {
+ // Assert handler method.
+ virtual int assertion(const char * exp, const char * file, int line, const char * func, const char * msg, va_list arg)
+ {
+ int ret = NV_ABORT_EXIT;
+
+ if( func != NULL ) {
+ nvDebug( "*** Assertion failed: %s\n On file: %s\n On function: %s\n On line: %d\n ", exp, file, func, line );
+ }
+ else {
+ nvDebug( "*** Assertion failed: %s\n On file: %s\n On line: %d\n ", exp, file, line );
+ }
+
+#if _DEBUG
+ if (debug::isDebuggerPresent()) {
+ return NV_ABORT_DEBUG;
+ }
+#endif
+
+#if defined(NV_HAVE_EXECINFO_H)
+ if (hasStackTrace())
+ {
+ void * trace[64];
+ int size = backtrace(trace, 64);
+ printStackTrace(trace, size, 2);
+ }
+#endif
+
+ if( ret == NV_ABORT_EXIT ) {
+ // Exit cleanly.
+ exit(EXIT_FAILURE + 1);
+ }
+
+ return ret;
+ }
+ };
+
+#endif
+
+} // namespace
+
+
+/// Handle assertion through the assert handler.
+int nvAbort(const char * exp, const char * file, int line, const char * func/*=NULL*/, const char * msg/*= NULL*/, ...)
+{
+#if NV_OS_WIN32 //&& NV_CC_MSVC
+ static Win32AssertHandler s_default_assert_handler;
+#elif NV_OS_XBOX
+ static Xbox360AssertHandler s_default_assert_handler;
+#elif NV_OS_ORBIS || NV_OS_DURANGO
+ static ConsoleAssertHandler s_default_assert_handler;
+#else
+ static UnixAssertHandler s_default_assert_handler;
+#endif
+
+ va_list arg;
+ va_start(arg,msg);
+
+ AssertHandler * handler = s_assert_handler != NULL ? s_assert_handler : &s_default_assert_handler;
+ int result = handler->assertion(exp, file, line, func, msg, arg);
+
+ va_end(arg);
+
+ return result;
+}
+
+// Abnormal termination. Create mini dump and output call stack.
+void debug::terminate(int code)
+{
+#if NV_OS_WIN32 || NV_OS_DURANGO
+ EnterCriticalSection(&s_handler_critical_section);
+
+ writeMiniDump(NULL);
+
+#if NV_OS_WIN32
+ const int max_stack_size = 64;
+ void * trace[max_stack_size];
+ int size = backtrace(trace, max_stack_size);
+
+ // @@ Use win32's CreateFile?
+ FILE * fp = fileOpen("crash.txt", "wb");
+ if (fp != NULL) {
+ Array<const char *> lines;
+ writeStackTrace(trace, size, 0, lines);
+
+ for (uint i = 0; i < lines.count(); i++) {
+ fputs(lines[i], fp);
+ delete lines[i];
+ }
+
+ // @@ Add more info to crash.txt?
+
+ fclose(fp);
+ }
+#endif
+
+ LeaveCriticalSection(&s_handler_critical_section);
+#endif
+
+ exit(code);
+}
+
+
+/// Shows a message through the message handler.
+void NV_CDECL nvDebugPrint(const char *msg, ...)
+{
+ va_list arg;
+ va_start(arg,msg);
+ if (s_message_handler != NULL) {
+ s_message_handler->log( msg, arg );
+ }
+ else {
+ vprintf(msg, arg);
+ }
+ va_end(arg);
+}
+
+
+/// Dump debug info.
+void debug::dumpInfo()
+{
+#if (NV_OS_WIN32 && NV_CC_MSVC) || (defined(NV_HAVE_SIGNAL_H) && defined(NV_HAVE_EXECINFO_H))
+ if (hasStackTrace())
+ {
+ void * trace[64];
+ int size = backtrace(trace, 64);
+
+ nvDebug( "\nDumping stacktrace:\n" );
+
+ Array<const char *> lines;
+ writeStackTrace(trace, size, 1, lines);
+
+ for (uint i = 0; i < lines.count(); i++) {
+ nvDebug("%s", lines[i]);
+ delete lines[i];
+ }
+ }
+#endif
+}
+
+/// Dump callstack using the specified handler.
+void debug::dumpCallstack(MessageHandler *messageHandler, int callstackLevelsToSkip /*= 0*/)
+{
+#if (NV_OS_WIN32 && NV_CC_MSVC) || (defined(NV_HAVE_SIGNAL_H) && defined(NV_HAVE_EXECINFO_H))
+ if (hasStackTrace())
+ {
+ void * trace[64];
+ int size = backtrace(trace, 64);
+
+ Array<const char *> lines;
+ writeStackTrace(trace, size, callstackLevelsToSkip + 1, lines); // + 1 to skip the call to dumpCallstack
+
+ for (uint i = 0; i < lines.count(); i++) {
+ messageHandler->log(lines[i], NULL);
+ delete lines[i];
+ }
+ }
+#endif
+}
+
+
+/// Set the debug message handler.
+void debug::setMessageHandler(MessageHandler * message_handler)
+{
+ s_message_handler = message_handler;
+}
+
+/// Reset the debug message handler.
+void debug::resetMessageHandler()
+{
+ s_message_handler = NULL;
+}
+
+/// Set the assert handler.
+void debug::setAssertHandler(AssertHandler * assert_handler)
+{
+ s_assert_handler = assert_handler;
+}
+
+/// Reset the assert handler.
+void debug::resetAssertHandler()
+{
+ s_assert_handler = NULL;
+}
+
+#if NV_OS_WIN32 || NV_OS_DURANGO
+#if NV_USE_SEPARATE_THREAD
+
+static void initHandlerThread()
+{
+ static const int kExceptionHandlerThreadInitialStackSize = 64 * 1024;
+
+ // Set synchronization primitives and the handler thread. Each
+ // ExceptionHandler object gets its own handler thread because that's the
+ // only way to reliably guarantee sufficient stack space in an exception,
+ // and it allows an easy way to get a snapshot of the requesting thread's
+ // context outside of an exception.
+ InitializeCriticalSection(&s_handler_critical_section);
+
+ s_handler_start_semaphore = CreateSemaphoreExW(NULL, 0, 1, NULL, 0,
+ SEMAPHORE_MODIFY_STATE | DELETE | SYNCHRONIZE);
+ nvDebugCheck(s_handler_start_semaphore != NULL);
+
+ s_handler_finish_semaphore = CreateSemaphoreExW(NULL, 0, 1, NULL, 0,
+ SEMAPHORE_MODIFY_STATE | DELETE | SYNCHRONIZE);
+ nvDebugCheck(s_handler_finish_semaphore != NULL);
+
+ // Don't attempt to create the thread if we could not create the semaphores.
+ if (s_handler_finish_semaphore != NULL && s_handler_start_semaphore != NULL) {
+ DWORD thread_id;
+ s_handler_thread = CreateThread(NULL, // lpThreadAttributes
+ kExceptionHandlerThreadInitialStackSize,
+ ExceptionHandlerThreadMain,
+ NULL, // lpParameter
+ 0, // dwCreationFlags
+ &thread_id);
+ nvDebugCheck(s_handler_thread != NULL);
+ }
+
+ /* @@ We should avoid loading modules in the exception handler!
+ dbghelp_module_ = LoadLibrary(L"dbghelp.dll");
+ if (dbghelp_module_) {
+ minidump_write_dump_ = reinterpret_cast<MiniDumpWriteDump_type>(GetProcAddress(dbghelp_module_, "MiniDumpWriteDump"));
+ }
+ */
+}
+
+static void shutHandlerThread() {
+ // @@ Free stuff. Terminate thread.
+}
+
+#endif // NV_USE_SEPARATE_THREAD
+#endif // NV_OS_WIN32
+
+
+// Enable signal handler.
+void debug::enableSigHandler(bool interactive)
+{
+ if (s_sig_handler_enabled) return;
+
+ s_sig_handler_enabled = true;
+ s_interactive = interactive;
+
+#if (NV_OS_WIN32 && NV_CC_MSVC) || NV_OS_DURANGO
+ if (interactive) {
+#if NV_OS_WIN32
+ // Do not display message boxes on error.
+ // http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621(v=vs.85).aspx
+ SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX);
+#endif
+
+ // CRT reports errors to debug output only.
+ // http://msdn.microsoft.com/en-us/library/1y71x448(v=vs.80).aspx
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG);
+ _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
+ _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
+ }
+
+
+#if NV_USE_SEPARATE_THREAD
+ initHandlerThread();
+#else
+ InitializeCriticalSection(&s_handler_critical_section);
+#endif
+
+ s_old_exception_filter = ::SetUnhandledExceptionFilter( handleException );
+
+#if _MSC_VER >= 1400 // MSVC 2005/8
+ _set_invalid_parameter_handler(handleInvalidParameter);
+#endif // _MSC_VER >= 1400
+
+ _set_purecall_handler(handlePureVirtualCall);
+
+#if NV_OS_WIN32
+ // SYMOPT_DEFERRED_LOADS make us not take a ton of time unless we actual log traces
+ SymSetOptions(SYMOPT_DEFERRED_LOADS|SYMOPT_FAIL_CRITICAL_ERRORS|SYMOPT_LOAD_LINES|SYMOPT_UNDNAME);
+
+ if (!SymInitialize(GetCurrentProcess(), NULL, TRUE)) {
+ DWORD error = GetLastError();
+ nvDebug("SymInitialize returned error : %d\n", error);
+ }
+#endif
+
+#elif !NV_OS_WIN32 && defined(NV_HAVE_SIGNAL_H)
+
+ // Install our signal handler
+ struct sigaction sa;
+ sa.sa_sigaction = nvSigHandler;
+ sigemptyset (&sa.sa_mask);
+ sa.sa_flags = SA_ONSTACK | SA_RESTART | SA_SIGINFO;
+
+ sigaction(SIGSEGV, &sa, &s_old_sigsegv);
+ sigaction(SIGTRAP, &sa, &s_old_sigtrap);
+ sigaction(SIGFPE, &sa, &s_old_sigfpe);
+ sigaction(SIGBUS, &sa, &s_old_sigbus);
+
+#endif
+}
+
+/// Disable signal handler.
+void debug::disableSigHandler()
+{
+ nvCheck(s_sig_handler_enabled == true);
+ s_sig_handler_enabled = false;
+
+#if (NV_OS_WIN32 && NV_CC_MSVC) || NV_OS_DURANGO
+
+ ::SetUnhandledExceptionFilter( s_old_exception_filter );
+ s_old_exception_filter = NULL;
+
+#if NV_OS_WIN32
+ SymCleanup(GetCurrentProcess());
+#endif
+
+#elif !NV_OS_WIN32 && defined(NV_HAVE_SIGNAL_H)
+
+ sigaction(SIGSEGV, &s_old_sigsegv, NULL);
+ sigaction(SIGTRAP, &s_old_sigtrap, NULL);
+ sigaction(SIGFPE, &s_old_sigfpe, NULL);
+ sigaction(SIGBUS, &s_old_sigbus, NULL);
+
+#endif
+}
+
+
+bool debug::isDebuggerPresent()
+{
+#if NV_OS_WIN32
+ HINSTANCE kernel32 = GetModuleHandleA("kernel32.dll");
+ if (kernel32) {
+ FARPROC IsDebuggerPresent = GetProcAddress(kernel32, "IsDebuggerPresent");
+ if (IsDebuggerPresent != NULL && IsDebuggerPresent()) {
+ return true;
+ }
+ }
+ return false;
+#elif NV_OS_XBOX
+#ifdef _DEBUG
+ return DmIsDebuggerPresent() == TRUE;
+#else
+ return false;
+#endif
+#elif NV_OS_ORBIS
+ #if PS4_FINAL_REQUIREMENTS
+ return false;
+ #else
+ return sceDbgIsDebuggerAttached() == 1;
+ #endif
+#elif NV_OS_DURANGO
+ #if XB1_FINAL_REQUIREMENTS
+ return false;
+ #else
+ return IsDebuggerPresent() == TRUE;
+ #endif
+#elif NV_OS_DARWIN
+ int mib[4];
+ struct kinfo_proc info;
+ size_t size;
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PID;
+ mib[3] = getpid();
+ size = sizeof(info);
+ info.kp_proc.p_flag = 0;
+ sysctl(mib,4,&info,&size,NULL,0);
+ return ((info.kp_proc.p_flag & P_TRACED) == P_TRACED);
+#else
+ // if ppid != sid, some process spawned our app, probably a debugger.
+ return getsid(getpid()) != getppid();
+#endif
+}
+
+bool debug::attachToDebugger()
+{
+#if NV_OS_WIN32
+ if (isDebuggerPresent() == FALSE) {
+ Path process(1024);
+ process.copy("\"");
+ GetSystemDirectoryA(process.str() + 1, 1024 - 1);
+
+ process.appendSeparator();
+
+ process.appendFormat("VSJitDebugger.exe\" -p %lu", ::GetCurrentProcessId());
+
+ STARTUPINFOA sSi;
+ memset(&sSi, 0, sizeof(sSi));
+
+ PROCESS_INFORMATION sPi;
+ memset(&sPi, 0, sizeof(sPi));
+
+ BOOL b = CreateProcessA(NULL, process.str(), NULL, NULL, FALSE, 0, NULL, NULL, &sSi, &sPi);
+ if (b != FALSE) {
+ ::WaitForSingleObject(sPi.hProcess, INFINITE);
+
+ DWORD dwExitCode;
+ ::GetExitCodeProcess(sPi.hProcess, &dwExitCode);
+ if (dwExitCode != 0) //if exit code is zero, a debugger was selected
+ b = FALSE;
+ }
+
+ if (sPi.hThread != NULL) ::CloseHandle(sPi.hThread);
+ if (sPi.hProcess != NULL) ::CloseHandle(sPi.hProcess);
+
+ if (b == FALSE)
+ return false;
+
+ for (int i = 0; i < 5*60; i++) {
+ if (isDebuggerPresent())
+ break;
+ ::Sleep(200);
+ }
+ }
+#endif // NV_OS_WIN32
+
+ return true;
+}
diff --git a/thirdparty/thekla_atlas/nvcore/Debug.h b/thirdparty/thekla_atlas/nvcore/Debug.h
new file mode 100644
index 0000000000..f37a05c453
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Debug.h
@@ -0,0 +1,246 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_DEBUG_H
+#define NV_CORE_DEBUG_H
+
+#include "nvcore.h"
+
+#include <stdarg.h> // va_list
+
+#if NV_OS_IOS //ACS: maybe we want this for OSX too?
+# ifdef __APPLE__
+# include <TargetConditionals.h>
+# include <signal.h>
+# endif
+#endif
+
+// Make sure we are using our assert.
+#undef assert
+
+#define NV_ABORT_DEBUG 1
+#define NV_ABORT_IGNORE 2
+#define NV_ABORT_EXIT 3
+
+#define nvNoAssert(exp) \
+ NV_MULTI_LINE_MACRO_BEGIN \
+ (void)sizeof(exp); \
+ NV_MULTI_LINE_MACRO_END
+
+#if NV_NO_ASSERT
+
+# define nvAssert(exp) nvNoAssert(exp)
+# define nvCheck(exp) nvNoAssert(exp)
+# define nvDebugAssert(exp) nvNoAssert(exp)
+# define nvDebugCheck(exp) nvNoAssert(exp)
+# define nvDebugBreak() nvNoAssert(0)
+
+#else // NV_NO_ASSERT
+
+# if NV_CC_MSVC
+ // @@ Does this work in msvc-6 and earlier?
+# define nvDebugBreak() __debugbreak()
+//# define nvDebugBreak() __asm { int 3 }
+# elif NV_OS_ORBIS
+# define nvDebugBreak() __debugbreak()
+# elif NV_OS_IOS && TARGET_OS_IPHONE
+# define nvDebugBreak() raise(SIGINT)
+# elif NV_CC_CLANG
+# define nvDebugBreak() __builtin_debugtrap()
+# elif NV_CC_GNUC
+//# define nvDebugBreak() __builtin_debugtrap() // Does GCC have debugtrap?
+# define nvDebugBreak() __builtin_trap()
+/*
+# elif NV_CC_GNUC && NV_CPU_PPC && NV_OS_DARWIN
+// @@ Use __builtin_trap() on GCC
+# define nvDebugBreak() __asm__ volatile ("trap")
+# elif NV_CC_GNUC && NV_CPU_X86 && NV_OS_DARWIN
+# define nvDebugBreak() __asm__ volatile ("int3")
+# elif NV_CC_GNUC && NV_CPU_X86
+# define nvDebugBreak() __asm__ ( "int %0" : :"I"(3) )
+# elif NV_OS_ORBIS
+# define nvDebugBreak() __asm volatile ("int $0x41")
+# else
+# include <signal.h>
+# define nvDebugBreak() raise(SIGTRAP);
+// define nvDebugBreak() *((int *)(0)) = 0
+*/
+# endif
+
+# if NV_CC_MSVC
+# define nvExpect(expr) (expr)
+#else
+# define nvExpect(expr) __builtin_expect((expr) != 0, true)
+#endif
+
+#if NV_CC_CLANG
+# if __has_feature(attribute_analyzer_noreturn)
+# define NV_ANALYZER_NORETURN __attribute__((analyzer_noreturn))
+# else
+# define NV_ANALYZER_NORETURN
+# endif
+#else
+# define NV_ANALYZER_NORETURN
+#endif
+
+#define nvDebugBreakOnce() \
+ NV_MULTI_LINE_MACRO_BEGIN \
+ static bool firstTime = true; \
+ if (firstTime) { firstTime = false; nvDebugBreak(); } \
+ NV_MULTI_LINE_MACRO_END
+
+#define nvAssertMacro(exp) \
+ NV_MULTI_LINE_MACRO_BEGIN \
+ if (!nvExpect(exp)) { \
+ if (nvAbort(#exp, __FILE__, __LINE__, __FUNC__) == NV_ABORT_DEBUG) { \
+ nvDebugBreak(); \
+ } \
+ } \
+ NV_MULTI_LINE_MACRO_END
+
+// GCC, LLVM need "##" before the __VA_ARGS__, MSVC doesn't care
+#define nvAssertMacroWithIgnoreAll(exp,...) \
+ NV_MULTI_LINE_MACRO_BEGIN \
+ static bool ignoreAll = false; \
+ if (!ignoreAll && !nvExpect(exp)) { \
+ int _result = nvAbort(#exp, __FILE__, __LINE__, __FUNC__, ##__VA_ARGS__); \
+ if (_result == NV_ABORT_DEBUG) { \
+ nvDebugBreak(); \
+ } else if (_result == NV_ABORT_IGNORE) { \
+ ignoreAll = true; \
+ } \
+ } \
+ NV_MULTI_LINE_MACRO_END
+
+// Interesting assert macro from Insomniac:
+// http://www.gdcvault.com/play/1015319/Developing-Imperfect-Software-How-to
+// Used as follows:
+// if (nvCheck(i < count)) {
+// normal path
+// } else {
+// fixup code.
+// }
+// This style of macro could be combined with __builtin_expect to let the compiler know failure is unlikely.
+#define nvCheckMacro(exp) \
+ (\
+ (exp) ? true : ( \
+ (nvAbort(#exp, __FILE__, __LINE__, __FUNC__) == NV_ABORT_DEBUG) ? (nvDebugBreak(), true) : ( false ) \
+ ) \
+ )
+
+
+#define nvAssert(exp) nvAssertMacro(exp)
+#define nvCheck(exp) nvAssertMacro(exp)
+
+#if defined(_DEBUG)
+# define nvDebugAssert(exp) nvAssertMacro(exp)
+# define nvDebugCheck(exp) nvAssertMacro(exp)
+#else // _DEBUG
+# define nvDebugAssert(exp) nvNoAssert(exp)
+# define nvDebugCheck(exp) nvNoAssert(exp)
+#endif // _DEBUG
+
+#endif // NV_NO_ASSERT
+
+// Use nvAssume for very simple expresions only: nvAssume(0), nvAssume(value == true), etc.
+/*#if !defined(_DEBUG)
+# if NV_CC_MSVC
+# define nvAssume(exp) __assume(exp)
+# else
+# define nvAssume(exp) nvCheck(exp)
+# endif
+#else
+# define nvAssume(exp) nvCheck(exp)
+#endif*/
+
+#if defined(_DEBUG)
+# if NV_CC_MSVC
+# define nvUnreachable() nvAssert(0 && "unreachable"); __assume(0)
+# else
+# define nvUnreachable() nvAssert(0 && "unreachable"); __builtin_unreachable()
+# endif
+#else
+# if NV_CC_MSVC
+# define nvUnreachable() __assume(0)
+# else
+# define nvUnreachable() __builtin_unreachable()
+# endif
+#endif
+
+#define nvError(x) nvAbort(x, __FILE__, __LINE__, __FUNC__)
+#define nvWarning(x) nvDebugPrint("*** Warning %s/%d: %s\n", __FILE__, __LINE__, (x))
+
+#ifndef NV_DEBUG_PRINT
+#define NV_DEBUG_PRINT 1 //defined(_DEBUG)
+#endif
+
+#if NV_DEBUG_PRINT
+#define nvDebug(...) nvDebugPrint(__VA_ARGS__)
+#else
+#if NV_CC_MSVC
+#define nvDebug(...) __noop(__VA_ARGS__)
+#else
+#define nvDebug(...) ((void)0) // Non-msvc platforms do not evaluate arguments?
+#endif
+#endif
+
+
+NVCORE_API int nvAbort(const char *exp, const char *file, int line, const char * func = NULL, const char * msg = NULL, ...) __attribute__((format (printf, 5, 6))) NV_ANALYZER_NORETURN;
+NVCORE_API void NV_CDECL nvDebugPrint( const char *msg, ... ) __attribute__((format (printf, 1, 2)));
+
+namespace nv
+{
+ inline bool isValidPtr(const void * ptr) {
+ #if NV_OS_DARWIN
+ return true; // IC: Not sure what ranges are OK on OSX.
+ #endif
+
+ #if NV_CPU_X86_64
+ if (ptr == NULL) return true;
+ if (reinterpret_cast<uint64>(ptr) < 0x10000ULL) return false;
+ if (reinterpret_cast<uint64>(ptr) >= 0x000007FFFFFEFFFFULL) return false;
+ #else
+ if (reinterpret_cast<uint32>(ptr) == 0xcccccccc) return false;
+ if (reinterpret_cast<uint32>(ptr) == 0xcdcdcdcd) return false;
+ if (reinterpret_cast<uint32>(ptr) == 0xdddddddd) return false;
+ if (reinterpret_cast<uint32>(ptr) == 0xffffffff) return false;
+ #endif
+ return true;
+ }
+
+ // Message handler interface.
+ struct MessageHandler {
+ virtual void log(const char * str, va_list arg) = 0;
+ virtual ~MessageHandler() {}
+ };
+
+ // Assert handler interface.
+ struct AssertHandler {
+ virtual int assertion(const char *exp, const char *file, int line, const char *func, const char *msg, va_list arg) = 0;
+ virtual ~AssertHandler() {}
+ };
+
+
+ namespace debug
+ {
+ NVCORE_API void dumpInfo();
+ NVCORE_API void dumpCallstack( MessageHandler *messageHandler, int callstackLevelsToSkip = 0 );
+
+ NVCORE_API void setMessageHandler( MessageHandler * messageHandler );
+ NVCORE_API void resetMessageHandler();
+
+ NVCORE_API void setAssertHandler( AssertHandler * assertHanlder );
+ NVCORE_API void resetAssertHandler();
+
+ NVCORE_API void enableSigHandler(bool interactive);
+ NVCORE_API void disableSigHandler();
+
+ NVCORE_API bool isDebuggerPresent();
+ NVCORE_API bool attachToDebugger();
+
+ NVCORE_API void terminate(int code);
+ }
+
+} // nv namespace
+
+#endif // NV_CORE_DEBUG_H
diff --git a/thirdparty/thekla_atlas/nvcore/DefsGnucDarwin.h b/thirdparty/thekla_atlas/nvcore/DefsGnucDarwin.h
new file mode 100644
index 0000000000..afb21c3d25
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/DefsGnucDarwin.h
@@ -0,0 +1,57 @@
+#ifndef NV_CORE_H
+#error "Do not include this file directly."
+#endif
+
+#include <stdint.h> // uint8_t, int8_t, ... uintptr_t
+#include <stddef.h> // operator new, size_t, NULL
+
+// Function linkage
+#define DLL_IMPORT
+#if __GNUC__ >= 4
+# define DLL_EXPORT __attribute__((visibility("default")))
+# define DLL_EXPORT_CLASS DLL_EXPORT
+#else
+# define DLL_EXPORT
+# define DLL_EXPORT_CLASS
+#endif
+
+// Function calling modes
+#if NV_CPU_X86
+# define NV_CDECL __attribute__((cdecl))
+# define NV_STDCALL __attribute__((stdcall))
+#else
+# define NV_CDECL
+# define NV_STDCALL
+#endif
+
+#define NV_FASTCALL __attribute__((fastcall))
+#define NV_FORCEINLINE __attribute__((always_inline)) inline
+#define NV_DEPRECATED __attribute__((deprecated))
+#if NV_OS_IOS
+#define NV_THREAD_LOCAL // @@ IC: Looks like iOS does not have support for TLS declarations.
+#else
+#define NV_THREAD_LOCAL __thread
+#endif
+
+#if __GNUC__ > 2
+#define NV_PURE __attribute__((pure))
+#define NV_CONST __attribute__((const))
+#else
+#define NV_PURE
+#define NV_CONST
+#endif
+
+#define NV_NOINLINE __attribute__((noinline))
+
+// Define __FUNC__ properly.
+#if __STDC_VERSION__ < 199901L
+# if __GNUC__ >= 2
+# define __FUNC__ __PRETTY_FUNCTION__ // __FUNCTION__
+# else
+# define __FUNC__ "<unknown>"
+# endif
+#else
+# define __FUNC__ __PRETTY_FUNCTION__
+#endif
+
+#define restrict __restrict__
diff --git a/thirdparty/thekla_atlas/nvcore/DefsGnucLinux.h b/thirdparty/thekla_atlas/nvcore/DefsGnucLinux.h
new file mode 100644
index 0000000000..2126d866f5
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/DefsGnucLinux.h
@@ -0,0 +1,59 @@
+#ifndef NV_CORE_H
+#error "Do not include this file directly."
+#endif
+
+#include <stdint.h> // uint8_t, int8_t, ... uintptr_t
+#include <stddef.h> // operator new, size_t, NULL
+
+// Function linkage
+#define DLL_IMPORT
+#if __GNUC__ >= 4
+# define DLL_EXPORT __attribute__((visibility("default")))
+# define DLL_EXPORT_CLASS DLL_EXPORT
+#else
+# define DLL_EXPORT
+# define DLL_EXPORT_CLASS
+#endif
+
+// Function calling modes
+#if NV_CPU_X86
+# define NV_CDECL __attribute__((cdecl))
+# define NV_STDCALL __attribute__((stdcall))
+#else
+# define NV_CDECL
+# define NV_STDCALL
+#endif
+
+#define NV_FASTCALL __attribute__((fastcall))
+//#if __GNUC__ > 3
+// It seems that GCC does not assume always_inline implies inline. I think this depends on the GCC version :(
+#define NV_FORCEINLINE inline __attribute__((always_inline))
+//#else
+// Some compilers complain that inline and always_inline are redundant.
+//#define NV_FORCEINLINE __attribute__((always_inline))
+//#endif
+#define NV_DEPRECATED __attribute__((deprecated))
+#define NV_THREAD_LOCAL __thread
+
+#if __GNUC__ > 2
+#define NV_PURE __attribute__((pure))
+#define NV_CONST __attribute__((const))
+#else
+#define NV_PURE
+#define NV_CONST
+#endif
+
+#define NV_NOINLINE __attribute__((noinline))
+
+// Define __FUNC__ properly.
+#if __STDC_VERSION__ < 199901L
+# if __GNUC__ >= 2
+# define __FUNC__ __PRETTY_FUNCTION__ // __FUNCTION__
+# else
+# define __FUNC__ "<unknown>"
+# endif
+#else
+# define __FUNC__ __PRETTY_FUNCTION__
+#endif
+
+#define restrict __restrict__
diff --git a/thirdparty/thekla_atlas/nvcore/DefsGnucWin32.h b/thirdparty/thekla_atlas/nvcore/DefsGnucWin32.h
new file mode 100644
index 0000000000..f35ed88575
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/DefsGnucWin32.h
@@ -0,0 +1,65 @@
+#ifndef NV_CORE_H
+#error "Do not include this file directly."
+#endif
+
+//#include <cstddef> // size_t, NULL
+
+// Function linkage
+#define DLL_IMPORT __declspec(dllimport)
+#define DLL_EXPORT __declspec(dllexport)
+#define DLL_EXPORT_CLASS DLL_EXPORT
+
+// Function calling modes
+#if NV_CPU_X86
+# define NV_CDECL __attribute__((cdecl))
+# define NV_STDCALL __attribute__((stdcall))
+#else
+# define NV_CDECL
+# define NV_STDCALL
+#endif
+
+#define NV_FASTCALL __attribute__((fastcall))
+#define NV_FORCEINLINE __attribute__((always_inline))
+#define NV_DEPRECATED __attribute__((deprecated))
+
+#if __GNUC__ > 2
+#define NV_PURE __attribute__((pure))
+#define NV_CONST __attribute__((const))
+#else
+#define NV_PURE
+#define NV_CONST
+#endif
+
+#define NV_NOINLINE __attribute__((noinline))
+
+// Define __FUNC__ properly.
+#if __STDC_VERSION__ < 199901L
+# if __GNUC__ >= 2
+# define __FUNC__ __PRETTY_FUNCTION__ // __FUNCTION__
+# else
+# define __FUNC__ "<unknown>"
+# endif
+#else
+# define __FUNC__ __PRETTY_FUNCTION__
+#endif
+
+#define restrict __restrict__
+
+/*
+// Type definitions
+typedef unsigned char uint8;
+typedef signed char int8;
+
+typedef unsigned short uint16;
+typedef signed short int16;
+
+typedef unsigned int uint32;
+typedef signed int int32;
+
+typedef unsigned long long uint64;
+typedef signed long long int64;
+
+// Aliases
+typedef uint32 uint;
+*/
+
diff --git a/thirdparty/thekla_atlas/nvcore/DefsVcWin32.h b/thirdparty/thekla_atlas/nvcore/DefsVcWin32.h
new file mode 100644
index 0000000000..a915f3791a
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/DefsVcWin32.h
@@ -0,0 +1,94 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#ifndef NV_CORE_H
+#error "Do not include this file directly."
+#endif
+
+// Function linkage
+#define DLL_IMPORT __declspec(dllimport)
+#define DLL_EXPORT __declspec(dllexport)
+#define DLL_EXPORT_CLASS DLL_EXPORT
+
+// Function calling modes
+#define NV_CDECL __cdecl
+#define NV_STDCALL __stdcall
+#define NV_FASTCALL __fastcall
+#define NV_DEPRECATED
+
+#define NV_PURE
+#define NV_CONST
+
+// Set standard function names.
+#if _MSC_VER < 1900
+# define snprintf _snprintf
+#endif
+#if _MSC_VER < 1500
+# define vsnprintf _vsnprintf
+#endif
+#if _MSC_VER < 1700
+# define strtoll _strtoi64
+# define strtoull _strtoui64
+#endif
+//#define chdir _chdir
+#define getcwd _getcwd
+
+#if _MSC_VER <= 1600
+#define va_copy(a, b) (a) = (b)
+#endif
+
+#if !defined restrict
+#define restrict
+#endif
+
+// Ignore gcc attributes.
+#define __attribute__(X)
+
+#if !defined __FUNC__
+#define __FUNC__ __FUNCTION__
+#endif
+
+#define NV_NOINLINE __declspec(noinline)
+#define NV_FORCEINLINE __forceinline
+
+#define NV_THREAD_LOCAL __declspec(thread)
+
+/*
+// Type definitions
+typedef unsigned char uint8;
+typedef signed char int8;
+
+typedef unsigned short uint16;
+typedef signed short int16;
+
+typedef unsigned int uint32;
+typedef signed int int32;
+
+typedef unsigned __int64 uint64;
+typedef signed __int64 int64;
+
+// Aliases
+typedef uint32 uint;
+*/
+
+// Unwanted VC++ warnings to disable.
+/*
+#pragma warning(disable : 4244) // conversion to float, possible loss of data
+#pragma warning(disable : 4245) // conversion from 'enum ' to 'unsigned long', signed/unsigned mismatch
+#pragma warning(disable : 4100) // unreferenced formal parameter
+#pragma warning(disable : 4514) // unreferenced inline function has been removed
+#pragma warning(disable : 4710) // inline function not expanded
+#pragma warning(disable : 4127) // Conditional expression is constant
+#pragma warning(disable : 4305) // truncation from 'const double' to 'float'
+#pragma warning(disable : 4505) // unreferenced local function has been removed
+
+#pragma warning(disable : 4702) // unreachable code in inline expanded function
+#pragma warning(disable : 4711) // function selected for automatic inlining
+#pragma warning(disable : 4725) // Pentium fdiv bug
+
+#pragma warning(disable : 4786) // Identifier was truncated and cannot be debugged.
+
+#pragma warning(disable : 4675) // resolved overload was found by argument-dependent lookup
+*/
+
+#pragma warning(1 : 4705) // Report unused local variables.
+#pragma warning(1 : 4555) // Expression has no effect.
diff --git a/thirdparty/thekla_atlas/nvcore/FileSystem.cpp b/thirdparty/thekla_atlas/nvcore/FileSystem.cpp
new file mode 100644
index 0000000000..5ed0ca074f
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/FileSystem.cpp
@@ -0,0 +1,75 @@
+// This code is in the public domain -- castano@gmail.com
+
+#include "FileSystem.h"
+
+#if NV_OS_WIN32
+#define _CRT_NONSTDC_NO_WARNINGS // _chdir is defined deprecated, but that's a bug, chdir is deprecated, _chdir is *not*.
+//#include <shlwapi.h> // PathFileExists
+#include <windows.h> // GetFileAttributes
+#include <direct.h> // _mkdir
+#elif NV_OS_XBOX
+#include <Xtl.h>
+#elif NV_OS_DURANGO
+#include <Windows.h>
+#else
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#endif
+#include <stdio.h> // remove, unlink
+
+using namespace nv;
+
+
+bool FileSystem::exists(const char * path)
+{
+#if NV_OS_UNIX
+ return access(path, F_OK|R_OK) == 0;
+ //struct stat buf;
+ //return stat(path, &buf) == 0;
+#elif NV_OS_WIN32 || NV_OS_XBOX || NV_OS_DURANGO
+ // PathFileExists requires linking to shlwapi.lib
+ //return PathFileExists(path) != 0;
+ return GetFileAttributesA(path) != INVALID_FILE_ATTRIBUTES;
+#else
+ if (FILE * fp = fopen(path, "r"))
+ {
+ fclose(fp);
+ return true;
+ }
+ return false;
+#endif
+}
+
+bool FileSystem::createDirectory(const char * path)
+{
+#if NV_OS_WIN32 || NV_OS_XBOX || NV_OS_DURANGO
+ return CreateDirectoryA(path, NULL) != 0;
+#elif NV_OS_ORBIS
+ // not implemented
+ return false;
+#else
+ return mkdir(path, 0777) != -1;
+#endif
+}
+
+bool FileSystem::changeDirectory(const char * path)
+{
+#if NV_OS_WIN32
+ return _chdir(path) != -1;
+#elif NV_OS_XBOX || NV_OS_DURANGO
+ // Xbox doesn't support Current Working Directory!
+ return false;
+#elif NV_OS_ORBIS
+ // Orbis doesn't support Current Working Directory!
+ return false;
+#else
+ return chdir(path) != -1;
+#endif
+}
+
+bool FileSystem::removeFile(const char * path)
+{
+ // @@ Use unlink or remove?
+ return remove(path) == 0;
+}
diff --git a/thirdparty/thekla_atlas/nvcore/FileSystem.h b/thirdparty/thekla_atlas/nvcore/FileSystem.h
new file mode 100644
index 0000000000..afd0f449d3
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/FileSystem.h
@@ -0,0 +1,24 @@
+// This code is in the public domain -- castano@gmail.com
+
+#pragma once
+#ifndef NV_CORE_FILESYSTEM_H
+#define NV_CORE_FILESYSTEM_H
+
+#include "nvcore.h"
+
+namespace nv
+{
+
+ namespace FileSystem
+ {
+ NVCORE_API bool exists(const char * path);
+ NVCORE_API bool createDirectory(const char * path);
+ NVCORE_API bool changeDirectory(const char * path);
+ NVCORE_API bool removeFile(const char * path);
+
+ } // FileSystem namespace
+
+} // nv namespace
+
+
+#endif // NV_CORE_FILESYSTEM_H
diff --git a/thirdparty/thekla_atlas/nvcore/ForEach.h b/thirdparty/thekla_atlas/nvcore/ForEach.h
new file mode 100644
index 0000000000..bc66f424ef
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/ForEach.h
@@ -0,0 +1,71 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_FOREACH_H
+#define NV_CORE_FOREACH_H
+
+/*
+These foreach macros are very non-standard and somewhat confusing, but I like them.
+*/
+
+#include "nvcore.h"
+
+
+#if NV_CC_CPP11
+
+#define NV_FOREACH(i, container) \
+ for (auto i = (container).start(); !(container).isDone(i); (container).advance(i))
+
+#elif NV_CC_GNUC // If typeof is available:
+
+/*
+Ideally we would like to write this:
+
+#define NV_FOREACH(i, container) \
+ for(decltype(container)::PseudoIndex i((container).start()); !(container).isDone(i); (container).advance(i))
+
+But gcc versions prior to 4.7 required an intermediate type. See:
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=6709
+*/
+
+#define NV_FOREACH(i, container) \
+ typedef typeof(container) NV_STRING_JOIN2(cont,__LINE__); \
+ for(NV_STRING_JOIN2(cont,__LINE__)::PseudoIndex i((container).start()); !(container).isDone(i); (container).advance(i))
+
+#else // If typeof not available:
+
+#define NV_NEED_PSEUDOINDEX_WRAPPER 1
+
+#include <new> // placement new
+
+struct PseudoIndexWrapper {
+ template <typename T>
+ PseudoIndexWrapper(const T & container) {
+ nvStaticCheck(sizeof(typename T::PseudoIndex) <= sizeof(memory));
+ new (memory) typename T::PseudoIndex(container.start());
+ }
+ // PseudoIndex cannot have a dtor!
+
+ template <typename T> typename T::PseudoIndex & operator()(const T * /*container*/) {
+ return *reinterpret_cast<typename T::PseudoIndex *>(memory);
+ }
+ template <typename T> const typename T::PseudoIndex & operator()(const T * /*container*/) const {
+ return *reinterpret_cast<const typename T::PseudoIndex *>(memory);
+ }
+
+ uint8 memory[4]; // Increase the size if we have bigger enumerators.
+};
+
+#define NV_FOREACH(i, container) \
+ for(PseudoIndexWrapper i(container); !(container).isDone(i(&(container))); (container).advance(i(&(container))))
+
+#endif
+
+// Declare foreach keyword.
+#if !defined NV_NO_USE_KEYWORDS
+# define foreach NV_FOREACH
+# define foreach_index NV_FOREACH
+#endif
+
+
+#endif // NV_CORE_FOREACH_H
diff --git a/thirdparty/thekla_atlas/nvcore/Hash.h b/thirdparty/thekla_atlas/nvcore/Hash.h
new file mode 100644
index 0000000000..a8b0b2c63b
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Hash.h
@@ -0,0 +1,83 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_HASH_H
+#define NV_CORE_HASH_H
+
+#include "nvcore.h"
+
+namespace nv
+{
+ inline uint sdbmHash(const void * data_in, uint size, uint h = 5381)
+ {
+ const uint8 * data = (const uint8 *) data_in;
+ uint i = 0;
+ while (i < size) {
+ h = (h << 16) + (h << 6) - h + (uint) data[i++];
+ }
+ return h;
+ }
+
+ // Note that this hash does not handle NaN properly.
+ inline uint sdbmFloatHash(const float * f, uint count, uint h = 5381)
+ {
+ for (uint i = 0; i < count; i++) {
+ //nvDebugCheck(nv::isFinite(*f));
+ union { float f; uint32 i; } x = { f[i] };
+ if (x.i == 0x80000000) x.i = 0;
+ h = sdbmHash(&x, 4, h);
+ }
+ return h;
+ }
+
+
+ template <typename T>
+ inline uint hash(const T & t, uint h = 5381)
+ {
+ return sdbmHash(&t, sizeof(T), h);
+ }
+
+ template <>
+ inline uint hash(const float & f, uint h)
+ {
+ return sdbmFloatHash(&f, 1, h);
+ }
+
+
+ // Functors for hash table:
+ template <typename Key> struct Hash
+ {
+ uint operator()(const Key & k) const {
+ return hash(k);
+ }
+ };
+
+ template <typename Key> struct Equal
+ {
+ bool operator()(const Key & k0, const Key & k1) const {
+ return k0 == k1;
+ }
+ };
+
+
+ // @@ Move to Utils.h?
+ template <typename T1, typename T2>
+ struct Pair {
+ T1 first;
+ T2 second;
+ };
+
+ template <typename T1, typename T2>
+ bool operator==(const Pair<T1,T2> & p0, const Pair<T1,T2> & p1) {
+ return p0.first == p1.first && p0.second == p1.second;
+ }
+
+ template <typename T1, typename T2>
+ uint hash(const Pair<T1,T2> & p, uint h = 5381) {
+ return hash(p.second, hash(p.first));
+ }
+
+
+} // nv namespace
+
+#endif // NV_CORE_HASH_H
diff --git a/thirdparty/thekla_atlas/nvcore/HashMap.h b/thirdparty/thekla_atlas/nvcore/HashMap.h
new file mode 100644
index 0000000000..7856d6a8c9
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/HashMap.h
@@ -0,0 +1,174 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_HASHMAP_H
+#define NV_CORE_HASHMAP_H
+
+/*
+HashMap based on Thatcher Ulrich <tu@tulrich.com> container, donated to the Public Domain.
+
+I'd like to do something to reduce the amount of code generated with this template. The type of
+U is largely irrelevant to the generated code, except for calls to constructors and destructors,
+but the combination of all T and U pairs, generate a large amounts of code.
+
+HashMap is not used in NVTT, so it could be removed from the repository.
+*/
+
+
+#include "Memory.h"
+#include "Debug.h"
+#include "ForEach.h"
+#include "Hash.h"
+
+namespace nv
+{
+ class Stream;
+
+ /** Thatcher Ulrich's hash table.
+ *
+ * Hash table, linear probing, internal chaining. One
+ * interesting/nice thing about this implementation is that the table
+ * itself is a flat chunk of memory containing no pointers, only
+ * relative indices. If the key and value types of the hash contain
+ * no pointers, then the hash can be serialized using raw IO. Could
+ * come in handy.
+ *
+ * Never shrinks, unless you explicitly clear() it. Expands on
+ * demand, though. For best results, if you know roughly how big your
+ * table will be, default it to that size when you create it.
+ */
+ template<typename T, typename U, typename H = Hash<T>, typename E = Equal<T> >
+ class NVCORE_CLASS HashMap
+ {
+ NV_FORBID_COPY(HashMap);
+ public:
+
+ /// Default ctor.
+ HashMap() : entry_count(0), size_mask(-1), table(NULL) { }
+
+ /// Ctor with size hint.
+ explicit HashMap(int size_hint) : entry_count(0), size_mask(-1), table(NULL) { setCapacity(size_hint); }
+
+ /// Dtor.
+ ~HashMap() { clear(); }
+
+
+ void set(const T& key, const U& value);
+ void add(const T& key, const U& value);
+ bool remove(const T& key);
+ void clear();
+ bool isEmpty() const;
+ bool get(const T& key, U* value = NULL, T* other_key = NULL) const;
+ bool contains(const T & key) const;
+ int size() const;
+ int count() const;
+ int capacity() const;
+ void checkExpand();
+ void resize(int n);
+
+ void setCapacity(int new_size);
+
+ // Behaves much like std::pair.
+ struct Entry
+ {
+ int next_in_chain; // internal chaining for collisions
+ uint hash_value; // avoids recomputing. Worthwhile?
+ T key;
+ U value;
+
+ Entry() : next_in_chain(-2) {}
+ Entry(const Entry& e) : next_in_chain(e.next_in_chain), hash_value(e.hash_value), key(e.key), value(e.value) {}
+ Entry(const T& k, const U& v, int next, int hash) : next_in_chain(next), hash_value(hash), key(k), value(v) {}
+
+ bool isEmpty() const { return next_in_chain == -2; }
+ bool isEndOfChain() const { return next_in_chain == -1; }
+ bool isTombstone() const { return hash_value == TOMBSTONE_HASH; }
+
+ void clear() {
+ key.~T(); // placement delete
+ value.~U(); // placement delete
+ next_in_chain = -2;
+ hash_value = ~TOMBSTONE_HASH;
+ }
+
+ void makeTombstone() {
+ key.~T();
+ value.~U();
+ hash_value = TOMBSTONE_HASH;
+ }
+ };
+
+
+ // HashMap enumerator.
+ typedef int PseudoIndex;
+ PseudoIndex start() const { PseudoIndex i = 0; findNext(i); return i; }
+ bool isDone(const PseudoIndex & i) const { nvDebugCheck(i <= size_mask+1); return i == size_mask+1; };
+ void advance(PseudoIndex & i) const { nvDebugCheck(i <= size_mask+1); i++; findNext(i); }
+
+#if NV_NEED_PSEUDOINDEX_WRAPPER
+ Entry & operator[]( const PseudoIndexWrapper & i ) {
+ Entry & e = entry(i(this));
+ nvDebugCheck(e.isTombstone() == false);
+ return e;
+ }
+ const Entry & operator[]( const PseudoIndexWrapper & i ) const {
+ const Entry & e = entry(i(this));
+ nvDebugCheck(e.isTombstone() == false);
+ return e;
+ }
+#else
+ Entry & operator[](const PseudoIndex & i) {
+ Entry & e = entry(i);
+ nvDebugCheck(e.isTombstone() == false);
+ return e;
+ }
+ const Entry & operator[](const PseudoIndex & i) const {
+ const Entry & e = entry(i);
+ nvDebugCheck(e.isTombstone() == false);
+ return e;
+ }
+#endif
+
+
+ // By default we serialize the key-value pairs compactl y.
+ template<typename _T, typename _U, typename _H, typename _E>
+ friend Stream & operator<< (Stream & s, HashMap<_T, _U, _H, _E> & map);
+
+ // This requires more storage, but saves us from rehashing the elements.
+ template<typename _T, typename _U, typename _H, typename _E>
+ friend Stream & rawSerialize(Stream & s, HashMap<_T, _U, _H, _E> & map);
+
+ /// Swap the members of this vector and the given vector.
+ template<typename _T, typename _U, typename _H, typename _E>
+ friend void swap(HashMap<_T, _U, _H, _E> & a, HashMap<_T, _U, _H, _E> & b);
+
+ private:
+ static const uint TOMBSTONE_HASH = (uint) -1;
+
+ uint compute_hash(const T& key) const;
+
+ // Find the index of the matching entry. If no match, then return -1.
+ int findIndex(const T& key) const;
+
+ // Return the index of the newly cleared element.
+ int removeTombstone(int index);
+
+ // Helpers.
+ Entry & entry(int index);
+ const Entry & entry(int index) const;
+
+ void setRawCapacity(int new_size);
+
+ // Move the enumerator to the next valid element.
+ void findNext(PseudoIndex & i) const;
+
+
+ int entry_count;
+ int size_mask;
+ Entry * table;
+
+ };
+
+} // nv namespace
+
+#endif // NV_CORE_HASHMAP_H
diff --git a/thirdparty/thekla_atlas/nvcore/HashMap.inl b/thirdparty/thekla_atlas/nvcore/HashMap.inl
new file mode 100644
index 0000000000..f0b6bfea62
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/HashMap.inl
@@ -0,0 +1,550 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_HASHMAP_INL
+#define NV_CORE_HASHMAP_INL
+
+#include "HashMap.h"
+
+#include "Stream.h"
+#include "Utils.h" // swap
+
+#include <new> // for placement new
+
+
+namespace nv
+{
+
+ // Set a new or existing value under the key, to the value.
+ template<typename T, typename U, typename H, typename E>
+ void HashMap<T, U, H, E>::set(const T& key, const U& value)
+ {
+ int index = findIndex(key);
+ if (index >= 0)
+ {
+ entry(index).value = value;
+ return;
+ }
+
+ // Entry under key doesn't exist.
+ add(key, value);
+ }
+
+
+ // Add a new value to the hash table, under the specified key.
+ template<typename T, typename U, typename H, typename E>
+ void HashMap<T, U, H, E>::add(const T& key, const U& value)
+ {
+ nvCheck(findIndex(key) == -1);
+
+ checkExpand();
+ nvCheck(table != NULL);
+ entry_count++;
+
+ const uint hash_value = compute_hash(key);
+ const int index = hash_value & size_mask;
+
+ Entry * natural_entry = &(entry(index));
+
+ if (natural_entry->isEmpty())
+ {
+ // Put the new entry in.
+ new (natural_entry) Entry(key, value, -1, hash_value);
+ }
+ else if (natural_entry->isTombstone()) {
+ // Put the new entry in, without disturbing the rest of the chain.
+ int next_in_chain = natural_entry->next_in_chain;
+ new (natural_entry) Entry(key, value, next_in_chain, hash_value);
+ }
+ else
+ {
+ // Find a blank spot.
+ int blank_index = index;
+ for (int search_count = 0; ; search_count++)
+ {
+ blank_index = (blank_index + 1) & size_mask;
+ if (entry(blank_index).isEmpty()) break; // found it
+ if (entry(blank_index).isTombstone()) {
+ blank_index = removeTombstone(blank_index);
+ break;
+ }
+ nvCheck(search_count < this->size_mask);
+ }
+ Entry * blank_entry = &entry(blank_index);
+
+ if (int(natural_entry->hash_value & size_mask) == index)
+ {
+ // Collision. Link into this chain.
+
+ // Move existing list head.
+ new (blank_entry) Entry(*natural_entry); // placement new, copy ctor
+
+ // Put the new info in the natural entry.
+ natural_entry->key = key;
+ natural_entry->value = value;
+ natural_entry->next_in_chain = blank_index;
+ natural_entry->hash_value = hash_value;
+ }
+ else
+ {
+ // Existing entry does not naturally
+ // belong in this slot. Existing
+ // entry must be moved.
+
+ // Find natural location of collided element (i.e. root of chain)
+ int collided_index = natural_entry->hash_value & size_mask;
+ for (int search_count = 0; ; search_count++)
+ {
+ Entry * e = &entry(collided_index);
+ if (e->next_in_chain == index)
+ {
+ // Here's where we need to splice.
+ new (blank_entry) Entry(*natural_entry);
+ e->next_in_chain = blank_index;
+ break;
+ }
+ collided_index = e->next_in_chain;
+ nvCheck(collided_index >= 0 && collided_index <= size_mask);
+ nvCheck(search_count <= size_mask);
+ }
+
+ // Put the new data in the natural entry.
+ natural_entry->key = key;
+ natural_entry->value = value;
+ natural_entry->hash_value = hash_value;
+ natural_entry->next_in_chain = -1;
+ }
+ }
+ }
+
+
+ // Remove the first value under the specified key.
+ template<typename T, typename U, typename H, typename E>
+ bool HashMap<T, U, H, E>::remove(const T& key)
+ {
+ if (table == NULL)
+ {
+ return false;
+ }
+
+ int index = findIndex(key);
+ if (index < 0)
+ {
+ return false;
+ }
+
+ Entry * pos = &entry(index);
+
+ int natural_index = (int) (pos->hash_value & size_mask);
+
+ if (index != natural_index) {
+ // We're not the head of our chain, so we can
+ // be spliced out of it.
+
+ // Iterate up the chain, and splice out when
+ // we get to m_index.
+ Entry* e = &entry(natural_index);
+ while (e->next_in_chain != index) {
+ nvDebugCheck(e->isEndOfChain() == false);
+ e = &entry(e->next_in_chain);
+ }
+
+ if (e->isTombstone() && pos->isEndOfChain()) {
+ // Tombstone has nothing else to point
+ // to, so mark it empty.
+ e->next_in_chain = -2;
+ } else {
+ e->next_in_chain = pos->next_in_chain;
+ }
+
+ pos->clear();
+ }
+ else if (pos->isEndOfChain() == false) {
+ // We're the head of our chain, and there are
+ // additional elements.
+ //
+ // We need to put a tombstone here.
+ //
+ // We can't clear the element, because the
+ // rest of the elements in the chain must be
+ // linked to this position.
+ //
+ // We can't move any of the succeeding
+ // elements in the chain (i.e. to fill this
+ // entry), because we don't want to invalidate
+ // any other existing iterators.
+ pos->makeTombstone();
+ } else {
+ // We're the head of the chain, but we're the
+ // only member of the chain.
+ pos->clear();
+ }
+
+ entry_count--;
+
+ return true;
+ }
+
+
+ // Remove all entries from the hash table.
+ template<typename T, typename U, typename H, typename E>
+ void HashMap<T, U, H, E>::clear()
+ {
+ if (table != NULL)
+ {
+ // Delete the entries.
+ for (int i = 0, n = size_mask; i <= n; i++)
+ {
+ Entry * e = &entry(i);
+ if (e->isEmpty() == false && e->isTombstone() == false)
+ {
+ e->clear();
+ }
+ }
+ free(table);
+ table = NULL;
+ entry_count = 0;
+ size_mask = -1;
+ }
+ }
+
+
+ // Returns true if the hash is empty.
+ template<typename T, typename U, typename H, typename E>
+ bool HashMap<T, U, H, E>::isEmpty() const
+ {
+ return table == NULL || entry_count == 0;
+ }
+
+
+ // Retrieve the value under the given key.
+ // - If there's no value under the key, then return false and leave *value alone.
+ // - If there is a value, return true, and set *value to the entry's value.
+ // - If value == NULL, return true or false according to the presence of the key, but don't touch *value.
+ template<typename T, typename U, typename H, typename E>
+ bool HashMap<T, U, H, E>::get(const T& key, U* value/*= NULL*/, T* other_key/*= NULL*/) const
+ {
+ int index = findIndex(key);
+ if (index >= 0)
+ {
+ if (value != NULL) {
+ *value = entry(index).value; // take care with side-effects!
+ }
+ if (other_key != NULL) {
+ *other_key = entry(index).key;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ // Determine if the given key is contained in the hash.
+ template<typename T, typename U, typename H, typename E>
+ bool HashMap<T, U, H, E>::contains(const T & key) const
+ {
+ return get(key);
+ }
+
+ // Number of entries in the hash.
+ template<typename T, typename U, typename H, typename E>
+ int HashMap<T, U, H, E>::size() const
+ {
+ return entry_count;
+ }
+
+ // Number of entries in the hash.
+ template<typename T, typename U, typename H, typename E>
+ int HashMap<T, U, H, E>::count() const
+ {
+ return size();
+ }
+
+ template<typename T, typename U, typename H, typename E>
+ int HashMap<T, U, H, E>::capacity() const
+ {
+ return size_mask+1;
+ }
+
+
+ // Resize the hash table to fit one more entry. Often this doesn't involve any action.
+ template<typename T, typename U, typename H, typename E>
+ void HashMap<T, U, H, E>::checkExpand()
+ {
+ if (table == NULL) {
+ // Initial creation of table. Make a minimum-sized table.
+ setRawCapacity(16);
+ }
+ else if (entry_count * 3 > (size_mask + 1) * 2) {
+ // Table is more than 2/3rds full. Expand.
+ setRawCapacity(entry_count * 2);
+ }
+ }
+
+
+ // Hint the bucket count to >= n.
+ template<typename T, typename U, typename H, typename E>
+ void HashMap<T, U, H, E>::resize(int n)
+ {
+ // Not really sure what this means in relation to
+ // STLport's hash_map... they say they "increase the
+ // bucket count to at least n" -- but does that mean
+ // their real capacity after resize(n) is more like
+ // n*2 (since they do linked-list chaining within
+ // buckets?).
+ setCapacity(n);
+ }
+
+
+ // Size the hash so that it can comfortably contain the given number of elements. If the hash already contains more
+ // elements than new_size, then this may be a no-op.
+ template<typename T, typename U, typename H, typename E>
+ void HashMap<T, U, H, E>::setCapacity(int new_size)
+ {
+ int new_raw_size = (new_size * 3) / 2;
+ if (new_raw_size < size()) { return; }
+
+ setRawCapacity(new_raw_size);
+ }
+
+
+ // By default we serialize the key-value pairs compactly.
+ template<typename _T, typename _U, typename _H, typename _E>
+ Stream & operator<< (Stream & s, HashMap<_T, _U, _H, _E> & map)
+ {
+ typedef typename HashMap<_T, _U, _H, _E>::Entry HashMapEntry;
+
+ int entry_count = map.entry_count;
+ s << entry_count;
+
+ if (s.isLoading()) {
+ map.clear();
+ if(entry_count == 0) {
+ return s;
+ }
+ map.entry_count = entry_count;
+ map.size_mask = nextPowerOfTwo(U32(entry_count)) - 1;
+ map.table = malloc<HashMapEntry>(map.size_mask + 1);
+
+ for (int i = 0; i <= map.size_mask; i++) {
+ map.table[i].next_in_chain = -2; // mark empty
+ }
+
+ _T key;
+ _U value;
+ for (int i = 0; i < entry_count; i++) {
+ s << key << value;
+ map.add(key, value);
+ }
+ }
+ else {
+ int i = 0;
+ map.findNext(i);
+ while (i != map.size_mask+1) {
+ HashMapEntry & e = map.entry(i);
+
+ s << e.key << e.value;
+
+ i++;
+ map.findNext(i);
+ }
+ //for(HashMap<_T, _U, _H, _E>::PseudoIndex i((map).start()); !(map).isDone(i); (map).advance(i)) {
+ //foreach(i, map) {
+ // s << map[i].key << map[i].value;
+ //}
+ }
+
+ return s;
+ }
+
+ // This requires more storage, but saves us from rehashing the elements.
+ template<typename _T, typename _U, typename _H, typename _E>
+ Stream & rawSerialize(Stream & s, HashMap<_T, _U, _H, _E> & map)
+ {
+ typedef typename HashMap<_T, _U, _H, _E>::Entry HashMapEntry;
+
+ if (s.isLoading()) {
+ map.clear();
+ }
+
+ s << map.size_mask;
+
+ if (map.size_mask != -1) {
+ s << map.entry_count;
+
+ if (s.isLoading()) {
+ map.table = new HashMapEntry[map.size_mask+1];
+ }
+
+ for (int i = 0; i <= map.size_mask; i++) {
+ HashMapEntry & e = map.table[i];
+ s << e.next_in_chain << e.hash_value;
+ s << e.key;
+ s << e.value;
+ }
+ }
+
+ return s;
+ }
+
+ // Swap the members of this vector and the given vector.
+ template<typename _T, typename _U, typename _H, typename _E>
+ void swap(HashMap<_T, _U, _H, _E> & a, HashMap<_T, _U, _H, _E> & b)
+ {
+ swap(a.entry_count, b.entry_count);
+ swap(a.size_mask, b.size_mask);
+ swap(a.table, b.table);
+ }
+
+
+ template<typename T, typename U, typename H, typename E>
+ uint HashMap<T, U, H, E>::compute_hash(const T& key) const
+ {
+ H hash;
+ uint hash_value = hash(key);
+ if (hash_value == TOMBSTONE_HASH) {
+ hash_value ^= 0x8000;
+ }
+ return hash_value;
+ }
+
+ // Find the index of the matching entry. If no match, then return -1.
+ template<typename T, typename U, typename H, typename E>
+ int HashMap<T, U, H, E>::findIndex(const T& key) const
+ {
+ if (table == NULL) return -1;
+
+ E equal;
+
+ uint hash_value = compute_hash(key);
+ int index = hash_value & size_mask;
+
+ const Entry * e = &entry(index);
+ if (e->isEmpty()) return -1;
+ if (e->isTombstone() == false && int(e->hash_value & size_mask) != index) {
+ // occupied by a collider
+ return -1;
+ }
+
+ for (;;)
+ {
+ nvCheck(e->isTombstone() || (e->hash_value & size_mask) == (hash_value & size_mask));
+
+ if (e->hash_value == hash_value && equal(e->key, key))
+ {
+ // Found it.
+ return index;
+ }
+ nvDebugCheck(e->isTombstone() || !equal(e->key, key)); // keys are equal, but hash differs!
+
+ // Keep looking through the chain.
+ index = e->next_in_chain;
+ if (index == -1) break; // end of chain
+
+ nvCheck(index >= 0 && index <= size_mask);
+ e = &entry(index);
+
+ nvCheck(e->isEmpty() == false || e->isTombstone());
+ }
+ return -1;
+ }
+
+ // Return the index of the newly cleared element.
+ template<typename T, typename U, typename H, typename E>
+ int HashMap<T, U, H, E>::removeTombstone(int index) {
+ Entry* e = &entry(index);
+ nvCheck(e->isTombstone());
+ nvCheck(!e->isEndOfChain());
+
+ // Move the next element of the chain into the
+ // tombstone slot, and return the vacated element.
+ int new_blank_index = e->next_in_chain;
+ Entry* new_blank = &entry(new_blank_index);
+ new (e) Entry(*new_blank);
+ new_blank->clear();
+ return new_blank_index;
+ }
+
+ // Helpers.
+ template<typename T, typename U, typename H, typename E>
+ typename HashMap<T, U, H, E>::Entry & HashMap<T, U, H, E>::entry(int index)
+ {
+ nvDebugCheck(table != NULL);
+ nvDebugCheck(index >= 0 && index <= size_mask);
+ return table[index];
+ }
+ template<typename T, typename U, typename H, typename E>
+ const typename HashMap<T, U, H, E>::Entry & HashMap<T, U, H, E>::entry(int index) const
+ {
+ nvDebugCheck(table != NULL);
+ nvDebugCheck(index >= 0 && index <= size_mask);
+ return table[index];
+ }
+
+
+ // Resize the hash table to the given size (Rehash the contents of the current table). The arg is the number of
+ // hash table entries, not the number of elements we should actually contain (which will be less than this).
+ template<typename T, typename U, typename H, typename E>
+ void HashMap<T, U, H, E>::setRawCapacity(int new_size)
+ {
+ if (new_size <= 0) {
+ // Special case.
+ clear();
+ return;
+ }
+
+ // Force new_size to be a power of two.
+ new_size = nextPowerOfTwo(U32(new_size));
+
+ HashMap<T, U, H, E> new_hash;
+ new_hash.table = malloc<Entry>(new_size);
+ nvDebugCheck(new_hash.table != NULL);
+
+ new_hash.entry_count = 0;
+ new_hash.size_mask = new_size - 1;
+ for (int i = 0; i < new_size; i++)
+ {
+ new_hash.entry(i).next_in_chain = -2; // mark empty
+ }
+
+ // Copy stuff to new_hash
+ if (table != NULL)
+ {
+ for (int i = 0, n = size_mask; i <= n; i++)
+ {
+ Entry * e = &entry(i);
+ if (e->isEmpty() == false && e->isTombstone() == false)
+ {
+ // Insert old entry into new hash.
+ new_hash.add(e->key, e->value);
+ e->clear(); // placement delete of old element
+ }
+ }
+
+ // Delete our old data buffer.
+ free(table);
+ }
+
+ // Steal new_hash's data.
+ entry_count = new_hash.entry_count;
+ size_mask = new_hash.size_mask;
+ table = new_hash.table;
+ new_hash.entry_count = 0;
+ new_hash.size_mask = -1;
+ new_hash.table = NULL;
+ }
+
+ // Move the enumerator to the next valid element.
+ template<typename T, typename U, typename H, typename E>
+ void HashMap<T, U, H, E>::findNext(PseudoIndex & i) const {
+ while (i <= size_mask) {
+ const Entry & e = entry(i);
+ if (e.isEmpty() == false && e.isTombstone() == false) {
+ break;
+ }
+ i++;
+ }
+ }
+
+} // nv namespace
+
+#endif // NV_CORE_HASHMAP_INL
diff --git a/thirdparty/thekla_atlas/nvcore/Memory.cpp b/thirdparty/thekla_atlas/nvcore/Memory.cpp
new file mode 100644
index 0000000000..302a2d84cb
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Memory.cpp
@@ -0,0 +1,153 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "Memory.h"
+#include "Debug.h"
+#include "Utils.h"
+
+#include <stdlib.h>
+
+#ifdef NV_OS_LINUX
+#include <malloc.h>
+#endif
+
+#define USE_EFENCE 0
+
+#if USE_EFENCE
+extern "C" void *EF_malloc(size_t size);
+extern "C" void *EF_realloc(void * oldBuffer, size_t newSize);
+extern "C" void EF_free(void * address);
+#endif
+
+using namespace nv;
+
+#if NV_OVERRIDE_ALLOC
+
+void * malloc(size_t size)
+{
+#if USE_EFENCE
+ return EF_malloc(size);
+#else
+ return ::malloc(size);
+#endif
+}
+
+void * debug_malloc(size_t size, const char * file, int line)
+{
+ NV_UNUSED(file);
+ NV_UNUSED(line);
+#if USE_EFENCE
+ return EF_malloc(size);
+#else
+ return ::malloc(size);
+#endif
+}
+
+void free(void * ptr)
+{
+#if USE_EFENCE
+ return EF_free(const_cast<void *>(ptr));
+#else
+ ::free(const_cast<void *>(ptr));
+#endif
+}
+
+void * realloc(void * ptr, size_t size)
+{
+ nvDebugCheck(ptr != NULL || size != 0); // undefined realloc behavior.
+#if USE_EFENCE
+ return EF_realloc(ptr, size);
+#else
+ return ::realloc(ptr, size);
+#endif
+}
+
+
+/* No need to override this unless we want line info.
+void * operator new (size_t size) throw()
+{
+ return malloc(size);
+}
+
+void operator delete (void *p) throw()
+{
+ free(p);
+}
+
+void * operator new [] (size_t size) throw()
+{
+ return malloc(size);
+}
+
+void operator delete [] (void * p) throw()
+{
+ free(p);
+}
+*/
+
+#if 0 // Code from Apple:
+void* operator new(std::size_t sz) throw (std::bad_alloc)
+{
+ void *result = std::malloc (sz == 0 ? 1 : sz);
+ if (result == NULL)
+ throw std::bad_alloc();
+ gNewCounter++;
+ return result;
+}
+void operator delete(void* p) throw()
+{
+ if (p == NULL)
+ return;
+ std::free (p);
+ gDeleteCounter++;
+}
+
+/* These are the 'nothrow' versions of the above operators.
+ The system version will try to call a std::new_handler if they
+ fail, but your overriding versions are not required to do this. */
+void* operator new(std::size_t sz, const std::nothrow_t&) throw()
+{
+ try {
+ void * result = ::operator new (sz); // calls our overridden operator new
+ return result;
+ } catch (std::bad_alloc &) {
+ return NULL;
+ }
+}
+void operator delete(void* p, const std::nothrow_t&) throw()
+{
+ ::operator delete (p);
+}
+
+#endif // 0
+
+#endif // NV_OVERRIDE_ALLOC
+
+void * nv::aligned_malloc(size_t size, size_t alignment)
+{
+ // alignment must be a power of two, multiple of sizeof(void*)
+ nvDebugCheck(isPowerOfTwo(alignment));
+ nvDebugCheck((alignment & (sizeof(void*) - 1)) == 0);
+
+#if NV_OS_WIN32 || NV_OS_DURANGO
+ return _aligned_malloc(size, alignment);
+#elif NV_OS_DARWIN && !NV_OS_IOS
+ void * ptr = NULL;
+ posix_memalign(&ptr, alignment, size);
+ return ptr;
+#elif NV_OS_LINUX
+ return memalign(alignment, size);
+#else // NV_OS_ORBIS || NV_OS_IOS
+ // @@ IC: iOS appears to be 16 byte aligned, should we check alignment and assert if we request a higher alignment factor?
+ return ::malloc(size);
+#endif
+}
+
+void nv::aligned_free(void * ptr)
+{
+#if NV_OS_WIN32 || NV_OS_DURANGO
+ _aligned_free(ptr);
+#else
+ ::free(ptr);
+#endif
+}
+
diff --git a/thirdparty/thekla_atlas/nvcore/Memory.h b/thirdparty/thekla_atlas/nvcore/Memory.h
new file mode 100644
index 0000000000..1f71b60947
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Memory.h
@@ -0,0 +1,72 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_MEMORY_H
+#define NV_CORE_MEMORY_H
+
+#include "nvcore.h"
+
+#include <stdlib.h> // malloc(), realloc() and free()
+#include <string.h> // memset
+//#include <stddef.h> // size_t
+
+//#include <new> // new and delete
+
+#define TRACK_MEMORY_LEAKS 0
+#if TRACK_MEMORY_LEAKS
+#include <vld.h>
+#endif
+
+
+#if NV_CC_GNUC
+# define NV_ALIGN_16 __attribute__ ((__aligned__ (16)))
+#else
+# define NV_ALIGN_16 __declspec(align(16))
+#endif
+
+
+#define NV_OVERRIDE_ALLOC 0
+
+#if NV_OVERRIDE_ALLOC
+
+// Custom memory allocator
+extern "C" {
+ NVCORE_API void * malloc(size_t size);
+ NVCORE_API void * debug_malloc(size_t size, const char * file, int line);
+ NVCORE_API void free(void * ptr);
+ NVCORE_API void * realloc(void * ptr, size_t size);
+}
+
+/*
+#ifdef _DEBUG
+#define new new(__FILE__, __LINE__)
+#define malloc(i) debug_malloc(i, __FILE__, __LINE__)
+#endif
+*/
+
+#endif
+
+namespace nv {
+ NVCORE_API void * aligned_malloc(size_t size, size_t alignment);
+ NVCORE_API void aligned_free(void * );
+
+ // C++ helpers.
+ template <typename T> NV_FORCEINLINE T * malloc(size_t count) {
+ return (T *)::malloc(sizeof(T) * count);
+ }
+
+ template <typename T> NV_FORCEINLINE T * realloc(T * ptr, size_t count) {
+ return (T *)::realloc(ptr, sizeof(T) * count);
+ }
+
+ template <typename T> NV_FORCEINLINE void free(const T * ptr) {
+ ::free((void *)ptr);
+ }
+
+ template <typename T> NV_FORCEINLINE void zero(T & data) {
+ memset(&data, 0, sizeof(T));
+ }
+
+} // nv namespace
+
+#endif // NV_CORE_MEMORY_H
diff --git a/thirdparty/thekla_atlas/nvcore/Ptr.h b/thirdparty/thekla_atlas/nvcore/Ptr.h
new file mode 100644
index 0000000000..b43039274b
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Ptr.h
@@ -0,0 +1,322 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#ifndef NV_CORE_PTR_H
+#define NV_CORE_PTR_H
+
+#include "nvcore.h"
+#include "Debug.h"
+
+#include "RefCounted.h"
+
+namespace nv
+{
+ class WeakProxy;
+
+ /** Simple auto pointer template class.
+ *
+ * This is very similar to the standard auto_ptr class, but with some
+ * additional limitations to make its use less error prone:
+ * - Copy constructor and assignment operator are disabled.
+ * - reset method is removed.
+ *
+ * The semantics of the standard auto_ptr are not clear and change depending
+ * on the std implementation. For a discussion of the problems of auto_ptr read:
+ * http://www.awprofessional.com/content/images/020163371X/autoptrupdate\auto_ptr_update.html
+ */
+ template <class T>
+ class AutoPtr
+ {
+ NV_FORBID_COPY(AutoPtr);
+ NV_FORBID_HEAPALLOC();
+ public:
+
+ /// Ctor.
+ AutoPtr(T * p = NULL) : m_ptr(p) { }
+
+ template <class Q>
+ AutoPtr(Q * p) : m_ptr(static_cast<T *>(p)) { }
+
+ /// Dtor. Deletes owned pointer.
+ ~AutoPtr() {
+ delete m_ptr;
+ m_ptr = NULL;
+ }
+
+ /// Delete owned pointer and assign new one.
+ void operator=( T * p ) {
+ if (p != m_ptr)
+ {
+ delete m_ptr;
+ m_ptr = p;
+ }
+ }
+
+ template <class Q>
+ void operator=( Q * p ) {
+ if (p != m_ptr)
+ {
+ delete m_ptr;
+ m_ptr = static_cast<T *>(p);
+ }
+ }
+
+ /// Member access.
+ T * operator -> () const {
+ nvDebugCheck(m_ptr != NULL);
+ return m_ptr;
+ }
+
+ /// Get reference.
+ T & operator*() const {
+ nvDebugCheck(m_ptr != NULL);
+ return *m_ptr;
+ }
+
+ /// Get pointer.
+ T * ptr() const { return m_ptr; }
+
+ /// Relinquish ownership of the underlying pointer and returns that pointer.
+ T * release() {
+ T * tmp = m_ptr;
+ m_ptr = NULL;
+ return tmp;
+ }
+
+ /// Const pointer equal comparation.
+ friend bool operator == (const AutoPtr<T> & ap, const T * const p) {
+ return (ap.ptr() == p);
+ }
+
+ /// Const pointer nequal comparation.
+ friend bool operator != (const AutoPtr<T> & ap, const T * const p) {
+ return (ap.ptr() != p);
+ }
+
+ /// Const pointer equal comparation.
+ friend bool operator == (const T * const p, const AutoPtr<T> & ap) {
+ return (ap.ptr() == p);
+ }
+
+ /// Const pointer nequal comparation.
+ friend bool operator != (const T * const p, const AutoPtr<T> & ap) {
+ return (ap.ptr() != p);
+ }
+
+ private:
+ T * m_ptr;
+ };
+
+
+ /// Smart pointer template class.
+ template <class BaseClass>
+ class SmartPtr {
+ public:
+
+ // BaseClass must implement addRef() and release().
+ typedef SmartPtr<BaseClass> ThisType;
+
+ /// Default ctor.
+ SmartPtr() : m_ptr(NULL)
+ {
+ }
+
+ /// Other type assignment.
+ template <class OtherBase>
+ SmartPtr( const SmartPtr<OtherBase> & tc )
+ {
+ m_ptr = static_cast<BaseClass *>( tc.ptr() );
+ if (m_ptr) {
+ m_ptr->addRef();
+ }
+ }
+
+ /// Copy ctor.
+ SmartPtr( const ThisType & bc )
+ {
+ m_ptr = bc.ptr();
+ if (m_ptr) {
+ m_ptr->addRef();
+ }
+ }
+
+ /// Copy cast ctor. SmartPtr(NULL) is valid.
+ explicit SmartPtr( BaseClass * bc )
+ {
+ m_ptr = bc;
+ if (m_ptr) {
+ m_ptr->addRef();
+ }
+ }
+
+ /// Dtor.
+ ~SmartPtr()
+ {
+ set(NULL);
+ }
+
+
+ /// -> operator.
+ BaseClass * operator -> () const
+ {
+ nvCheck( m_ptr != NULL );
+ return m_ptr;
+ }
+
+ /// * operator.
+ BaseClass & operator*() const
+ {
+ nvCheck( m_ptr != NULL );
+ return *m_ptr;
+ }
+
+ /// Get pointer.
+ BaseClass * ptr() const
+ {
+ return m_ptr;
+ }
+
+ /// Other type assignment.
+ template <class OtherBase>
+ void operator = ( const SmartPtr<OtherBase> & tc )
+ {
+ set( static_cast<BaseClass *>(tc.ptr()) );
+ }
+
+ /// This type assignment.
+ void operator = ( const ThisType & bc )
+ {
+ set( bc.ptr() );
+ }
+
+ /// Pointer assignment.
+ void operator = ( BaseClass * bc )
+ {
+ set( bc );
+ }
+
+
+ /// Other type equal comparation.
+ template <class OtherBase>
+ bool operator == ( const SmartPtr<OtherBase> & other ) const
+ {
+ return m_ptr == other.ptr();
+ }
+
+ /// This type equal comparation.
+ bool operator == ( const ThisType & bc ) const
+ {
+ return m_ptr == bc.ptr();
+ }
+
+ /// Const pointer equal comparation.
+ bool operator == ( const BaseClass * const bc ) const
+ {
+ return m_ptr == bc;
+ }
+
+ /// Other type not equal comparation.
+ template <class OtherBase>
+ bool operator != ( const SmartPtr<OtherBase> & other ) const
+ {
+ return m_ptr != other.ptr();
+ }
+
+ /// Other type not equal comparation.
+ bool operator != ( const ThisType & bc ) const
+ {
+ return m_ptr != bc.ptr();
+ }
+
+ /// Const pointer not equal comparation.
+ bool operator != (const BaseClass * const bc) const
+ {
+ return m_ptr != bc;
+ }
+
+ /// This type lower than comparation.
+ bool operator < (const ThisType & p) const
+ {
+ return m_ptr < p.ptr();
+ }
+
+ bool isValid() const {
+ return isValidPtr(m_ptr);
+ }
+
+ private:
+
+ // Set this pointer.
+ void set( BaseClass * p )
+ {
+ if (p) p->addRef();
+ if (m_ptr) m_ptr->release();
+ m_ptr = p;
+ }
+
+ private:
+
+ BaseClass * m_ptr;
+
+ };
+
+
+ /// Smart pointer template class.
+ template <class T>
+ class WeakPtr {
+ public:
+
+ WeakPtr() {}
+
+ WeakPtr(T * p) { operator=(p); }
+ WeakPtr(const SmartPtr<T> & p) { operator=(p.ptr()); }
+
+ // Default constructor and assignment from weak_ptr<T> are OK.
+
+ void operator=(T * p)
+ {
+ if (p) {
+ m_proxy = p->getWeakProxy();
+ nvDebugCheck(m_proxy != NULL);
+ nvDebugCheck(m_proxy->ptr() == p);
+ }
+ else {
+ m_proxy = NULL;
+ }
+ }
+
+ void operator=(const SmartPtr<T> & ptr) { operator=(ptr.ptr()); }
+
+ bool operator==(const SmartPtr<T> & p) const { return ptr() == p.ptr(); }
+ bool operator!=(const SmartPtr<T> & p) const { return ptr() != p.ptr(); }
+
+ bool operator==(const WeakPtr<T> & p) const { return ptr() == p.ptr(); }
+ bool operator!=(const WeakPtr<T> & p) const { return ptr() != p.ptr(); }
+
+ bool operator==(T * p) const { return ptr() == p; }
+ bool operator!=(T * p) const { return ptr() != p; }
+
+ T * operator->() const
+ {
+ T * p = ptr();
+ nvDebugCheck(p != NULL);
+ return p;
+ }
+
+ T * ptr() const
+ {
+ if (m_proxy != NULL) {
+ return static_cast<T *>(m_proxy->ptr());
+ }
+ return NULL;
+ }
+
+ private:
+
+ mutable SmartPtr<WeakProxy> m_proxy;
+
+ };
+
+
+} // nv namespace
+
+#endif // NV_CORE_PTR_H
diff --git a/thirdparty/thekla_atlas/nvcore/RadixSort.cpp b/thirdparty/thekla_atlas/nvcore/RadixSort.cpp
new file mode 100644
index 0000000000..3f44620c99
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/RadixSort.cpp
@@ -0,0 +1,285 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "RadixSort.h"
+
+#include "Utils.h"
+
+#include <string.h> // memset
+
+using namespace nv;
+
+static inline void FloatFlip(uint32 & f) {
+ //uint32 mask = -int32(f >> 31) | 0x80000000; // Michael Herf.
+ int32 mask = (int32(f) >> 31) | 0x80000000; // Warren Hunt, Manchor Ko.
+ f ^= mask;
+}
+
+static inline void IFloatFlip(uint32 & f) {
+ uint32 mask = ((f >> 31) - 1) | 0x80000000; // Michael Herf.
+ //uint32 mask = (int32(f ^ 0x80000000) >> 31) | 0x80000000; // Warren Hunt, Manchor Ko. @@ Correct, but fails in release on gcc-4.2.1
+ f ^= mask;
+}
+
+
+template<typename T>
+void createHistograms(const T * buffer, uint count, uint * histogram)
+{
+ const uint bucketCount = sizeof(T); // (8 * sizeof(T)) / log2(radix)
+
+ // Init bucket pointers.
+ uint * h[bucketCount];
+ for (uint i = 0; i < bucketCount; i++) {
+#if NV_BIG_ENDIAN
+ h[sizeof(T)-1-i] = histogram + 256 * i;
+#else
+ h[i] = histogram + 256 * i;
+#endif
+ }
+
+ // Clear histograms.
+ memset(histogram, 0, 256 * bucketCount * sizeof(uint));
+
+ // @@ Add support for signed integers.
+
+ // Build histograms.
+ const uint8 * p = (const uint8 *)buffer; // @@ Does this break aliasing rules?
+ const uint8 * pe = p + count * sizeof(T);
+
+ while (p != pe) {
+ h[0][*p++]++, h[1][*p++]++, h[2][*p++]++, h[3][*p++]++;
+ if (bucketCount == 8) h[4][*p++]++, h[5][*p++]++, h[6][*p++]++, h[7][*p++]++;
+ }
+}
+
+/*
+template <>
+void createHistograms<float>(const float * buffer, uint count, uint * histogram)
+{
+ // Init bucket pointers.
+ uint32 * h[4];
+ for (uint i = 0; i < 4; i++) {
+#if NV_BIG_ENDIAN
+ h[3-i] = histogram + 256 * i;
+#else
+ h[i] = histogram + 256 * i;
+#endif
+ }
+
+ // Clear histograms.
+ memset(histogram, 0, 256 * 4 * sizeof(uint32));
+
+ // Build histograms.
+ for (uint i = 0; i < count; i++) {
+ uint32 fi = FloatFlip(buffer[i]);
+
+ h[0][fi & 0xFF]++;
+ h[1][(fi >> 8) & 0xFF]++;
+ h[2][(fi >> 16) & 0xFF]++;
+ h[3][fi >> 24]++;
+ }
+}
+*/
+
+RadixSort::RadixSort() : m_size(0), m_ranks(NULL), m_ranks2(NULL), m_validRanks(false)
+{
+}
+
+RadixSort::RadixSort(uint reserve_count) : m_size(0), m_ranks(NULL), m_ranks2(NULL), m_validRanks(false)
+{
+ checkResize(reserve_count);
+}
+
+RadixSort::~RadixSort()
+{
+ // Release everything
+ free(m_ranks2);
+ free(m_ranks);
+}
+
+
+void RadixSort::resize(uint count)
+{
+ m_ranks2 = realloc<uint>(m_ranks2, count);
+ m_ranks = realloc<uint>(m_ranks, count);
+}
+
+inline void RadixSort::checkResize(uint count)
+{
+ if (count != m_size)
+ {
+ if (count > m_size) resize(count);
+ m_size = count;
+ m_validRanks = false;
+ }
+}
+
+template <typename T> inline void RadixSort::insertionSort(const T * input, uint count)
+{
+ if (!m_validRanks) {
+ /*for (uint i = 0; i < count; i++) {
+ m_ranks[i] = i;
+ }*/
+
+ m_ranks[0] = 0;
+ for (uint i = 1; i != count; ++i)
+ {
+ int rank = m_ranks[i] = i;
+
+ uint j = i;
+ while (j != 0 && input[rank] < input[m_ranks[j-1]])
+ {
+ m_ranks[j] = m_ranks[j-1];
+ --j;
+ }
+ if (i != j)
+ {
+ m_ranks[j] = rank;
+ }
+ }
+
+ m_validRanks = true;
+ }
+ else {
+ for (uint i = 1; i != count; ++i)
+ {
+ int rank = m_ranks[i];
+
+ uint j = i;
+ while (j != 0 && input[rank] < input[m_ranks[j-1]])
+ {
+ m_ranks[j] = m_ranks[j-1];
+ --j;
+ }
+ if (i != j)
+ {
+ m_ranks[j] = rank;
+ }
+ }
+ }
+}
+
+template <typename T> inline void RadixSort::radixSort(const T * input, uint count)
+{
+ const uint P = sizeof(T); // pass count
+
+ // Allocate histograms & offsets on the stack
+ uint histogram[256 * P];
+ uint * link[256];
+
+ createHistograms(input, count, histogram);
+
+ // Radix sort, j is the pass number (0=LSB, P=MSB)
+ for (uint j = 0; j < P; j++)
+ {
+ // Pointer to this bucket.
+ const uint * h = &histogram[j * 256];
+
+ const uint8 * inputBytes = (const uint8*)input; // @@ Is this aliasing legal?
+
+#if NV_BIG_ENDIAN
+ inputBytes += P - 1 - j;
+#else
+ inputBytes += j;
+#endif
+
+ if (h[inputBytes[0]] == count) {
+ // Skip this pass, all values are the same.
+ continue;
+ }
+
+ // Create offsets
+ link[0] = m_ranks2;
+ for (uint i = 1; i < 256; i++) link[i] = link[i-1] + h[i-1];
+
+ // Perform Radix Sort
+ if (!m_validRanks)
+ {
+ for (uint i = 0; i < count; i++)
+ {
+ *link[inputBytes[i*P]]++ = i;
+ }
+ m_validRanks = true;
+ }
+ else
+ {
+ for (uint i = 0; i < count; i++)
+ {
+ const uint idx = m_ranks[i];
+ *link[inputBytes[idx*P]]++ = idx;
+ }
+ }
+
+ // Swap pointers for next pass. Valid indices - the most recent ones - are in m_ranks after the swap.
+ swap(m_ranks, m_ranks2);
+ }
+
+ // All values were equal, generate linear ranks.
+ if (!m_validRanks)
+ {
+ for (uint i = 0; i < count; i++)
+ {
+ m_ranks[i] = i;
+ }
+ m_validRanks = true;
+ }
+}
+
+
+RadixSort & RadixSort::sort(const uint32 * input, uint count)
+{
+ if (input == NULL || count == 0) return *this;
+
+ // Resize lists if needed
+ checkResize(count);
+
+ if (count < 32) {
+ insertionSort(input, count);
+ }
+ else {
+ radixSort<uint32>(input, count);
+ }
+ return *this;
+}
+
+
+RadixSort & RadixSort::sort(const uint64 * input, uint count)
+{
+ if (input == NULL || count == 0) return *this;
+
+ // Resize lists if needed
+ checkResize(count);
+
+ if (count < 64) {
+ insertionSort(input, count);
+ }
+ else {
+ radixSort(input, count);
+ }
+ return *this;
+}
+
+RadixSort& RadixSort::sort(const float * input, uint count)
+{
+ if (input == NULL || count == 0) return *this;
+
+ // Resize lists if needed
+ checkResize(count);
+
+ if (count < 32) {
+ insertionSort(input, count);
+ }
+ else {
+ // @@ Avoid touching the input multiple times.
+ for (uint i = 0; i < count; i++) {
+ FloatFlip((uint32 &)input[i]);
+ }
+
+ radixSort<uint32>((const uint32 *)input, count);
+
+ for (uint i = 0; i < count; i++) {
+ IFloatFlip((uint32 &)input[i]);
+ }
+ }
+
+ return *this;
+}
diff --git a/thirdparty/thekla_atlas/nvcore/RadixSort.h b/thirdparty/thekla_atlas/nvcore/RadixSort.h
new file mode 100644
index 0000000000..82325ebb24
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/RadixSort.h
@@ -0,0 +1,75 @@
+#pragma once
+#ifndef NV_CORE_RADIXSORT_H
+#define NV_CORE_RADIXSORT_H
+
+// Based on Pierre Terdiman's and Michael Herf's source code.
+// http://www.codercorner.com/RadixSortRevisited.htm
+// http://www.stereopsis.com/radix.html
+
+#include "nvcore.h"
+#include "Array.h"
+
+namespace nv
+{
+
+ class NVCORE_CLASS RadixSort
+ {
+ NV_FORBID_COPY(RadixSort);
+ public:
+ // Constructor/Destructor
+ RadixSort();
+ RadixSort(uint reserve_count);
+ ~RadixSort();
+
+ // Invalidate ranks.
+ RadixSort & reset() { m_validRanks = false; return *this; }
+
+ // Sorting methods.
+ RadixSort & sort(const uint32 * input, uint count);
+ RadixSort & sort(const uint64 * input, uint count);
+ RadixSort & sort(const float * input, uint count);
+
+ // Helpers.
+ RadixSort & sort(const Array<uint32> & input);
+ RadixSort & sort(const Array<uint64> & input);
+ RadixSort & sort(const Array<float> & input);
+
+ // Access to results. m_ranks is a list of indices in sorted order, i.e. in the order you may further process your data
+ inline const uint * ranks() const { nvDebugCheck(m_validRanks); return m_ranks; }
+ inline uint * ranks() { nvDebugCheck(m_validRanks); return m_ranks; }
+ inline uint rank(uint i) const { nvDebugCheck(m_validRanks); return m_ranks[i]; }
+
+ // query whether the sort has been performed
+ inline bool valid() const { return m_validRanks; }
+
+ private:
+ uint m_size;
+ uint * m_ranks;
+ uint * m_ranks2;
+ bool m_validRanks;
+
+ // Internal methods
+ template <typename T> void insertionSort(const T * input, uint count);
+ template <typename T> void radixSort(const T * input, uint count);
+
+ void checkResize(uint nb);
+ void resize(uint nb);
+ };
+
+ inline RadixSort & RadixSort::sort(const Array<uint32> & input) {
+ return sort(input.buffer(), input.count());
+ }
+
+ inline RadixSort & RadixSort::sort(const Array<uint64> & input) {
+ return sort(input.buffer(), input.count());
+ }
+
+ inline RadixSort & RadixSort::sort(const Array<float> & input) {
+ return sort(input.buffer(), input.count());
+ }
+
+} // nv namespace
+
+
+
+#endif // NV_CORE_RADIXSORT_H
diff --git a/thirdparty/thekla_atlas/nvcore/RefCounted.h b/thirdparty/thekla_atlas/nvcore/RefCounted.h
new file mode 100644
index 0000000000..b8d68edee3
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/RefCounted.h
@@ -0,0 +1,149 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#ifndef NV_CORE_REFCOUNTED_H
+#define NV_CORE_REFCOUNTED_H
+
+#include "nvcore.h"
+#include "Debug.h"
+
+#define NV_DECLARE_PTR(Class) \
+ template <class T> class SmartPtr; \
+ typedef SmartPtr<class Class> Class ## Ptr; \
+ typedef SmartPtr<const class Class> Class ## ConstPtr
+
+
+namespace nv
+{
+ /// Weak proxy.
+ class WeakProxy
+ {
+ NV_FORBID_COPY(WeakProxy);
+ public:
+ /// Ctor.
+ WeakProxy(void * ptr) : m_count(0), m_ptr(ptr) { }
+
+ /// Dtor.
+ ~WeakProxy()
+ {
+ nvCheck( m_count == 0 );
+ }
+
+ /// Increase reference count.
+ uint addRef() const
+ {
+ m_count++;
+ return m_count;
+ }
+
+ /// Decrease reference count and remove when 0.
+ uint release() const
+ {
+ nvCheck( m_count > 0 );
+
+ m_count--;
+ if( m_count == 0 ) {
+ delete this;
+ return 0;
+ }
+ return m_count;
+ }
+
+ /// WeakPtr's call this to determine if their pointer is valid or not.
+ bool isAlive() const {
+ return m_ptr != NULL;
+ }
+
+ /// Only the actual object should call this.
+ void notifyObjectDied() {
+ m_ptr = NULL;
+ }
+
+ /// Return proxy pointer.
+ void * ptr() const {
+ return m_ptr;
+ }
+
+ private:
+ mutable int m_count;
+ void * m_ptr;
+ };
+
+
+ /// Reference counted base class to be used with SmartPtr and WeakPtr.
+ class RefCounted
+ {
+ NV_FORBID_COPY(RefCounted);
+ public:
+
+ /// Ctor.
+ RefCounted() : m_count(0), m_weak_proxy(NULL)
+ {
+ }
+
+ /// Virtual dtor.
+ virtual ~RefCounted()
+ {
+ nvCheck( m_count == 0 );
+ releaseWeakProxy();
+ }
+
+
+ /// Increase reference count.
+ uint addRef() const
+ {
+ m_count++;
+ return m_count;
+ }
+
+
+ /// Decrease reference count and remove when 0.
+ uint release() const
+ {
+ nvCheck( m_count > 0 );
+
+ m_count--;
+ if( m_count == 0 ) {
+ delete this;
+ return 0;
+ }
+ return m_count;
+ }
+
+ /// Get weak proxy.
+ WeakProxy * getWeakProxy() const
+ {
+ if (m_weak_proxy == NULL) {
+ m_weak_proxy = new WeakProxy((void *)this);
+ m_weak_proxy->addRef();
+ }
+ return m_weak_proxy;
+ }
+
+ /// Release the weak proxy.
+ void releaseWeakProxy() const
+ {
+ if (m_weak_proxy != NULL) {
+ m_weak_proxy->notifyObjectDied();
+ m_weak_proxy->release();
+ m_weak_proxy = NULL;
+ }
+ }
+
+ /// Get reference count.
+ int refCount() const
+ {
+ return m_count;
+ }
+
+
+ private:
+
+ mutable int m_count;
+ mutable WeakProxy * m_weak_proxy;
+
+ };
+
+} // nv namespace
+
+
+#endif // NV_CORE_REFCOUNTED_H
diff --git a/thirdparty/thekla_atlas/nvcore/StdStream.h b/thirdparty/thekla_atlas/nvcore/StdStream.h
new file mode 100644
index 0000000000..f65d6dab59
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/StdStream.h
@@ -0,0 +1,474 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+//#pragma once
+//#ifndef NV_CORE_STDSTREAM_H
+//#define NV_CORE_STDSTREAM_H
+
+#include "nvcore.h"
+#include "Stream.h"
+#include "Array.h"
+
+#include <stdio.h> // fopen
+#include <string.h> // memcpy
+
+namespace nv
+{
+
+ // Portable version of fopen.
+ inline FILE * fileOpen(const char * fileName, const char * mode)
+ {
+ nvCheck(fileName != NULL);
+#if NV_CC_MSVC && _MSC_VER >= 1400
+ FILE * fp;
+ if (fopen_s(&fp, fileName, mode) == 0) {
+ return fp;
+ }
+ return NULL;
+#else
+ return fopen(fileName, mode);
+#endif
+ }
+
+
+ /// Base stdio stream.
+ class NVCORE_CLASS StdStream : public Stream
+ {
+ NV_FORBID_COPY(StdStream);
+ public:
+
+ /// Ctor.
+ StdStream( FILE * fp, bool autoclose ) : m_fp(fp), m_autoclose(autoclose) { }
+
+ /// Dtor.
+ virtual ~StdStream()
+ {
+ if( m_fp != NULL && m_autoclose ) {
+#if NV_OS_WIN32
+ _fclose_nolock( m_fp );
+#else
+ fclose( m_fp );
+#endif
+ }
+ }
+
+
+ /** @name Stream implementation. */
+ //@{
+ virtual void seek( uint pos )
+ {
+ nvDebugCheck(m_fp != NULL);
+ nvDebugCheck(pos <= size());
+#if NV_OS_WIN32
+ _fseek_nolock(m_fp, pos, SEEK_SET);
+#else
+ fseek(m_fp, pos, SEEK_SET);
+#endif
+ }
+
+ virtual uint tell() const
+ {
+ nvDebugCheck(m_fp != NULL);
+#if NV_OS_WIN32
+ return _ftell_nolock(m_fp);
+#else
+ return (uint)ftell(m_fp);
+#endif
+ }
+
+ virtual uint size() const
+ {
+ nvDebugCheck(m_fp != NULL);
+#if NV_OS_WIN32
+ uint pos = _ftell_nolock(m_fp);
+ _fseek_nolock(m_fp, 0, SEEK_END);
+ uint end = _ftell_nolock(m_fp);
+ _fseek_nolock(m_fp, pos, SEEK_SET);
+#else
+ uint pos = (uint)ftell(m_fp);
+ fseek(m_fp, 0, SEEK_END);
+ uint end = (uint)ftell(m_fp);
+ fseek(m_fp, pos, SEEK_SET);
+#endif
+ return end;
+ }
+
+ virtual bool isError() const
+ {
+ return m_fp == NULL || ferror( m_fp ) != 0;
+ }
+
+ virtual void clearError()
+ {
+ nvDebugCheck(m_fp != NULL);
+ clearerr(m_fp);
+ }
+
+ // @@ The original implementation uses feof, which only returns true when we attempt to read *past* the end of the stream.
+ // That is, if we read the last byte of a file, then isAtEnd would still return false, even though the stream pointer is at the file end. This is not the intent and was inconsistent with the implementation of the MemoryStream, a better
+ // implementation uses use ftell and fseek to determine our location within the file.
+ virtual bool isAtEnd() const
+ {
+ if (m_fp == NULL) return true;
+ //nvDebugCheck(m_fp != NULL);
+ //return feof( m_fp ) != 0;
+#if NV_OS_WIN32
+ uint pos = _ftell_nolock(m_fp);
+ _fseek_nolock(m_fp, 0, SEEK_END);
+ uint end = _ftell_nolock(m_fp);
+ _fseek_nolock(m_fp, pos, SEEK_SET);
+#else
+ uint pos = (uint)ftell(m_fp);
+ fseek(m_fp, 0, SEEK_END);
+ uint end = (uint)ftell(m_fp);
+ fseek(m_fp, pos, SEEK_SET);
+#endif
+ return pos == end;
+ }
+
+ /// Always true.
+ virtual bool isSeekable() const { return true; }
+ //@}
+
+ protected:
+
+ FILE * m_fp;
+ bool m_autoclose;
+
+ };
+
+
+ /// Standard output stream.
+ class NVCORE_CLASS StdOutputStream : public StdStream
+ {
+ NV_FORBID_COPY(StdOutputStream);
+ public:
+
+ /// Construct stream by file name.
+ StdOutputStream( const char * name ) : StdStream(fileOpen(name, "wb"), /*autoclose=*/true) { }
+
+ /// Construct stream by file handle.
+ StdOutputStream( FILE * fp, bool autoclose ) : StdStream(fp, autoclose)
+ {
+ }
+
+ /** @name Stream implementation. */
+ //@{
+ /// Write data.
+ virtual uint serialize( void * data, uint len )
+ {
+ nvDebugCheck(data != NULL);
+ nvDebugCheck(m_fp != NULL);
+#if NV_OS_WIN32
+ return (uint)_fwrite_nolock(data, 1, len, m_fp);
+#elif NV_OS_LINUX
+ return (uint)fwrite_unlocked(data, 1, len, m_fp);
+#elif NV_OS_DARWIN
+ // @@ No error checking, always returns len.
+ for (uint i = 0; i < len; i++) {
+ putc_unlocked(((char *)data)[i], m_fp);
+ }
+ return len;
+#else
+ return (uint)fwrite(data, 1, len, m_fp);
+#endif
+ }
+
+ virtual bool isLoading() const
+ {
+ return false;
+ }
+
+ virtual bool isSaving() const
+ {
+ return true;
+ }
+ //@}
+
+ };
+
+
+ /// Standard input stream.
+ class NVCORE_CLASS StdInputStream : public StdStream
+ {
+ NV_FORBID_COPY(StdInputStream);
+ public:
+
+ /// Construct stream by file name.
+ StdInputStream( const char * name ) : StdStream(fileOpen(name, "rb"), /*autoclose=*/true) { }
+
+ /// Construct stream by file handle.
+ StdInputStream( FILE * fp, bool autoclose=true ) : StdStream(fp, autoclose)
+ {
+ }
+
+ /** @name Stream implementation. */
+ //@{
+ /// Read data.
+ virtual uint serialize( void * data, uint len )
+ {
+ nvDebugCheck(data != NULL);
+ nvDebugCheck(m_fp != NULL);
+#if NV_OS_WIN32
+ return (uint)_fread_nolock(data, 1, len, m_fp);
+#elif NV_OS_LINUX
+ return (uint)fread_unlocked(data, 1, len, m_fp);
+#elif NV_OS_DARWIN
+ // This is rather lame. Not sure if it's faster than the locked version.
+ for (uint i = 0; i < len; i++) {
+ ((char *)data)[i] = getc_unlocked(m_fp);
+ if (feof_unlocked(m_fp) != 0) {
+ return i;
+ }
+ }
+ return len;
+#else
+ return (uint)fread(data, 1, len, m_fp);
+#endif
+
+ }
+
+ virtual bool isLoading() const
+ {
+ return true;
+ }
+
+ virtual bool isSaving() const
+ {
+ return false;
+ }
+ //@}
+ };
+
+
+
+ /// Memory input stream.
+ class NVCORE_CLASS MemoryInputStream : public Stream
+ {
+ NV_FORBID_COPY(MemoryInputStream);
+ public:
+
+ /// Ctor.
+ MemoryInputStream( const uint8 * mem, uint size ) : m_mem(mem), m_ptr(mem), m_size(size) { }
+
+ /** @name Stream implementation. */
+ //@{
+ /// Read data.
+ virtual uint serialize( void * data, uint len )
+ {
+ nvDebugCheck(data != NULL);
+ nvDebugCheck(!isError());
+
+ uint left = m_size - tell();
+ if (len > left) len = left;
+
+ memcpy( data, m_ptr, len );
+ m_ptr += len;
+
+ return len;
+ }
+
+ virtual void seek( uint pos )
+ {
+ nvDebugCheck(!isError());
+ m_ptr = m_mem + pos;
+ nvDebugCheck(!isError());
+ }
+
+ virtual uint tell() const
+ {
+ nvDebugCheck(m_ptr >= m_mem);
+ return uint(m_ptr - m_mem);
+ }
+
+ virtual uint size() const
+ {
+ return m_size;
+ }
+
+ virtual bool isError() const
+ {
+ return m_mem == NULL || m_ptr > m_mem + m_size || m_ptr < m_mem;
+ }
+
+ virtual void clearError()
+ {
+ // Nothing to do.
+ }
+
+ virtual bool isAtEnd() const
+ {
+ return m_ptr == m_mem + m_size;
+ }
+
+ /// Always true.
+ virtual bool isSeekable() const
+ {
+ return true;
+ }
+
+ virtual bool isLoading() const
+ {
+ return true;
+ }
+
+ virtual bool isSaving() const
+ {
+ return false;
+ }
+ //@}
+
+ const uint8 * ptr() const { return m_ptr; }
+
+
+ private:
+
+ const uint8 * m_mem;
+ const uint8 * m_ptr;
+ uint m_size;
+
+ };
+
+
+ /// Buffer output stream.
+ class NVCORE_CLASS BufferOutputStream : public Stream
+ {
+ NV_FORBID_COPY(BufferOutputStream);
+ public:
+
+ BufferOutputStream(Array<uint8> & buffer) : m_buffer(buffer) { }
+
+ virtual uint serialize( void * data, uint len )
+ {
+ nvDebugCheck(data != NULL);
+ m_buffer.append((uint8 *)data, len);
+ return len;
+ }
+
+ virtual void seek( uint /*pos*/ ) { /*Not implemented*/ }
+ virtual uint tell() const { return m_buffer.size(); }
+ virtual uint size() const { return m_buffer.size(); }
+
+ virtual bool isError() const { return false; }
+ virtual void clearError() {}
+
+ virtual bool isAtEnd() const { return true; }
+ virtual bool isSeekable() const { return false; }
+ virtual bool isLoading() const { return false; }
+ virtual bool isSaving() const { return true; }
+
+ private:
+ Array<uint8> & m_buffer;
+ };
+
+
+ /// Protected input stream.
+ class NVCORE_CLASS ProtectedStream : public Stream
+ {
+ NV_FORBID_COPY(ProtectedStream);
+ public:
+
+ /// Ctor.
+ ProtectedStream( Stream & s ) : m_s(&s), m_autodelete(false)
+ {
+ }
+
+ /// Ctor.
+ ProtectedStream( Stream * s, bool autodelete = true ) :
+ m_s(s), m_autodelete(autodelete)
+ {
+ nvDebugCheck(m_s != NULL);
+ }
+
+ /// Dtor.
+ virtual ~ProtectedStream()
+ {
+ if( m_autodelete ) {
+ delete m_s;
+ }
+ }
+
+ /** @name Stream implementation. */
+ //@{
+ /// Read data.
+ virtual uint serialize( void * data, uint len )
+ {
+ nvDebugCheck(data != NULL);
+ len = m_s->serialize( data, len );
+
+ if( m_s->isError() ) {
+#if NV_OS_ORBIS
+ //SBtodoORBIS disabled (no exceptions)
+#else
+ throw;
+#endif
+ }
+
+ return len;
+ }
+
+ virtual void seek( uint pos )
+ {
+ m_s->seek( pos );
+
+ if( m_s->isError() ) {
+#if NV_OS_ORBIS
+ //SBtodoORBIS disabled (no exceptions)
+#else
+ throw;
+#endif
+ }
+ }
+
+ virtual uint tell() const
+ {
+ return m_s->tell();
+ }
+
+ virtual uint size() const
+ {
+ return m_s->size();
+ }
+
+ virtual bool isError() const
+ {
+ return m_s->isError();
+ }
+
+ virtual void clearError()
+ {
+ m_s->clearError();
+ }
+
+ virtual bool isAtEnd() const
+ {
+ return m_s->isAtEnd();
+ }
+
+ virtual bool isSeekable() const
+ {
+ return m_s->isSeekable();
+ }
+
+ virtual bool isLoading() const
+ {
+ return m_s->isLoading();
+ }
+
+ virtual bool isSaving() const
+ {
+ return m_s->isSaving();
+ }
+ //@}
+
+
+ private:
+
+ Stream * const m_s;
+ bool const m_autodelete;
+
+ };
+
+} // nv namespace
+
+
+//#endif // NV_CORE_STDSTREAM_H
diff --git a/thirdparty/thekla_atlas/nvcore/StrLib.cpp b/thirdparty/thekla_atlas/nvcore/StrLib.cpp
new file mode 100644
index 0000000000..7ec6c70136
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/StrLib.cpp
@@ -0,0 +1,796 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "StrLib.h"
+
+#include "Memory.h"
+#include "Utils.h" // swap
+
+#include <math.h> // log
+#include <stdio.h> // vsnprintf
+#include <string.h> // strlen, strcmp, etc.
+
+#if NV_CC_MSVC
+#include <stdarg.h> // vsnprintf
+#endif
+
+using namespace nv;
+
+namespace
+{
+ static char * strAlloc(uint size)
+ {
+ return malloc<char>(size);
+ }
+
+ static char * strReAlloc(char * str, uint size)
+ {
+ return realloc<char>(str, size);
+ }
+
+ static void strFree(const char * str)
+ {
+ return free<char>(str);
+ }
+
+ /*static char * strDup( const char * str )
+ {
+ nvDebugCheck( str != NULL );
+ uint len = uint(strlen( str ) + 1);
+ char * dup = strAlloc( len );
+ memcpy( dup, str, len );
+ return dup;
+ }*/
+
+ // helper function for integer to string conversion.
+ static char * i2a( uint i, char *a, uint r )
+ {
+ if( i / r > 0 ) {
+ a = i2a( i / r, a, r );
+ }
+ *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
+ return a + 1;
+ }
+
+ // Locale independent functions.
+ static inline char toUpper( char c ) {
+ return (c<'a' || c>'z') ? (c) : (c+'A'-'a');
+ }
+ static inline char toLower( char c ) {
+ return (c<'A' || c>'Z') ? (c) : (c+'a'-'A');
+ }
+ static inline bool isAlpha( char c ) {
+ return (c>='a' && c<='z') || (c>='A' && c<='Z');
+ }
+ static inline bool isDigit( char c ) {
+ return c>='0' && c<='9';
+ }
+ static inline bool isAlnum( char c ) {
+ return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9');
+ }
+
+}
+
+uint nv::strLen(const char * str)
+{
+ nvDebugCheck(str != NULL);
+ return U32(strlen(str));
+}
+
+int nv::strDiff(const char * s1, const char * s2)
+{
+ nvDebugCheck(s1 != NULL);
+ nvDebugCheck(s2 != NULL);
+ return strcmp(s1, s2);
+}
+
+int nv::strCaseDiff(const char * s1, const char * s2)
+{
+ nvDebugCheck(s1 != NULL);
+ nvDebugCheck(s1 != NULL);
+#if NV_CC_MSVC
+ return _stricmp(s1, s2);
+#else
+ return strcasecmp(s1, s2);
+#endif
+}
+
+bool nv::strEqual(const char * s1, const char * s2)
+{
+ if (s1 == s2) return true;
+ if (s1 == NULL || s2 == NULL) return false;
+ return strcmp(s1, s2) == 0;
+}
+
+bool nv::strCaseEqual(const char * s1, const char * s2)
+{
+ if (s1 == s2) return true;
+ if (s1 == NULL || s2 == NULL) return false;
+ return strCaseDiff(s1, s2) == 0;
+}
+
+bool nv::strBeginsWith(const char * str, const char * prefix)
+{
+ //return strstr(str, prefix) == dst;
+ return strncmp(str, prefix, strlen(prefix)) == 0;
+}
+
+bool nv::strEndsWith(const char * str, const char * suffix)
+{
+ uint ml = strLen(str);
+ uint sl = strLen(suffix);
+ if (ml < sl) return false;
+ return strncmp(str + ml - sl, suffix, sl) == 0;
+}
+
+// @@ Add asserts to detect overlap between dst and src?
+void nv::strCpy(char * dst, uint size, const char * src)
+{
+ nvDebugCheck(dst != NULL);
+ nvDebugCheck(src != NULL);
+#if NV_CC_MSVC && _MSC_VER >= 1400
+ strcpy_s(dst, size, src);
+#else
+ NV_UNUSED(size);
+ strcpy(dst, src);
+#endif
+}
+
+void nv::strCpy(char * dst, uint size, const char * src, uint len)
+{
+ nvDebugCheck(dst != NULL);
+ nvDebugCheck(src != NULL);
+#if NV_CC_MSVC && _MSC_VER >= 1400
+ strncpy_s(dst, size, src, len);
+#else
+ int n = min(len+1, size);
+ strncpy(dst, src, n);
+ dst[n-1] = '\0';
+#endif
+}
+
+void nv::strCat(char * dst, uint size, const char * src)
+{
+ nvDebugCheck(dst != NULL);
+ nvDebugCheck(src != NULL);
+#if NV_CC_MSVC && _MSC_VER >= 1400
+ strcat_s(dst, size, src);
+#else
+ NV_UNUSED(size);
+ strcat(dst, src);
+#endif
+}
+
+NVCORE_API const char * nv::strSkipWhiteSpace(const char * str)
+{
+ nvDebugCheck(str != NULL);
+ while (*str == ' ') str++;
+ return str;
+}
+
+NVCORE_API char * nv::strSkipWhiteSpace(char * str)
+{
+ nvDebugCheck(str != NULL);
+ while (*str == ' ') str++;
+ return str;
+}
+
+
+/** Pattern matching routine. I don't remember where did I get this. */
+bool nv::strMatch(const char * str, const char * pat)
+{
+ nvDebugCheck(str != NULL);
+ nvDebugCheck(pat != NULL);
+
+ char c2;
+
+ while (true) {
+ if (*pat==0) {
+ if (*str==0) return true;
+ else return false;
+ }
+ if ((*str==0) && (*pat!='*')) return false;
+ if (*pat=='*') {
+ pat++;
+ if (*pat==0) return true;
+ while (true) {
+ if (strMatch(str, pat)) return true;
+ if (*str==0) return false;
+ str++;
+ }
+ }
+ if (*pat=='?') goto match;
+ if (*pat=='[') {
+ pat++;
+ while (true) {
+ if ((*pat==']') || (*pat==0)) return false;
+ if (*pat==*str) break;
+ if (pat[1] == '-') {
+ c2 = pat[2];
+ if (c2==0) return false;
+ if ((*pat<=*str) && (c2>=*str)) break;
+ if ((*pat>=*str) && (c2<=*str)) break;
+ pat+=2;
+ }
+ pat++;
+ }
+ while (*pat!=']') {
+ if (*pat==0) {
+ pat--;
+ break;
+ }
+ pat++;
+ }
+ goto match;
+ }
+
+ if (*pat == NV_PATH_SEPARATOR) {
+ pat++;
+ if (*pat==0) return false;
+ }
+ if (*pat!=*str) return false;
+
+match:
+ pat++;
+ str++;
+ }
+}
+
+bool nv::isNumber(const char * str) {
+ while(*str != '\0') {
+ if (!isDigit(*str)) return false;
+ str++;
+ }
+ return true;
+}
+
+
+/** Empty string. */
+StringBuilder::StringBuilder() : m_size(0), m_str(NULL)
+{
+}
+
+/** Preallocate space. */
+StringBuilder::StringBuilder( uint size_hint ) : m_size(size_hint)
+{
+ nvDebugCheck(m_size > 0);
+ m_str = strAlloc(m_size);
+ *m_str = '\0';
+}
+
+/** Copy ctor. */
+StringBuilder::StringBuilder( const StringBuilder & s ) : m_size(0), m_str(NULL)
+{
+ copy(s);
+}
+
+/** Copy string. */
+StringBuilder::StringBuilder(const char * s) : m_size(0), m_str(NULL)
+{
+ if (s != NULL) {
+ copy(s);
+ }
+}
+
+/** Copy string. */
+StringBuilder::StringBuilder(const char * s, uint len) : m_size(0), m_str(NULL)
+{
+ copy(s, len);
+}
+
+/** Delete the string. */
+StringBuilder::~StringBuilder()
+{
+ strFree(m_str);
+}
+
+
+/** Format a string safely. */
+StringBuilder & StringBuilder::format( const char * fmt, ... )
+{
+ nvDebugCheck(fmt != NULL);
+ va_list arg;
+ va_start( arg, fmt );
+
+ formatList( fmt, arg );
+
+ va_end( arg );
+
+ return *this;
+}
+
+
+/** Format a string safely. */
+StringBuilder & StringBuilder::formatList( const char * fmt, va_list arg )
+{
+ nvDebugCheck(fmt != NULL);
+
+ if (m_size == 0) {
+ m_size = 64;
+ m_str = strAlloc( m_size );
+ }
+
+ va_list tmp;
+ va_copy(tmp, arg);
+#if NV_CC_MSVC && _MSC_VER >= 1400
+ int n = vsnprintf_s(m_str, m_size, _TRUNCATE, fmt, tmp);
+#else
+ int n = vsnprintf(m_str, m_size, fmt, tmp);
+#endif
+ va_end(tmp);
+
+ while( n < 0 || n >= int(m_size) ) {
+ if( n > -1 ) {
+ m_size = n + 1;
+ }
+ else {
+ m_size *= 2;
+ }
+
+ m_str = strReAlloc(m_str, m_size);
+
+ va_copy(tmp, arg);
+#if NV_CC_MSVC && _MSC_VER >= 1400
+ n = vsnprintf_s(m_str, m_size, _TRUNCATE, fmt, tmp);
+#else
+ n = vsnprintf(m_str, m_size, fmt, tmp);
+#endif
+ va_end(tmp);
+ }
+
+ nvDebugCheck(n < int(m_size));
+
+ // Make sure it's null terminated.
+ nvDebugCheck(m_str[n] == '\0');
+ //str[n] = '\0';
+
+ return *this;
+}
+
+
+// Append a character.
+StringBuilder & StringBuilder::append( char c )
+{
+ return append(&c, 1);
+}
+
+// Append a string.
+StringBuilder & StringBuilder::append( const char * s )
+{
+ return append(s, U32(strlen( s )));
+}
+
+// Append a string.
+StringBuilder & StringBuilder::append(const char * s, uint len)
+{
+ nvDebugCheck(s != NULL);
+
+ uint offset = length();
+ const uint size = offset + len + 1;
+ reserve(size);
+ strCpy(m_str + offset, len + 1, s, len);
+
+ return *this;
+}
+
+StringBuilder & StringBuilder::append(const StringBuilder & str)
+{
+ return append(str.m_str, str.length());
+}
+
+
+/** Append a formatted string. */
+StringBuilder & StringBuilder::appendFormat( const char * fmt, ... )
+{
+ nvDebugCheck( fmt != NULL );
+
+ va_list arg;
+ va_start( arg, fmt );
+
+ appendFormatList( fmt, arg );
+
+ va_end( arg );
+
+ return *this;
+}
+
+
+/** Append a formatted string. */
+StringBuilder & StringBuilder::appendFormatList( const char * fmt, va_list arg )
+{
+ nvDebugCheck( fmt != NULL );
+
+ va_list tmp;
+ va_copy(tmp, arg);
+
+ if (m_size == 0) {
+ formatList(fmt, arg);
+ }
+ else {
+ StringBuilder tmp_str;
+ tmp_str.formatList( fmt, tmp );
+ append( tmp_str.str() );
+ }
+
+ va_end(tmp);
+
+ return *this;
+}
+
+// Append n spaces.
+StringBuilder & StringBuilder::appendSpace(uint n)
+{
+ if (m_str == NULL) {
+ m_size = n + 1;
+ m_str = strAlloc(m_size);
+ memset(m_str, ' ', m_size);
+ m_str[n] = '\0';
+ }
+ else {
+ const uint len = strLen(m_str);
+ if (m_size < len + n + 1) {
+ m_size = len + n + 1;
+ m_str = strReAlloc(m_str, m_size);
+ }
+ memset(m_str + len, ' ', n);
+ m_str[len+n] = '\0';
+ }
+
+ return *this;
+}
+
+
+/** Convert number to string in the given base. */
+StringBuilder & StringBuilder::number( int i, int base )
+{
+ nvCheck( base >= 2 );
+ nvCheck( base <= 36 );
+
+ // @@ This needs to be done correctly.
+ // length = floor(log(i, base));
+ uint len = uint(log(float(i)) / log(float(base)) + 2); // one more if negative
+ reserve(len);
+
+ if( i < 0 ) {
+ *m_str = '-';
+ *i2a(uint(-i), m_str+1, base) = 0;
+ }
+ else {
+ *i2a(i, m_str, base) = 0;
+ }
+
+ return *this;
+}
+
+
+/** Convert number to string in the given base. */
+StringBuilder & StringBuilder::number( uint i, int base )
+{
+ nvCheck( base >= 2 );
+ nvCheck( base <= 36 );
+
+ // @@ This needs to be done correctly.
+ // length = floor(log(i, base));
+ uint len = uint(log(float(i)) / log(float(base)) - 0.5f + 1);
+ reserve(len);
+
+ *i2a(i, m_str, base) = 0;
+
+ return *this;
+}
+
+
+/** Resize the string preserving the contents. */
+StringBuilder & StringBuilder::reserve( uint size_hint )
+{
+ nvCheck(size_hint != 0);
+ if (size_hint > m_size) {
+ m_str = strReAlloc(m_str, size_hint);
+ m_size = size_hint;
+ }
+ return *this;
+}
+
+
+/** Copy a string safely. */
+StringBuilder & StringBuilder::copy(const char * s)
+{
+ nvCheck( s != NULL );
+ const uint str_size = uint(strlen( s )) + 1;
+ reserve(str_size);
+ memcpy(m_str, s, str_size);
+ return *this;
+}
+
+/** Copy a string safely. */
+StringBuilder & StringBuilder::copy(const char * s, uint len)
+{
+ nvCheck( s != NULL );
+ const uint str_size = len + 1;
+ reserve(str_size);
+ strCpy(m_str, str_size, s, len);
+ return *this;
+}
+
+
+/** Copy an StringBuilder. */
+StringBuilder & StringBuilder::copy( const StringBuilder & s )
+{
+ if (s.m_str == NULL) {
+ nvCheck( s.m_size == 0 );
+ reset();
+ }
+ else {
+ reserve( s.m_size );
+ strCpy( m_str, s.m_size, s.m_str );
+ }
+ return *this;
+}
+
+bool StringBuilder::endsWith(const char * str) const
+{
+ uint l = uint(strlen(str));
+ uint ml = uint(strlen(m_str));
+ if (ml < l) return false;
+ return strncmp(m_str + ml - l, str, l) == 0;
+}
+
+bool StringBuilder::beginsWith(const char * str) const
+{
+ size_t l = strlen(str);
+ return strncmp(m_str, str, l) == 0;
+}
+
+// Find given char starting from the end.
+char * StringBuilder::reverseFind(char c)
+{
+ int length = (int)strlen(m_str) - 1;
+ while (length >= 0 && m_str[length] != c) {
+ length--;
+ }
+ if (length >= 0) {
+ return m_str + length;
+ }
+ else {
+ return NULL;
+ }
+}
+
+
+/** Reset the string. */
+void StringBuilder::reset()
+{
+ m_size = 0;
+ strFree( m_str );
+ m_str = NULL;
+}
+
+/** Release the allocated string. */
+char * StringBuilder::release()
+{
+ char * str = m_str;
+ m_size = 0;
+ m_str = NULL;
+ return str;
+}
+
+// Take ownership of string.
+void StringBuilder::acquire(char * str)
+{
+ if (str) {
+ m_size = strLen(str) + 1;
+ m_str = str;
+ }
+ else {
+ m_size = 0;
+ m_str = NULL;
+ }
+}
+
+// Swap strings.
+void nv::swap(StringBuilder & a, StringBuilder & b) {
+ swap(a.m_size, b.m_size);
+ swap(a.m_str, b.m_str);
+}
+
+
+/// Get the file name from a path.
+const char * Path::fileName() const
+{
+ return fileName(m_str);
+}
+
+
+/// Get the extension from a file path.
+const char * Path::extension() const
+{
+ return extension(m_str);
+}
+
+
+/*static */void Path::translatePath(char * path, char pathSeparator/*= NV_PATH_SEPARATOR*/) {
+ if (path != NULL) {
+ for (int i = 0;; i++) {
+ if (path[i] == '\0') break;
+ if (path[i] == '\\' || path[i] == '/') path[i] = pathSeparator;
+ }
+ }
+}
+
+/// Toggles path separators (ie. \\ into /).
+void Path::translatePath(char pathSeparator/*=NV_PATH_SEPARATOR*/)
+{
+ if (!isNull()) {
+ translatePath(m_str, pathSeparator);
+ }
+}
+
+void Path::appendSeparator(char pathSeparator/*=NV_PATH_SEPARATOR*/)
+{
+ nvCheck(!isNull());
+
+ const uint l = length();
+
+ if (m_str[l] != '\\' && m_str[l] != '/') {
+ char separatorString[] = { pathSeparator, '\0' };
+ append(separatorString);
+ }
+}
+
+
+/**
+* Strip the file name from a path.
+* @warning path cannot end with '/' o '\\', can't it?
+*/
+void Path::stripFileName()
+{
+ nvCheck( m_str != NULL );
+
+ int length = (int)strlen(m_str) - 1;
+ while (length > 0 && m_str[length] != '/' && m_str[length] != '\\'){
+ length--;
+ }
+ if( length ) {
+ m_str[length+1] = 0;
+ }
+ else {
+ m_str[0] = 0;
+ }
+}
+
+
+/// Strip the extension from a path name.
+void Path::stripExtension()
+{
+ nvCheck( m_str != NULL );
+
+ int length = (int)strlen(m_str) - 1;
+ while (length > 0 && m_str[length] != '.') {
+ length--;
+ if( m_str[length] == NV_PATH_SEPARATOR ) {
+ return; // no extension
+ }
+ }
+ if (length > 0) {
+ m_str[length] = 0;
+ }
+}
+
+
+/// Get the path separator.
+// static
+char Path::separator()
+{
+ return NV_PATH_SEPARATOR;
+}
+
+// static
+const char * Path::fileName(const char * str)
+{
+ nvCheck( str != NULL );
+
+ int length = (int)strlen(str) - 1;
+ while (length >= 0 && str[length] != '\\' && str[length] != '/') {
+ length--;
+ }
+
+ return &str[length+1];
+}
+
+// static
+const char * Path::extension(const char * str)
+{
+ nvCheck( str != NULL );
+
+ int length, l;
+ l = length = (int)strlen( str );
+ while (length > 0 && str[length] != '.') {
+ length--;
+ if (str[length] == '\\' || str[length] == '/') {
+ return &str[l]; // no extension
+ }
+ }
+ if (length == 0) {
+ return &str[l];
+ }
+ return &str[length];
+}
+
+
+
+/// Clone this string
+String String::clone() const
+{
+ String str(data);
+ return str;
+}
+
+void String::setString(const char * str)
+{
+ if (str == NULL) {
+ data = NULL;
+ }
+ else {
+ allocString( str );
+ addRef();
+ }
+}
+
+void String::setString(const char * str, uint length)
+{
+ nvDebugCheck(str != NULL);
+
+ allocString(str, length);
+ addRef();
+}
+
+void String::setString(const StringBuilder & str)
+{
+ if (str.str() == NULL) {
+ data = NULL;
+ }
+ else {
+ allocString(str.str());
+ addRef();
+ }
+}
+
+// Add reference count.
+void String::addRef()
+{
+ if (data != NULL)
+ {
+ setRefCount(getRefCount() + 1);
+ }
+}
+
+// Decrease reference count.
+void String::release()
+{
+ if (data != NULL)
+ {
+ const uint16 count = getRefCount();
+ setRefCount(count - 1);
+ if (count - 1 == 0) {
+ free(data - 2);
+ data = NULL;
+ }
+ }
+}
+
+void String::allocString(const char * str, uint len)
+{
+ const char * ptr = malloc<char>(2 + len + 1);
+
+ setData( ptr );
+ setRefCount( 0 );
+
+ // Copy string.
+ strCpy(const_cast<char *>(data), len+1, str, len);
+
+ // Add terminating character.
+ const_cast<char *>(data)[len] = '\0';
+}
+
+void nv::swap(String & a, String & b) {
+ swap(a.data, b.data);
+}
diff --git a/thirdparty/thekla_atlas/nvcore/StrLib.h b/thirdparty/thekla_atlas/nvcore/StrLib.h
new file mode 100644
index 0000000000..ae4b5d12a0
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/StrLib.h
@@ -0,0 +1,433 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_STRING_H
+#define NV_CORE_STRING_H
+
+#include "Debug.h"
+#include "Hash.h" // hash
+
+//#include <string.h> // strlen, etc.
+
+#if NV_OS_WIN32
+#define NV_PATH_SEPARATOR '\\'
+#else
+#define NV_PATH_SEPARATOR '/'
+#endif
+
+namespace nv
+{
+
+ NVCORE_API uint strHash(const char * str, uint h) NV_PURE;
+
+ /// String hash based on Bernstein's hash.
+ inline uint strHash(const char * data, uint h = 5381)
+ {
+ uint i = 0;
+ while(data[i] != 0) {
+ h = (33 * h) ^ uint(data[i]);
+ i++;
+ }
+ return h;
+ }
+
+ template <> struct Hash<const char *> {
+ uint operator()(const char * str) const { return strHash(str); }
+ };
+
+ NVCORE_API uint strLen(const char * str) NV_PURE; // Asserts on NULL strings.
+
+ NVCORE_API int strDiff(const char * s1, const char * s2) NV_PURE; // Asserts on NULL strings.
+ NVCORE_API int strCaseDiff(const char * s1, const char * s2) NV_PURE; // Asserts on NULL strings.
+ NVCORE_API bool strEqual(const char * s1, const char * s2) NV_PURE; // Accepts NULL strings.
+ NVCORE_API bool strCaseEqual(const char * s1, const char * s2) NV_PURE; // Accepts NULL strings.
+
+ template <> struct Equal<const char *> {
+ bool operator()(const char * a, const char * b) const { return strEqual(a, b); }
+ };
+
+ NVCORE_API bool strBeginsWith(const char * dst, const char * prefix) NV_PURE;
+ NVCORE_API bool strEndsWith(const char * dst, const char * suffix) NV_PURE;
+
+
+ NVCORE_API void strCpy(char * dst, uint size, const char * src);
+ NVCORE_API void strCpy(char * dst, uint size, const char * src, uint len);
+ NVCORE_API void strCat(char * dst, uint size, const char * src);
+
+ NVCORE_API const char * strSkipWhiteSpace(const char * str);
+ NVCORE_API char * strSkipWhiteSpace(char * str);
+
+ NVCORE_API bool strMatch(const char * str, const char * pat) NV_PURE;
+
+ NVCORE_API bool isNumber(const char * str) NV_PURE;
+
+ /* @@ Implement these two functions and modify StringBuilder to use them?
+ NVCORE_API void strFormat(const char * dst, const char * fmt, ...);
+ NVCORE_API void strFormatList(const char * dst, const char * fmt, va_list arg);
+
+ template <size_t count> void strFormatSafe(char (&buffer)[count], const char *fmt, ...) __attribute__((format (printf, 2, 3)));
+ template <size_t count> void strFormatSafe(char (&buffer)[count], const char *fmt, ...) {
+ va_list args;
+ va_start(args, fmt);
+ strFormatList(buffer, count, fmt, args);
+ va_end(args);
+ }
+ template <size_t count> void strFormatListSafe(char (&buffer)[count], const char *fmt, va_list arg) {
+ va_list tmp;
+ va_copy(tmp, args);
+ strFormatList(buffer, count, fmt, tmp);
+ va_end(tmp);
+ }*/
+
+ template <int count> void strCpySafe(char (&buffer)[count], const char *src) {
+ strCpy(buffer, count, src);
+ }
+
+ template <int count> void strCatSafe(char (&buffer)[count], const char * src) {
+ strCat(buffer, count, src);
+ }
+
+
+
+ /// String builder.
+ class NVCORE_CLASS StringBuilder
+ {
+ public:
+
+ StringBuilder();
+ explicit StringBuilder( uint size_hint );
+ StringBuilder(const char * str);
+ StringBuilder(const char * str, uint len);
+ StringBuilder(const StringBuilder & other);
+
+ ~StringBuilder();
+
+ StringBuilder & format( const char * format, ... ) __attribute__((format (printf, 2, 3)));
+ StringBuilder & formatList( const char * format, va_list arg );
+
+ StringBuilder & append(char c);
+ StringBuilder & append(const char * str);
+ StringBuilder & append(const char * str, uint len);
+ StringBuilder & append(const StringBuilder & str);
+ StringBuilder & appendFormat(const char * format, ...) __attribute__((format (printf, 2, 3)));
+ StringBuilder & appendFormatList(const char * format, va_list arg);
+
+ StringBuilder & appendSpace(uint n);
+
+ StringBuilder & number( int i, int base = 10 );
+ StringBuilder & number( uint i, int base = 10 );
+
+ StringBuilder & reserve(uint size_hint);
+ StringBuilder & copy(const char * str);
+ StringBuilder & copy(const char * str, uint len);
+ StringBuilder & copy(const StringBuilder & str);
+
+ StringBuilder & toLower();
+ StringBuilder & toUpper();
+
+ bool endsWith(const char * str) const;
+ bool beginsWith(const char * str) const;
+
+ char * reverseFind(char c);
+
+ void reset();
+ bool isNull() const { return m_size == 0; }
+
+ // const char * accessors
+ //operator const char * () const { return m_str; }
+ //operator char * () { return m_str; }
+ const char * str() const { return m_str; }
+ char * str() { return m_str; }
+
+ char * release(); // Release ownership of string.
+ void acquire(char *); // Take ownership of string.
+
+ /// Implement value semantics.
+ StringBuilder & operator=( const StringBuilder & s ) {
+ return copy(s);
+ }
+
+ /// Implement value semantics.
+ StringBuilder & operator=( const char * s ) {
+ return copy(s);
+ }
+
+ /// Equal operator.
+ bool operator==( const StringBuilder & s ) const {
+ return strMatch(s.m_str, m_str);
+ }
+
+ /// Return the exact length.
+ uint length() const { return isNull() ? 0 : strLen(m_str); }
+
+ /// Return the size of the string container.
+ uint capacity() const { return m_size; }
+
+ /// Return the hash of the string.
+ uint hash() const { return isNull() ? 0 : strHash(m_str); }
+
+ // Swap strings.
+ friend void swap(StringBuilder & a, StringBuilder & b);
+
+ protected:
+
+ /// Size of the string container.
+ uint m_size;
+
+ /// String.
+ char * m_str;
+
+ };
+
+
+ /// Path string. @@ This should be called PathBuilder.
+ class NVCORE_CLASS Path : public StringBuilder
+ {
+ public:
+ Path() : StringBuilder() {}
+ explicit Path(int size_hint) : StringBuilder(size_hint) {}
+ Path(const char * str) : StringBuilder(str) {}
+ Path(const Path & path) : StringBuilder(path) {}
+
+ const char * fileName() const;
+ const char * extension() const;
+
+ void translatePath(char pathSeparator = NV_PATH_SEPARATOR);
+
+ void appendSeparator(char pathSeparator = NV_PATH_SEPARATOR);
+
+ void stripFileName();
+ void stripExtension();
+
+ // statics
+ NVCORE_API static char separator();
+ NVCORE_API static const char * fileName(const char *);
+ NVCORE_API static const char * extension(const char *);
+
+ NVCORE_API static void translatePath(char * path, char pathSeparator = NV_PATH_SEPARATOR);
+ };
+
+
+ /// String class.
+ class NVCORE_CLASS String
+ {
+ public:
+
+ /// Constructs a null string. @sa isNull()
+ String()
+ {
+ data = NULL;
+ }
+
+ /// Constructs a shared copy of str.
+ String(const String & str)
+ {
+ data = str.data;
+ if (data != NULL) addRef();
+ }
+
+ /// Constructs a shared string from a standard string.
+ String(const char * str)
+ {
+ setString(str);
+ }
+
+ /// Constructs a shared string from a standard string.
+ String(const char * str, int length)
+ {
+ setString(str, length);
+ }
+
+ /// Constructs a shared string from a StringBuilder.
+ String(const StringBuilder & str)
+ {
+ setString(str);
+ }
+
+ /// Dtor.
+ ~String()
+ {
+ release();
+ }
+
+ String clone() const;
+
+ /// Release the current string and allocate a new one.
+ const String & operator=( const char * str )
+ {
+ release();
+ setString( str );
+ return *this;
+ }
+
+ /// Release the current string and allocate a new one.
+ const String & operator=( const StringBuilder & str )
+ {
+ release();
+ setString( str );
+ return *this;
+ }
+
+ /// Implement value semantics.
+ String & operator=( const String & str )
+ {
+ if (str.data != data)
+ {
+ release();
+ data = str.data;
+ addRef();
+ }
+ return *this;
+ }
+
+ /// Equal operator.
+ bool operator==( const String & str ) const
+ {
+ return strMatch(str.data, data);
+ }
+
+ /// Equal operator.
+ bool operator==( const char * str ) const
+ {
+ return strMatch(str, data);
+ }
+
+ /// Not equal operator.
+ bool operator!=( const String & str ) const
+ {
+ return !strMatch(str.data, data);
+ }
+
+ /// Not equal operator.
+ bool operator!=( const char * str ) const
+ {
+ return !strMatch(str, data);
+ }
+
+ /// Returns true if this string is the null string.
+ bool isNull() const { return data == NULL; }
+
+ /// Return the exact length.
+ uint length() const { nvDebugCheck(data != NULL); return strLen(data); }
+
+ /// Return the hash of the string.
+ uint hash() const { nvDebugCheck(data != NULL); return strHash(data); }
+
+ /// const char * cast operator.
+ operator const char * () const { return data; }
+
+ /// Get string pointer.
+ const char * str() const { return data; }
+
+
+ private:
+
+ // Add reference count.
+ void addRef();
+
+ // Decrease reference count.
+ void release();
+
+ uint16 getRefCount() const
+ {
+ nvDebugCheck(data != NULL);
+ return *reinterpret_cast<const uint16 *>(data - 2);
+ }
+
+ void setRefCount(uint16 count) {
+ nvDebugCheck(data != NULL);
+ nvCheck(count < 0xFFFF);
+ *reinterpret_cast<uint16 *>(const_cast<char *>(data - 2)) = uint16(count);
+ }
+
+ void setData(const char * str) {
+ data = str + 2;
+ }
+
+ void allocString(const char * str)
+ {
+ allocString(str, strLen(str));
+ }
+
+ void allocString(const char * str, uint length);
+
+ void setString(const char * str);
+ void setString(const char * str, uint length);
+ void setString(const StringBuilder & str);
+
+ // Swap strings.
+ friend void swap(String & a, String & b);
+
+ private:
+
+ const char * data;
+
+ };
+
+ template <> struct Hash<String> {
+ uint operator()(const String & str) const { return str.hash(); }
+ };
+
+
+ // Like AutoPtr, but for const char strings.
+ class AutoString
+ {
+ NV_FORBID_COPY(AutoString);
+ NV_FORBID_HEAPALLOC();
+ public:
+
+ // Ctor.
+ AutoString(const char * p = NULL) : m_ptr(p) { }
+
+#if NV_CC_CPP11
+ // Move ctor.
+ AutoString(AutoString && ap) : m_ptr(ap.m_ptr) { ap.m_ptr = NULL; }
+#endif
+
+ // Dtor. Deletes owned pointer.
+ ~AutoString() {
+ delete [] m_ptr;
+ m_ptr = NULL;
+ }
+
+ // Delete owned pointer and assign new one.
+ void operator=(const char * p) {
+ if (p != m_ptr)
+ {
+ delete [] m_ptr;
+ m_ptr = p;
+ }
+ }
+
+ // Get pointer.
+ const char * ptr() const { return m_ptr; }
+ operator const char *() const { return m_ptr; }
+
+ // Relinquish ownership of the underlying pointer and returns that pointer.
+ const char * release() {
+ const char * tmp = m_ptr;
+ m_ptr = NULL;
+ return tmp;
+ }
+
+ // comparison operators.
+ friend bool operator == (const AutoString & ap, const char * const p) {
+ return (ap.ptr() == p);
+ }
+ friend bool operator != (const AutoString & ap, const char * const p) {
+ return (ap.ptr() != p);
+ }
+ friend bool operator == (const char * const p, const AutoString & ap) {
+ return (ap.ptr() == p);
+ }
+ friend bool operator != (const char * const p, const AutoString & ap) {
+ return (ap.ptr() != p);
+ }
+
+ private:
+ const char * m_ptr;
+ };
+
+} // nv namespace
+
+#endif // NV_CORE_STRING_H
diff --git a/thirdparty/thekla_atlas/nvcore/Stream.h b/thirdparty/thekla_atlas/nvcore/Stream.h
new file mode 100644
index 0000000000..c35c0d0c78
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Stream.h
@@ -0,0 +1,164 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_STREAM_H
+#define NV_CORE_STREAM_H
+
+#include "nvcore.h"
+#include "Debug.h"
+
+namespace nv
+{
+
+ /// Base stream class.
+ class NVCORE_CLASS Stream {
+ public:
+
+ enum ByteOrder {
+ LittleEndian = false,
+ BigEndian = true,
+ };
+
+ /// Get the byte order of the system.
+ static ByteOrder getSystemByteOrder() {
+#if NV_LITTLE_ENDIAN
+ return LittleEndian;
+#else
+ return BigEndian;
+#endif
+ }
+
+
+ /// Ctor.
+ Stream() : m_byteOrder(LittleEndian) { }
+
+ /// Virtual destructor.
+ virtual ~Stream() {}
+
+ /// Set byte order.
+ void setByteOrder(ByteOrder bo) { m_byteOrder = bo; }
+
+ /// Get byte order.
+ ByteOrder byteOrder() const { return m_byteOrder; }
+
+
+ /// Serialize the given data.
+ virtual uint serialize( void * data, uint len ) = 0;
+
+ /// Move to the given position in the archive.
+ virtual void seek( uint pos ) = 0;
+
+ /// Return the current position in the archive.
+ virtual uint tell() const = 0;
+
+ /// Return the current size of the archive.
+ virtual uint size() const = 0;
+
+ /// Determine if there has been any error.
+ virtual bool isError() const = 0;
+
+ /// Clear errors.
+ virtual void clearError() = 0;
+
+ /// Return true if the stream is at the end.
+ virtual bool isAtEnd() const = 0;
+
+ /// Return true if the stream is seekable.
+ virtual bool isSeekable() const = 0;
+
+ /// Return true if this is an input stream.
+ virtual bool isLoading() const = 0;
+
+ /// Return true if this is an output stream.
+ virtual bool isSaving() const = 0;
+
+
+ void advance(uint offset) { seek(tell() + offset); }
+
+
+ // friends
+ friend Stream & operator<<( Stream & s, bool & c ) {
+#if NV_OS_DARWIN && !NV_CC_CPP11
+ nvStaticCheck(sizeof(bool) == 4);
+ uint8 b = c ? 1 : 0;
+ s.serialize( &b, 1 );
+ c = (b != 0);
+#else
+ nvStaticCheck(sizeof(bool) == 1);
+ s.serialize( &c, 1 );
+#endif
+ return s;
+ }
+ friend Stream & operator<<( Stream & s, char & c ) {
+ nvStaticCheck(sizeof(char) == 1);
+ s.serialize( &c, 1 );
+ return s;
+ }
+ friend Stream & operator<<( Stream & s, uint8 & c ) {
+ nvStaticCheck(sizeof(uint8) == 1);
+ s.serialize( &c, 1 );
+ return s;
+ }
+ friend Stream & operator<<( Stream & s, int8 & c ) {
+ nvStaticCheck(sizeof(int8) == 1);
+ s.serialize( &c, 1 );
+ return s;
+ }
+ friend Stream & operator<<( Stream & s, uint16 & c ) {
+ nvStaticCheck(sizeof(uint16) == 2);
+ return s.byteOrderSerialize( &c, 2 );
+ }
+ friend Stream & operator<<( Stream & s, int16 & c ) {
+ nvStaticCheck(sizeof(int16) == 2);
+ return s.byteOrderSerialize( &c, 2 );
+ }
+ friend Stream & operator<<( Stream & s, uint32 & c ) {
+ nvStaticCheck(sizeof(uint32) == 4);
+ return s.byteOrderSerialize( &c, 4 );
+ }
+ friend Stream & operator<<( Stream & s, int32 & c ) {
+ nvStaticCheck(sizeof(int32) == 4);
+ return s.byteOrderSerialize( &c, 4 );
+ }
+ friend Stream & operator<<( Stream & s, uint64 & c ) {
+ nvStaticCheck(sizeof(uint64) == 8);
+ return s.byteOrderSerialize( &c, 8 );
+ }
+ friend Stream & operator<<( Stream & s, int64 & c ) {
+ nvStaticCheck(sizeof(int64) == 8);
+ return s.byteOrderSerialize( &c, 8 );
+ }
+ friend Stream & operator<<( Stream & s, float & c ) {
+ nvStaticCheck(sizeof(float) == 4);
+ return s.byteOrderSerialize( &c, 4 );
+ }
+ friend Stream & operator<<( Stream & s, double & c ) {
+ nvStaticCheck(sizeof(double) == 8);
+ return s.byteOrderSerialize( &c, 8 );
+ }
+
+ protected:
+
+ /// Serialize in the stream byte order.
+ Stream & byteOrderSerialize( void * v, uint len ) {
+ if( m_byteOrder == getSystemByteOrder() ) {
+ serialize( v, len );
+ }
+ else {
+ for( uint i = len; i > 0; i-- ) {
+ serialize( (uint8 *)v + i - 1, 1 );
+ }
+ }
+ return *this;
+ }
+
+
+ private:
+
+ ByteOrder m_byteOrder;
+
+ };
+
+} // nv namespace
+
+#endif // NV_CORE_STREAM_H
diff --git a/thirdparty/thekla_atlas/nvcore/Utils.h b/thirdparty/thekla_atlas/nvcore/Utils.h
new file mode 100644
index 0000000000..f20e42cda8
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/Utils.h
@@ -0,0 +1,315 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_UTILS_H
+#define NV_CORE_UTILS_H
+
+#include "Debug.h" // nvDebugCheck
+
+#include <new> // for placement new
+
+
+// Just in case. Grrr.
+#undef min
+#undef max
+
+#define NV_INT8_MIN (-128)
+#define NV_INT8_MAX 127
+#define NV_UINT8_MAX 255
+#define NV_INT16_MIN (-32767-1)
+#define NV_INT16_MAX 32767
+#define NV_UINT16_MAX 0xffff
+#define NV_INT32_MIN (-2147483647-1)
+#define NV_INT32_MAX 2147483647
+#define NV_UINT32_MAX 0xffffffff
+#define NV_INT64_MAX POSH_I64(9223372036854775807)
+#define NV_INT64_MIN (-POSH_I64(9223372036854775807)-1)
+#define NV_UINT64_MAX POSH_U64(0xffffffffffffffff)
+
+#define NV_HALF_MAX 65504.0F
+#define NV_FLOAT_MAX 3.402823466e+38F
+
+#define NV_INTEGER_TO_FLOAT_MAX 16777217 // Largest integer such that it and all smaller integers can be stored in a 32bit float.
+
+
+namespace nv
+{
+ // Less error prone than casting. From CB:
+ // http://cbloomrants.blogspot.com/2011/06/06-17-11-c-casting-is-devil.html
+
+ // These intentionally look like casts.
+
+ // uint64 casts:
+ template <typename T> inline uint64 U64(T x) { return x; }
+ //template <> inline uint64 U64<uint64>(uint64 x) { return x; }
+ template <> inline uint64 U64<int64>(int64 x) { nvDebugCheck(x >= 0); return (uint64)x; }
+ //template <> inline uint64 U32<uint32>(uint32 x) { return x; }
+ template <> inline uint64 U64<int32>(int32 x) { nvDebugCheck(x >= 0); return (uint64)x; }
+ //template <> inline uint64 U64<uint16>(uint16 x) { return x; }
+ template <> inline uint64 U64<int16>(int16 x) { nvDebugCheck(x >= 0); return (uint64)x; }
+ //template <> inline uint64 U64<uint8>(uint8 x) { return x; }
+ template <> inline uint64 U64<int8>(int8 x) { nvDebugCheck(x >= 0); return (uint64)x; }
+
+ // int64 casts:
+ template <typename T> inline int64 I64(T x) { return x; }
+ template <> inline int64 I64<uint64>(uint64 x) { nvDebugCheck(x <= NV_INT64_MAX); return (int64)x; }
+ //template <> inline uint64 U64<int64>(int64 x) { return x; }
+ //template <> inline uint64 U32<uint32>(uint32 x) { return x; }
+ //template <> inline uint64 U64<int32>(int32 x) { return x; }
+ //template <> inline uint64 U64<uint16>(uint16 x) { return x; }
+ //template <> inline uint64 U64<int16>(int16 x) { return x; }
+ //template <> inline uint64 U64<uint8>(uint8 x) { return x; }
+ //template <> inline uint64 U64<int8>(int8 x) { return x; }
+
+ // uint32 casts:
+ template <typename T> inline uint32 U32(T x) { return x; }
+ template <> inline uint32 U32<uint64>(uint64 x) { nvDebugCheck(x <= NV_UINT32_MAX); return (uint32)x; }
+ template <> inline uint32 U32<int64>(int64 x) { nvDebugCheck(x >= 0 && x <= NV_UINT32_MAX); return (uint32)x; }
+ //template <> inline uint32 U32<uint32>(uint32 x) { return x; }
+ template <> inline uint32 U32<int32>(int32 x) { nvDebugCheck(x >= 0); return (uint32)x; }
+ //template <> inline uint32 U32<uint16>(uint16 x) { return x; }
+ template <> inline uint32 U32<int16>(int16 x) { nvDebugCheck(x >= 0); return (uint32)x; }
+ //template <> inline uint32 U32<uint8>(uint8 x) { return x; }
+ template <> inline uint32 U32<int8>(int8 x) { nvDebugCheck(x >= 0); return (uint32)x; }
+
+ // int32 casts:
+ template <typename T> inline int32 I32(T x) { return x; }
+ template <> inline int32 I32<uint64>(uint64 x) { nvDebugCheck(x <= NV_INT32_MAX); return (int32)x; }
+ template <> inline int32 I32<int64>(int64 x) { nvDebugCheck(x >= NV_INT32_MIN && x <= NV_UINT32_MAX); return (int32)x; }
+ template <> inline int32 I32<uint32>(uint32 x) { nvDebugCheck(x <= NV_INT32_MAX); return (int32)x; }
+ //template <> inline int32 I32<int32>(int32 x) { return x; }
+ //template <> inline int32 I32<uint16>(uint16 x) { return x; }
+ //template <> inline int32 I32<int16>(int16 x) { return x; }
+ //template <> inline int32 I32<uint8>(uint8 x) { return x; }
+ //template <> inline int32 I32<int8>(int8 x) { return x; }
+
+ // uint16 casts:
+ template <typename T> inline uint16 U16(T x) { return x; }
+ template <> inline uint16 U16<uint64>(uint64 x) { nvDebugCheck(x <= NV_UINT16_MAX); return (uint16)x; }
+ template <> inline uint16 U16<int64>(int64 x) { nvDebugCheck(x >= 0 && x <= NV_UINT16_MAX); return (uint16)x; }
+ template <> inline uint16 U16<uint32>(uint32 x) { nvDebugCheck(x <= NV_UINT16_MAX); return (uint16)x; }
+ template <> inline uint16 U16<int32>(int32 x) { nvDebugCheck(x >= 0 && x <= NV_UINT16_MAX); return (uint16)x; }
+ //template <> inline uint16 U16<uint16>(uint16 x) { return x; }
+ template <> inline uint16 U16<int16>(int16 x) { nvDebugCheck(x >= 0); return (uint16)x; }
+ //template <> inline uint16 U16<uint8>(uint8 x) { return x; }
+ template <> inline uint16 U16<int8>(int8 x) { nvDebugCheck(x >= 0); return (uint16)x; }
+
+ // int16 casts:
+ template <typename T> inline int16 I16(T x) { return x; }
+ template <> inline int16 I16<uint64>(uint64 x) { nvDebugCheck(x <= NV_INT16_MAX); return (int16)x; }
+ template <> inline int16 I16<int64>(int64 x) { nvDebugCheck(x >= NV_INT16_MIN && x <= NV_UINT16_MAX); return (int16)x; }
+ template <> inline int16 I16<uint32>(uint32 x) { nvDebugCheck(x <= NV_INT16_MAX); return (int16)x; }
+ template <> inline int16 I16<int32>(int32 x) { nvDebugCheck(x >= NV_INT16_MIN && x <= NV_UINT16_MAX); return (int16)x; }
+ template <> inline int16 I16<uint16>(uint16 x) { nvDebugCheck(x <= NV_INT16_MAX); return (int16)x; }
+ //template <> inline int16 I16<int16>(int16 x) { return x; }
+ //template <> inline int16 I16<uint8>(uint8 x) { return x; }
+ //template <> inline int16 I16<int8>(int8 x) { return x; }
+
+ // uint8 casts:
+ template <typename T> inline uint8 U8(T x) { return x; }
+ template <> inline uint8 U8<uint64>(uint64 x) { nvDebugCheck(x <= NV_UINT8_MAX); return (uint8)x; }
+ template <> inline uint8 U8<int64>(int64 x) { nvDebugCheck(x >= 0 && x <= NV_UINT8_MAX); return (uint8)x; }
+ template <> inline uint8 U8<uint32>(uint32 x) { nvDebugCheck(x <= NV_UINT8_MAX); return (uint8)x; }
+ template <> inline uint8 U8<int32>(int32 x) { nvDebugCheck(x >= 0 && x <= NV_UINT8_MAX); return (uint8)x; }
+ template <> inline uint8 U8<uint16>(uint16 x) { nvDebugCheck(x <= NV_UINT8_MAX); return (uint8)x; }
+ template <> inline uint8 U8<int16>(int16 x) { nvDebugCheck(x >= 0 && x <= NV_UINT8_MAX); return (uint8)x; }
+ //template <> inline uint8 U8<uint8>(uint8 x) { return x; }
+ template <> inline uint8 U8<int8>(int8 x) { nvDebugCheck(x >= 0); return (uint8)x; }
+ //template <> inline uint8 U8<float>(int8 x) { nvDebugCheck(x >= 0.0f && x <= 255.0f); return (uint8)x; }
+
+ // int8 casts:
+ template <typename T> inline int8 I8(T x) { return x; }
+ template <> inline int8 I8<uint64>(uint64 x) { nvDebugCheck(x <= NV_INT8_MAX); return (int8)x; }
+ template <> inline int8 I8<int64>(int64 x) { nvDebugCheck(x >= NV_INT8_MIN && x <= NV_UINT8_MAX); return (int8)x; }
+ template <> inline int8 I8<uint32>(uint32 x) { nvDebugCheck(x <= NV_INT8_MAX); return (int8)x; }
+ template <> inline int8 I8<int32>(int32 x) { nvDebugCheck(x >= NV_INT8_MIN && x <= NV_UINT8_MAX); return (int8)x; }
+ template <> inline int8 I8<uint16>(uint16 x) { nvDebugCheck(x <= NV_INT8_MAX); return (int8)x; }
+ template <> inline int8 I8<int16>(int16 x) { nvDebugCheck(x >= NV_INT8_MIN && x <= NV_UINT8_MAX); return (int8)x; }
+ template <> inline int8 I8<uint8>(uint8 x) { nvDebugCheck(x <= NV_INT8_MAX); return (int8)x; }
+ //template <> inline int8 I8<int8>(int8 x) { return x; }
+
+ // float casts:
+ template <typename T> inline float F32(T x) { return x; }
+ template <> inline float F32<uint64>(uint64 x) { nvDebugCheck(x <= NV_INTEGER_TO_FLOAT_MAX); return (float)x; }
+ template <> inline float F32<int64>(int64 x) { nvDebugCheck(x >= -NV_INTEGER_TO_FLOAT_MAX && x <= NV_INTEGER_TO_FLOAT_MAX); return (float)x; }
+ template <> inline float F32<uint32>(uint32 x) { nvDebugCheck(x <= NV_INTEGER_TO_FLOAT_MAX); return (float)x; }
+ template <> inline float F32<int32>(int32 x) { nvDebugCheck(x >= -NV_INTEGER_TO_FLOAT_MAX && x <= NV_INTEGER_TO_FLOAT_MAX); return (float)x; }
+ // The compiler should not complain about these conversions:
+ //template <> inline float F32<uint16>(uint16 x) { nvDebugCheck(return (float)x; }
+ //template <> inline float F32<int16>(int16 x) { nvDebugCheck(return (float)x; }
+ //template <> inline float F32<uint8>(uint8 x) { nvDebugCheck(return (float)x; }
+ //template <> inline float F32<int8>(int8 x) { nvDebugCheck(return (float)x; }
+
+
+ /// Swap two values.
+ template <typename T>
+ inline void swap(T & a, T & b)
+ {
+ T temp(a);
+ a = b;
+ b = temp;
+ }
+
+ /// Return the maximum of the two arguments. For floating point values, it returns the second value if the first is NaN.
+ template <typename T>
+ //inline const T & max(const T & a, const T & b)
+ inline T max(const T & a, const T & b)
+ {
+ return (b < a) ? a : b;
+ }
+
+ /// Return the maximum of the four arguments.
+ template <typename T>
+ //inline const T & max4(const T & a, const T & b, const T & c)
+ inline T max4(const T & a, const T & b, const T & c, const T & d)
+ {
+ return max(max(a, b), max(c, d));
+ }
+
+ /// Return the maximum of the three arguments.
+ template <typename T>
+ //inline const T & max3(const T & a, const T & b, const T & c)
+ inline T max3(const T & a, const T & b, const T & c)
+ {
+ return max(a, max(b, c));
+ }
+
+ /// Return the minimum of two values.
+ template <typename T>
+ //inline const T & min(const T & a, const T & b)
+ inline T min(const T & a, const T & b)
+ {
+ return (a < b) ? a : b;
+ }
+
+ /// Return the maximum of the three arguments.
+ template <typename T>
+ //inline const T & min3(const T & a, const T & b, const T & c)
+ inline T min3(const T & a, const T & b, const T & c)
+ {
+ return min(a, min(b, c));
+ }
+
+ /// Clamp between two values.
+ template <typename T>
+ //inline const T & clamp(const T & x, const T & a, const T & b)
+ inline T clamp(const T & x, const T & a, const T & b)
+ {
+ return min(max(x, a), b);
+ }
+
+ /** Return the next power of two.
+ * @see http://graphics.stanford.edu/~seander/bithacks.html
+ * @warning Behaviour for 0 is undefined.
+ * @note isPowerOfTwo(x) == true -> nextPowerOfTwo(x) == x
+ * @note nextPowerOfTwo(x) = 2 << log2(x-1)
+ */
+ inline uint32 nextPowerOfTwo(uint32 x)
+ {
+ nvDebugCheck( x != 0 );
+#if 1 // On modern CPUs this is supposed to be as fast as using the bsr instruction.
+ x--;
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+ return x+1;
+#else
+ uint p = 1;
+ while( x > p ) {
+ p += p;
+ }
+ return p;
+#endif
+ }
+
+ inline uint64 nextPowerOfTwo(uint64 x)
+ {
+ nvDebugCheck(x != 0);
+ uint p = 1;
+ while (x > p) {
+ p += p;
+ }
+ return p;
+ }
+
+ // @@ Should I just use a macro instead?
+ template <typename T>
+ inline bool isPowerOfTwo(T n)
+ {
+ return (n & (n-1)) == 0;
+ }
+
+
+ // @@ Move this to utils?
+ /// Delete all the elements of a container.
+ template <typename T>
+ void deleteAll(T & container)
+ {
+ for (typename T::PseudoIndex i = container.start(); !container.isDone(i); container.advance(i))
+ {
+ delete container[i];
+ }
+ }
+
+
+
+ // @@ Specialize these methods for numeric, pointer, and pod types.
+
+ template <typename T>
+ void construct_range(T * restrict ptr, uint new_size, uint old_size) {
+ for (uint i = old_size; i < new_size; i++) {
+ new(ptr+i) T; // placement new
+ }
+ }
+
+ template <typename T>
+ void construct_range(T * restrict ptr, uint new_size, uint old_size, const T & elem) {
+ for (uint i = old_size; i < new_size; i++) {
+ new(ptr+i) T(elem); // placement new
+ }
+ }
+
+ template <typename T>
+ void construct_range(T * restrict ptr, uint new_size, uint old_size, const T * src) {
+ for (uint i = old_size; i < new_size; i++) {
+ new(ptr+i) T(src[i]); // placement new
+ }
+ }
+
+ template <typename T>
+ void destroy_range(T * restrict ptr, uint new_size, uint old_size) {
+ for (uint i = new_size; i < old_size; i++) {
+ (ptr+i)->~T(); // Explicit call to the destructor
+ }
+ }
+
+ template <typename T>
+ void fill(T * restrict dst, uint count, const T & value) {
+ for (uint i = 0; i < count; i++) {
+ dst[i] = value;
+ }
+ }
+
+ template <typename T>
+ void copy_range(T * restrict dst, const T * restrict src, uint count) {
+ for (uint i = 0; i < count; i++) {
+ dst[i] = src[i];
+ }
+ }
+
+ template <typename T>
+ bool find(const T & element, const T * restrict ptr, uint begin, uint end, uint * index) {
+ for (uint i = begin; i < end; i++) {
+ if (ptr[i] == element) {
+ if (index != NULL) *index = i;
+ return true;
+ }
+ }
+ return false;
+ }
+
+} // nv namespace
+
+#endif // NV_CORE_UTILS_H
diff --git a/thirdparty/thekla_atlas/nvcore/nvcore.h b/thirdparty/thekla_atlas/nvcore/nvcore.h
new file mode 100644
index 0000000000..a3deb66be2
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/nvcore.h
@@ -0,0 +1,357 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_CORE_H
+#define NV_CORE_H
+
+// Function linkage
+#if NVCORE_SHARED
+#ifdef NVCORE_EXPORTS
+#define NVCORE_API DLL_EXPORT
+#define NVCORE_CLASS DLL_EXPORT_CLASS
+#else
+#define NVCORE_API DLL_IMPORT
+#define NVCORE_CLASS DLL_IMPORT
+#endif
+#else // NVCORE_SHARED
+#define NVCORE_API
+#define NVCORE_CLASS
+#endif // NVCORE_SHARED
+
+
+// Platform definitions
+#include <posh.h>
+
+// OS:
+// NV_OS_WIN32
+// NV_OS_WIN64
+// NV_OS_MINGW
+// NV_OS_CYGWIN
+// NV_OS_LINUX
+// NV_OS_UNIX
+// NV_OS_DARWIN
+// NV_OS_XBOX
+// NV_OS_ORBIS
+// NV_OS_IOS
+
+#define NV_OS_STRING POSH_OS_STRING
+
+#if defined POSH_OS_LINUX
+# define NV_OS_LINUX 1
+# define NV_OS_UNIX 1
+#elif defined POSH_OS_ORBIS
+# define NV_OS_ORBIS 1
+#elif defined POSH_OS_FREEBSD
+# define NV_OS_FREEBSD 1
+# define NV_OS_UNIX 1
+#elif defined POSH_OS_OPENBSD
+# define NV_OS_OPENBSD 1
+# define NV_OS_UNIX 1
+#elif defined POSH_OS_CYGWIN32
+# define NV_OS_CYGWIN 1
+#elif defined POSH_OS_MINGW
+# define NV_OS_MINGW 1
+# define NV_OS_WIN32 1
+#elif defined POSH_OS_OSX
+# define NV_OS_OSX 1 // IC: Adding this, because iOS defines NV_OS_DARWIN too.
+# define NV_OS_DARWIN 1
+# define NV_OS_UNIX 1
+#elif defined POSH_OS_IOS
+# define NV_OS_DARWIN 1 //ACS should we keep this on IOS?
+# define NV_OS_UNIX 1
+# define NV_OS_IOS 1
+#elif defined POSH_OS_UNIX
+# define NV_OS_UNIX 1
+#elif defined POSH_OS_WIN64
+# define NV_OS_WIN32 1
+# define NV_OS_WIN64 1
+#elif defined POSH_OS_WIN32
+# define NV_OS_WIN32 1
+#elif defined POSH_OS_XBOX
+# define NV_OS_XBOX 1
+#elif defined POSH_OS_DURANGO
+# define NV_OS_DURANGO 1
+#else
+# error "Unsupported OS"
+#endif
+
+
+// Is this a console OS? (i.e. connected to a TV)
+#if NV_OS_ORBIS || NV_OS_XBOX || NV_OS_DURANGO
+# define NV_OS_CONSOLE 1
+#endif
+
+
+// Threading:
+// some platforms don't implement __thread or similar for thread-local-storage
+#if NV_OS_UNIX || NV_OS_ORBIS || NV_OS_IOS //ACStodoIOS darwin instead of ios?
+# define NV_OS_USE_PTHREAD 1
+# if NV_OS_IOS
+# define NV_OS_HAS_TLS_QUALIFIER 0
+# else
+# define NV_OS_HAS_TLS_QUALIFIER 1
+# endif
+#else
+# define NV_OS_USE_PTHREAD 0
+# define NV_OS_HAS_TLS_QUALIFIER 1
+#endif
+
+
+// CPUs:
+// NV_CPU_X86
+// NV_CPU_X86_64
+// NV_CPU_PPC
+// NV_CPU_ARM
+
+#define NV_CPU_STRING POSH_CPU_STRING
+
+#if defined POSH_CPU_X86_64
+//# define NV_CPU_X86 1
+# define NV_CPU_X86_64 1
+#elif defined POSH_CPU_X86
+# define NV_CPU_X86 1
+#elif defined POSH_CPU_PPC
+# define NV_CPU_PPC 1
+#elif defined POSH_CPU_STRONGARM
+# define NV_CPU_ARM 1
+#else
+# error "Unsupported CPU"
+#endif
+
+
+// Compiler:
+// NV_CC_GNUC
+// NV_CC_MSVC
+// NV_CC_CLANG
+
+#if defined POSH_COMPILER_CLANG
+# define NV_CC_CLANG 1
+# define NV_CC_GNUC 1 // Clang is compatible with GCC.
+# define NV_CC_STRING "clang"
+#elif defined POSH_COMPILER_GCC
+# define NV_CC_GNUC 1
+# define NV_CC_STRING "gcc"
+#elif defined POSH_COMPILER_MSVC
+# define NV_CC_MSVC 1
+# define NV_CC_STRING "msvc"
+#else
+# error "Unsupported compiler"
+#endif
+
+#if NV_CC_MSVC
+#define NV_CC_CPP11 (__cplusplus > 199711L || _MSC_VER >= 1800) // Visual Studio 2013 has all the features we use, but doesn't advertise full C++11 support yet.
+#else
+// @@ IC: This works in CLANG, about GCC?
+// @@ ES: Doesn't work in gcc. These 3 features are available in GCC >= 4.4.
+#ifdef __clang__
+#define NV_CC_CPP11 (__has_feature(cxx_deleted_functions) && __has_feature(cxx_rvalue_references) && __has_feature(cxx_static_assert))
+#elif defined __GNUC__
+#define NV_CC_CPP11 ( __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+#endif
+#endif
+
+// Endiannes:
+#define NV_LITTLE_ENDIAN POSH_LITTLE_ENDIAN
+#define NV_BIG_ENDIAN POSH_BIG_ENDIAN
+#define NV_ENDIAN_STRING POSH_ENDIAN_STRING
+
+
+// Define the right printf prefix for size_t arguments:
+#if POSH_64BIT_POINTER
+# define NV_SIZET_PRINTF_PREFIX POSH_I64_PRINTF_PREFIX
+#else
+# define NV_SIZET_PRINTF_PREFIX
+#endif
+
+
+// cmake config
+#include "nvconfig.h"
+
+#if NV_OS_DARWIN
+#include <stdint.h>
+//#include <inttypes.h>
+
+// Type definitions:
+typedef uint8_t uint8;
+typedef int8_t int8;
+
+typedef uint16_t uint16;
+typedef int16_t int16;
+
+typedef uint32_t uint32;
+typedef int32_t int32;
+
+typedef uint64_t uint64;
+typedef int64_t int64;
+
+// POSH gets this wrong due to __LP64__
+#undef POSH_I64_PRINTF_PREFIX
+#define POSH_I64_PRINTF_PREFIX "ll"
+
+#else
+
+// Type definitions:
+typedef posh_u8_t uint8;
+typedef posh_i8_t int8;
+
+typedef posh_u16_t uint16;
+typedef posh_i16_t int16;
+
+typedef posh_u32_t uint32;
+typedef posh_i32_t int32;
+
+//#if NV_OS_DARWIN
+// OSX-64 is supposed to be LP64 (longs and pointers are 64 bits), thus uint64 is defined as
+// unsigned long. However, some OSX headers define it as unsigned long long, producing errors,
+// even though both types are 64 bit. Ideally posh should handle that, but it has not been
+// updated in ages, so here I'm just falling back to the standard C99 types defined in inttypes.h
+//#include <inttypes.h>
+//typedef posh_u64_t uint64_t;
+//typedef posh_i64_t int64_t;
+//#else
+typedef posh_u64_t uint64;
+typedef posh_i64_t int64;
+//#endif
+#if NV_OS_DARWIN
+// To avoid duplicate definitions.
+#define _UINT64
+#endif
+#endif
+
+// Aliases
+typedef uint32 uint;
+
+
+// Version string:
+#define NV_VERSION_STRING \
+ NV_OS_STRING "/" NV_CC_STRING "/" NV_CPU_STRING"/" \
+ NV_ENDIAN_STRING"-endian - " __DATE__ "-" __TIME__
+
+
+// Disable copy constructor and assignment operator.
+#if NV_CC_CPP11
+#define NV_FORBID_COPY(C) \
+ C( const C & ) = delete; \
+ C &operator=( const C & ) = delete
+#else
+#define NV_FORBID_COPY(C) \
+ private: \
+ C( const C & ); \
+ C &operator=( const C & )
+#endif
+
+// Disable dynamic allocation on the heap.
+// See Prohibiting Heap-Based Objects in More Effective C++.
+#define NV_FORBID_HEAPALLOC() \
+ private: \
+ void *operator new(size_t size); \
+ void *operator new[](size_t size)
+ //static void *operator new(size_t size); \
+ //static void *operator new[](size_t size);
+
+// String concatenation macros.
+#define NV_STRING_JOIN2(arg1, arg2) NV_DO_STRING_JOIN2(arg1, arg2)
+#define NV_DO_STRING_JOIN2(arg1, arg2) arg1 ## arg2
+#define NV_STRING_JOIN3(arg1, arg2, arg3) NV_DO_STRING_JOIN3(arg1, arg2, arg3)
+#define NV_DO_STRING_JOIN3(arg1, arg2, arg3) arg1 ## arg2 ## arg3
+#define NV_STRING2(x) #x
+#define NV_STRING(x) NV_STRING2(x)
+
+#if NV_CC_MSVC
+#define NV_MULTI_LINE_MACRO_BEGIN do {
+#define NV_MULTI_LINE_MACRO_END \
+ __pragma(warning(push)) \
+ __pragma(warning(disable:4127)) \
+ } while(false) \
+ __pragma(warning(pop))
+#else
+#define NV_MULTI_LINE_MACRO_BEGIN do {
+#define NV_MULTI_LINE_MACRO_END } while(false)
+#endif
+
+#if NV_CC_CPP11
+#define nvStaticCheck(x) static_assert((x), "Static assert "#x" failed")
+#else
+#define nvStaticCheck(x) typedef char NV_STRING_JOIN2(__static_assert_,__LINE__)[(x)]
+#endif
+#define NV_COMPILER_CHECK(x) nvStaticCheck(x) // I like this name best.
+
+// Make sure type definitions are fine.
+NV_COMPILER_CHECK(sizeof(int8) == 1);
+NV_COMPILER_CHECK(sizeof(uint8) == 1);
+NV_COMPILER_CHECK(sizeof(int16) == 2);
+NV_COMPILER_CHECK(sizeof(uint16) == 2);
+NV_COMPILER_CHECK(sizeof(int32) == 4);
+NV_COMPILER_CHECK(sizeof(uint32) == 4);
+NV_COMPILER_CHECK(sizeof(int32) == 4);
+NV_COMPILER_CHECK(sizeof(uint32) == 4);
+
+#include <stddef.h> // for size_t
+template <typename T, size_t N> char (&ArraySizeHelper(T (&array)[N]))[N];
+#define NV_ARRAY_SIZE(x) sizeof(ArraySizeHelper(x))
+//#define NV_ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
+
+#if 0 // Disabled in The Witness.
+#if NV_CC_MSVC
+#define NV_MESSAGE(x) message(__FILE__ "(" NV_STRING(__LINE__) ") : " x)
+#else
+#define NV_MESSAGE(x) message(x)
+#endif
+#else
+#define NV_MESSAGE(x)
+#endif
+
+
+// Startup initialization macro.
+#define NV_AT_STARTUP(some_code) \
+ namespace { \
+ static struct NV_STRING_JOIN2(AtStartup_, __LINE__) { \
+ NV_STRING_JOIN2(AtStartup_, __LINE__)() { some_code; } \
+ } \
+ NV_STRING_JOIN3(AtStartup_, __LINE__, Instance); \
+ }
+
+// Indicate the compiler that the parameter is not used to suppress compier warnings.
+#if NV_CC_MSVC
+#define NV_UNUSED(a) ((a)=(a))
+#else
+#define NV_UNUSED(a) _Pragma(NV_STRING(unused(a)))
+#endif
+
+// Null index. @@ Move this somewhere else... it's only used by nvmesh.
+//const unsigned int NIL = unsigned int(~0);
+#define NIL uint(~0)
+
+// Null pointer.
+#ifndef NULL
+#define NULL 0
+#endif
+
+// Platform includes
+#if NV_CC_MSVC
+# if NV_OS_WIN32
+# include "DefsVcWin32.h"
+# elif NV_OS_XBOX
+# include "DefsVcXBox.h"
+# elif NV_OS_DURANGO
+# include "DefsVcDurango.h"
+# else
+# error "MSVC: Platform not supported"
+# endif
+#elif NV_CC_GNUC
+# if NV_OS_LINUX
+# include "DefsGnucLinux.h"
+# elif NV_OS_DARWIN || NV_OS_FREEBSD || NV_OS_OPENBSD
+# include "DefsGnucDarwin.h"
+# elif NV_OS_ORBIS
+# include "DefsOrbis.h"
+# elif NV_OS_MINGW
+# include "DefsGnucWin32.h"
+# elif NV_OS_CYGWIN
+# error "GCC: Cygwin not supported"
+# else
+# error "GCC: Platform not supported"
+# endif
+#endif
+
+#endif // NV_CORE_H
diff --git a/thirdparty/thekla_atlas/nvcore/scanf.c b/thirdparty/thekla_atlas/nvcore/scanf.c
new file mode 100644
index 0000000000..bf9d293154
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvcore/scanf.c
@@ -0,0 +1,641 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * From: Id: vfscanf.c,v 1.13 1998/09/25 12:20:27 obrien Exp
+ * From: static char sccsid[] = "@(#)strtol.c 8.1 (Berkeley) 6/4/93";
+ * From: static char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93";
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#pragma warning(disable : 4244) // conversion from '*' to '*', possible loss of data
+#pragma warning(disable : 4018) // signed/unsigned mismatch
+#pragma warning(disable : 4267) // '=' : conversion from 'size_t' to 'int', possible loss of data
+
+#define strtoq _strtoi64
+#define strtouq _strtoui64
+#define bcopy(b1,b2,len) (memmove((b2), (b1), (len)), (void) 0)
+
+typedef int long long quad_t;
+typedef unsigned long long u_quad_t;
+typedef unsigned char u_char;
+
+#define BUF 32 /* Maximum length of numeric string. */
+
+/*
+ * Flags used during conversion.
+ */
+#define LONG 0x01 /* l: long or double */
+#define SHORT 0x04 /* h: short */
+#define SUPPRESS 0x08 /* suppress assignment */
+#define POINTER 0x10 /* weird %p pointer (`fake hex') */
+#define NOSKIP 0x20 /* do not skip blanks */
+#define QUAD 0x400
+
+/*
+ * The following are used in numeric conversions only:
+ * SIGNOK, NDIGITS, DPTOK, and EXPOK are for floating point;
+ * SIGNOK, NDIGITS, PFXOK, and NZDIGITS are for integral.
+ */
+#define SIGNOK 0x40 /* +/- is (still) legal */
+#define NDIGITS 0x80 /* no digits detected */
+
+#define DPTOK 0x100 /* (float) decimal point is still legal */
+#define EXPOK 0x200 /* (float) exponent (e+3, etc) still legal */
+
+#define PFXOK 0x100 /* 0x prefix is (still) legal */
+#define NZDIGITS 0x200 /* no zero digits detected */
+
+/*
+ * Conversion types.
+ */
+#define CT_CHAR 0 /* %c conversion */
+#define CT_CCL 1 /* %[...] conversion */
+#define CT_STRING 2 /* %s conversion */
+#define CT_INT 3 /* integer, i.e., strtoq or strtouq */
+typedef u_quad_t (*ccfntype)(const char *, char **, int);
+
+static const u_char *__sccl(char *, const u_char *);
+
+int
+vsscanf(const char *inp, char const *fmt0, va_list ap)
+{
+ int inr;
+ const u_char *fmt = (const u_char *)fmt0;
+ int c; /* character from format, or conversion */
+ size_t width; /* field width, or 0 */
+ char *p; /* points into all kinds of strings */
+ int n; /* handy integer */
+ int flags; /* flags as defined above */
+ char *p0; /* saves original value of p when necessary */
+ int nassigned; /* number of fields assigned */
+ int nconversions; /* number of conversions */
+ int nread; /* number of characters consumed from fp */
+ int base; /* base argument to strtoq/strtouq */
+ ccfntype ccfn; /* conversion function (strtoq/strtouq) */
+ char ccltab[256]; /* character class table for %[...] */
+ char buf[BUF]; /* buffer for numeric conversions */
+
+ /* `basefix' is used to avoid `if' tests in the integer scanner */
+ static short basefix[17] =
+ { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
+
+ inr = strlen(inp);
+
+ nassigned = 0;
+ nconversions = 0;
+ nread = 0;
+ base = 0; /* XXX just to keep gcc happy */
+ ccfn = NULL; /* XXX just to keep gcc happy */
+ for (;;) {
+ c = *fmt++;
+ if (c == 0)
+ return (nassigned);
+ if (isspace(c)) {
+ while (inr > 0 && isspace(*inp))
+ nread++, inr--, inp++;
+ continue;
+ }
+ if (c != '%')
+ goto literal;
+ width = 0;
+ flags = 0;
+ /*
+ * switch on the format. continue if done;
+ * break once format type is derived.
+ */
+again: c = *fmt++;
+ switch (c) {
+ case '%':
+literal:
+ if (inr <= 0)
+ goto input_failure;
+ if (*inp != c)
+ goto match_failure;
+ inr--, inp++;
+ nread++;
+ continue;
+
+ case '*':
+ flags |= SUPPRESS;
+ goto again;
+ case 'l':
+ flags |= LONG;
+ goto again;
+ case 'q':
+ flags |= QUAD;
+ goto again;
+ case 'h':
+ flags |= SHORT;
+ goto again;
+
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ width = width * 10 + c - '0';
+ goto again;
+
+ /*
+ * Conversions.
+ *
+ */
+ case 'd':
+ c = CT_INT;
+ ccfn = (ccfntype)strtoq;
+ base = 10;
+ break;
+
+ case 'i':
+ c = CT_INT;
+ ccfn = (ccfntype)strtoq;
+ base = 0;
+ break;
+
+ case 'o':
+ c = CT_INT;
+ ccfn = strtouq;
+ base = 8;
+ break;
+
+ case 'u':
+ c = CT_INT;
+ ccfn = strtouq;
+ base = 10;
+ break;
+
+ case 'x':
+ flags |= PFXOK; /* enable 0x prefixing */
+ c = CT_INT;
+ ccfn = strtouq;
+ base = 16;
+ break;
+
+ case 's':
+ c = CT_STRING;
+ break;
+
+ case '[':
+ fmt = __sccl(ccltab, fmt);
+ flags |= NOSKIP;
+ c = CT_CCL;
+ break;
+
+ case 'c':
+ flags |= NOSKIP;
+ c = CT_CHAR;
+ break;
+
+ case 'p': /* pointer format is like hex */
+ flags |= POINTER | PFXOK;
+ c = CT_INT;
+ ccfn = strtouq;
+ base = 16;
+ break;
+
+ case 'n':
+ nconversions++;
+ if (flags & SUPPRESS) /* ??? */
+ continue;
+ if (flags & SHORT)
+ *va_arg(ap, short *) = nread;
+ else if (flags & LONG)
+ *va_arg(ap, long *) = nread;
+ else if (flags & QUAD)
+ *va_arg(ap, quad_t *) = nread;
+ else
+ *va_arg(ap, int *) = nread;
+ continue;
+ }
+
+ /*
+ * We have a conversion that requires input.
+ */
+ if (inr <= 0)
+ goto input_failure;
+
+ /*
+ * Consume leading white space, except for formats
+ * that suppress this.
+ */
+ if ((flags & NOSKIP) == 0) {
+ while (isspace(*inp)) {
+ nread++;
+ if (--inr > 0)
+ inp++;
+ else
+ goto input_failure;
+ }
+ /*
+ * Note that there is at least one character in
+ * the buffer, so conversions that do not set NOSKIP
+ * can no longer result in an input failure.
+ */
+ }
+
+ /*
+ * Do the conversion.
+ */
+ switch (c) {
+
+ case CT_CHAR:
+ /* scan arbitrary characters (sets NOSKIP) */
+ if (width == 0)
+ width = 1;
+ if (flags & SUPPRESS) {
+ size_t sum = 0;
+ for (;;) {
+ if ((n = inr) < width) {
+ sum += n;
+ width -= n;
+ inp += n;
+ if (sum == 0)
+ goto input_failure;
+ break;
+ } else {
+ sum += width;
+ inr -= width;
+ inp += width;
+ break;
+ }
+ }
+ nread += sum;
+ } else {
+ bcopy(inp, va_arg(ap, char *), width);
+ inr -= width;
+ inp += width;
+ nread += width;
+ nassigned++;
+ }
+ nconversions++;
+ break;
+
+ case CT_CCL:
+ /* scan a (nonempty) character class (sets NOSKIP) */
+ if (width == 0)
+ width = (size_t)~0; /* `infinity' */
+ /* take only those things in the class */
+ if (flags & SUPPRESS) {
+ n = 0;
+ while (ccltab[(unsigned char)*inp]) {
+ n++, inr--, inp++;
+ if (--width == 0)
+ break;
+ if (inr <= 0) {
+ if (n == 0)
+ goto input_failure;
+ break;
+ }
+ }
+ if (n == 0)
+ goto match_failure;
+ } else {
+ p0 = p = va_arg(ap, char *);
+ while (ccltab[(unsigned char)*inp]) {
+ inr--;
+ *p++ = *inp++;
+ if (--width == 0)
+ break;
+ if (inr <= 0) {
+ if (p == p0)
+ goto input_failure;
+ break;
+ }
+ }
+ n = p - p0;
+ if (n == 0)
+ goto match_failure;
+ *p = 0;
+ nassigned++;
+ }
+ nread += n;
+ nconversions++;
+ break;
+
+ case CT_STRING:
+ /* like CCL, but zero-length string OK, & no NOSKIP */
+ if (width == 0)
+ width = (size_t)~0;
+ if (flags & SUPPRESS) {
+ n = 0;
+ while (!isspace(*inp)) {
+ n++, inr--, inp++;
+ if (--width == 0)
+ break;
+ if (inr <= 0)
+ break;
+ }
+ nread += n;
+ } else {
+ p0 = p = va_arg(ap, char *);
+ while (!isspace(*inp)) {
+ inr--;
+ *p++ = *inp++;
+ if (--width == 0)
+ break;
+ if (inr <= 0)
+ break;
+ }
+ *p = 0;
+ nread += p - p0;
+ nassigned++;
+ }
+ nconversions++;
+ continue;
+
+ case CT_INT:
+ /* scan an integer as if by strtoq/strtouq */
+#ifdef hardway
+ if (width == 0 || width > sizeof(buf) - 1)
+ width = sizeof(buf) - 1;
+#else
+ /* size_t is unsigned, hence this optimisation */
+ if (--width > sizeof(buf) - 2)
+ width = sizeof(buf) - 2;
+ width++;
+#endif
+ flags |= SIGNOK | NDIGITS | NZDIGITS;
+ for (p = buf; width; width--) {
+ c = *inp;
+ /*
+ * Switch on the character; `goto ok'
+ * if we accept it as a part of number.
+ */
+ switch (c) {
+
+ /*
+ * The digit 0 is always legal, but is
+ * special. For %i conversions, if no
+ * digits (zero or nonzero) have been
+ * scanned (only signs), we will have
+ * base==0. In that case, we should set
+ * it to 8 and enable 0x prefixing.
+ * Also, if we have not scanned zero digits
+ * before this, do not turn off prefixing
+ * (someone else will turn it off if we
+ * have scanned any nonzero digits).
+ */
+ case '0':
+ if (base == 0) {
+ base = 8;
+ flags |= PFXOK;
+ }
+ if (flags & NZDIGITS)
+ flags &= ~(SIGNOK|NZDIGITS|NDIGITS);
+ else
+ flags &= ~(SIGNOK|PFXOK|NDIGITS);
+ goto ok;
+
+ /* 1 through 7 always legal */
+ case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ base = basefix[base];
+ flags &= ~(SIGNOK | PFXOK | NDIGITS);
+ goto ok;
+
+ /* digits 8 and 9 ok iff decimal or hex */
+ case '8': case '9':
+ base = basefix[base];
+ if (base <= 8)
+ break; /* not legal here */
+ flags &= ~(SIGNOK | PFXOK | NDIGITS);
+ goto ok;
+
+ /* letters ok iff hex */
+ case 'A': case 'B': case 'C':
+ case 'D': case 'E': case 'F':
+ case 'a': case 'b': case 'c':
+ case 'd': case 'e': case 'f':
+ /* no need to fix base here */
+ if (base <= 10)
+ break; /* not legal here */
+ flags &= ~(SIGNOK | PFXOK | NDIGITS);
+ goto ok;
+
+ /* sign ok only as first character */
+ case '+': case '-':
+ if (flags & SIGNOK) {
+ flags &= ~SIGNOK;
+ goto ok;
+ }
+ break;
+
+ /* x ok iff flag still set & 2nd char */
+ case 'x': case 'X':
+ if (flags & PFXOK && p == buf + 1) {
+ base = 16; /* if %i */
+ flags &= ~PFXOK;
+ goto ok;
+ }
+ break;
+ }
+
+ /*
+ * If we got here, c is not a legal character
+ * for a number. Stop accumulating digits.
+ */
+ break;
+ ok:
+ /*
+ * c is legal: store it and look at the next.
+ */
+ *p++ = c;
+ if (--inr > 0)
+ inp++;
+ else
+ break; /* end of input */
+ }
+ /*
+ * If we had only a sign, it is no good; push
+ * back the sign. If the number ends in `x',
+ * it was [sign] '0' 'x', so push back the x
+ * and treat it as [sign] '0'.
+ */
+ if (flags & NDIGITS) {
+ if (p > buf) {
+ inp--;
+ inr++;
+ }
+ goto match_failure;
+ }
+ c = ((u_char *)p)[-1];
+ if (c == 'x' || c == 'X') {
+ --p;
+ inp--;
+ inr++;
+ }
+ if ((flags & SUPPRESS) == 0) {
+ u_quad_t res;
+
+ *p = 0;
+ res = (*ccfn)(buf, (char **)NULL, base);
+ if (flags & POINTER)
+ *va_arg(ap, void **) =
+ (void *)(uintptr_t)res;
+ else if (flags & SHORT)
+ *va_arg(ap, short *) = res;
+ else if (flags & LONG)
+ *va_arg(ap, long *) = res;
+ else if (flags & QUAD)
+ *va_arg(ap, quad_t *) = res;
+ else
+ *va_arg(ap, int *) = res;
+ nassigned++;
+ }
+ nread += p - buf;
+ nconversions++;
+ break;
+
+ }
+ }
+input_failure:
+ return (nconversions != 0 ? nassigned : -1);
+match_failure:
+ return (nassigned);
+}
+
+
+/*
+ * Fill in the given table from the scanset at the given format
+ * (just after `['). Return a pointer to the character past the
+ * closing `]'. The table has a 1 wherever characters should be
+ * considered part of the scanset.
+ */
+static const u_char *
+__sccl(char *tab, const u_char *fmt)
+{
+ int c, n, v;
+
+ /* first `clear' the whole table */
+ c = *fmt++; /* first char hat => negated scanset */
+ if (c == '^') {
+ v = 1; /* default => accept */
+ c = *fmt++; /* get new first char */
+ } else
+ v = 0; /* default => reject */
+
+ /* XXX: Will not work if sizeof(tab*) > sizeof(char) */
+ for (n = 0; n < 256; n++)
+ tab[n] = v; /* memset(tab, v, 256) */
+
+ if (c == 0)
+ return (fmt - 1);/* format ended before closing ] */
+
+ /*
+ * Now set the entries corresponding to the actual scanset
+ * to the opposite of the above.
+ *
+ * The first character may be ']' (or '-') without being special;
+ * the last character may be '-'.
+ */
+ v = 1 - v;
+ for (;;) {
+ tab[c] = v; /* take character c */
+doswitch:
+ n = *fmt++; /* and examine the next */
+ switch (n) {
+
+ case 0: /* format ended too soon */
+ return (fmt - 1);
+
+ case '-':
+ /*
+ * A scanset of the form
+ * [01+-]
+ * is defined as `the digit 0, the digit 1,
+ * the character +, the character -', but
+ * the effect of a scanset such as
+ * [a-zA-Z0-9]
+ * is implementation defined. The V7 Unix
+ * scanf treats `a-z' as `the letters a through
+ * z', but treats `a-a' as `the letter a, the
+ * character -, and the letter a'.
+ *
+ * For compatibility, the `-' is not considerd
+ * to define a range if the character following
+ * it is either a close bracket (required by ANSI)
+ * or is not numerically greater than the character
+ * we just stored in the table (c).
+ */
+ n = *fmt;
+ if (n == ']' || n < c) {
+ c = '-';
+ break; /* resume the for(;;) */
+ }
+ fmt++;
+ /* fill in the range */
+ do {
+ tab[++c] = v;
+ } while (c < n);
+ c = n;
+ /*
+ * Alas, the V7 Unix scanf also treats formats
+ * such as [a-c-e] as `the letters a through e'.
+ * This too is permitted by the standard....
+ */
+ goto doswitch;
+ break;
+
+ case ']': /* end of scanset */
+ return (fmt);
+
+ default: /* just another character */
+ c = n;
+ break;
+ }
+ }
+ /* NOTREACHED */
+}
+
+/*
+int
+sscanf(const char *ibuf, const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = vsscanf(ibuf, fmt, ap);
+ va_end(ap);
+
+ return(ret);
+}
+*/
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/thirdparty/thekla_atlas/nvimage/BitMap.cpp b/thirdparty/thekla_atlas/nvimage/BitMap.cpp
new file mode 100644
index 0000000000..8cc49644ea
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvimage/BitMap.cpp
@@ -0,0 +1,27 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "BitMap.h"
+
+using namespace nv;
+
+void BitMap::resize(uint w, uint h, bool initValue)
+{
+ BitArray tmp(w*h);
+
+ if (initValue) tmp.setAll();
+ else tmp.clearAll();
+
+ // @@ Copying one bit at a time. This could be much faster.
+ for (uint y = 0; y < m_height; y++)
+ {
+ for (uint x = 0; x < m_width; x++)
+ {
+ //tmp.setBitAt(y*w + x, bitAt(x, y));
+ if (bitAt(x, y) != initValue) tmp.toggleBitAt(y*w + x);
+ }
+ }
+
+ swap(m_bitArray, tmp);
+ m_width = w;
+ m_height = h;
+}
diff --git a/thirdparty/thekla_atlas/nvimage/BitMap.h b/thirdparty/thekla_atlas/nvimage/BitMap.h
new file mode 100644
index 0000000000..a285321176
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvimage/BitMap.h
@@ -0,0 +1,87 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_IMAGE_BITMAP_H
+#define NV_IMAGE_BITMAP_H
+
+#include "nvimage.h"
+
+#include "nvcore/BitArray.h"
+
+namespace nv
+{
+ /// Bit map. This should probably be called BitImage.
+ class NVIMAGE_CLASS BitMap
+ {
+ public:
+ BitMap() : m_width(0), m_height(0) {}
+ BitMap(uint w, uint h) : m_width(w), m_height(h), m_bitArray(w*h) {}
+
+ uint width() const { return m_width; }
+ uint height() const { return m_height; }
+
+ void resize(uint w, uint h, bool initValue);
+
+ bool bitAt(uint x, uint y) const
+ {
+ nvDebugCheck(x < m_width && y < m_height);
+ return m_bitArray.bitAt(y * m_width + x);
+ }
+ bool bitAt(uint idx) const
+ {
+ return m_bitArray.bitAt(idx);
+ }
+
+ void setBitAt(uint x, uint y)
+ {
+ nvDebugCheck(x < m_width && y < m_height);
+ m_bitArray.setBitAt(y * m_width + x);
+ }
+ void setBitAt(uint idx)
+ {
+ m_bitArray.setBitAt(idx);
+ }
+
+ void clearBitAt(uint x, uint y)
+ {
+ nvDebugCheck(x < m_width && y < m_height);
+ m_bitArray.clearBitAt(y * m_width + x);
+ }
+ void clearBitAt(uint idx)
+ {
+ m_bitArray.clearBitAt(idx);
+ }
+
+ void clearAll()
+ {
+ m_bitArray.clearAll();
+ }
+
+ void setAll()
+ {
+ m_bitArray.setAll();
+ }
+
+ void toggleAll()
+ {
+ m_bitArray.toggleAll();
+ }
+
+ friend void swap(BitMap & a, BitMap & b)
+ {
+ nvCheck(a.m_width == b.m_width);
+ nvCheck(a.m_height == b.m_height);
+ swap(a.m_bitArray, b.m_bitArray);
+ }
+
+ private:
+
+ uint m_width;
+ uint m_height;
+ BitArray m_bitArray;
+
+ };
+
+} // nv namespace
+
+#endif // NV_IMAGE_BITMAP_H
diff --git a/thirdparty/thekla_atlas/nvimage/Image.cpp b/thirdparty/thekla_atlas/nvimage/Image.cpp
new file mode 100644
index 0000000000..8c0cbcf4e3
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvimage/Image.cpp
@@ -0,0 +1,210 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "Image.h"
+//#include "ImageIO.h"
+
+#include "nvmath/Color.h"
+
+#include "nvcore/Debug.h"
+#include "nvcore/Ptr.h"
+#include "nvcore/Utils.h" // swap
+#include "nvcore/Memory.h" // realloc, free
+
+#include <string.h> // memcpy
+
+
+using namespace nv;
+
+Image::Image() : m_width(0), m_height(0), m_format(Format_RGB), m_data(NULL)
+{
+}
+
+Image::Image(const Image & img) : m_data(NULL)
+{
+ allocate(img.m_width, img.m_height, img.m_depth);
+ m_format = img.m_format;
+ memcpy(m_data, img.m_data, sizeof(Color32) * m_width * m_height * m_depth);
+}
+
+Image::~Image()
+{
+ free();
+}
+
+const Image & Image::operator=(const Image & img)
+{
+ allocate(img.m_width, img.m_height, m_depth);
+ m_format = img.m_format;
+ memcpy(m_data, img.m_data, sizeof(Color32) * m_width * m_height * m_depth);
+ return *this;
+}
+
+
+void Image::allocate(uint w, uint h, uint d/*= 1*/)
+{
+ m_width = w;
+ m_height = h;
+ m_depth = d;
+ m_data = realloc<Color32>(m_data, w * h * d);
+}
+
+void Image::acquire(Color32 * data, uint w, uint h, uint d/*= 1*/)
+{
+ free();
+ m_width = w;
+ m_height = h;
+ m_depth = d;
+ m_data = data;
+}
+
+void Image::resize(uint w, uint h, uint d/*= 1*/) {
+
+ Image img;
+ img.allocate(w, h, d);
+
+ Color32 background(0,0,0,0);
+
+ // Copy image.
+ uint x, y, z;
+ for(z = 0; z < min(d, m_depth); z++) {
+ for(y = 0; y < min(h, m_height); y++) {
+ for(x = 0; x < min(w, m_width); x++) {
+ img.pixel(x, y, z) = pixel(x, y, z);
+ }
+ for(; x < w; x++) {
+ img.pixel(x, y, z) = background;
+ }
+ }
+ for(; y < h; y++) {
+ for(x = 0; x < w; x++) {
+ img.pixel(x, y, z) = background;
+ }
+ }
+ }
+ for(; z < d; z++) {
+ for(y = 0; y < h; y++) {
+ for(x = 0; x < w; x++) {
+ img.pixel(x, y, z) = background;
+ }
+ }
+ }
+
+ swap(m_width, img.m_width);
+ swap(m_height, img.m_height);
+ swap(m_depth, img.m_depth);
+ swap(m_format, img.m_format);
+ swap(m_data, img.m_data);
+}
+
+/*bool Image::load(const char * name)
+{
+ free();
+
+ AutoPtr<Image> img(ImageIO::load(name));
+ if (img == NULL) {
+ return false;
+ }
+
+ swap(m_width, img->m_width);
+ swap(m_height, img->m_height);
+ swap(m_depth, img->m_depth);
+ swap(m_format, img->m_format);
+ swap(m_data, img->m_data);
+
+ return true;
+}*/
+
+void Image::wrap(void * data, uint w, uint h, uint d)
+{
+ free();
+ m_data = (Color32 *)data;
+ m_width = w;
+ m_height = h;
+ m_depth = d;
+}
+
+void Image::unwrap()
+{
+ m_data = NULL;
+ m_width = 0;
+ m_height = 0;
+ m_depth = 0;
+}
+
+
+void Image::free()
+{
+ ::free(m_data);
+ m_data = NULL;
+}
+
+
+uint Image::width() const
+{
+ return m_width;
+}
+
+uint Image::height() const
+{
+ return m_height;
+}
+
+uint Image::depth() const
+{
+ return m_depth;
+}
+
+const Color32 * Image::scanline(uint h) const
+{
+ nvDebugCheck(h < m_height);
+ return m_data + h * m_width;
+}
+
+Color32 * Image::scanline(uint h)
+{
+ nvDebugCheck(h < m_height);
+ return m_data + h * m_width;
+}
+
+const Color32 * Image::pixels() const
+{
+ return m_data;
+}
+
+Color32 * Image::pixels()
+{
+ return m_data;
+}
+
+const Color32 & Image::pixel(uint idx) const
+{
+ nvDebugCheck(idx < m_width * m_height * m_depth);
+ return m_data[idx];
+}
+
+Color32 & Image::pixel(uint idx)
+{
+ nvDebugCheck(idx < m_width * m_height * m_depth);
+ return m_data[idx];
+}
+
+
+Image::Format Image::format() const
+{
+ return m_format;
+}
+
+void Image::setFormat(Image::Format f)
+{
+ m_format = f;
+}
+
+void Image::fill(Color32 c)
+{
+ const uint size = m_width * m_height * m_depth;
+ for (uint i = 0; i < size; ++i)
+ {
+ m_data[i] = c;
+ }
+}
+
diff --git a/thirdparty/thekla_atlas/nvimage/Image.h b/thirdparty/thekla_atlas/nvimage/Image.h
new file mode 100644
index 0000000000..4c5748cb00
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvimage/Image.h
@@ -0,0 +1,89 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_IMAGE_IMAGE_H
+#define NV_IMAGE_IMAGE_H
+
+#include "nvimage.h"
+#include "nvcore/Debug.h"
+
+namespace nv
+{
+ class Color32;
+
+ /// 32 bit RGBA image.
+ class NVIMAGE_CLASS Image
+ {
+ public:
+
+ enum Format
+ {
+ Format_RGB,
+ Format_ARGB,
+ };
+
+ Image();
+ Image(const Image & img);
+ ~Image();
+
+ const Image & operator=(const Image & img);
+
+
+ void allocate(uint w, uint h, uint d = 1);
+ void acquire(Color32 * data, uint w, uint h, uint d = 1);
+ //bool load(const char * name);
+
+ void resize(uint w, uint h, uint d = 1);
+
+ void wrap(void * data, uint w, uint h, uint d = 1);
+ void unwrap();
+
+ uint width() const;
+ uint height() const;
+ uint depth() const;
+
+ const Color32 * scanline(uint h) const;
+ Color32 * scanline(uint h);
+
+ const Color32 * pixels() const;
+ Color32 * pixels();
+
+ const Color32 & pixel(uint idx) const;
+ Color32 & pixel(uint idx);
+
+ const Color32 & pixel(uint x, uint y, uint z = 0) const;
+ Color32 & pixel(uint x, uint y, uint z = 0);
+
+ Format format() const;
+ void setFormat(Format f);
+
+ void fill(Color32 c);
+
+ private:
+ void free();
+
+ private:
+ uint m_width;
+ uint m_height;
+ uint m_depth;
+ Format m_format;
+ Color32 * m_data;
+ };
+
+
+ inline const Color32 & Image::pixel(uint x, uint y, uint z) const
+ {
+ nvDebugCheck(x < m_width && y < m_height && z < m_depth);
+ return pixel((z * m_height + y) * m_width + x);
+ }
+
+ inline Color32 & Image::pixel(uint x, uint y, uint z)
+ {
+ nvDebugCheck(x < m_width && y < m_height && z < m_depth);
+ return pixel((z * m_height + y) * m_width + x);
+ }
+
+} // nv namespace
+
+
+#endif // NV_IMAGE_IMAGE_H
diff --git a/thirdparty/thekla_atlas/nvimage/nvimage.h b/thirdparty/thekla_atlas/nvimage/nvimage.h
new file mode 100644
index 0000000000..5c89bd4726
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvimage/nvimage.h
@@ -0,0 +1,48 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_IMAGE_H
+#define NV_IMAGE_H
+
+#include "nvcore/nvcore.h"
+#include "nvcore/Debug.h" // nvDebugCheck
+#include "nvcore/Utils.h" // isPowerOfTwo
+
+// Function linkage
+#if NVIMAGE_SHARED
+#ifdef NVIMAGE_EXPORTS
+#define NVIMAGE_API DLL_EXPORT
+#define NVIMAGE_CLASS DLL_EXPORT_CLASS
+#else
+#define NVIMAGE_API DLL_IMPORT
+#define NVIMAGE_CLASS DLL_IMPORT
+#endif
+#else
+#define NVIMAGE_API
+#define NVIMAGE_CLASS
+#endif
+
+
+namespace nv {
+
+ // Some utility functions:
+
+ inline uint computeBitPitch(uint w, uint bitsize, uint alignmentInBits)
+ {
+ nvDebugCheck(isPowerOfTwo(alignmentInBits));
+
+ return ((w * bitsize + alignmentInBits - 1) / alignmentInBits) * alignmentInBits;
+ }
+
+ inline uint computeBytePitch(uint w, uint bitsize, uint alignmentInBytes)
+ {
+ uint pitch = computeBitPitch(w, bitsize, 8*alignmentInBytes);
+ nvDebugCheck((pitch & 7) == 0);
+
+ return (pitch + 7) / 8;
+ }
+
+
+} // nv namespace
+
+#endif // NV_IMAGE_H
diff --git a/thirdparty/thekla_atlas/nvmath/Basis.cpp b/thirdparty/thekla_atlas/nvmath/Basis.cpp
new file mode 100644
index 0000000000..0824179633
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Basis.cpp
@@ -0,0 +1,270 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "Basis.h"
+
+using namespace nv;
+
+
+/// Normalize basis vectors.
+void Basis::normalize(float epsilon /*= NV_EPSILON*/)
+{
+ normal = ::normalizeSafe(normal, Vector3(0.0f), epsilon);
+ tangent = ::normalizeSafe(tangent, Vector3(0.0f), epsilon);
+ bitangent = ::normalizeSafe(bitangent, Vector3(0.0f), epsilon);
+}
+
+
+/// Gram-Schmidt orthogonalization.
+/// @note Works only if the vectors are close to orthogonal.
+void Basis::orthonormalize(float epsilon /*= NV_EPSILON*/)
+{
+ // N' = |N|
+ // T' = |T - (N' dot T) N'|
+ // B' = |B - (N' dot B) N' - (T' dot B) T'|
+
+ normal = ::normalize(normal, epsilon);
+
+ tangent -= normal * dot(normal, tangent);
+ tangent = ::normalize(tangent, epsilon);
+
+ bitangent -= normal * dot(normal, bitangent);
+ bitangent -= tangent * dot(tangent, bitangent);
+ bitangent = ::normalize(bitangent, epsilon);
+}
+
+
+
+
+/// Robust orthonormalization.
+/// Returns an orthonormal basis even when the original is degenerate.
+void Basis::robustOrthonormalize(float epsilon /*= NV_EPSILON*/)
+{
+ // Normalize all vectors.
+ normalize(epsilon);
+
+ if (lengthSquared(normal) < epsilon*epsilon)
+ {
+ // Build normal from tangent and bitangent.
+ normal = cross(tangent, bitangent);
+
+ if (lengthSquared(normal) < epsilon*epsilon)
+ {
+ // Arbitrary basis.
+ tangent = Vector3(1, 0, 0);
+ bitangent = Vector3(0, 1, 0);
+ normal = Vector3(0, 0, 1);
+ return;
+ }
+
+ normal = nv::normalize(normal, epsilon);
+ }
+
+ // Project tangents to normal plane.
+ tangent -= normal * dot(normal, tangent);
+ bitangent -= normal * dot(normal, bitangent);
+
+ if (lengthSquared(tangent) < epsilon*epsilon)
+ {
+ if (lengthSquared(bitangent) < epsilon*epsilon)
+ {
+ // Arbitrary basis.
+ buildFrameForDirection(normal);
+ }
+ else
+ {
+ // Build tangent from bitangent.
+ bitangent = nv::normalize(bitangent, epsilon);
+
+ tangent = cross(bitangent, normal);
+ nvDebugCheck(isNormalized(tangent, epsilon));
+ }
+ }
+ else
+ {
+ tangent = nv::normalize(tangent, epsilon);
+#if 0
+ bitangent -= tangent * dot(tangent, bitangent);
+
+ if (lengthSquared(bitangent) < epsilon*epsilon)
+ {
+ bitangent = cross(tangent, normal);
+ nvDebugCheck(isNormalized(bitangent, epsilon));
+ }
+ else
+ {
+ bitangent = nv::normalize(bitangent, epsilon);
+ }
+#else
+ if (lengthSquared(bitangent) < epsilon*epsilon)
+ {
+ // Build bitangent from tangent.
+ bitangent = cross(tangent, normal);
+ nvDebugCheck(isNormalized(bitangent, epsilon));
+ }
+ else
+ {
+ bitangent = nv::normalize(bitangent, epsilon);
+
+ // At this point tangent and bitangent are orthogonal to normal, but we don't know whether their orientation.
+
+ Vector3 bisector;
+ if (lengthSquared(tangent + bitangent) < epsilon*epsilon)
+ {
+ bisector = tangent;
+ }
+ else
+ {
+ bisector = nv::normalize(tangent + bitangent);
+ }
+ Vector3 axis = nv::normalize(cross(bisector, normal));
+
+ //nvDebugCheck(isNormalized(axis, epsilon));
+ nvDebugCheck(equal(dot(axis, tangent), -dot(axis, bitangent), epsilon));
+
+ if (dot(axis, tangent) > 0)
+ {
+ tangent = bisector + axis;
+ bitangent = bisector - axis;
+ }
+ else
+ {
+ tangent = bisector - axis;
+ bitangent = bisector + axis;
+ }
+
+ // Make sure the resulting tangents are still perpendicular to the normal.
+ tangent -= normal * dot(normal, tangent);
+ bitangent -= normal * dot(normal, bitangent);
+
+ // Double check.
+ nvDebugCheck(equal(dot(normal, tangent), 0.0f, epsilon));
+ nvDebugCheck(equal(dot(normal, bitangent), 0.0f, epsilon));
+
+ // Normalize.
+ tangent = nv::normalize(tangent);
+ bitangent = nv::normalize(bitangent);
+
+ // If tangent and bitangent are not orthogonal, then derive bitangent from tangent, just in case...
+ if (!equal(dot(tangent, bitangent), 0.0f, epsilon)) {
+ bitangent = cross(tangent, normal);
+ bitangent = nv::normalize(bitangent);
+ }
+ }
+#endif
+ }
+
+ /*// Check vector lengths.
+ if (!isNormalized(normal, epsilon))
+ {
+ nvDebug("%f %f %f\n", normal.x, normal.y, normal.z);
+ nvDebug("%f %f %f\n", tangent.x, tangent.y, tangent.z);
+ nvDebug("%f %f %f\n", bitangent.x, bitangent.y, bitangent.z);
+ }*/
+
+ nvDebugCheck(isNormalized(normal, epsilon));
+ nvDebugCheck(isNormalized(tangent, epsilon));
+ nvDebugCheck(isNormalized(bitangent, epsilon));
+
+ // Check vector angles.
+ nvDebugCheck(equal(dot(normal, tangent), 0.0f, epsilon));
+ nvDebugCheck(equal(dot(normal, bitangent), 0.0f, epsilon));
+ nvDebugCheck(equal(dot(tangent, bitangent), 0.0f, epsilon));
+
+ // Check vector orientation.
+ const float det = dot(cross(normal, tangent), bitangent);
+ nvDebugCheck(equal(det, 1.0f, epsilon) || equal(det, -1.0f, epsilon));
+}
+
+
+/// Build an arbitrary frame for the given direction.
+void Basis::buildFrameForDirection(Vector3::Arg d, float angle/*= 0*/)
+{
+ nvCheck(isNormalized(d));
+ normal = d;
+
+ // Choose minimum axis.
+ if (fabsf(normal.x) < fabsf(normal.y) && fabsf(normal.x) < fabsf(normal.z))
+ {
+ tangent = Vector3(1, 0, 0);
+ }
+ else if (fabsf(normal.y) < fabsf(normal.z))
+ {
+ tangent = Vector3(0, 1, 0);
+ }
+ else
+ {
+ tangent = Vector3(0, 0, 1);
+ }
+
+ // Ortogonalize
+ tangent -= normal * dot(normal, tangent);
+ tangent = ::normalize(tangent);
+
+ bitangent = cross(normal, tangent);
+
+ // Rotate frame around normal according to angle.
+ if (angle != 0.0f) {
+ float c = cosf(angle);
+ float s = sinf(angle);
+ Vector3 tmp = c * tangent - s * bitangent;
+ bitangent = s * tangent + c * bitangent;
+ tangent = tmp;
+ }
+}
+
+bool Basis::isValid() const
+{
+ if (equal(normal, Vector3(0.0f))) return false;
+ if (equal(tangent, Vector3(0.0f))) return false;
+ if (equal(bitangent, Vector3(0.0f))) return false;
+
+ if (equal(determinant(), 0.0f)) return false;
+
+ return true;
+}
+
+
+/// Transform by this basis. (From this basis to object space).
+Vector3 Basis::transform(Vector3::Arg v) const
+{
+ Vector3 o = tangent * v.x;
+ o += bitangent * v.y;
+ o += normal * v.z;
+ return o;
+}
+
+/// Transform by the transpose. (From object space to this basis).
+Vector3 Basis::transformT(Vector3::Arg v)
+{
+ return Vector3(dot(tangent, v), dot(bitangent, v), dot(normal, v));
+}
+
+/// Transform by the inverse. (From object space to this basis).
+/// @note Uses Cramer's rule so the inverse is not accurate if the basis is ill-conditioned.
+Vector3 Basis::transformI(Vector3::Arg v) const
+{
+ const float det = determinant();
+ nvDebugCheck(!equal(det, 0.0f, 0.0f));
+
+ const float idet = 1.0f / det;
+
+ // Rows of the inverse matrix.
+ Vector3 r0(
+ (bitangent.y * normal.z - bitangent.z * normal.y),
+ -(bitangent.x * normal.z - bitangent.z * normal.x),
+ (bitangent.x * normal.y - bitangent.y * normal.x));
+
+ Vector3 r1(
+ -(tangent.y * normal.z - tangent.z * normal.y),
+ (tangent.x * normal.z - tangent.z * normal.x),
+ -(tangent.x * normal.y - tangent.y * normal.x));
+
+ Vector3 r2(
+ (tangent.y * bitangent.z - tangent.z * bitangent.y),
+ -(tangent.x * bitangent.z - tangent.z * bitangent.x),
+ (tangent.x * bitangent.y - tangent.y * bitangent.x));
+
+ return Vector3(dot(v, r0), dot(v, r1), dot(v, r2)) * idet;
+}
+
+
diff --git a/thirdparty/thekla_atlas/nvmath/Basis.h b/thirdparty/thekla_atlas/nvmath/Basis.h
new file mode 100644
index 0000000000..e8146afdbe
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Basis.h
@@ -0,0 +1,82 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MATH_BASIS_H
+#define NV_MATH_BASIS_H
+
+#include "nvmath.h"
+#include "Vector.inl"
+#include "Matrix.h"
+
+namespace nv
+{
+
+ /// Basis class to compute tangent space basis, ortogonalizations and to
+ /// transform vectors from one space to another.
+ class Basis
+ {
+ public:
+
+ /// Create a null basis.
+ Basis() : tangent(0, 0, 0), bitangent(0, 0, 0), normal(0, 0, 0) {}
+
+ /// Create a basis given three vectors.
+ Basis(Vector3::Arg n, Vector3::Arg t, Vector3::Arg b) : tangent(t), bitangent(b), normal(n) {}
+
+ /// Create a basis with the given tangent vectors and the handness.
+ Basis(Vector3::Arg n, Vector3::Arg t, float sign)
+ {
+ build(n, t, sign);
+ }
+
+ NVMATH_API void normalize(float epsilon = NV_EPSILON);
+ NVMATH_API void orthonormalize(float epsilon = NV_EPSILON);
+ NVMATH_API void robustOrthonormalize(float epsilon = NV_EPSILON);
+ NVMATH_API void buildFrameForDirection(Vector3::Arg d, float angle = 0);
+
+ /// Calculate the determinant [ F G N ] to obtain the handness of the basis.
+ float handness() const
+ {
+ return determinant() > 0.0f ? 1.0f : -1.0f;
+ }
+
+ /// Build a basis from 2 vectors and a handness flag.
+ void build(Vector3::Arg n, Vector3::Arg t, float sign)
+ {
+ normal = n;
+ tangent = t;
+ bitangent = sign * cross(t, n);
+ }
+
+ /// Compute the determinant of this basis.
+ float determinant() const
+ {
+ return
+ tangent.x * bitangent.y * normal.z - tangent.z * bitangent.y * normal.x +
+ tangent.y * bitangent.z * normal.x - tangent.y * bitangent.x * normal.z +
+ tangent.z * bitangent.x * normal.y - tangent.x * bitangent.z * normal.y;
+ }
+
+ bool isValid() const;
+
+ // Get transform matrix for this basis.
+ NVMATH_API Matrix matrix() const;
+
+ // Transform by this basis. (From this basis to object space).
+ NVMATH_API Vector3 transform(Vector3::Arg v) const;
+
+ // Transform by the transpose. (From object space to this basis).
+ NVMATH_API Vector3 transformT(Vector3::Arg v);
+
+ // Transform by the inverse. (From object space to this basis).
+ NVMATH_API Vector3 transformI(Vector3::Arg v) const;
+
+
+ Vector3 tangent;
+ Vector3 bitangent;
+ Vector3 normal;
+ };
+
+} // nv namespace
+
+#endif // NV_MATH_BASIS_H
diff --git a/thirdparty/thekla_atlas/nvmath/Box.cpp b/thirdparty/thekla_atlas/nvmath/Box.cpp
new file mode 100644
index 0000000000..8f2014a077
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Box.cpp
@@ -0,0 +1,119 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "Box.h"
+#include "Box.inl"
+#include "Sphere.h"
+
+using namespace nv;
+
+
+
+
+// Clip the given segment against this box.
+bool Box::clipSegment(const Vector3 & origin, const Vector3 & dir, float * t_near, float * t_far) const {
+
+ // Avoid aliasing.
+ float tnear = *t_near;
+ float tfar = *t_far;
+
+ // clip ray segment to box
+ for (int i = 0; i < 3; i++)
+ {
+ const float pos = origin.component[i] + tfar * dir.component[i];
+ const float dt = tfar - tnear;
+
+ if (dir.component[i] < 0) {
+
+ // clip end point
+ if (pos < minCorner.component[i]) {
+ tfar = tnear + dt * (origin.component[i] - minCorner.component[i]) / (origin.component[i] - pos);
+ }
+
+ // clip start point
+ if (origin.component[i] > maxCorner.component[i]) {
+ tnear = tnear + dt * (origin.component[i] - maxCorner.component[i]) / (tfar * dir.component[i]);
+ }
+ }
+ else {
+
+ // clip end point
+ if (pos > maxCorner.component[i]) {
+ tfar = tnear + dt * (maxCorner.component[i] - origin.component[i]) / (pos - origin.component[i]);
+ }
+
+ // clip start point
+ if (origin.component[i] < minCorner.component[i]) {
+ tnear = tnear + dt * (minCorner.component[i] - origin.component[i]) / (tfar * dir.component[i]);
+ }
+ }
+
+ if (tnear > tfar) {
+ // Clipped away.
+ return false;
+ }
+ }
+
+ // Return result.
+ *t_near = tnear;
+ *t_far = tfar;
+ return true;
+}
+
+
+float nv::distanceSquared(const Box &box, const Vector3 &point) {
+ Vector3 closest;
+
+ if (point.x < box.minCorner.x) closest.x = box.minCorner.x;
+ else if (point.x > box.maxCorner.x) closest.x = box.maxCorner.x;
+ else closest.x = point.x;
+
+ if (point.y < box.minCorner.y) closest.y = box.minCorner.y;
+ else if (point.y > box.maxCorner.y) closest.y = box.maxCorner.y;
+ else closest.y = point.y;
+
+ if (point.z < box.minCorner.z) closest.z = box.minCorner.z;
+ else if (point.z > box.maxCorner.z) closest.z = box.maxCorner.z;
+ else closest.z = point.z;
+
+ return lengthSquared(point - closest);
+}
+
+bool nv::overlap(const Box &box, const Sphere &sphere) {
+ return distanceSquared(box, sphere.center) < sphere.radius * sphere.radius;
+}
+
+
+bool nv::intersect(const Box & box, const Vector3 & p, const Vector3 & id, float * t /*= NULL*/) {
+ // Precompute these in ray structure?
+ int sdx = (id.x < 0);
+ int sdy = (id.y < 0);
+ int sdz = (id.z < 0);
+
+ float tmin = (box.corner( sdx).x - p.x) * id.x;
+ float tmax = (box.corner(1-sdx).x - p.x) * id.x;
+ float tymin = (box.corner( sdy).y - p.y) * id.y;
+ float tymax = (box.corner(1-sdy).y - p.y) * id.y;
+
+ if ((tmin > tymax) || (tymin > tmax))
+ return false;
+
+ if (tymin > tmin) tmin = tymin;
+ if (tymax < tmax) tmax = tymax;
+
+ float tzmin = (box.corner( sdz).z - p.z) * id.z;
+ float tzmax = (box.corner(1-sdz).z - p.z) * id.z;
+
+ if ((tmin > tzmax) || (tzmin > tmax))
+ return false;
+
+ if (tzmin > tmin) tmin = tzmin;
+ if (tzmax < tmax) tmax = tzmax;
+
+ if (tmax < 0)
+ return false;
+
+ if (t != NULL) *t = tmin;
+
+ return true;
+}
+
diff --git a/thirdparty/thekla_atlas/nvmath/Box.h b/thirdparty/thekla_atlas/nvmath/Box.h
new file mode 100644
index 0000000000..19b5f2a3a5
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Box.h
@@ -0,0 +1,103 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_BOX_H
+#define NV_MATH_BOX_H
+
+#include "Vector.h"
+
+#include <float.h> // FLT_MAX
+
+namespace nv
+{
+ class Vector;
+ class Stream;
+ class Sphere;
+
+ // Axis Aligned Bounding Box.
+ class Box
+ {
+ public:
+
+ inline Box() {}
+ inline Box(const Box & b) : minCorner(b.minCorner), maxCorner(b.maxCorner) {}
+ inline Box(const Vector3 & mins, const Vector3 & maxs) : minCorner(mins), maxCorner(maxs) {}
+
+ Box & operator=(const Box & b);
+
+ operator const float * () const { return reinterpret_cast<const float *>(this); }
+
+ // Clear the bounds.
+ void clearBounds();
+
+ // min < max
+ bool isValid() const;
+
+ // Build a cube centered on center and with edge = 2*dist
+ void cube(const Vector3 & center, float dist);
+
+ // Build a box, given center and extents.
+ void setCenterExtents(const Vector3 & center, const Vector3 & extents);
+
+ // Get box center.
+ Vector3 center() const;
+
+ // Return extents of the box.
+ Vector3 extents() const;
+
+ // Return extents of the box.
+ float extents(uint axis) const;
+
+ // Add a point to this box.
+ void addPointToBounds(const Vector3 & p);
+
+ // Add a box to this box.
+ void addBoxToBounds(const Box & b);
+
+ // Add sphere to this box.
+ void addSphereToBounds(const Vector3 & p, float r);
+
+ // Translate box.
+ void translate(const Vector3 & v);
+
+ // Scale the box.
+ void scale(float s);
+
+ // Expand the box by a fixed amount.
+ void expand(float r);
+
+ // Get the area of the box.
+ float area() const;
+
+ // Get the volume of the box.
+ float volume() const;
+
+ // Return true if the box contains the given point.
+ bool contains(const Vector3 & p) const;
+
+ // Split the given box in 8 octants and assign the ith one to this box.
+ void setOctant(const Box & box, const Vector3 & center, int i);
+
+
+ // Clip the given segment against this box.
+ bool clipSegment(const Vector3 & origin, const Vector3 & dir, float * t_near, float * t_far) const;
+
+
+ friend Stream & operator<< (Stream & s, Box & box);
+
+ const Vector3 & corner(int i) const { return (&minCorner)[i]; }
+
+ Vector3 minCorner;
+ Vector3 maxCorner;
+ };
+
+ float distanceSquared(const Box &box, const Vector3 &point);
+ bool overlap(const Box &box, const Sphere &sphere);
+
+ // p is ray origin, id is inverse ray direction.
+ bool intersect(const Box & box, const Vector3 & p, const Vector3 & id, float * t);
+
+} // nv namespace
+
+
+#endif // NV_MATH_BOX_H
diff --git a/thirdparty/thekla_atlas/nvmath/Box.inl b/thirdparty/thekla_atlas/nvmath/Box.inl
new file mode 100644
index 0000000000..dcfa70ff96
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Box.inl
@@ -0,0 +1,154 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_BOX_INL
+#define NV_MATH_BOX_INL
+
+#include "Box.h"
+#include "Vector.inl"
+
+#include <float.h> // FLT_MAX
+
+namespace nv
+{
+ // Default ctor.
+ //inline Box::Box() { };
+
+ // Copy ctor.
+ //inline Box::Box(const Box & b) : minCorner(b.minCorner), maxCorner(b.maxCorner) { }
+
+ // Init ctor.
+ //inline Box::Box(const Vector3 & mins, const Vector3 & maxs) : minCorner(mins), maxCorner(maxs) { }
+
+ // Assignment operator.
+ inline Box & Box::operator=(const Box & b) { minCorner = b.minCorner; maxCorner = b.maxCorner; return *this; }
+
+ // Clear the bounds.
+ inline void Box::clearBounds()
+ {
+ minCorner.set(FLT_MAX, FLT_MAX, FLT_MAX);
+ maxCorner.set(-FLT_MAX, -FLT_MAX, -FLT_MAX);
+ }
+
+ // min < max
+ inline bool Box::isValid() const
+ {
+ return minCorner.x <= maxCorner.x && minCorner.y <= maxCorner.y && minCorner.z <= maxCorner.z;
+ }
+
+ // Build a cube centered on center and with edge = 2*dist
+ inline void Box::cube(const Vector3 & center, float dist)
+ {
+ setCenterExtents(center, Vector3(dist));
+ }
+
+ // Build a box, given center and extents.
+ inline void Box::setCenterExtents(const Vector3 & center, const Vector3 & extents)
+ {
+ minCorner = center - extents;
+ maxCorner = center + extents;
+ }
+
+ // Get box center.
+ inline Vector3 Box::center() const
+ {
+ return (minCorner + maxCorner) * 0.5f;
+ }
+
+ // Return extents of the box.
+ inline Vector3 Box::extents() const
+ {
+ return (maxCorner - minCorner) * 0.5f;
+ }
+
+ // Return extents of the box.
+ inline float Box::extents(uint axis) const
+ {
+ nvDebugCheck(axis < 3);
+ if (axis == 0) return (maxCorner.x - minCorner.x) * 0.5f;
+ if (axis == 1) return (maxCorner.y - minCorner.y) * 0.5f;
+ if (axis == 2) return (maxCorner.z - minCorner.z) * 0.5f;
+ nvUnreachable();
+ return 0.0f;
+ }
+
+ // Add a point to this box.
+ inline void Box::addPointToBounds(const Vector3 & p)
+ {
+ minCorner = min(minCorner, p);
+ maxCorner = max(maxCorner, p);
+ }
+
+ // Add a box to this box.
+ inline void Box::addBoxToBounds(const Box & b)
+ {
+ minCorner = min(minCorner, b.minCorner);
+ maxCorner = max(maxCorner, b.maxCorner);
+ }
+
+ // Add sphere to this box.
+ inline void Box::addSphereToBounds(const Vector3 & p, float r) {
+ minCorner = min(minCorner, p - Vector3(r));
+ maxCorner = min(maxCorner, p + Vector3(r));
+ }
+
+ // Translate box.
+ inline void Box::translate(const Vector3 & v)
+ {
+ minCorner += v;
+ maxCorner += v;
+ }
+
+ // Scale the box.
+ inline void Box::scale(float s)
+ {
+ minCorner *= s;
+ maxCorner *= s;
+ }
+
+ // Expand the box by a fixed amount.
+ inline void Box::expand(float r) {
+ minCorner -= Vector3(r,r,r);
+ maxCorner += Vector3(r,r,r);
+ }
+
+ // Get the area of the box.
+ inline float Box::area() const
+ {
+ const Vector3 d = extents();
+ return 8.0f * (d.x*d.y + d.x*d.z + d.y*d.z);
+ }
+
+ // Get the volume of the box.
+ inline float Box::volume() const
+ {
+ Vector3 d = extents();
+ return 8.0f * (d.x * d.y * d.z);
+ }
+
+ // Return true if the box contains the given point.
+ inline bool Box::contains(const Vector3 & p) const
+ {
+ return
+ minCorner.x < p.x && minCorner.y < p.y && minCorner.z < p.z &&
+ maxCorner.x > p.x && maxCorner.y > p.y && maxCorner.z > p.z;
+ }
+
+ // Split the given box in 8 octants and assign the ith one to this box.
+ inline void Box::setOctant(const Box & box, const Vector3 & center, int i)
+ {
+ minCorner = box.minCorner;
+ maxCorner = box.maxCorner;
+
+ if (i & 4) minCorner.x = center.x;
+ else maxCorner.x = center.x;
+ if (i & 2) minCorner.y = center.y;
+ else maxCorner.y = center.y;
+ if (i & 1) minCorner.z = center.z;
+ else maxCorner.z = center.z;
+ }
+
+} // nv namespace
+
+
+#endif // NV_MATH_BOX_INL
diff --git a/thirdparty/thekla_atlas/nvmath/Color.h b/thirdparty/thekla_atlas/nvmath/Color.h
new file mode 100644
index 0000000000..5cdc374bd9
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Color.h
@@ -0,0 +1,150 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_COLOR_H
+#define NV_MATH_COLOR_H
+
+#include "nvmath.h"
+
+namespace nv
+{
+
+ /// 64 bit color stored as BGRA.
+ class NVMATH_CLASS Color64
+ {
+ public:
+ Color64() { }
+ Color64(const Color64 & c) : u(c.u) { }
+ Color64(uint16 R, uint16 G, uint16 B, uint16 A) { setRGBA(R, G, B, A); }
+ explicit Color64(uint64 U) : u(U) { }
+
+ void setRGBA(uint16 R, uint16 G, uint16 B, uint16 A)
+ {
+ r = R;
+ g = G;
+ b = B;
+ a = A;
+ }
+
+ operator uint64 () const {
+ return u;
+ }
+
+ union {
+ struct {
+#if NV_LITTLE_ENDIAN
+ uint16 r, a, b, g;
+#else
+ uint16 a: 16;
+ uint16 r: 16;
+ uint16 g: 16;
+ uint16 b: 16;
+#endif
+ };
+ uint64 u;
+ };
+ };
+
+ /// 32 bit color stored as BGRA.
+ class NVMATH_CLASS Color32
+ {
+ public:
+ Color32() { }
+ Color32(const Color32 & c) : u(c.u) { }
+ Color32(uint8 R, uint8 G, uint8 B) { setRGBA(R, G, B, 0xFF); }
+ Color32(uint8 R, uint8 G, uint8 B, uint8 A) { setRGBA( R, G, B, A); }
+ //Color32(uint8 c[4]) { setRGBA(c[0], c[1], c[2], c[3]); }
+ //Color32(float R, float G, float B) { setRGBA(uint(R*255), uint(G*255), uint(B*255), 0xFF); }
+ //Color32(float R, float G, float B, float A) { setRGBA(uint(R*255), uint(G*255), uint(B*255), uint(A*255)); }
+ explicit Color32(uint32 U) : u(U) { }
+
+ void setRGBA(uint8 R, uint8 G, uint8 B, uint8 A)
+ {
+ r = R;
+ g = G;
+ b = B;
+ a = A;
+ }
+
+ void setBGRA(uint8 B, uint8 G, uint8 R, uint8 A = 0xFF)
+ {
+ r = R;
+ g = G;
+ b = B;
+ a = A;
+ }
+
+ operator uint32 () const {
+ return u;
+ }
+
+ union {
+ struct {
+#if NV_LITTLE_ENDIAN
+ uint8 b, g, r, a;
+#else
+ uint8 a: 8;
+ uint8 r: 8;
+ uint8 g: 8;
+ uint8 b: 8;
+#endif
+ };
+ uint8 component[4];
+ uint32 u;
+ };
+ };
+
+
+ /// 16 bit 565 BGR color.
+ class NVMATH_CLASS Color16
+ {
+ public:
+ Color16() { }
+ Color16(const Color16 & c) : u(c.u) { }
+ explicit Color16(uint16 U) : u(U) { }
+
+ union {
+ struct {
+#if NV_LITTLE_ENDIAN
+ uint16 b : 5;
+ uint16 g : 6;
+ uint16 r : 5;
+#else
+ uint16 r : 5;
+ uint16 g : 6;
+ uint16 b : 5;
+#endif
+ };
+ uint16 u;
+ };
+ };
+
+ /// 16 bit 4444 BGRA color.
+ class NVMATH_CLASS Color16_4444
+ {
+ public:
+ Color16_4444() { }
+ Color16_4444(const Color16_4444 & c) : u(c.u) { }
+ explicit Color16_4444(uint16 U) : u(U) { }
+
+ union {
+ struct {
+#if NV_LITTLE_ENDIAN
+ uint16 b : 4;
+ uint16 g : 4;
+ uint16 r : 4;
+ uint16 a : 4;
+#else
+ uint16 a : 4;
+ uint16 r : 4;
+ uint16 g : 4;
+ uint16 b : 4;
+#endif
+ };
+ uint16 u;
+ };
+ };
+
+} // nv namespace
+
+#endif // NV_MATH_COLOR_H
diff --git a/thirdparty/thekla_atlas/nvmath/ConvexHull.cpp b/thirdparty/thekla_atlas/nvmath/ConvexHull.cpp
new file mode 100644
index 0000000000..a4a95dace4
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/ConvexHull.cpp
@@ -0,0 +1,120 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "ConvexHull.h"
+
+#include "Vector.inl"
+
+#include "nvcore/RadixSort.h"
+#include "nvcore/Array.inl"
+
+using namespace nv;
+
+inline static float triangleArea(Vector2::Arg v1, Vector2::Arg v2, Vector2::Arg v3)
+{
+ return 0.5f * (v3.x * v1.y + v1.x * v2.y + v2.x * v3.y - v2.x * v1.y - v3.x * v2.y - v1.x * v3.y);
+}
+
+
+// Compute the convex hull using Graham Scan.
+void nv::convexHull(const Array<Vector2> & input, Array<Vector2> & output, float epsilon/*=0*/)
+{
+ const uint inputCount = input.count();
+
+ Array<float> coords;
+ coords.resize(inputCount);
+
+ for (uint i = 0; i < inputCount; i++) {
+ coords[i] = input[i].x;
+ }
+
+ RadixSort radix;
+ radix.sort(coords);
+
+ const uint * ranks = radix.ranks();
+
+ Array<Vector2> top(inputCount);
+ Array<Vector2> bottom(inputCount);
+
+ Vector2 P = input[ranks[0]];
+ Vector2 Q = input[ranks[inputCount-1]];
+
+ float topy = max(P.y, Q.y);
+ float boty = min(P.y, Q.y);
+
+ for (uint i = 0; i < inputCount; i++) {
+ Vector2 p = input[ranks[i]];
+ if (p.y >= boty) top.append(p);
+ }
+
+ for (uint i = 0; i < inputCount; i++) {
+ Vector2 p = input[ranks[inputCount-1-i]];
+ if (p.y <= topy) bottom.append(p);
+ }
+
+ // Filter top list.
+ output.clear();
+ output.append(top[0]);
+ output.append(top[1]);
+
+ for (uint i = 2; i < top.count(); ) {
+ Vector2 a = output[output.count()-2];
+ Vector2 b = output[output.count()-1];
+ Vector2 c = top[i];
+
+ float area = triangleArea(a, b, c);
+
+ if (area >= -epsilon) {
+ output.popBack();
+ }
+
+ if (area < -epsilon || output.count() == 1) {
+ output.append(c);
+ i++;
+ }
+ }
+
+ uint top_count = output.count();
+ output.append(bottom[1]);
+
+ // Filter bottom list.
+ for (uint i = 2; i < bottom.count(); ) {
+ Vector2 a = output[output.count()-2];
+ Vector2 b = output[output.count()-1];
+ Vector2 c = bottom[i];
+
+ float area = triangleArea(a, b, c);
+
+ if (area >= -epsilon) {
+ output.popBack();
+ }
+
+ if (area < -epsilon || output.count() == top_count) {
+ output.append(c);
+ i++;
+ }
+ }
+
+ // Remove duplicate element.
+ nvDebugCheck(output.front() == output.back());
+ output.popBack();
+}
+
+/*
+void testConvexHull() {
+
+ Array<Vector2> points;
+ points.append(Vector2(1.00, 1.00));
+ points.append(Vector2(0.00, 0.00));
+ points.append(Vector2(1.00, 1.00));
+ points.append(Vector2(1.00, -1.00));
+ points.append(Vector2(2.00, 5.00));
+ points.append(Vector2(-5.00, 3.00));
+ points.append(Vector2(-4.00, -3.00));
+ points.append(Vector2(7.00, -4.00));
+
+ Array<Vector2> hull;
+ convexHull(points, hull);
+
+}
+*/
+
diff --git a/thirdparty/thekla_atlas/nvmath/ConvexHull.h b/thirdparty/thekla_atlas/nvmath/ConvexHull.h
new file mode 100644
index 0000000000..6c2db5d73f
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/ConvexHull.h
@@ -0,0 +1,17 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MATH_CONVEXHULL_H
+#define NV_MATH_CONVEXHULL_H
+
+#include "nvmath.h"
+#include "nvcore/Array.h"
+
+namespace nv {
+ class Vector2;
+
+ void convexHull(const Array<Vector2> & input, Array<Vector2> & output, float epsilon = 0);
+
+} // namespace nv
+
+#endif // NV_MATH_CONVEXHULL_H
diff --git a/thirdparty/thekla_atlas/nvmath/Fitting.cpp b/thirdparty/thekla_atlas/nvmath/Fitting.cpp
new file mode 100644
index 0000000000..6cd5cb0f32
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Fitting.cpp
@@ -0,0 +1,1205 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "Fitting.h"
+#include "Vector.inl"
+#include "Plane.inl"
+
+#include "nvcore/Array.inl"
+#include "nvcore/Utils.h" // max, swap
+
+#include <float.h> // FLT_MAX
+//#include <vector>
+#include <string.h>
+
+using namespace nv;
+
+// @@ Move to EigenSolver.h
+
+// @@ We should be able to do something cheaper...
+static Vector3 estimatePrincipalComponent(const float * __restrict matrix)
+{
+ const Vector3 row0(matrix[0], matrix[1], matrix[2]);
+ const Vector3 row1(matrix[1], matrix[3], matrix[4]);
+ const Vector3 row2(matrix[2], matrix[4], matrix[5]);
+
+ float r0 = lengthSquared(row0);
+ float r1 = lengthSquared(row1);
+ float r2 = lengthSquared(row2);
+
+ if (r0 > r1 && r0 > r2) return row0;
+ if (r1 > r2) return row1;
+ return row2;
+}
+
+
+static inline Vector3 firstEigenVector_PowerMethod(const float *__restrict matrix)
+{
+ if (matrix[0] == 0 && matrix[3] == 0 && matrix[5] == 0)
+ {
+ return Vector3(0.0f);
+ }
+
+ Vector3 v = estimatePrincipalComponent(matrix);
+
+ const int NUM = 8;
+ for (int i = 0; i < NUM; i++)
+ {
+ float x = v.x * matrix[0] + v.y * matrix[1] + v.z * matrix[2];
+ float y = v.x * matrix[1] + v.y * matrix[3] + v.z * matrix[4];
+ float z = v.x * matrix[2] + v.y * matrix[4] + v.z * matrix[5];
+
+ float norm = max(max(x, y), z);
+
+ v = Vector3(x, y, z) / norm;
+ }
+
+ return v;
+}
+
+
+Vector3 nv::Fit::computeCentroid(int n, const Vector3 *__restrict points)
+{
+ Vector3 centroid(0.0f);
+
+ for (int i = 0; i < n; i++)
+ {
+ centroid += points[i];
+ }
+ centroid /= float(n);
+
+ return centroid;
+}
+
+Vector3 nv::Fit::computeCentroid(int n, const Vector3 *__restrict points, const float *__restrict weights, Vector3::Arg metric)
+{
+ Vector3 centroid(0.0f);
+ float total = 0.0f;
+
+ for (int i = 0; i < n; i++)
+ {
+ total += weights[i];
+ centroid += weights[i]*points[i];
+ }
+ centroid /= total;
+
+ return centroid;
+}
+
+Vector4 nv::Fit::computeCentroid(int n, const Vector4 *__restrict points)
+{
+ Vector4 centroid(0.0f);
+
+ for (int i = 0; i < n; i++)
+ {
+ centroid += points[i];
+ }
+ centroid /= float(n);
+
+ return centroid;
+}
+
+Vector4 nv::Fit::computeCentroid(int n, const Vector4 *__restrict points, const float *__restrict weights, Vector4::Arg metric)
+{
+ Vector4 centroid(0.0f);
+ float total = 0.0f;
+
+ for (int i = 0; i < n; i++)
+ {
+ total += weights[i];
+ centroid += weights[i]*points[i];
+ }
+ centroid /= total;
+
+ return centroid;
+}
+
+
+
+Vector3 nv::Fit::computeCovariance(int n, const Vector3 *__restrict points, float *__restrict covariance)
+{
+ // compute the centroid
+ Vector3 centroid = computeCentroid(n, points);
+
+ // compute covariance matrix
+ for (int i = 0; i < 6; i++)
+ {
+ covariance[i] = 0.0f;
+ }
+
+ for (int i = 0; i < n; i++)
+ {
+ Vector3 v = points[i] - centroid;
+
+ covariance[0] += v.x * v.x;
+ covariance[1] += v.x * v.y;
+ covariance[2] += v.x * v.z;
+ covariance[3] += v.y * v.y;
+ covariance[4] += v.y * v.z;
+ covariance[5] += v.z * v.z;
+ }
+
+ return centroid;
+}
+
+Vector3 nv::Fit::computeCovariance(int n, const Vector3 *__restrict points, const float *__restrict weights, Vector3::Arg metric, float *__restrict covariance)
+{
+ // compute the centroid
+ Vector3 centroid = computeCentroid(n, points, weights, metric);
+
+ // compute covariance matrix
+ for (int i = 0; i < 6; i++)
+ {
+ covariance[i] = 0.0f;
+ }
+
+ for (int i = 0; i < n; i++)
+ {
+ Vector3 a = (points[i] - centroid) * metric;
+ Vector3 b = weights[i]*a;
+
+ covariance[0] += a.x * b.x;
+ covariance[1] += a.x * b.y;
+ covariance[2] += a.x * b.z;
+ covariance[3] += a.y * b.y;
+ covariance[4] += a.y * b.z;
+ covariance[5] += a.z * b.z;
+ }
+
+ return centroid;
+}
+
+Vector4 nv::Fit::computeCovariance(int n, const Vector4 *__restrict points, float *__restrict covariance)
+{
+ // compute the centroid
+ Vector4 centroid = computeCentroid(n, points);
+
+ // compute covariance matrix
+ for (int i = 0; i < 10; i++)
+ {
+ covariance[i] = 0.0f;
+ }
+
+ for (int i = 0; i < n; i++)
+ {
+ Vector4 v = points[i] - centroid;
+
+ covariance[0] += v.x * v.x;
+ covariance[1] += v.x * v.y;
+ covariance[2] += v.x * v.z;
+ covariance[3] += v.x * v.w;
+
+ covariance[4] += v.y * v.y;
+ covariance[5] += v.y * v.z;
+ covariance[6] += v.y * v.w;
+
+ covariance[7] += v.z * v.z;
+ covariance[8] += v.z * v.w;
+
+ covariance[9] += v.w * v.w;
+ }
+
+ return centroid;
+}
+
+Vector4 nv::Fit::computeCovariance(int n, const Vector4 *__restrict points, const float *__restrict weights, Vector4::Arg metric, float *__restrict covariance)
+{
+ // compute the centroid
+ Vector4 centroid = computeCentroid(n, points, weights, metric);
+
+ // compute covariance matrix
+ for (int i = 0; i < 10; i++)
+ {
+ covariance[i] = 0.0f;
+ }
+
+ for (int i = 0; i < n; i++)
+ {
+ Vector4 a = (points[i] - centroid) * metric;
+ Vector4 b = weights[i]*a;
+
+ covariance[0] += a.x * b.x;
+ covariance[1] += a.x * b.y;
+ covariance[2] += a.x * b.z;
+ covariance[3] += a.x * b.w;
+
+ covariance[4] += a.y * b.y;
+ covariance[5] += a.y * b.z;
+ covariance[6] += a.y * b.w;
+
+ covariance[7] += a.z * b.z;
+ covariance[8] += a.z * b.w;
+
+ covariance[9] += a.w * b.w;
+ }
+
+ return centroid;
+}
+
+
+
+Vector3 nv::Fit::computePrincipalComponent_PowerMethod(int n, const Vector3 *__restrict points)
+{
+ float matrix[6];
+ computeCovariance(n, points, matrix);
+
+ return firstEigenVector_PowerMethod(matrix);
+}
+
+Vector3 nv::Fit::computePrincipalComponent_PowerMethod(int n, const Vector3 *__restrict points, const float *__restrict weights, Vector3::Arg metric)
+{
+ float matrix[6];
+ computeCovariance(n, points, weights, metric, matrix);
+
+ return firstEigenVector_PowerMethod(matrix);
+}
+
+
+
+static inline Vector3 firstEigenVector_EigenSolver3(const float *__restrict matrix)
+{
+ if (matrix[0] == 0 && matrix[3] == 0 && matrix[5] == 0)
+ {
+ return Vector3(0.0f);
+ }
+
+ float eigenValues[3];
+ Vector3 eigenVectors[3];
+ if (!nv::Fit::eigenSolveSymmetric3(matrix, eigenValues, eigenVectors))
+ {
+ return Vector3(0.0f);
+ }
+
+ return eigenVectors[0];
+}
+
+Vector3 nv::Fit::computePrincipalComponent_EigenSolver(int n, const Vector3 *__restrict points)
+{
+ float matrix[6];
+ computeCovariance(n, points, matrix);
+
+ return firstEigenVector_EigenSolver3(matrix);
+}
+
+Vector3 nv::Fit::computePrincipalComponent_EigenSolver(int n, const Vector3 *__restrict points, const float *__restrict weights, Vector3::Arg metric)
+{
+ float matrix[6];
+ computeCovariance(n, points, weights, metric, matrix);
+
+ return firstEigenVector_EigenSolver3(matrix);
+}
+
+
+
+static inline Vector4 firstEigenVector_EigenSolver4(const float *__restrict matrix)
+{
+ if (matrix[0] == 0 && matrix[4] == 0 && matrix[7] == 0&& matrix[9] == 0)
+ {
+ return Vector4(0.0f);
+ }
+
+ float eigenValues[4];
+ Vector4 eigenVectors[4];
+ if (!nv::Fit::eigenSolveSymmetric4(matrix, eigenValues, eigenVectors))
+ {
+ return Vector4(0.0f);
+ }
+
+ return eigenVectors[0];
+}
+
+Vector4 nv::Fit::computePrincipalComponent_EigenSolver(int n, const Vector4 *__restrict points)
+{
+ float matrix[10];
+ computeCovariance(n, points, matrix);
+
+ return firstEigenVector_EigenSolver4(matrix);
+}
+
+Vector4 nv::Fit::computePrincipalComponent_EigenSolver(int n, const Vector4 *__restrict points, const float *__restrict weights, Vector4::Arg metric)
+{
+ float matrix[10];
+ computeCovariance(n, points, weights, metric, matrix);
+
+ return firstEigenVector_EigenSolver4(matrix);
+}
+
+
+
+void ArvoSVD(int rows, int cols, float * Q, float * diag, float * R);
+
+Vector3 nv::Fit::computePrincipalComponent_SVD(int n, const Vector3 *__restrict points)
+{
+ // Store the points in an n x n matrix
+ Array<float> Q; Q.resize(n*n, 0.0f);
+ for (int i = 0; i < n; ++i)
+ {
+ Q[i*n+0] = points[i].x;
+ Q[i*n+1] = points[i].y;
+ Q[i*n+2] = points[i].z;
+ }
+
+ // Alloc space for the SVD outputs
+ Array<float> diag; diag.resize(n, 0.0f);
+ Array<float> R; R.resize(n*n, 0.0f);
+
+ ArvoSVD(n, n, &Q[0], &diag[0], &R[0]);
+
+ // Get the principal component
+ return Vector3(R[0], R[1], R[2]);
+}
+
+Vector4 nv::Fit::computePrincipalComponent_SVD(int n, const Vector4 *__restrict points)
+{
+ // Store the points in an n x n matrix
+ Array<float> Q; Q.resize(n*n, 0.0f);
+ for (int i = 0; i < n; ++i)
+ {
+ Q[i*n+0] = points[i].x;
+ Q[i*n+1] = points[i].y;
+ Q[i*n+2] = points[i].z;
+ Q[i*n+3] = points[i].w;
+ }
+
+ // Alloc space for the SVD outputs
+ Array<float> diag; diag.resize(n, 0.0f);
+ Array<float> R; R.resize(n*n, 0.0f);
+
+ ArvoSVD(n, n, &Q[0], &diag[0], &R[0]);
+
+ // Get the principal component
+ return Vector4(R[0], R[1], R[2], R[3]);
+}
+
+
+
+Plane nv::Fit::bestPlane(int n, const Vector3 *__restrict points)
+{
+ // compute the centroid and covariance
+ float matrix[6];
+ Vector3 centroid = computeCovariance(n, points, matrix);
+
+ if (matrix[0] == 0 && matrix[3] == 0 && matrix[5] == 0)
+ {
+ // If no plane defined, then return a horizontal plane.
+ return Plane(Vector3(0, 0, 1), centroid);
+ }
+
+ float eigenValues[3];
+ Vector3 eigenVectors[3];
+ if (!eigenSolveSymmetric3(matrix, eigenValues, eigenVectors)) {
+ // If no plane defined, then return a horizontal plane.
+ return Plane(Vector3(0, 0, 1), centroid);
+ }
+
+ return Plane(eigenVectors[2], centroid);
+}
+
+bool nv::Fit::isPlanar(int n, const Vector3 * points, float epsilon/*=NV_EPSILON*/)
+{
+ // compute the centroid and covariance
+ float matrix[6];
+ computeCovariance(n, points, matrix);
+
+ float eigenValues[3];
+ Vector3 eigenVectors[3];
+ if (!eigenSolveSymmetric3(matrix, eigenValues, eigenVectors)) {
+ return false;
+ }
+
+ return eigenValues[2] < epsilon;
+}
+
+
+
+// Tridiagonal solver from Charles Bloom.
+// Householder transforms followed by QL decomposition.
+// Seems to be based on the code from Numerical Recipes in C.
+
+static void EigenSolver3_Tridiagonal(float mat[3][3], float * diag, float * subd);
+static bool EigenSolver3_QLAlgorithm(float mat[3][3], float * diag, float * subd);
+
+bool nv::Fit::eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3])
+{
+ nvDebugCheck(matrix != NULL && eigenValues != NULL && eigenVectors != NULL);
+
+ float subd[3];
+ float diag[3];
+ float work[3][3];
+
+ work[0][0] = matrix[0];
+ work[0][1] = work[1][0] = matrix[1];
+ work[0][2] = work[2][0] = matrix[2];
+ work[1][1] = matrix[3];
+ work[1][2] = work[2][1] = matrix[4];
+ work[2][2] = matrix[5];
+
+ EigenSolver3_Tridiagonal(work, diag, subd);
+ if (!EigenSolver3_QLAlgorithm(work, diag, subd))
+ {
+ for (int i = 0; i < 3; i++) {
+ eigenValues[i] = 0;
+ eigenVectors[i] = Vector3(0);
+ }
+ return false;
+ }
+
+ for (int i = 0; i < 3; i++) {
+ eigenValues[i] = (float)diag[i];
+ }
+
+ // eigenvectors are the columns; make them the rows :
+
+ for (int i=0; i < 3; i++)
+ {
+ for (int j = 0; j < 3; j++)
+ {
+ eigenVectors[j].component[i] = (float) work[i][j];
+ }
+ }
+
+ // shuffle to sort by singular value :
+ if (eigenValues[2] > eigenValues[0] && eigenValues[2] > eigenValues[1])
+ {
+ swap(eigenValues[0], eigenValues[2]);
+ swap(eigenVectors[0], eigenVectors[2]);
+ }
+ if (eigenValues[1] > eigenValues[0])
+ {
+ swap(eigenValues[0], eigenValues[1]);
+ swap(eigenVectors[0], eigenVectors[1]);
+ }
+ if (eigenValues[2] > eigenValues[1])
+ {
+ swap(eigenValues[1], eigenValues[2]);
+ swap(eigenVectors[1], eigenVectors[2]);
+ }
+
+ nvDebugCheck(eigenValues[0] >= eigenValues[1] && eigenValues[0] >= eigenValues[2]);
+ nvDebugCheck(eigenValues[1] >= eigenValues[2]);
+
+ return true;
+}
+
+static void EigenSolver3_Tridiagonal(float mat[3][3], float * diag, float * subd)
+{
+ // Householder reduction T = Q^t M Q
+ // Input:
+ // mat, symmetric 3x3 matrix M
+ // Output:
+ // mat, orthogonal matrix Q
+ // diag, diagonal entries of T
+ // subd, subdiagonal entries of T (T is symmetric)
+ const float epsilon = 1e-08f;
+
+ float a = mat[0][0];
+ float b = mat[0][1];
+ float c = mat[0][2];
+ float d = mat[1][1];
+ float e = mat[1][2];
+ float f = mat[2][2];
+
+ diag[0] = a;
+ subd[2] = 0.f;
+ if (fabsf(c) >= epsilon)
+ {
+ const float ell = sqrtf(b*b+c*c);
+ b /= ell;
+ c /= ell;
+ const float q = 2*b*e+c*(f-d);
+ diag[1] = d+c*q;
+ diag[2] = f-c*q;
+ subd[0] = ell;
+ subd[1] = e-b*q;
+ mat[0][0] = 1; mat[0][1] = 0; mat[0][2] = 0;
+ mat[1][0] = 0; mat[1][1] = b; mat[1][2] = c;
+ mat[2][0] = 0; mat[2][1] = c; mat[2][2] = -b;
+ }
+ else
+ {
+ diag[1] = d;
+ diag[2] = f;
+ subd[0] = b;
+ subd[1] = e;
+ mat[0][0] = 1; mat[0][1] = 0; mat[0][2] = 0;
+ mat[1][0] = 0; mat[1][1] = 1; mat[1][2] = 0;
+ mat[2][0] = 0; mat[2][1] = 0; mat[2][2] = 1;
+ }
+}
+
+static bool EigenSolver3_QLAlgorithm(float mat[3][3], float * diag, float * subd)
+{
+ // QL iteration with implicit shifting to reduce matrix from tridiagonal
+ // to diagonal
+ const int maxiter = 32;
+
+ for (int ell = 0; ell < 3; ell++)
+ {
+ int iter;
+ for (iter = 0; iter < maxiter; iter++)
+ {
+ int m;
+ for (m = ell; m <= 1; m++)
+ {
+ float dd = fabsf(diag[m]) + fabsf(diag[m+1]);
+ if ( fabsf(subd[m]) + dd == dd )
+ break;
+ }
+ if ( m == ell )
+ break;
+
+ float g = (diag[ell+1]-diag[ell])/(2*subd[ell]);
+ float r = sqrtf(g*g+1);
+ if ( g < 0 )
+ g = diag[m]-diag[ell]+subd[ell]/(g-r);
+ else
+ g = diag[m]-diag[ell]+subd[ell]/(g+r);
+ float s = 1, c = 1, p = 0;
+ for (int i = m-1; i >= ell; i--)
+ {
+ float f = s*subd[i], b = c*subd[i];
+ if ( fabsf(f) >= fabsf(g) )
+ {
+ c = g/f;
+ r = sqrtf(c*c+1);
+ subd[i+1] = f*r;
+ c *= (s = 1/r);
+ }
+ else
+ {
+ s = f/g;
+ r = sqrtf(s*s+1);
+ subd[i+1] = g*r;
+ s *= (c = 1/r);
+ }
+ g = diag[i+1]-p;
+ r = (diag[i]-g)*s+2*b*c;
+ p = s*r;
+ diag[i+1] = g+p;
+ g = c*r-b;
+
+ for (int k = 0; k < 3; k++)
+ {
+ f = mat[k][i+1];
+ mat[k][i+1] = s*mat[k][i]+c*f;
+ mat[k][i] = c*mat[k][i]-s*f;
+ }
+ }
+ diag[ell] -= p;
+ subd[ell] = g;
+ subd[m] = 0;
+ }
+
+ if ( iter == maxiter )
+ // should not get here under normal circumstances
+ return false;
+ }
+
+ return true;
+}
+
+
+
+// Tridiagonal solver for 4x4 symmetric matrices.
+
+static void EigenSolver4_Tridiagonal(float mat[4][4], float * diag, float * subd);
+static bool EigenSolver4_QLAlgorithm(float mat[4][4], float * diag, float * subd);
+
+bool nv::Fit::eigenSolveSymmetric4(const float matrix[10], float eigenValues[4], Vector4 eigenVectors[4])
+{
+ nvDebugCheck(matrix != NULL && eigenValues != NULL && eigenVectors != NULL);
+
+ float subd[4];
+ float diag[4];
+ float work[4][4];
+
+ work[0][0] = matrix[0];
+ work[0][1] = work[1][0] = matrix[1];
+ work[0][2] = work[2][0] = matrix[2];
+ work[0][3] = work[3][0] = matrix[3];
+ work[1][1] = matrix[4];
+ work[1][2] = work[2][1] = matrix[5];
+ work[1][3] = work[3][1] = matrix[6];
+ work[2][2] = matrix[7];
+ work[2][3] = work[3][2] = matrix[8];
+ work[3][3] = matrix[9];
+
+ EigenSolver4_Tridiagonal(work, diag, subd);
+ if (!EigenSolver4_QLAlgorithm(work, diag, subd))
+ {
+ for (int i = 0; i < 4; i++) {
+ eigenValues[i] = 0;
+ eigenVectors[i] = Vector4(0);
+ }
+ return false;
+ }
+
+ for (int i = 0; i < 4; i++) {
+ eigenValues[i] = (float)diag[i];
+ }
+
+ // eigenvectors are the columns; make them the rows
+
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = 0; j < 4; j++)
+ {
+ eigenVectors[j].component[i] = (float) work[i][j];
+ }
+ }
+
+ // sort by singular value
+
+ for (int i = 0; i < 3; ++i)
+ {
+ for (int j = i+1; j < 4; ++j)
+ {
+ if (eigenValues[j] > eigenValues[i])
+ {
+ swap(eigenValues[i], eigenValues[j]);
+ swap(eigenVectors[i], eigenVectors[j]);
+ }
+ }
+ }
+
+ nvDebugCheck(eigenValues[0] >= eigenValues[1] && eigenValues[0] >= eigenValues[2] && eigenValues[0] >= eigenValues[3]);
+ nvDebugCheck(eigenValues[1] >= eigenValues[2] && eigenValues[1] >= eigenValues[3]);
+ nvDebugCheck(eigenValues[2] >= eigenValues[2]);
+
+ return true;
+}
+
+#include "nvmath/Matrix.inl"
+
+inline float signNonzero(float x)
+{
+ return (x >= 0.0f) ? 1.0f : -1.0f;
+}
+
+static void EigenSolver4_Tridiagonal(float mat[4][4], float * diag, float * subd)
+{
+ // Householder reduction T = Q^t M Q
+ // Input:
+ // mat, symmetric 3x3 matrix M
+ // Output:
+ // mat, orthogonal matrix Q
+ // diag, diagonal entries of T
+ // subd, subdiagonal entries of T (T is symmetric)
+
+ static const int n = 4;
+
+ // Set epsilon relative to size of elements in matrix
+ static const float relEpsilon = 1e-6f;
+ float maxElement = FLT_MAX;
+ for (int i = 0; i < n; ++i)
+ for (int j = 0; j < n; ++j)
+ maxElement = max(maxElement, fabsf(mat[i][j]));
+ float epsilon = relEpsilon * maxElement;
+
+ // Iterative algorithm, works for any size of matrix but might be slower than
+ // a closed-form solution for symmetric 4x4 matrices. Based on this article:
+ // http://en.wikipedia.org/wiki/Householder_transformation#Tridiagonalization
+
+ Matrix A, Q(identity);
+ memcpy(&A, mat, sizeof(float)*n*n);
+
+ // We proceed from left to right, making the off-tridiagonal entries zero in
+ // one column of the matrix at a time.
+ for (int k = 0; k < n - 2; ++k)
+ {
+ float sum = 0.0f;
+ for (int j = k+1; j < n; ++j)
+ sum += A(j,k)*A(j,k);
+ float alpha = -signNonzero(A(k+1,k)) * sqrtf(sum);
+ float r = sqrtf(0.5f * (alpha*alpha - A(k+1,k)*alpha));
+
+ // If r is zero, skip this column - already in tridiagonal form
+ if (fabsf(r) < epsilon)
+ continue;
+
+ float v[n] = {};
+ v[k+1] = 0.5f * (A(k+1,k) - alpha) / r;
+ for (int j = k+2; j < n; ++j)
+ v[j] = 0.5f * A(j,k) / r;
+
+ Matrix P(identity);
+ for (int i = 0; i < n; ++i)
+ for (int j = 0; j < n; ++j)
+ P(i,j) -= 2.0f * v[i] * v[j];
+
+ A = mul(mul(P, A), P);
+ Q = mul(Q, P);
+ }
+
+ nvDebugCheck(fabsf(A(2,0)) < epsilon);
+ nvDebugCheck(fabsf(A(0,2)) < epsilon);
+ nvDebugCheck(fabsf(A(3,0)) < epsilon);
+ nvDebugCheck(fabsf(A(0,3)) < epsilon);
+ nvDebugCheck(fabsf(A(3,1)) < epsilon);
+ nvDebugCheck(fabsf(A(1,3)) < epsilon);
+
+ for (int i = 0; i < n; ++i)
+ diag[i] = A(i,i);
+ for (int i = 0; i < n - 1; ++i)
+ subd[i] = A(i+1,i);
+ subd[n-1] = 0.0f;
+
+ memcpy(mat, &Q, sizeof(float)*n*n);
+}
+
+static bool EigenSolver4_QLAlgorithm(float mat[4][4], float * diag, float * subd)
+{
+ // QL iteration with implicit shifting to reduce matrix from tridiagonal
+ // to diagonal
+ const int maxiter = 32;
+
+ for (int ell = 0; ell < 4; ell++)
+ {
+ int iter;
+ for (iter = 0; iter < maxiter; iter++)
+ {
+ int m;
+ for (m = ell; m < 3; m++)
+ {
+ float dd = fabsf(diag[m]) + fabsf(diag[m+1]);
+ if ( fabsf(subd[m]) + dd == dd )
+ break;
+ }
+ if ( m == ell )
+ break;
+
+ float g = (diag[ell+1]-diag[ell])/(2*subd[ell]);
+ float r = sqrtf(g*g+1);
+ if ( g < 0 )
+ g = diag[m]-diag[ell]+subd[ell]/(g-r);
+ else
+ g = diag[m]-diag[ell]+subd[ell]/(g+r);
+ float s = 1, c = 1, p = 0;
+ for (int i = m-1; i >= ell; i--)
+ {
+ float f = s*subd[i], b = c*subd[i];
+ if ( fabsf(f) >= fabsf(g) )
+ {
+ c = g/f;
+ r = sqrtf(c*c+1);
+ subd[i+1] = f*r;
+ c *= (s = 1/r);
+ }
+ else
+ {
+ s = f/g;
+ r = sqrtf(s*s+1);
+ subd[i+1] = g*r;
+ s *= (c = 1/r);
+ }
+ g = diag[i+1]-p;
+ r = (diag[i]-g)*s+2*b*c;
+ p = s*r;
+ diag[i+1] = g+p;
+ g = c*r-b;
+
+ for (int k = 0; k < 4; k++)
+ {
+ f = mat[k][i+1];
+ mat[k][i+1] = s*mat[k][i]+c*f;
+ mat[k][i] = c*mat[k][i]-s*f;
+ }
+ }
+ diag[ell] -= p;
+ subd[ell] = g;
+ subd[m] = 0;
+ }
+
+ if ( iter == maxiter )
+ // should not get here under normal circumstances
+ return false;
+ }
+
+ return true;
+}
+
+
+
+int nv::Fit::compute4Means(int n, const Vector3 *__restrict points, const float *__restrict weights, Vector3::Arg metric, Vector3 *__restrict cluster)
+{
+ // Compute principal component.
+ float matrix[6];
+ Vector3 centroid = computeCovariance(n, points, weights, metric, matrix);
+ Vector3 principal = firstEigenVector_PowerMethod(matrix);
+
+ // Pick initial solution.
+ int mini, maxi;
+ mini = maxi = 0;
+
+ float mindps, maxdps;
+ mindps = maxdps = dot(points[0] - centroid, principal);
+
+ for (int i = 1; i < n; ++i)
+ {
+ float dps = dot(points[i] - centroid, principal);
+
+ if (dps < mindps) {
+ mindps = dps;
+ mini = i;
+ }
+ else {
+ maxdps = dps;
+ maxi = i;
+ }
+ }
+
+ cluster[0] = centroid + mindps * principal;
+ cluster[1] = centroid + maxdps * principal;
+ cluster[2] = (2.0f * cluster[0] + cluster[1]) / 3.0f;
+ cluster[3] = (2.0f * cluster[1] + cluster[0]) / 3.0f;
+
+ // Now we have to iteratively refine the clusters.
+ while (true)
+ {
+ Vector3 newCluster[4] = { Vector3(0.0f), Vector3(0.0f), Vector3(0.0f), Vector3(0.0f) };
+ float total[4] = {0, 0, 0, 0};
+
+ for (int i = 0; i < n; ++i)
+ {
+ // Find nearest cluster.
+ int nearest = 0;
+ float mindist = FLT_MAX;
+ for (int j = 0; j < 4; j++)
+ {
+ float dist = lengthSquared((cluster[j] - points[i]) * metric);
+ if (dist < mindist)
+ {
+ mindist = dist;
+ nearest = j;
+ }
+ }
+
+ newCluster[nearest] += weights[i] * points[i];
+ total[nearest] += weights[i];
+ }
+
+ for (int j = 0; j < 4; j++)
+ {
+ if (total[j] != 0)
+ newCluster[j] /= total[j];
+ }
+
+ if (equal(cluster[0], newCluster[0]) && equal(cluster[1], newCluster[1]) &&
+ equal(cluster[2], newCluster[2]) && equal(cluster[3], newCluster[3]))
+ {
+ return (total[0] != 0) + (total[1] != 0) + (total[2] != 0) + (total[3] != 0);
+ }
+
+ cluster[0] = newCluster[0];
+ cluster[1] = newCluster[1];
+ cluster[2] = newCluster[2];
+ cluster[3] = newCluster[3];
+
+ // Sort clusters by weight.
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = i; j > 0 && total[j] > total[j - 1]; j--)
+ {
+ swap( total[j], total[j - 1] );
+ swap( cluster[j], cluster[j - 1] );
+ }
+ }
+ }
+}
+
+
+
+// Adaptation of James Arvo's SVD code, as found in ZOH.
+
+inline float Sqr(float x) { return x*x; }
+
+inline float svd_pythag( float a, float b )
+{
+ float at = fabsf(a);
+ float bt = fabsf(b);
+ if( at > bt )
+ return at * sqrtf( 1.0f + Sqr( bt / at ) );
+ else if( bt > 0.0f )
+ return bt * sqrtf( 1.0f + Sqr( at / bt ) );
+ else return 0.0f;
+}
+
+inline float SameSign( float a, float b )
+{
+ float t;
+ if( b >= 0.0f ) t = fabsf( a );
+ else t = -fabsf( a );
+ return t;
+}
+
+void ArvoSVD(int rows, int cols, float * Q, float * diag, float * R)
+{
+ static const int MaxIterations = 30;
+
+ int i, j, k, l, p, q, iter;
+ float c, f, h, s, x, y, z;
+ float norm = 0.0f;
+ float g = 0.0f;
+ float scale = 0.0f;
+
+ Array<float> temp; temp.resize(cols, 0.0f);
+
+ for( i = 0; i < cols; i++ )
+ {
+ temp[i] = scale * g;
+ scale = 0.0f;
+ g = 0.0f;
+ s = 0.0f;
+ l = i + 1;
+
+ if( i < rows )
+ {
+ for( k = i; k < rows; k++ ) scale += fabsf( Q[k*cols+i] );
+ if( scale != 0.0f )
+ {
+ for( k = i; k < rows; k++ )
+ {
+ Q[k*cols+i] /= scale;
+ s += Sqr( Q[k*cols+i] );
+ }
+ f = Q[i*cols+i];
+ g = -SameSign( sqrtf(s), f );
+ h = f * g - s;
+ Q[i*cols+i] = f - g;
+ if( i != cols - 1 )
+ {
+ for( j = l; j < cols; j++ )
+ {
+ s = 0.0f;
+ for( k = i; k < rows; k++ ) s += Q[k*cols+i] * Q[k*cols+j];
+ f = s / h;
+ for( k = i; k < rows; k++ ) Q[k*cols+j] += f * Q[k*cols+i];
+ }
+ }
+ for( k = i; k < rows; k++ ) Q[k*cols+i] *= scale;
+ }
+ }
+
+ diag[i] = scale * g;
+ g = 0.0f;
+ s = 0.0f;
+ scale = 0.0f;
+
+ if( i < rows && i != cols - 1 )
+ {
+ for( k = l; k < cols; k++ ) scale += fabsf( Q[i*cols+k] );
+ if( scale != 0.0f )
+ {
+ for( k = l; k < cols; k++ )
+ {
+ Q[i*cols+k] /= scale;
+ s += Sqr( Q[i*cols+k] );
+ }
+ f = Q[i*cols+l];
+ g = -SameSign( sqrtf(s), f );
+ h = f * g - s;
+ Q[i*cols+l] = f - g;
+ for( k = l; k < cols; k++ ) temp[k] = Q[i*cols+k] / h;
+ if( i != rows - 1 )
+ {
+ for( j = l; j < rows; j++ )
+ {
+ s = 0.0f;
+ for( k = l; k < cols; k++ ) s += Q[j*cols+k] * Q[i*cols+k];
+ for( k = l; k < cols; k++ ) Q[j*cols+k] += s * temp[k];
+ }
+ }
+ for( k = l; k < cols; k++ ) Q[i*cols+k] *= scale;
+ }
+ }
+ norm = max( norm, fabsf( diag[i] ) + fabsf( temp[i] ) );
+ }
+
+
+ for( i = cols - 1; i >= 0; i-- )
+ {
+ if( i < cols - 1 )
+ {
+ if( g != 0.0f )
+ {
+ for( j = l; j < cols; j++ ) R[i*cols+j] = ( Q[i*cols+j] / Q[i*cols+l] ) / g;
+ for( j = l; j < cols; j++ )
+ {
+ s = 0.0f;
+ for( k = l; k < cols; k++ ) s += Q[i*cols+k] * R[j*cols+k];
+ for( k = l; k < cols; k++ ) R[j*cols+k] += s * R[i*cols+k];
+ }
+ }
+ for( j = l; j < cols; j++ )
+ {
+ R[i*cols+j] = 0.0f;
+ R[j*cols+i] = 0.0f;
+ }
+ }
+ R[i*cols+i] = 1.0f;
+ g = temp[i];
+ l = i;
+ }
+
+
+ for( i = cols - 1; i >= 0; i-- )
+ {
+ l = i + 1;
+ g = diag[i];
+ if( i < cols - 1 ) for( j = l; j < cols; j++ ) Q[i*cols+j] = 0.0f;
+ if( g != 0.0f )
+ {
+ g = 1.0f / g;
+ if( i != cols - 1 )
+ {
+ for( j = l; j < cols; j++ )
+ {
+ s = 0.0f;
+ for( k = l; k < rows; k++ ) s += Q[k*cols+i] * Q[k*cols+j];
+ f = ( s / Q[i*cols+i] ) * g;
+ for( k = i; k < rows; k++ ) Q[k*cols+j] += f * Q[k*cols+i];
+ }
+ }
+ for( j = i; j < rows; j++ ) Q[j*cols+i] *= g;
+ }
+ else
+ {
+ for( j = i; j < rows; j++ ) Q[j*cols+i] = 0.0f;
+ }
+ Q[i*cols+i] += 1.0f;
+ }
+
+
+ for( k = cols - 1; k >= 0; k-- )
+ {
+ for( iter = 1; iter <= MaxIterations; iter++ )
+ {
+ int jump = 0;
+
+ for( l = k; l >= 0; l-- )
+ {
+ q = l - 1;
+ if( fabsf( temp[l] ) + norm == norm ) { jump = 1; break; }
+ if( fabsf( diag[q] ) + norm == norm ) { jump = 0; break; }
+ }
+
+ if( !jump )
+ {
+ c = 0.0f;
+ s = 1.0f;
+ for( i = l; i <= k; i++ )
+ {
+ f = s * temp[i];
+ temp[i] *= c;
+ if( fabsf( f ) + norm == norm ) break;
+ g = diag[i];
+ h = svd_pythag( f, g );
+ diag[i] = h;
+ h = 1.0f / h;
+ c = g * h;
+ s = -f * h;
+ for( j = 0; j < rows; j++ )
+ {
+ y = Q[j*cols+q];
+ z = Q[j*cols+i];
+ Q[j*cols+q] = y * c + z * s;
+ Q[j*cols+i] = z * c - y * s;
+ }
+ }
+ }
+
+ z = diag[k];
+ if( l == k )
+ {
+ if( z < 0.0f )
+ {
+ diag[k] = -z;
+ for( j = 0; j < cols; j++ ) R[k*cols+j] *= -1.0f;
+ }
+ break;
+ }
+ if( iter >= MaxIterations ) return;
+ x = diag[l];
+ q = k - 1;
+ y = diag[q];
+ g = temp[q];
+ h = temp[k];
+ f = ( ( y - z ) * ( y + z ) + ( g - h ) * ( g + h ) ) / ( 2.0f * h * y );
+ g = svd_pythag( f, 1.0f );
+ f = ( ( x - z ) * ( x + z ) + h * ( ( y / ( f + SameSign( g, f ) ) ) - h ) ) / x;
+ c = 1.0f;
+ s = 1.0f;
+ for( j = l; j <= q; j++ )
+ {
+ i = j + 1;
+ g = temp[i];
+ y = diag[i];
+ h = s * g;
+ g = c * g;
+ z = svd_pythag( f, h );
+ temp[j] = z;
+ c = f / z;
+ s = h / z;
+ f = x * c + g * s;
+ g = g * c - x * s;
+ h = y * s;
+ y = y * c;
+ for( p = 0; p < cols; p++ )
+ {
+ x = R[j*cols+p];
+ z = R[i*cols+p];
+ R[j*cols+p] = x * c + z * s;
+ R[i*cols+p] = z * c - x * s;
+ }
+ z = svd_pythag( f, h );
+ diag[j] = z;
+ if( z != 0.0f )
+ {
+ z = 1.0f / z;
+ c = f * z;
+ s = h * z;
+ }
+ f = c * g + s * y;
+ x = c * y - s * g;
+ for( p = 0; p < rows; p++ )
+ {
+ y = Q[p*cols+j];
+ z = Q[p*cols+i];
+ Q[p*cols+j] = y * c + z * s;
+ Q[p*cols+i] = z * c - y * s;
+ }
+ }
+ temp[l] = 0.0f;
+ temp[k] = f;
+ diag[k] = x;
+ }
+ }
+
+ // Sort the singular values into descending order.
+
+ for( i = 0; i < cols - 1; i++ )
+ {
+ float biggest = diag[i]; // Biggest singular value so far.
+ int bindex = i; // The row/col it occurred in.
+ for( j = i + 1; j < cols; j++ )
+ {
+ if( diag[j] > biggest )
+ {
+ biggest = diag[j];
+ bindex = j;
+ }
+ }
+ if( bindex != i ) // Need to swap rows and columns.
+ {
+ // Swap columns in Q.
+ for (int j = 0; j < rows; ++j)
+ swap(Q[j*cols+i], Q[j*cols+bindex]);
+
+ // Swap rows in R.
+ for (int j = 0; j < rows; ++j)
+ swap(R[i*cols+j], R[bindex*cols+j]);
+
+ // Swap elements in diag.
+ swap(diag[i], diag[bindex]);
+ }
+ }
+}
diff --git a/thirdparty/thekla_atlas/nvmath/Fitting.h b/thirdparty/thekla_atlas/nvmath/Fitting.h
new file mode 100644
index 0000000000..7a88cd28fd
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Fitting.h
@@ -0,0 +1,50 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MATH_FITTING_H
+#define NV_MATH_FITTING_H
+
+#include "Vector.h"
+#include "Plane.h"
+
+namespace nv
+{
+ namespace Fit
+ {
+ Vector3 computeCentroid(int n, const Vector3 * points);
+ Vector3 computeCentroid(int n, const Vector3 * points, const float * weights, const Vector3 & metric);
+
+ Vector4 computeCentroid(int n, const Vector4 * points);
+ Vector4 computeCentroid(int n, const Vector4 * points, const float * weights, const Vector4 & metric);
+
+ Vector3 computeCovariance(int n, const Vector3 * points, float * covariance);
+ Vector3 computeCovariance(int n, const Vector3 * points, const float * weights, const Vector3 & metric, float * covariance);
+
+ Vector4 computeCovariance(int n, const Vector4 * points, float * covariance);
+ Vector4 computeCovariance(int n, const Vector4 * points, const float * weights, const Vector4 & metric, float * covariance);
+
+ Vector3 computePrincipalComponent_PowerMethod(int n, const Vector3 * points);
+ Vector3 computePrincipalComponent_PowerMethod(int n, const Vector3 * points, const float * weights, const Vector3 & metric);
+
+ Vector3 computePrincipalComponent_EigenSolver(int n, const Vector3 * points);
+ Vector3 computePrincipalComponent_EigenSolver(int n, const Vector3 * points, const float * weights, const Vector3 & metric);
+
+ Vector4 computePrincipalComponent_EigenSolver(int n, const Vector4 * points);
+ Vector4 computePrincipalComponent_EigenSolver(int n, const Vector4 * points, const float * weights, const Vector4 & metric);
+
+ Vector3 computePrincipalComponent_SVD(int n, const Vector3 * points);
+ Vector4 computePrincipalComponent_SVD(int n, const Vector4 * points);
+
+ Plane bestPlane(int n, const Vector3 * points);
+ bool isPlanar(int n, const Vector3 * points, float epsilon = NV_EPSILON);
+
+ bool eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3]);
+ bool eigenSolveSymmetric4(const float matrix[10], float eigenValues[4], Vector4 eigenVectors[4]);
+
+ // Returns number of clusters [1-4].
+ int compute4Means(int n, const Vector3 * points, const float * weights, const Vector3 & metric, Vector3 * cluster);
+ }
+
+} // nv namespace
+
+#endif // NV_MATH_FITTING_H
diff --git a/thirdparty/thekla_atlas/nvmath/KahanSum.h b/thirdparty/thekla_atlas/nvmath/KahanSum.h
new file mode 100644
index 0000000000..18d475e7cb
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/KahanSum.h
@@ -0,0 +1,39 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MATH_KAHANSUM_H
+#define NV_MATH_KAHANSUM_H
+
+#include "nvmath.h"
+
+namespace nv
+{
+
+ class KahanSum
+ {
+ public:
+ KahanSum() : accum(0.0f), err(0) {};
+
+ void add(float f)
+ {
+ float compensated = f + err;
+ float tmp = accum + compensated;
+ err = accum - tmp;
+ err += compensated;
+ accum = tmp;
+ }
+
+ float sum() const
+ {
+ return accum;
+ }
+
+ private:
+ float accum;
+ float err;
+ };
+
+} // nv namespace
+
+
+#endif // NV_MATH_KAHANSUM_H
diff --git a/thirdparty/thekla_atlas/nvmath/Matrix.cpp b/thirdparty/thekla_atlas/nvmath/Matrix.cpp
new file mode 100644
index 0000000000..29bd19f5f8
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Matrix.cpp
@@ -0,0 +1,441 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "Matrix.inl"
+#include "Vector.inl"
+
+#include "nvcore/Array.inl"
+
+#include <float.h>
+
+#if !NV_CC_MSVC && !NV_OS_ORBIS
+#include <alloca.h>
+#endif
+
+using namespace nv;
+
+
+// Given a matrix a[1..n][1..n], this routine replaces it by the LU decomposition of a rowwise
+// permutation of itself. a and n are input. a is output, arranged as in equation (2.3.14) above;
+// indx[1..n] is an output vector that records the row permutation effected by the partial
+// pivoting; d is output as -1 depending on whether the number of row interchanges was even
+// or odd, respectively. This routine is used in combination with lubksb to solve linear equations
+// or invert a matrix.
+static bool ludcmp(float **a, int n, int *indx, float *d)
+{
+ const float TINY = 1.0e-20f;
+
+ float * vv = (float*)alloca(sizeof(float) * n); // vv stores the implicit scaling of each row.
+
+ *d = 1.0; // No row interchanges yet.
+ for (int i = 0; i < n; i++) { // Loop over rows to get the implicit scaling information.
+
+ float big = 0.0;
+ for (int j = 0; j < n; j++) {
+ big = max(big, fabsf(a[i][j]));
+ }
+ if (big == 0) {
+ return false; // Singular matrix
+ }
+
+ // No nonzero largest element.
+ vv[i] = 1.0f / big; // Save the scaling.
+ }
+
+ for (int j = 0; j < n; j++) { // This is the loop over columns of Crout's method.
+ for (int i = 0; i < j; i++) { // This is equation (2.3.12) except for i = j.
+ float sum = a[i][j];
+ for (int k = 0; k < i; k++) sum -= a[i][k]*a[k][j];
+ a[i][j] = sum;
+ }
+
+ int imax = -1;
+ float big = 0.0; // Initialize for the search for largest pivot element.
+ for (int i = j; i < n; i++) { // This is i = j of equation (2.3.12) and i = j+ 1 : : : N
+ float sum = a[i][j]; // of equation (2.3.13).
+ for (int k = 0; k < j; k++) {
+ sum -= a[i][k]*a[k][j];
+ }
+ a[i][j]=sum;
+
+ float dum = vv[i]*fabs(sum);
+ if (dum >= big) {
+ // Is the figure of merit for the pivot better than the best so far?
+ big = dum;
+ imax = i;
+ }
+ }
+ nvDebugCheck(imax != -1);
+
+ if (j != imax) { // Do we need to interchange rows?
+ for (int k = 0; k < n; k++) { // Yes, do so...
+ swap(a[imax][k], a[j][k]);
+ }
+ *d = -(*d); // ...and change the parity of d.
+ vv[imax]=vv[j]; // Also interchange the scale factor.
+ }
+
+ indx[j]=imax;
+ if (a[j][j] == 0.0) a[j][j] = TINY;
+
+ // If the pivot element is zero the matrix is singular (at least to the precision of the
+ // algorithm). For some applications on singular matrices, it is desirable to substitute
+ // TINY for zero.
+ if (j != n-1) { // Now, finally, divide by the pivot element.
+ float dum = 1.0f / a[j][j];
+ for (int i = j+1; i < n; i++) a[i][j] *= dum;
+ }
+ } // Go back for the next column in the reduction.
+
+ return true;
+}
+
+
+// Solves the set of n linear equations Ax = b. Here a[1..n][1..n] is input, not as the matrix
+// A but rather as its LU decomposition, determined by the routine ludcmp. indx[1..n] is input
+// as the permutation vector returned by ludcmp. b[1..n] is input as the right-hand side vector
+// B, and returns with the solution vector X. a, n, and indx are not modified by this routine
+// and can be left in place for successive calls with different right-hand sides b. This routine takes
+// into account the possibility that b will begin with many zero elements, so it is efficient for use
+// in matrix inversion.
+static void lubksb(float **a, int n, int *indx, float b[])
+{
+ int ii = 0;
+ for (int i=0; i<n; i++) { // When ii is set to a positive value, it will become
+ int ip = indx[i]; // the index of the first nonvanishing element of b. We now
+ float sum = b[ip]; // do the forward substitution, equation (2.3.6). The
+ b[ip] = b[i]; // only new wrinkle is to unscramble the permutation as we go.
+ if (ii != 0) {
+ for (int j = ii-1; j < i; j++) sum -= a[i][j]*b[j];
+ }
+ else if (sum != 0.0f) {
+ ii = i+1; // A nonzero element was encountered, so from now on we
+ }
+ b[i] = sum; // will have to do the sums in the loop above.
+ }
+ for (int i=n-1; i>=0; i--) { // Now we do the backsubstitution, equation (2.3.7).
+ float sum = b[i];
+ for (int j = i+1; j < n; j++) {
+ sum -= a[i][j]*b[j];
+ }
+ b[i] = sum/a[i][i]; // Store a component of the solution vector X.
+ } // All done!
+}
+
+
+bool nv::solveLU(const Matrix & A, const Vector4 & b, Vector4 * x)
+{
+ nvDebugCheck(x != NULL);
+
+ float m[4][4];
+ float *a[4] = {m[0], m[1], m[2], m[3]};
+ int idx[4];
+ float d;
+
+ for (int y = 0; y < 4; y++) {
+ for (int x = 0; x < 4; x++) {
+ a[x][y] = A(x, y);
+ }
+ }
+
+ // Create LU decomposition.
+ if (!ludcmp(a, 4, idx, &d)) {
+ // Singular matrix.
+ return false;
+ }
+
+ // Init solution.
+ *x = b;
+
+ // Do back substitution.
+ lubksb(a, 4, idx, x->component);
+
+ return true;
+}
+
+// @@ Not tested.
+Matrix nv::inverseLU(const Matrix & A)
+{
+ Vector4 Ai[4];
+
+ solveLU(A, Vector4(1, 0, 0, 0), &Ai[0]);
+ solveLU(A, Vector4(0, 1, 0, 0), &Ai[1]);
+ solveLU(A, Vector4(0, 0, 1, 0), &Ai[2]);
+ solveLU(A, Vector4(0, 0, 0, 1), &Ai[3]);
+
+ return Matrix(Ai[0], Ai[1], Ai[2], Ai[3]);
+}
+
+
+
+bool nv::solveLU(const Matrix3 & A, const Vector3 & b, Vector3 * x)
+{
+ nvDebugCheck(x != NULL);
+
+ float m[3][3];
+ float *a[3] = {m[0], m[1], m[2]};
+ int idx[3];
+ float d;
+
+ for (int y = 0; y < 3; y++) {
+ for (int x = 0; x < 3; x++) {
+ a[x][y] = A(x, y);
+ }
+ }
+
+ // Create LU decomposition.
+ if (!ludcmp(a, 3, idx, &d)) {
+ // Singular matrix.
+ return false;
+ }
+
+ // Init solution.
+ *x = b;
+
+ // Do back substitution.
+ lubksb(a, 3, idx, x->component);
+
+ return true;
+}
+
+
+bool nv::solveCramer(const Matrix & A, const Vector4 & b, Vector4 * x)
+{
+ nvDebugCheck(x != NULL);
+
+ *x = transform(inverseCramer(A), b);
+
+ return true; // @@ Return false if determinant(A) == 0 !
+}
+
+bool nv::solveCramer(const Matrix3 & A, const Vector3 & b, Vector3 * x)
+{
+ nvDebugCheck(x != NULL);
+
+ const float det = A.determinant();
+ if (equal(det, 0.0f)) { // @@ Use input epsilon.
+ return false;
+ }
+
+ Matrix3 Ai = inverseCramer(A);
+
+ *x = transform(Ai, b);
+
+ return true;
+}
+
+
+
+// Inverse using gaussian elimination. From Jon's code.
+Matrix nv::inverse(const Matrix & m) {
+
+ Matrix A = m;
+ Matrix B(identity);
+
+ int i, j, k;
+ float max, t, det, pivot;
+
+ det = 1.0;
+ for (i=0; i<4; i++) { /* eliminate in column i, below diag */
+ max = -1.;
+ for (k=i; k<4; k++) /* find pivot for column i */
+ if (fabs(A(k, i)) > max) {
+ max = fabs(A(k, i));
+ j = k;
+ }
+ if (max<=0.) return B; /* if no nonzero pivot, PUNT */
+ if (j!=i) { /* swap rows i and j */
+ for (k=i; k<4; k++)
+ swap(A(i, k), A(j, k));
+ for (k=0; k<4; k++)
+ swap(B(i, k), B(j, k));
+ det = -det;
+ }
+ pivot = A(i, i);
+ det *= pivot;
+ for (k=i+1; k<4; k++) /* only do elems to right of pivot */
+ A(i, k) /= pivot;
+ for (k=0; k<4; k++)
+ B(i, k) /= pivot;
+ /* we know that A(i, i) will be set to 1, so don't bother to do it */
+
+ for (j=i+1; j<4; j++) { /* eliminate in rows below i */
+ t = A(j, i); /* we're gonna zero this guy */
+ for (k=i+1; k<4; k++) /* subtract scaled row i from row j */
+ A(j, k) -= A(i, k)*t; /* (ignore k<=i, we know they're 0) */
+ for (k=0; k<4; k++)
+ B(j, k) -= B(i, k)*t;
+ }
+ }
+
+ /*---------- backward elimination ----------*/
+
+ for (i=4-1; i>0; i--) { /* eliminate in column i, above diag */
+ for (j=0; j<i; j++) { /* eliminate in rows above i */
+ t = A(j, i); /* we're gonna zero this guy */
+ for (k=0; k<4; k++) /* subtract scaled row i from row j */
+ B(j, k) -= B(i, k)*t;
+ }
+ }
+
+ return B;
+}
+
+
+Matrix3 nv::inverse(const Matrix3 & m) {
+
+ Matrix3 A = m;
+ Matrix3 B(identity);
+
+ int i, j, k;
+ float max, t, det, pivot;
+
+ det = 1.0;
+ for (i=0; i<3; i++) { /* eliminate in column i, below diag */
+ max = -1.;
+ for (k=i; k<3; k++) /* find pivot for column i */
+ if (fabs(A(k, i)) > max) {
+ max = fabs(A(k, i));
+ j = k;
+ }
+ if (max<=0.) return B; /* if no nonzero pivot, PUNT */
+ if (j!=i) { /* swap rows i and j */
+ for (k=i; k<3; k++)
+ swap(A(i, k), A(j, k));
+ for (k=0; k<3; k++)
+ swap(B(i, k), B(j, k));
+ det = -det;
+ }
+ pivot = A(i, i);
+ det *= pivot;
+ for (k=i+1; k<3; k++) /* only do elems to right of pivot */
+ A(i, k) /= pivot;
+ for (k=0; k<3; k++)
+ B(i, k) /= pivot;
+ /* we know that A(i, i) will be set to 1, so don't bother to do it */
+
+ for (j=i+1; j<3; j++) { /* eliminate in rows below i */
+ t = A(j, i); /* we're gonna zero this guy */
+ for (k=i+1; k<3; k++) /* subtract scaled row i from row j */
+ A(j, k) -= A(i, k)*t; /* (ignore k<=i, we know they're 0) */
+ for (k=0; k<3; k++)
+ B(j, k) -= B(i, k)*t;
+ }
+ }
+
+ /*---------- backward elimination ----------*/
+
+ for (i=3-1; i>0; i--) { /* eliminate in column i, above diag */
+ for (j=0; j<i; j++) { /* eliminate in rows above i */
+ t = A(j, i); /* we're gonna zero this guy */
+ for (k=0; k<3; k++) /* subtract scaled row i from row j */
+ B(j, k) -= B(i, k)*t;
+ }
+ }
+
+ return B;
+}
+
+
+
+
+
+#if 0
+
+// Copyright (C) 1999-2004 Michael Garland.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, provided that the above
+// copyright notice(s) and this permission notice appear in all copies of
+// the Software and that both the above copyright notice(s) and this
+// permission notice appear in supporting documentation.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+// OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+// HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
+// INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
+// FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+// NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+// WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+//
+// Except as contained in this notice, the name of a copyright holder
+// shall not be used in advertising or otherwise to promote the sale, use
+// or other dealings in this Software without prior written authorization
+// of the copyright holder.
+
+
+// Matrix inversion code for 4x4 matrices using Gaussian elimination
+// with partial pivoting. This is a specialized version of a
+// procedure originally due to Paul Heckbert <ph@cs.cmu.edu>.
+//
+// Returns determinant of A, and B=inverse(A)
+// If matrix A is singular, returns 0 and leaves trash in B.
+//
+#define SWAP(a, b, t) {t = a; a = b; b = t;}
+double invert(Mat4& B, const Mat4& m)
+{
+ Mat4 A = m;
+ int i, j, k;
+ double max, t, det, pivot;
+
+ /*---------- forward elimination ----------*/
+
+ for (i=0; i<4; i++) /* put identity matrix in B */
+ for (j=0; j<4; j++)
+ B(i, j) = (double)(i==j);
+
+ det = 1.0;
+ for (i=0; i<4; i++) { /* eliminate in column i, below diag */
+ max = -1.;
+ for (k=i; k<4; k++) /* find pivot for column i */
+ if (fabs(A(k, i)) > max) {
+ max = fabs(A(k, i));
+ j = k;
+ }
+ if (max<=0.) return 0.; /* if no nonzero pivot, PUNT */
+ if (j!=i) { /* swap rows i and j */
+ for (k=i; k<4; k++)
+ SWAP(A(i, k), A(j, k), t);
+ for (k=0; k<4; k++)
+ SWAP(B(i, k), B(j, k), t);
+ det = -det;
+ }
+ pivot = A(i, i);
+ det *= pivot;
+ for (k=i+1; k<4; k++) /* only do elems to right of pivot */
+ A(i, k) /= pivot;
+ for (k=0; k<4; k++)
+ B(i, k) /= pivot;
+ /* we know that A(i, i) will be set to 1, so don't bother to do it */
+
+ for (j=i+1; j<4; j++) { /* eliminate in rows below i */
+ t = A(j, i); /* we're gonna zero this guy */
+ for (k=i+1; k<4; k++) /* subtract scaled row i from row j */
+ A(j, k) -= A(i, k)*t; /* (ignore k<=i, we know they're 0) */
+ for (k=0; k<4; k++)
+ B(j, k) -= B(i, k)*t;
+ }
+ }
+
+ /*---------- backward elimination ----------*/
+
+ for (i=4-1; i>0; i--) { /* eliminate in column i, above diag */
+ for (j=0; j<i; j++) { /* eliminate in rows above i */
+ t = A(j, i); /* we're gonna zero this guy */
+ for (k=0; k<4; k++) /* subtract scaled row i from row j */
+ B(j, k) -= B(i, k)*t;
+ }
+ }
+
+ return det;
+}
+
+#endif // 0
+
+
+
diff --git a/thirdparty/thekla_atlas/nvmath/Matrix.h b/thirdparty/thekla_atlas/nvmath/Matrix.h
new file mode 100644
index 0000000000..506bdad1ca
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Matrix.h
@@ -0,0 +1,113 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_MATRIX_H
+#define NV_MATH_MATRIX_H
+
+#include "Vector.h"
+
+// - Matrices are stored in memory in *column major* order.
+// - Points are to be though of as column vectors.
+// - Transformation of a point p by a matrix M is: p' = M * p
+
+namespace nv
+{
+ enum identity_t { identity };
+
+ // 3x3 matrix.
+ class NVMATH_CLASS Matrix3
+ {
+ public:
+ Matrix3();
+ explicit Matrix3(float f);
+ explicit Matrix3(identity_t);
+ Matrix3(const Matrix3 & m);
+ Matrix3(Vector3::Arg v0, Vector3::Arg v1, Vector3::Arg v2);
+
+ float data(uint idx) const;
+ float & data(uint idx);
+ float get(uint row, uint col) const;
+ float operator()(uint row, uint col) const;
+ float & operator()(uint row, uint col);
+
+ Vector3 row(uint i) const;
+ Vector3 column(uint i) const;
+
+ void operator*=(float s);
+ void operator/=(float s);
+ void operator+=(const Matrix3 & m);
+ void operator-=(const Matrix3 & m);
+
+ void scale(float s);
+ void scale(Vector3::Arg s);
+ float determinant() const;
+
+ private:
+ float m_data[9];
+ };
+
+ // Solve equation system using LU decomposition and back-substitution.
+ extern bool solveLU(const Matrix3 & m, const Vector3 & b, Vector3 * x);
+
+ // Solve equation system using Cramer's inverse.
+ extern bool solveCramer(const Matrix3 & A, const Vector3 & b, Vector3 * x);
+
+
+ // 4x4 matrix.
+ class NVMATH_CLASS Matrix
+ {
+ public:
+ typedef Matrix const & Arg;
+
+ Matrix();
+ explicit Matrix(float f);
+ explicit Matrix(identity_t);
+ Matrix(const Matrix3 & m);
+ Matrix(const Matrix & m);
+ Matrix(Vector4::Arg v0, Vector4::Arg v1, Vector4::Arg v2, Vector4::Arg v3);
+ //explicit Matrix(const float m[]); // m is assumed to contain 16 elements
+
+ float data(uint idx) const;
+ float & data(uint idx);
+ float get(uint row, uint col) const;
+ float operator()(uint row, uint col) const;
+ float & operator()(uint row, uint col);
+ const float * ptr() const;
+
+ Vector4 row(uint i) const;
+ Vector4 column(uint i) const;
+
+ void zero();
+ void identity();
+
+ void scale(float s);
+ void scale(Vector3::Arg s);
+ void translate(Vector3::Arg t);
+ void rotate(float theta, float v0, float v1, float v2);
+ float determinant() const;
+
+ void operator+=(const Matrix & m);
+ void operator-=(const Matrix & m);
+
+ void apply(Matrix::Arg m);
+
+ private:
+ float m_data[16];
+ };
+
+ // Solve equation system using LU decomposition and back-substitution.
+ extern bool solveLU(const Matrix & A, const Vector4 & b, Vector4 * x);
+
+ // Solve equation system using Cramer's inverse.
+ extern bool solveCramer(const Matrix & A, const Vector4 & b, Vector4 * x);
+
+ // Compute inverse using LU decomposition.
+ extern Matrix inverseLU(const Matrix & m);
+
+ // Compute inverse using Gaussian elimination and partial pivoting.
+ extern Matrix inverse(const Matrix & m);
+ extern Matrix3 inverse(const Matrix3 & m);
+
+} // nv namespace
+
+#endif // NV_MATH_MATRIX_H
diff --git a/thirdparty/thekla_atlas/nvmath/Matrix.inl b/thirdparty/thekla_atlas/nvmath/Matrix.inl
new file mode 100644
index 0000000000..c0d99d9fe0
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Matrix.inl
@@ -0,0 +1,1274 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_MATRIX_INL
+#define NV_MATH_MATRIX_INL
+
+#include "Matrix.h"
+
+namespace nv
+{
+ inline Matrix3::Matrix3() {}
+
+ inline Matrix3::Matrix3(float f)
+ {
+ for(int i = 0; i < 9; i++) {
+ m_data[i] = f;
+ }
+ }
+
+ inline Matrix3::Matrix3(identity_t)
+ {
+ for(int i = 0; i < 3; i++) {
+ for(int j = 0; j < 3; j++) {
+ m_data[3*j+i] = (i == j) ? 1.0f : 0.0f;
+ }
+ }
+ }
+
+ inline Matrix3::Matrix3(const Matrix3 & m)
+ {
+ for(int i = 0; i < 9; i++) {
+ m_data[i] = m.m_data[i];
+ }
+ }
+
+ inline Matrix3::Matrix3(Vector3::Arg v0, Vector3::Arg v1, Vector3::Arg v2)
+ {
+ m_data[0] = v0.x; m_data[1] = v0.y; m_data[2] = v0.z;
+ m_data[3] = v1.x; m_data[4] = v1.y; m_data[5] = v1.z;
+ m_data[6] = v2.x; m_data[7] = v2.y; m_data[8] = v2.z;
+ }
+
+ inline float Matrix3::data(uint idx) const
+ {
+ nvDebugCheck(idx < 9);
+ return m_data[idx];
+ }
+ inline float & Matrix3::data(uint idx)
+ {
+ nvDebugCheck(idx < 9);
+ return m_data[idx];
+ }
+ inline float Matrix3::get(uint row, uint col) const
+ {
+ nvDebugCheck(row < 3 && col < 3);
+ return m_data[col * 3 + row];
+ }
+ inline float Matrix3::operator()(uint row, uint col) const
+ {
+ nvDebugCheck(row < 3 && col < 3);
+ return m_data[col * 3 + row];
+ }
+ inline float & Matrix3::operator()(uint row, uint col)
+ {
+ nvDebugCheck(row < 3 && col < 3);
+ return m_data[col * 3 + row];
+ }
+
+ inline Vector3 Matrix3::row(uint i) const
+ {
+ nvDebugCheck(i < 3);
+ return Vector3(get(i, 0), get(i, 1), get(i, 2));
+ }
+ inline Vector3 Matrix3::column(uint i) const
+ {
+ nvDebugCheck(i < 3);
+ return Vector3(get(0, i), get(1, i), get(2, i));
+ }
+
+ inline void Matrix3::operator*=(float s)
+ {
+ for(int i = 0; i < 9; i++) {
+ m_data[i] *= s;
+ }
+ }
+
+ inline void Matrix3::operator/=(float s)
+ {
+ float is = 1.0f /s;
+ for(int i = 0; i < 9; i++) {
+ m_data[i] *= is;
+ }
+ }
+
+ inline void Matrix3::operator+=(const Matrix3 & m)
+ {
+ for(int i = 0; i < 9; i++) {
+ m_data[i] += m.m_data[i];
+ }
+ }
+
+ inline void Matrix3::operator-=(const Matrix3 & m)
+ {
+ for(int i = 0; i < 9; i++) {
+ m_data[i] -= m.m_data[i];
+ }
+ }
+
+ inline Matrix3 operator+(const Matrix3 & a, const Matrix3 & b)
+ {
+ Matrix3 m = a;
+ m += b;
+ return m;
+ }
+
+ inline Matrix3 operator-(const Matrix3 & a, const Matrix3 & b)
+ {
+ Matrix3 m = a;
+ m -= b;
+ return m;
+ }
+
+ inline Matrix3 operator*(const Matrix3 & a, float s)
+ {
+ Matrix3 m = a;
+ m *= s;
+ return m;
+ }
+
+ inline Matrix3 operator*(float s, const Matrix3 & a)
+ {
+ Matrix3 m = a;
+ m *= s;
+ return m;
+ }
+
+ inline Matrix3 operator/(const Matrix3 & a, float s)
+ {
+ Matrix3 m = a;
+ m /= s;
+ return m;
+ }
+
+ inline Matrix3 mul(const Matrix3 & a, const Matrix3 & b)
+ {
+ Matrix3 m;
+
+ for(int i = 0; i < 3; i++) {
+ const float ai0 = a(i,0), ai1 = a(i,1), ai2 = a(i,2);
+ m(i, 0) = ai0 * b(0,0) + ai1 * b(1,0) + ai2 * b(2,0);
+ m(i, 1) = ai0 * b(0,1) + ai1 * b(1,1) + ai2 * b(2,1);
+ m(i, 2) = ai0 * b(0,2) + ai1 * b(1,2) + ai2 * b(2,2);
+ }
+
+ return m;
+ }
+
+ inline Matrix3 operator*(const Matrix3 & a, const Matrix3 & b)
+ {
+ return mul(a, b);
+ }
+
+ // Transform the given 3d vector with the given matrix.
+ inline Vector3 transform(const Matrix3 & m, const Vector3 & p)
+ {
+ return Vector3(
+ p.x * m(0,0) + p.y * m(0,1) + p.z * m(0,2),
+ p.x * m(1,0) + p.y * m(1,1) + p.z * m(1,2),
+ p.x * m(2,0) + p.y * m(2,1) + p.z * m(2,2));
+ }
+
+ inline void Matrix3::scale(float s)
+ {
+ for (int i = 0; i < 9; i++) {
+ m_data[i] *= s;
+ }
+ }
+
+ inline void Matrix3::scale(Vector3::Arg s)
+ {
+ m_data[0] *= s.x; m_data[1] *= s.x; m_data[2] *= s.x;
+ m_data[3] *= s.y; m_data[4] *= s.y; m_data[5] *= s.y;
+ m_data[6] *= s.z; m_data[7] *= s.z; m_data[8] *= s.z;
+ }
+
+ inline float Matrix3::determinant() const
+ {
+ return
+ get(0,0) * get(1,1) * get(2,2) +
+ get(0,1) * get(1,2) * get(2,0) +
+ get(0,2) * get(1,0) * get(2,1) -
+ get(0,2) * get(1,1) * get(2,0) -
+ get(0,1) * get(1,0) * get(2,2) -
+ get(0,0) * get(1,2) * get(2,1);
+ }
+
+ // Inverse using Cramer's rule.
+ inline Matrix3 inverseCramer(const Matrix3 & m)
+ {
+ const float det = m.determinant();
+ if (equal(det, 0.0f, 0.0f)) {
+ return Matrix3(0);
+ }
+
+ Matrix3 r;
+
+ r.data(0) = - m.data(5) * m.data(7) + m.data(4) * m.data(8);
+ r.data(1) = + m.data(5) * m.data(6) - m.data(3) * m.data(8);
+ r.data(2) = - m.data(4) * m.data(6) + m.data(3) * m.data(7);
+
+ r.data(3) = + m.data(2) * m.data(7) - m.data(1) * m.data(8);
+ r.data(4) = - m.data(2) * m.data(6) + m.data(0) * m.data(8);
+ r.data(5) = + m.data(1) * m.data(6) - m.data(0) * m.data(7);
+
+ r.data(6) = - m.data(2) * m.data(4) + m.data(1) * m.data(5);
+ r.data(7) = + m.data(2) * m.data(3) - m.data(0) * m.data(5);
+ r.data(8) = - m.data(1) * m.data(3) + m.data(0) * m.data(4);
+
+ r.scale(1.0f / det);
+
+ return r;
+ }
+
+
+
+ inline Matrix::Matrix()
+ {
+ }
+
+ inline Matrix::Matrix(float f)
+ {
+ for(int i = 0; i < 16; i++) {
+ m_data[i] = 0.0f;
+ }
+ }
+
+ inline Matrix::Matrix(identity_t)
+ {
+ for(int i = 0; i < 4; i++) {
+ for(int j = 0; j < 4; j++) {
+ m_data[4*j+i] = (i == j) ? 1.0f : 0.0f;
+ }
+ }
+ }
+
+ inline Matrix::Matrix(const Matrix & m)
+ {
+ for(int i = 0; i < 16; i++) {
+ m_data[i] = m.m_data[i];
+ }
+ }
+
+ inline Matrix::Matrix(const Matrix3 & m)
+ {
+ for(int i = 0; i < 3; i++) {
+ for(int j = 0; j < 3; j++) {
+ operator()(i, j) = m.get(i, j);
+ }
+ }
+ for(int i = 0; i < 4; i++) {
+ operator()(3, i) = 0;
+ operator()(i, 3) = 0;
+ }
+ }
+
+ inline Matrix::Matrix(Vector4::Arg v0, Vector4::Arg v1, Vector4::Arg v2, Vector4::Arg v3)
+ {
+ m_data[ 0] = v0.x; m_data[ 1] = v0.y; m_data[ 2] = v0.z; m_data[ 3] = v0.w;
+ m_data[ 4] = v1.x; m_data[ 5] = v1.y; m_data[ 6] = v1.z; m_data[ 7] = v1.w;
+ m_data[ 8] = v2.x; m_data[ 9] = v2.y; m_data[10] = v2.z; m_data[11] = v2.w;
+ m_data[12] = v3.x; m_data[13] = v3.y; m_data[14] = v3.z; m_data[15] = v3.w;
+ }
+
+ /*inline Matrix::Matrix(const float m[])
+ {
+ for(int i = 0; i < 16; i++) {
+ m_data[i] = m[i];
+ }
+ }*/
+
+
+ // Accessors
+ inline float Matrix::data(uint idx) const
+ {
+ nvDebugCheck(idx < 16);
+ return m_data[idx];
+ }
+ inline float & Matrix::data(uint idx)
+ {
+ nvDebugCheck(idx < 16);
+ return m_data[idx];
+ }
+ inline float Matrix::get(uint row, uint col) const
+ {
+ nvDebugCheck(row < 4 && col < 4);
+ return m_data[col * 4 + row];
+ }
+ inline float Matrix::operator()(uint row, uint col) const
+ {
+ nvDebugCheck(row < 4 && col < 4);
+ return m_data[col * 4 + row];
+ }
+ inline float & Matrix::operator()(uint row, uint col)
+ {
+ nvDebugCheck(row < 4 && col < 4);
+ return m_data[col * 4 + row];
+ }
+
+ inline const float * Matrix::ptr() const
+ {
+ return m_data;
+ }
+
+ inline Vector4 Matrix::row(uint i) const
+ {
+ nvDebugCheck(i < 4);
+ return Vector4(get(i, 0), get(i, 1), get(i, 2), get(i, 3));
+ }
+
+ inline Vector4 Matrix::column(uint i) const
+ {
+ nvDebugCheck(i < 4);
+ return Vector4(get(0, i), get(1, i), get(2, i), get(3, i));
+ }
+
+ inline void Matrix::zero()
+ {
+ m_data[0] = 0; m_data[1] = 0; m_data[2] = 0; m_data[3] = 0;
+ m_data[4] = 0; m_data[5] = 0; m_data[6] = 0; m_data[7] = 0;
+ m_data[8] = 0; m_data[9] = 0; m_data[10] = 0; m_data[11] = 0;
+ m_data[12] = 0; m_data[13] = 0; m_data[14] = 0; m_data[15] = 0;
+ }
+
+ inline void Matrix::identity()
+ {
+ m_data[0] = 1; m_data[1] = 0; m_data[2] = 0; m_data[3] = 0;
+ m_data[4] = 0; m_data[5] = 1; m_data[6] = 0; m_data[7] = 0;
+ m_data[8] = 0; m_data[9] = 0; m_data[10] = 1; m_data[11] = 0;
+ m_data[12] = 0; m_data[13] = 0; m_data[14] = 0; m_data[15] = 1;
+ }
+
+ // Apply scale.
+ inline void Matrix::scale(float s)
+ {
+ m_data[0] *= s; m_data[1] *= s; m_data[2] *= s; m_data[3] *= s;
+ m_data[4] *= s; m_data[5] *= s; m_data[6] *= s; m_data[7] *= s;
+ m_data[8] *= s; m_data[9] *= s; m_data[10] *= s; m_data[11] *= s;
+ m_data[12] *= s; m_data[13] *= s; m_data[14] *= s; m_data[15] *= s;
+ }
+
+ // Apply scale.
+ inline void Matrix::scale(Vector3::Arg s)
+ {
+ m_data[0] *= s.x; m_data[1] *= s.x; m_data[2] *= s.x; m_data[3] *= s.x;
+ m_data[4] *= s.y; m_data[5] *= s.y; m_data[6] *= s.y; m_data[7] *= s.y;
+ m_data[8] *= s.z; m_data[9] *= s.z; m_data[10] *= s.z; m_data[11] *= s.z;
+ }
+
+ // Apply translation.
+ inline void Matrix::translate(Vector3::Arg t)
+ {
+ m_data[12] = m_data[0] * t.x + m_data[4] * t.y + m_data[8] * t.z + m_data[12];
+ m_data[13] = m_data[1] * t.x + m_data[5] * t.y + m_data[9] * t.z + m_data[13];
+ m_data[14] = m_data[2] * t.x + m_data[6] * t.y + m_data[10] * t.z + m_data[14];
+ m_data[15] = m_data[3] * t.x + m_data[7] * t.y + m_data[11] * t.z + m_data[15];
+ }
+
+ Matrix rotation(float theta, float v0, float v1, float v2);
+
+ // Apply rotation.
+ inline void Matrix::rotate(float theta, float v0, float v1, float v2)
+ {
+ Matrix R(rotation(theta, v0, v1, v2));
+ apply(R);
+ }
+
+ // Apply transform.
+ inline void Matrix::apply(Matrix::Arg m)
+ {
+ nvDebugCheck(this != &m);
+
+ for(int i = 0; i < 4; i++) {
+ const float ai0 = get(i,0), ai1 = get(i,1), ai2 = get(i,2), ai3 = get(i,3);
+ m_data[0 + i] = ai0 * m(0,0) + ai1 * m(1,0) + ai2 * m(2,0) + ai3 * m(3,0);
+ m_data[4 + i] = ai0 * m(0,1) + ai1 * m(1,1) + ai2 * m(2,1) + ai3 * m(3,1);
+ m_data[8 + i] = ai0 * m(0,2) + ai1 * m(1,2) + ai2 * m(2,2) + ai3 * m(3,2);
+ m_data[12+ i] = ai0 * m(0,3) + ai1 * m(1,3) + ai2 * m(2,3) + ai3 * m(3,3);
+ }
+ }
+
+ // Get scale matrix.
+ inline Matrix scale(Vector3::Arg s)
+ {
+ Matrix m(identity);
+ m(0,0) = s.x;
+ m(1,1) = s.y;
+ m(2,2) = s.z;
+ return m;
+ }
+
+ // Get scale matrix.
+ inline Matrix scale(float s)
+ {
+ Matrix m(identity);
+ m(0,0) = m(1,1) = m(2,2) = s;
+ return m;
+ }
+
+ // Get translation matrix.
+ inline Matrix translation(Vector3::Arg t)
+ {
+ Matrix m(identity);
+ m(0,3) = t.x;
+ m(1,3) = t.y;
+ m(2,3) = t.z;
+ return m;
+ }
+
+ // Get rotation matrix.
+ inline Matrix rotation(float theta, float v0, float v1, float v2)
+ {
+ float cost = cosf(theta);
+ float sint = sinf(theta);
+
+ Matrix m(identity);
+
+ if( 1 == v0 && 0 == v1 && 0 == v2 ) {
+ m(1,1) = cost; m(2,1) = -sint;
+ m(1,2) = sint; m(2,2) = cost;
+ }
+ else if( 0 == v0 && 1 == v1 && 0 == v2 ) {
+ m(0,0) = cost; m(2,0) = sint;
+ m(1,2) = -sint; m(2,2) = cost;
+ }
+ else if( 0 == v0 && 0 == v1 && 1 == v2 ) {
+ m(0,0) = cost; m(1,0) = -sint;
+ m(0,1) = sint; m(1,1) = cost;
+ }
+ else {
+ float a2, b2, c2;
+ a2 = v0 * v0;
+ b2 = v1 * v1;
+ c2 = v2 * v2;
+
+ float iscale = 1.0f / sqrtf(a2 + b2 + c2);
+ v0 *= iscale;
+ v1 *= iscale;
+ v2 *= iscale;
+
+ float abm, acm, bcm;
+ float mcos, asin, bsin, csin;
+ mcos = 1.0f - cost;
+ abm = v0 * v1 * mcos;
+ acm = v0 * v2 * mcos;
+ bcm = v1 * v2 * mcos;
+ asin = v0 * sint;
+ bsin = v1 * sint;
+ csin = v2 * sint;
+ m(0,0) = a2 * mcos + cost;
+ m(1,0) = abm - csin;
+ m(2,0) = acm + bsin;
+ m(3,0) = abm + csin;
+ m(1,1) = b2 * mcos + cost;
+ m(2,1) = bcm - asin;
+ m(3,1) = acm - bsin;
+ m(1,2) = bcm + asin;
+ m(2,2) = c2 * mcos + cost;
+ }
+ return m;
+ }
+
+ //Matrix rotation(float yaw, float pitch, float roll);
+ //Matrix skew(float angle, Vector3::Arg v1, Vector3::Arg v2);
+
+ // Get frustum matrix.
+ inline Matrix frustum(float xmin, float xmax, float ymin, float ymax, float zNear, float zFar)
+ {
+ Matrix m(0.0f);
+
+ float doubleznear = 2.0f * zNear;
+ float one_deltax = 1.0f / (xmax - xmin);
+ float one_deltay = 1.0f / (ymax - ymin);
+ float one_deltaz = 1.0f / (zFar - zNear);
+
+ m(0,0) = doubleznear * one_deltax;
+ m(1,1) = doubleznear * one_deltay;
+ m(0,2) = (xmax + xmin) * one_deltax;
+ m(1,2) = (ymax + ymin) * one_deltay;
+ m(2,2) = -(zFar + zNear) * one_deltaz;
+ m(3,2) = -1.0f;
+ m(2,3) = -(zFar * doubleznear) * one_deltaz;
+
+ return m;
+ }
+
+ // Get inverse frustum matrix.
+ inline Matrix frustumInverse(float xmin, float xmax, float ymin, float ymax, float zNear, float zFar)
+ {
+ Matrix m(0.0f);
+
+ float one_doubleznear = 1.0f / (2.0f * zNear);
+ float one_doubleznearzfar = 1.0f / (2.0f * zNear * zFar);
+
+ m(0,0) = (xmax - xmin) * one_doubleznear;
+ m(0,3) = (xmax + xmin) * one_doubleznear;
+ m(1,1) = (ymax - ymin) * one_doubleznear;
+ m(1,3) = (ymax + ymin) * one_doubleznear;
+ m(2,3) = -1;
+ m(3,2) = -(zFar - zNear) * one_doubleznearzfar;
+ m(3,3) = (zFar + zNear) * one_doubleznearzfar;
+
+ return m;
+ }
+
+ // Get infinite frustum matrix.
+ inline Matrix frustum(float xmin, float xmax, float ymin, float ymax, float zNear)
+ {
+ Matrix m(0.0f);
+
+ float doubleznear = 2.0f * zNear;
+ float one_deltax = 1.0f / (xmax - xmin);
+ float one_deltay = 1.0f / (ymax - ymin);
+ float nudge = 1.0; // 0.999;
+
+ m(0,0) = doubleznear * one_deltax;
+ m(1,1) = doubleznear * one_deltay;
+ m(0,2) = (xmax + xmin) * one_deltax;
+ m(1,2) = (ymax + ymin) * one_deltay;
+ m(2,2) = -1.0f * nudge;
+ m(3,2) = -1.0f;
+ m(2,3) = -doubleznear * nudge;
+
+ return m;
+ }
+
+ // Get perspective matrix.
+ inline Matrix perspective(float fovy, float aspect, float zNear, float zFar)
+ {
+ float xmax = zNear * tan(fovy / 2);
+ float xmin = -xmax;
+
+ float ymax = xmax / aspect;
+ float ymin = -ymax;
+
+ return frustum(xmin, xmax, ymin, ymax, zNear, zFar);
+ }
+
+ // Get inverse perspective matrix.
+ inline Matrix perspectiveInverse(float fovy, float aspect, float zNear, float zFar)
+ {
+ float xmax = zNear * tan(fovy / 2);
+ float xmin = -xmax;
+
+ float ymax = xmax / aspect;
+ float ymin = -ymax;
+
+ return frustumInverse(xmin, xmax, ymin, ymax, zNear, zFar);
+ }
+
+ // Get infinite perspective matrix.
+ inline Matrix perspective(float fovy, float aspect, float zNear)
+ {
+ float x = zNear * tan(fovy / 2);
+ float y = x / aspect;
+ return frustum( -x, x, -y, y, zNear );
+ }
+
+ // Get matrix determinant.
+ inline float Matrix::determinant() const
+ {
+ return
+ m_data[3] * m_data[6] * m_data[ 9] * m_data[12] - m_data[2] * m_data[7] * m_data[ 9] * m_data[12] - m_data[3] * m_data[5] * m_data[10] * m_data[12] + m_data[1] * m_data[7] * m_data[10] * m_data[12] +
+ m_data[2] * m_data[5] * m_data[11] * m_data[12] - m_data[1] * m_data[6] * m_data[11] * m_data[12] - m_data[3] * m_data[6] * m_data[ 8] * m_data[13] + m_data[2] * m_data[7] * m_data[ 8] * m_data[13] +
+ m_data[3] * m_data[4] * m_data[10] * m_data[13] - m_data[0] * m_data[7] * m_data[10] * m_data[13] - m_data[2] * m_data[4] * m_data[11] * m_data[13] + m_data[0] * m_data[6] * m_data[11] * m_data[13] +
+ m_data[3] * m_data[5] * m_data[ 8] * m_data[14] - m_data[1] * m_data[7] * m_data[ 8] * m_data[14] - m_data[3] * m_data[4] * m_data[ 9] * m_data[14] + m_data[0] * m_data[7] * m_data[ 9] * m_data[14] +
+ m_data[1] * m_data[4] * m_data[11] * m_data[14] - m_data[0] * m_data[5] * m_data[11] * m_data[14] - m_data[2] * m_data[5] * m_data[ 8] * m_data[15] + m_data[1] * m_data[6] * m_data[ 8] * m_data[15] +
+ m_data[2] * m_data[4] * m_data[ 9] * m_data[15] - m_data[0] * m_data[6] * m_data[ 9] * m_data[15] - m_data[1] * m_data[4] * m_data[10] * m_data[15] + m_data[0] * m_data[5] * m_data[10] * m_data[15];
+ }
+
+ inline Matrix transpose(Matrix::Arg m)
+ {
+ Matrix r;
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = 0; j < 4; j++)
+ {
+ r(i, j) = m(j, i);
+ }
+ }
+ return r;
+ }
+
+ // Inverse using Cramer's rule.
+ inline Matrix inverseCramer(Matrix::Arg m)
+ {
+ Matrix r;
+ r.data( 0) = m.data(6)*m.data(11)*m.data(13) - m.data(7)*m.data(10)*m.data(13) + m.data(7)*m.data(9)*m.data(14) - m.data(5)*m.data(11)*m.data(14) - m.data(6)*m.data(9)*m.data(15) + m.data(5)*m.data(10)*m.data(15);
+ r.data( 1) = m.data(3)*m.data(10)*m.data(13) - m.data(2)*m.data(11)*m.data(13) - m.data(3)*m.data(9)*m.data(14) + m.data(1)*m.data(11)*m.data(14) + m.data(2)*m.data(9)*m.data(15) - m.data(1)*m.data(10)*m.data(15);
+ r.data( 2) = m.data(2)*m.data( 7)*m.data(13) - m.data(3)*m.data( 6)*m.data(13) + m.data(3)*m.data(5)*m.data(14) - m.data(1)*m.data( 7)*m.data(14) - m.data(2)*m.data(5)*m.data(15) + m.data(1)*m.data( 6)*m.data(15);
+ r.data( 3) = m.data(3)*m.data( 6)*m.data( 9) - m.data(2)*m.data( 7)*m.data( 9) - m.data(3)*m.data(5)*m.data(10) + m.data(1)*m.data( 7)*m.data(10) + m.data(2)*m.data(5)*m.data(11) - m.data(1)*m.data( 6)*m.data(11);
+ r.data( 4) = m.data(7)*m.data(10)*m.data(12) - m.data(6)*m.data(11)*m.data(12) - m.data(7)*m.data(8)*m.data(14) + m.data(4)*m.data(11)*m.data(14) + m.data(6)*m.data(8)*m.data(15) - m.data(4)*m.data(10)*m.data(15);
+ r.data( 5) = m.data(2)*m.data(11)*m.data(12) - m.data(3)*m.data(10)*m.data(12) + m.data(3)*m.data(8)*m.data(14) - m.data(0)*m.data(11)*m.data(14) - m.data(2)*m.data(8)*m.data(15) + m.data(0)*m.data(10)*m.data(15);
+ r.data( 6) = m.data(3)*m.data( 6)*m.data(12) - m.data(2)*m.data( 7)*m.data(12) - m.data(3)*m.data(4)*m.data(14) + m.data(0)*m.data( 7)*m.data(14) + m.data(2)*m.data(4)*m.data(15) - m.data(0)*m.data( 6)*m.data(15);
+ r.data( 7) = m.data(2)*m.data( 7)*m.data( 8) - m.data(3)*m.data( 6)*m.data( 8) + m.data(3)*m.data(4)*m.data(10) - m.data(0)*m.data( 7)*m.data(10) - m.data(2)*m.data(4)*m.data(11) + m.data(0)*m.data( 6)*m.data(11);
+ r.data( 8) = m.data(5)*m.data(11)*m.data(12) - m.data(7)*m.data( 9)*m.data(12) + m.data(7)*m.data(8)*m.data(13) - m.data(4)*m.data(11)*m.data(13) - m.data(5)*m.data(8)*m.data(15) + m.data(4)*m.data( 9)*m.data(15);
+ r.data( 9) = m.data(3)*m.data( 9)*m.data(12) - m.data(1)*m.data(11)*m.data(12) - m.data(3)*m.data(8)*m.data(13) + m.data(0)*m.data(11)*m.data(13) + m.data(1)*m.data(8)*m.data(15) - m.data(0)*m.data( 9)*m.data(15);
+ r.data(10) = m.data(1)*m.data( 7)*m.data(12) - m.data(3)*m.data( 5)*m.data(12) + m.data(3)*m.data(4)*m.data(13) - m.data(0)*m.data( 7)*m.data(13) - m.data(1)*m.data(4)*m.data(15) + m.data(0)*m.data( 5)*m.data(15);
+ r.data(11) = m.data(3)*m.data( 5)*m.data( 8) - m.data(1)*m.data( 7)*m.data( 8) - m.data(3)*m.data(4)*m.data( 9) + m.data(0)*m.data( 7)*m.data( 9) + m.data(1)*m.data(4)*m.data(11) - m.data(0)*m.data( 5)*m.data(11);
+ r.data(12) = m.data(6)*m.data( 9)*m.data(12) - m.data(5)*m.data(10)*m.data(12) - m.data(6)*m.data(8)*m.data(13) + m.data(4)*m.data(10)*m.data(13) + m.data(5)*m.data(8)*m.data(14) - m.data(4)*m.data( 9)*m.data(14);
+ r.data(13) = m.data(1)*m.data(10)*m.data(12) - m.data(2)*m.data( 9)*m.data(12) + m.data(2)*m.data(8)*m.data(13) - m.data(0)*m.data(10)*m.data(13) - m.data(1)*m.data(8)*m.data(14) + m.data(0)*m.data( 9)*m.data(14);
+ r.data(14) = m.data(2)*m.data( 5)*m.data(12) - m.data(1)*m.data( 6)*m.data(12) - m.data(2)*m.data(4)*m.data(13) + m.data(0)*m.data( 6)*m.data(13) + m.data(1)*m.data(4)*m.data(14) - m.data(0)*m.data( 5)*m.data(14);
+ r.data(15) = m.data(1)*m.data( 6)*m.data( 8) - m.data(2)*m.data( 5)*m.data( 8) + m.data(2)*m.data(4)*m.data( 9) - m.data(0)*m.data( 6)*m.data( 9) - m.data(1)*m.data(4)*m.data(10) + m.data(0)*m.data( 5)*m.data(10);
+ r.scale(1.0f / m.determinant());
+ return r;
+ }
+
+ inline Matrix isometryInverse(Matrix::Arg m)
+ {
+ Matrix r(identity);
+
+ // transposed 3x3 upper left matrix
+ for (int i = 0; i < 3; i++)
+ {
+ for (int j = 0; j < 3; j++)
+ {
+ r(i, j) = m(j, i);
+ }
+ }
+
+ // translate by the negative offsets
+ r.translate(-Vector3(m.data(12), m.data(13), m.data(14)));
+
+ return r;
+ }
+
+ // Transform the given 3d point with the given matrix.
+ inline Vector3 transformPoint(Matrix::Arg m, Vector3::Arg p)
+ {
+ return Vector3(
+ p.x * m(0,0) + p.y * m(0,1) + p.z * m(0,2) + m(0,3),
+ p.x * m(1,0) + p.y * m(1,1) + p.z * m(1,2) + m(1,3),
+ p.x * m(2,0) + p.y * m(2,1) + p.z * m(2,2) + m(2,3));
+ }
+
+ // Transform the given 3d vector with the given matrix.
+ inline Vector3 transformVector(Matrix::Arg m, Vector3::Arg p)
+ {
+ return Vector3(
+ p.x * m(0,0) + p.y * m(0,1) + p.z * m(0,2),
+ p.x * m(1,0) + p.y * m(1,1) + p.z * m(1,2),
+ p.x * m(2,0) + p.y * m(2,1) + p.z * m(2,2));
+ }
+
+ // Transform the given 4d vector with the given matrix.
+ inline Vector4 transform(Matrix::Arg m, Vector4::Arg p)
+ {
+ return Vector4(
+ p.x * m(0,0) + p.y * m(0,1) + p.z * m(0,2) + p.w * m(0,3),
+ p.x * m(1,0) + p.y * m(1,1) + p.z * m(1,2) + p.w * m(1,3),
+ p.x * m(2,0) + p.y * m(2,1) + p.z * m(2,2) + p.w * m(2,3),
+ p.x * m(3,0) + p.y * m(3,1) + p.z * m(3,2) + p.w * m(3,3));
+ }
+
+ inline Matrix mul(Matrix::Arg a, Matrix::Arg b)
+ {
+ // @@ Is this the right order? mul(a, b) = b * a
+ Matrix m = a;
+ m.apply(b);
+ return m;
+ }
+
+ inline void Matrix::operator+=(const Matrix & m)
+ {
+ for(int i = 0; i < 16; i++) {
+ m_data[i] += m.m_data[i];
+ }
+ }
+
+ inline void Matrix::operator-=(const Matrix & m)
+ {
+ for(int i = 0; i < 16; i++) {
+ m_data[i] -= m.m_data[i];
+ }
+ }
+
+ inline Matrix operator+(const Matrix & a, const Matrix & b)
+ {
+ Matrix m = a;
+ m += b;
+ return m;
+ }
+
+ inline Matrix operator-(const Matrix & a, const Matrix & b)
+ {
+ Matrix m = a;
+ m -= b;
+ return m;
+ }
+
+
+} // nv namespace
+
+
+#if 0 // old code.
+/** @name Special matrices. */
+//@{
+/** Generate a translation matrix. */
+void TranslationMatrix(const Vec3 & v) {
+ data[0] = 1; data[1] = 0; data[2] = 0; data[3] = 0;
+ data[4] = 0; data[5] = 1; data[6] = 0; data[7] = 0;
+ data[8] = 0; data[9] = 0; data[10] = 1; data[11] = 0;
+ data[12] = v.x; data[13] = v.y; data[14] = v.z; data[15] = 1;
+}
+
+/** Rotate theta degrees around v. */
+void RotationMatrix( float theta, float v0, float v1, float v2 ) {
+ float cost = cos(theta);
+ float sint = sin(theta);
+
+ if( 1 == v0 && 0 == v1 && 0 == v2 ) {
+ data[0] = 1.0f; data[1] = 0.0f; data[2] = 0.0f; data[3] = 0.0f;
+ data[4] = 0.0f; data[5] = cost; data[6] = -sint;data[7] = 0.0f;
+ data[8] = 0.0f; data[9] = sint; data[10] = cost;data[11] = 0.0f;
+ data[12] = 0.0f;data[13] = 0.0f;data[14] = 0.0f;data[15] = 1.0f;
+ }
+ else if( 0 == v0 && 1 == v1 && 0 == v2 ) {
+ data[0] = cost; data[1] = 0.0f; data[2] = sint; data[3] = 0.0f;
+ data[4] = 0.0f; data[5] = 1.0f; data[6] = 0.0f; data[7] = 0.0f;
+ data[8] = -sint;data[9] = 0.0f;data[10] = cost; data[11] = 0.0f;
+ data[12] = 0.0f;data[13] = 0.0f;data[14] = 0.0f;data[15] = 1.0f;
+ }
+ else if( 0 == v0 && 0 == v1 && 1 == v2 ) {
+ data[0] = cost; data[1] = -sint;data[2] = 0.0f; data[3] = 0.0f;
+ data[4] = sint; data[5] = cost; data[6] = 0.0f; data[7] = 0.0f;
+ data[8] = 0.0f; data[9] = 0.0f; data[10] = 1.0f;data[11] = 0.0f;
+ data[12] = 0.0f;data[13] = 0.0f;data[14] = 0.0f;data[15] = 1.0f;
+ }
+ else {
+ //we need scale a,b,c to unit length.
+ float a2, b2, c2;
+ a2 = v0 * v0;
+ b2 = v1 * v1;
+ c2 = v2 * v2;
+
+ float iscale = 1.0f / sqrtf(a2 + b2 + c2);
+ v0 *= iscale;
+ v1 *= iscale;
+ v2 *= iscale;
+
+ float abm, acm, bcm;
+ float mcos, asin, bsin, csin;
+ mcos = 1.0f - cost;
+ abm = v0 * v1 * mcos;
+ acm = v0 * v2 * mcos;
+ bcm = v1 * v2 * mcos;
+ asin = v0 * sint;
+ bsin = v1 * sint;
+ csin = v2 * sint;
+ data[0] = a2 * mcos + cost;
+ data[1] = abm - csin;
+ data[2] = acm + bsin;
+ data[3] = abm + csin;
+ data[4] = 0.0f;
+ data[5] = b2 * mcos + cost;
+ data[6] = bcm - asin;
+ data[7] = acm - bsin;
+ data[8] = 0.0f;
+ data[9] = bcm + asin;
+ data[10] = c2 * mcos + cost;
+ data[11] = 0.0f;
+ data[12] = 0.0f;
+ data[13] = 0.0f;
+ data[14] = 0.0f;
+ data[15] = 1.0f;
+ }
+}
+
+/*
+void SkewMatrix(float angle, const Vec3 & v1, const Vec3 & v2) {
+v1.Normalize();
+v2.Normalize();
+
+Vec3 v3;
+v3.Cross(v1, v2);
+v3.Normalize();
+
+// Get skew factor.
+float costheta = Vec3DotProduct(v1, v2);
+float sintheta = Real.Sqrt(1 - costheta * costheta);
+float skew = tan(Trig.DegreesToRadians(angle) + acos(sintheta)) * sintheta - costheta;
+
+// Build orthonormal matrix.
+v1 = FXVector3.Cross(v3, v2);
+v1.Normalize();
+
+Matrix R = Matrix::Identity;
+R[0, 0] = v3.X; // Not sure this is in the correct order...
+R[1, 0] = v3.Y;
+R[2, 0] = v3.Z;
+R[0, 1] = v1.X;
+R[1, 1] = v1.Y;
+R[2, 1] = v1.Z;
+R[0, 2] = v2.X;
+R[1, 2] = v2.Y;
+R[2, 2] = v2.Z;
+
+// Build skew matrix.
+Matrix S = Matrix::Identity;
+S[2, 1] = -skew;
+
+// Return skew transform.
+return R * S * R.Transpose; // Not sure this is in the correct order...
+}
+*/
+
+/**
+* Generate rotation matrix for the euler angles. This is the same as computing
+* 3 rotation matrices and multiplying them together in our custom order.
+*
+* @todo Have to recompute this code for our new convention.
+**/
+void RotationMatrix( float yaw, float pitch, float roll ) {
+ float sy = sin(yaw+ToRadian(90));
+ float cy = cos(yaw+ToRadian(90));
+ float sp = sin(pitch-ToRadian(90));
+ float cp = cos(pitch-ToRadian(90));
+ float sr = sin(roll);
+ float cr = cos(roll);
+
+ data[0] = cr*cy + sr*sp*sy;
+ data[1] = cp*sy;
+ data[2] = -sr*cy + cr*sp*sy;
+ data[3] = 0;
+
+ data[4] = -cr*sy + sr*sp*cy;
+ data[5] = cp*cy;
+ data[6] = sr*sy + cr*sp*cy;
+ data[7] = 0;
+
+ data[8] = sr*cp;
+ data[9] = -sp;
+ data[10] = cr*cp;
+ data[11] = 0;
+
+ data[12] = 0;
+ data[13] = 0;
+ data[14] = 0;
+ data[15] = 1;
+}
+
+/** Create a frustum matrix with the far plane at the infinity. */
+void Frustum( float xmin, float xmax, float ymin, float ymax, float zNear, float zFar ) {
+ float one_deltax, one_deltay, one_deltaz, doubleznear;
+
+ doubleznear = 2.0f * zNear;
+ one_deltax = 1.0f / (xmax - xmin);
+ one_deltay = 1.0f / (ymax - ymin);
+ one_deltaz = 1.0f / (zFar - zNear);
+
+ data[0] = (float)(doubleznear * one_deltax);
+ data[1] = 0.0f;
+ data[2] = 0.0f;
+ data[3] = 0.0f;
+ data[4] = 0.0f;
+ data[5] = (float)(doubleznear * one_deltay);
+ data[6] = 0.f;
+ data[7] = 0.f;
+ data[8] = (float)((xmax + xmin) * one_deltax);
+ data[9] = (float)((ymax + ymin) * one_deltay);
+ data[10] = (float)(-(zFar + zNear) * one_deltaz);
+ data[11] = -1.f;
+ data[12] = 0.f;
+ data[13] = 0.f;
+ data[14] = (float)(-(zFar * doubleznear) * one_deltaz);
+ data[15] = 0.f;
+}
+
+/** Create a frustum matrix with the far plane at the infinity. */
+void FrustumInf( float xmin, float xmax, float ymin, float ymax, float zNear ) {
+ float one_deltax, one_deltay, doubleznear, nudge;
+
+ doubleznear = 2.0f * zNear;
+ one_deltax = 1.0f / (xmax - xmin);
+ one_deltay = 1.0f / (ymax - ymin);
+ nudge = 1.0; // 0.999;
+
+ data[0] = doubleznear * one_deltax;
+ data[1] = 0.0f;
+ data[2] = 0.0f;
+ data[3] = 0.0f;
+
+ data[4] = 0.0f;
+ data[5] = doubleznear * one_deltay;
+ data[6] = 0.f;
+ data[7] = 0.f;
+
+ data[8] = (xmax + xmin) * one_deltax;
+ data[9] = (ymax + ymin) * one_deltay;
+ data[10] = -1.0f * nudge;
+ data[11] = -1.0f;
+
+ data[12] = 0.f;
+ data[13] = 0.f;
+ data[14] = -doubleznear * nudge;
+ data[15] = 0.f;
+}
+
+/** Create an inverse frustum matrix with the far plane at the infinity. */
+void FrustumInfInv( float left, float right, float bottom, float top, float zNear ) {
+ // this matrix is wrong (not tested floatly) I think it should be transposed.
+ data[0] = (right - left) / (2 * zNear);
+ data[1] = 0;
+ data[2] = 0;
+ data[3] = (right + left) / (2 * zNear);
+ data[4] = 0;
+ data[5] = (top - bottom) / (2 * zNear);
+ data[6] = 0;
+ data[7] = (top + bottom) / (2 * zNear);
+ data[8] = 0;
+ data[9] = 0;
+ data[10] = 0;
+ data[11] = -1;
+ data[12] = 0;
+ data[13] = 0;
+ data[14] = -1 / (2 * zNear);
+ data[15] = 1 / (2 * zNear);
+}
+
+/** Create an homogeneous projection matrix. */
+void Perspective( float fov, float aspect, float zNear, float zFar ) {
+ float xmin, xmax, ymin, ymax;
+
+ xmax = zNear * tan( fov/2 );
+ xmin = -xmax;
+
+ ymax = xmax / aspect;
+ ymin = -ymax;
+
+ Frustum(xmin, xmax, ymin, ymax, zNear, zFar);
+}
+
+/** Create a projection matrix with the far plane at the infinity. */
+void PerspectiveInf( float fov, float aspect, float zNear ) {
+ float x = zNear * tan( fov/2 );
+ float y = x / aspect;
+ FrustumInf( -x, x, -y, y, zNear );
+}
+
+/** Create an inverse projection matrix with far plane at the infinity. */
+void PerspectiveInfInv( float fov, float aspect, float zNear ) {
+ float x = zNear * tan( fov/2 );
+ float y = x / aspect;
+ FrustumInfInv( -x, x, -y, y, zNear );
+}
+
+/** Build bone matrix from quatertion and offset. */
+void BoneMatrix(const Quat & q, const Vec3 & offset) {
+ float x2, y2, z2, xx, xy, xz, yy, yz, zz, wx, wy, wz;
+
+ // calculate coefficients
+ x2 = q.x + q.x;
+ y2 = q.y + q.y;
+ z2 = q.z + q.z;
+
+ xx = q.x * x2; xy = q.x * y2; xz = q.x * z2;
+ yy = q.y * y2; yz = q.y * z2; zz = q.z * z2;
+ wx = q.w * x2; wy = q.w * y2; wz = q.w * z2;
+
+ data[0] = 1.0f - (yy + zz);
+ data[1] = xy - wz;
+ data[2] = xz + wy;
+ data[3] = 0.0f;
+
+ data[4] = xy + wz;
+ data[5] = 1.0f - (xx + zz);
+ data[6] = yz - wx;
+ data[7] = 0.0f;
+
+ data[8] = xz - wy;
+ data[9] = yz + wx;
+ data[10] = 1.0f - (xx + yy);
+ data[11] = 0.0f;
+
+ data[12] = offset.x;
+ data[13] = offset.y;
+ data[14] = offset.z;
+ data[15] = 1.0f;
+}
+
+//@}
+
+
+/** @name Transformations: */
+//@{
+
+/** Apply a general scale. */
+void Scale( float x, float y, float z ) {
+ data[0] *= x; data[4] *= y; data[8] *= z;
+ data[1] *= x; data[5] *= y; data[9] *= z;
+ data[2] *= x; data[6] *= y; data[10] *= z;
+ data[3] *= x; data[7] *= y; data[11] *= z;
+}
+
+/** Apply a rotation of theta degrees around the axis v*/
+void Rotate( float theta, const Vec3 & v ) {
+ Matrix b;
+ b.RotationMatrix( theta, v[0], v[1], v[2] );
+ Multiply4x3( b );
+}
+
+/** Apply a rotation of theta degrees around the axis v*/
+void Rotate( float theta, float v0, float v1, float v2 ) {
+ Matrix b;
+ b.RotationMatrix( theta, v0, v1, v2 );
+ Multiply4x3( b );
+}
+
+/**
+* Translate the matrix by t. This is the same as multiplying by a
+* translation matrix with the given offset.
+* this = T * this
+*/
+void Translate( const Vec3 &t ) {
+ data[12] = data[0] * t.x + data[4] * t.y + data[8] * t.z + data[12];
+ data[13] = data[1] * t.x + data[5] * t.y + data[9] * t.z + data[13];
+ data[14] = data[2] * t.x + data[6] * t.y + data[10] * t.z + data[14];
+ data[15] = data[3] * t.x + data[7] * t.y + data[11] * t.z + data[15];
+}
+
+/**
+* Translate the matrix by x, y, z. This is the same as multiplying by a
+* translation matrix with the given offsets.
+*/
+void Translate( float x, float y, float z ) {
+ data[12] = data[0] * x + data[4] * y + data[8] * z + data[12];
+ data[13] = data[1] * x + data[5] * y + data[9] * z + data[13];
+ data[14] = data[2] * x + data[6] * y + data[10] * z + data[14];
+ data[15] = data[3] * x + data[7] * y + data[11] * z + data[15];
+}
+
+/** Compute the transposed matrix. */
+void Transpose() {
+ piSwap(data[1], data[4]);
+ piSwap(data[2], data[8]);
+ piSwap(data[6], data[9]);
+ piSwap(data[3], data[12]);
+ piSwap(data[7], data[13]);
+ piSwap(data[11], data[14]);
+}
+
+/** Compute the inverse of a rigid-body/isometry/orthonormal matrix. */
+void IsometryInverse() {
+ // transposed 3x3 upper left matrix
+ piSwap(data[1], data[4]);
+ piSwap(data[2], data[8]);
+ piSwap(data[6], data[9]);
+
+ // translate by the negative offsets
+ Vec3 v(-data[12], -data[13], -data[14]);
+ data[12] = data[13] = data[14] = 0;
+ Translate(v);
+}
+
+/** Compute the inverse of the affine portion of this matrix. */
+void AffineInverse() {
+ data[12] = data[13] = data[14] = 0;
+ Transpose();
+}
+//@}
+
+/** @name Matrix operations: */
+//@{
+
+/** Return the determinant of this matrix. */
+float Determinant() const {
+ return data[0] * data[5] * data[10] * data[15] +
+ data[1] * data[6] * data[11] * data[12] +
+ data[2] * data[7] * data[ 8] * data[13] +
+ data[3] * data[4] * data[ 9] * data[14] -
+ data[3] * data[6] * data[ 9] * data[12] -
+ data[2] * data[5] * data[ 8] * data[15] -
+ data[1] * data[4] * data[11] * data[14] -
+ data[0] * data[7] * data[10] * data[12];
+}
+
+
+/** Standard matrix product: this *= B. */
+void Multiply4x4( const Matrix & restrict B ) {
+ Multiply4x4(*this, B);
+}
+
+/** Standard matrix product: this = A * B. this != B*/
+void Multiply4x4( const Matrix & A, const Matrix & restrict B ) {
+ piDebugCheck(this != &B);
+
+ for(int i = 0; i < 4; i++) {
+ const float ai0 = A(i,0), ai1 = A(i,1), ai2 = A(i,2), ai3 = A(i,3);
+ GetElem(i,0) = ai0 * B(0,0) + ai1 * B(1,0) + ai2 * B(2,0) + ai3 * B(3,0);
+ GetElem(i,1) = ai0 * B(0,1) + ai1 * B(1,1) + ai2 * B(2,1) + ai3 * B(3,1);
+ GetElem(i,2) = ai0 * B(0,2) + ai1 * B(1,2) + ai2 * B(2,2) + ai3 * B(3,2);
+ GetElem(i,3) = ai0 * B(0,3) + ai1 * B(1,3) + ai2 * B(2,3) + ai3 * B(3,3);
+ }
+
+ /* Unrolled but does not allow this == A
+ data[0] = A.data[0] * B.data[0] + A.data[4] * B.data[1] + A.data[8] * B.data[2] + A.data[12] * B.data[3];
+ data[1] = A.data[1] * B.data[0] + A.data[5] * B.data[1] + A.data[9] * B.data[2] + A.data[13] * B.data[3];
+ data[2] = A.data[2] * B.data[0] + A.data[6] * B.data[1] + A.data[10] * B.data[2] + A.data[14] * B.data[3];
+ data[3] = A.data[3] * B.data[0] + A.data[7] * B.data[1] + A.data[11] * B.data[2] + A.data[15] * B.data[3];
+ data[4] = A.data[0] * B.data[4] + A.data[4] * B.data[5] + A.data[8] * B.data[6] + A.data[12] * B.data[7];
+ data[5] = A.data[1] * B.data[4] + A.data[5] * B.data[5] + A.data[9] * B.data[6] + A.data[13] * B.data[7];
+ data[6] = A.data[2] * B.data[4] + A.data[6] * B.data[5] + A.data[10] * B.data[6] + A.data[14] * B.data[7];
+ data[7] = A.data[3] * B.data[4] + A.data[7] * B.data[5] + A.data[11] * B.data[6] + A.data[15] * B.data[7];
+ data[8] = A.data[0] * B.data[8] + A.data[4] * B.data[9] + A.data[8] * B.data[10] + A.data[12] * B.data[11];
+ data[9] = A.data[1] * B.data[8] + A.data[5] * B.data[9] + A.data[9] * B.data[10] + A.data[13] * B.data[11];
+ data[10]= A.data[2] * B.data[8] + A.data[6] * B.data[9] + A.data[10] * B.data[10] + A.data[14] * B.data[11];
+ data[11]= A.data[3] * B.data[8] + A.data[7] * B.data[9] + A.data[11] * B.data[10] + A.data[15] * B.data[11];
+ data[12]= A.data[0] * B.data[12] + A.data[4] * B.data[13] + A.data[8] * B.data[14] + A.data[12] * B.data[15];
+ data[13]= A.data[1] * B.data[12] + A.data[5] * B.data[13] + A.data[9] * B.data[14] + A.data[13] * B.data[15];
+ data[14]= A.data[2] * B.data[12] + A.data[6] * B.data[13] + A.data[10] * B.data[14] + A.data[14] * B.data[15];
+ data[15]= A.data[3] * B.data[12] + A.data[7] * B.data[13] + A.data[11] * B.data[14] + A.data[15] * B.data[15];
+ */
+}
+
+/** Standard matrix product: this *= B. */
+void Multiply4x3( const Matrix & restrict B ) {
+ Multiply4x3(*this, B);
+}
+
+/** Standard product of matrices, where the last row is [0 0 0 1]. */
+void Multiply4x3( const Matrix & A, const Matrix & restrict B ) {
+ piDebugCheck(this != &B);
+
+ for(int i = 0; i < 3; i++) {
+ const float ai0 = A(i,0), ai1 = A(i,1), ai2 = A(i,2), ai3 = A(i,3);
+ GetElem(i,0) = ai0 * B(0,0) + ai1 * B(1,0) + ai2 * B(2,0) + ai3 * B(3,0);
+ GetElem(i,1) = ai0 * B(0,1) + ai1 * B(1,1) + ai2 * B(2,1) + ai3 * B(3,1);
+ GetElem(i,2) = ai0 * B(0,2) + ai1 * B(1,2) + ai2 * B(2,2) + ai3 * B(3,2);
+ GetElem(i,3) = ai0 * B(0,3) + ai1 * B(1,3) + ai2 * B(2,3) + ai3 * B(3,3);
+ }
+ data[3] = 0.0f; data[7] = 0.0f; data[11] = 0.0f; data[15] = 1.0f;
+
+ /* Unrolled but does not allow this == A
+ data[0] = a.data[0] * b.data[0] + a.data[4] * b.data[1] + a.data[8] * b.data[2] + a.data[12] * b.data[3];
+ data[1] = a.data[1] * b.data[0] + a.data[5] * b.data[1] + a.data[9] * b.data[2] + a.data[13] * b.data[3];
+ data[2] = a.data[2] * b.data[0] + a.data[6] * b.data[1] + a.data[10] * b.data[2] + a.data[14] * b.data[3];
+ data[3] = 0.0f;
+ data[4] = a.data[0] * b.data[4] + a.data[4] * b.data[5] + a.data[8] * b.data[6] + a.data[12] * b.data[7];
+ data[5] = a.data[1] * b.data[4] + a.data[5] * b.data[5] + a.data[9] * b.data[6] + a.data[13] * b.data[7];
+ data[6] = a.data[2] * b.data[4] + a.data[6] * b.data[5] + a.data[10] * b.data[6] + a.data[14] * b.data[7];
+ data[7] = 0.0f;
+ data[8] = a.data[0] * b.data[8] + a.data[4] * b.data[9] + a.data[8] * b.data[10] + a.data[12] * b.data[11];
+ data[9] = a.data[1] * b.data[8] + a.data[5] * b.data[9] + a.data[9] * b.data[10] + a.data[13] * b.data[11];
+ data[10]= a.data[2] * b.data[8] + a.data[6] * b.data[9] + a.data[10] * b.data[10] + a.data[14] * b.data[11];
+ data[11]= 0.0f;
+ data[12]= a.data[0] * b.data[12] + a.data[4] * b.data[13] + a.data[8] * b.data[14] + a.data[12] * b.data[15];
+ data[13]= a.data[1] * b.data[12] + a.data[5] * b.data[13] + a.data[9] * b.data[14] + a.data[13] * b.data[15];
+ data[14]= a.data[2] * b.data[12] + a.data[6] * b.data[13] + a.data[10] * b.data[14] + a.data[14] * b.data[15];
+ data[15]= 1.0f;
+ */
+}
+//@}
+
+
+/** @name Vector operations: */
+//@{
+
+/** Transform 3d vector (w=0). */
+void TransformVec3(const Vec3 & restrict orig, Vec3 * restrict dest) const {
+ piDebugCheck(&orig != dest);
+ dest->x = orig.x * data[0] + orig.y * data[4] + orig.z * data[8];
+ dest->y = orig.x * data[1] + orig.y * data[5] + orig.z * data[9];
+ dest->z = orig.x * data[2] + orig.y * data[6] + orig.z * data[10];
+}
+/** Transform 3d vector by the transpose (w=0). */
+void TransformVec3T(const Vec3 & restrict orig, Vec3 * restrict dest) const {
+ piDebugCheck(&orig != dest);
+ dest->x = orig.x * data[0] + orig.y * data[1] + orig.z * data[2];
+ dest->y = orig.x * data[4] + orig.y * data[5] + orig.z * data[6];
+ dest->z = orig.x * data[8] + orig.y * data[9] + orig.z * data[10];
+}
+
+/** Transform a 3d homogeneous vector, where the fourth coordinate is assumed to be 1. */
+void TransformPoint(const Vec3 & restrict orig, Vec3 * restrict dest) const {
+ piDebugCheck(&orig != dest);
+ dest->x = orig.x * data[0] + orig.y * data[4] + orig.z * data[8] + data[12];
+ dest->y = orig.x * data[1] + orig.y * data[5] + orig.z * data[9] + data[13];
+ dest->z = orig.x * data[2] + orig.y * data[6] + orig.z * data[10] + data[14];
+}
+
+/** Transform a point, normalize it, and return w. */
+float TransformPointAndNormalize(const Vec3 & restrict orig, Vec3 * restrict dest) const {
+ piDebugCheck(&orig != dest);
+ float w;
+ dest->x = orig.x * data[0] + orig.y * data[4] + orig.z * data[8] + data[12];
+ dest->y = orig.x * data[1] + orig.y * data[5] + orig.z * data[9] + data[13];
+ dest->z = orig.x * data[2] + orig.y * data[6] + orig.z * data[10] + data[14];
+ w = 1 / (orig.x * data[3] + orig.y * data[7] + orig.z * data[11] + data[15]);
+ *dest *= w;
+ return w;
+}
+
+/** Transform a point and return w. */
+float TransformPointReturnW(const Vec3 & restrict orig, Vec3 * restrict dest) const {
+ piDebugCheck(&orig != dest);
+ dest->x = orig.x * data[0] + orig.y * data[4] + orig.z * data[8] + data[12];
+ dest->y = orig.x * data[1] + orig.y * data[5] + orig.z * data[9] + data[13];
+ dest->z = orig.x * data[2] + orig.y * data[6] + orig.z * data[10] + data[14];
+ return orig.x * data[3] + orig.y * data[7] + orig.z * data[11] + data[15];
+}
+
+/** Transform a normalized 3d point by a 4d matrix and return the resulting 4d vector. */
+void TransformVec4(const Vec3 & orig, Vec4 * dest) const {
+ dest->x = orig.x * data[0] + orig.y * data[4] + orig.z * data[8] + data[12];
+ dest->y = orig.x * data[1] + orig.y * data[5] + orig.z * data[9] + data[13];
+ dest->z = orig.x * data[2] + orig.y * data[6] + orig.z * data[10] + data[14];
+ dest->w = orig.x * data[3] + orig.y * data[7] + orig.z * data[11] + data[15];
+}
+//@}
+
+/** @name Matrix analysis. */
+//@{
+
+/** Get the ZYZ euler angles from the matrix. Assumes the matrix is orthonormal. */
+void GetEulerAnglesZYZ(float * s, float * t, float * r) const {
+ if( GetElem(2,2) < 1.0f ) {
+ if( GetElem(2,2) > -1.0f ) {
+ // cs*ct*cr-ss*sr -ss*ct*cr-cs*sr st*cr
+ // cs*ct*sr+ss*cr -ss*ct*sr+cs*cr st*sr
+ // -cs*st ss*st ct
+ *s = atan2(GetElem(1,2), -GetElem(0,2));
+ *t = acos(GetElem(2,2));
+ *r = atan2(GetElem(2,1), GetElem(2,0));
+ }
+ else {
+ // -c(s-r) s(s-r) 0
+ // s(s-r) c(s-r) 0
+ // 0 0 -1
+ *s = atan2(GetElem(0, 1), -GetElem(0, 0)); // = s-r
+ *t = PI;
+ *r = 0;
+ }
+ }
+ else {
+ // c(s+r) -s(s+r) 0
+ // s(s+r) c(s+r) 0
+ // 0 0 1
+ *s = atan2(GetElem(0, 1), GetElem(0, 0)); // = s+r
+ *t = 0;
+ *r = 0;
+ }
+}
+
+//@}
+
+MATHLIB_API friend PiStream & operator<< ( PiStream & s, Matrix & m );
+
+/** Print to debug output. */
+void Print() const {
+ piDebug( "[ %5.2f %5.2f %5.2f %5.2f ]\n", data[0], data[4], data[8], data[12] );
+ piDebug( "[ %5.2f %5.2f %5.2f %5.2f ]\n", data[1], data[5], data[9], data[13] );
+ piDebug( "[ %5.2f %5.2f %5.2f %5.2f ]\n", data[2], data[6], data[10], data[14] );
+ piDebug( "[ %5.2f %5.2f %5.2f %5.2f ]\n", data[3], data[7], data[11], data[15] );
+}
+
+
+public:
+
+ float data[16];
+
+};
+#endif
+
+
+#endif // NV_MATH_MATRIX_INL
diff --git a/thirdparty/thekla_atlas/nvmath/Morton.h b/thirdparty/thekla_atlas/nvmath/Morton.h
new file mode 100644
index 0000000000..10e0d8152a
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Morton.h
@@ -0,0 +1,83 @@
+
+// Code from ryg:
+// http://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/
+
+
+// "Insert" a 0 bit after each of the 16 low bits of x
+inline uint32 part1By1(uint32 x)
+{
+ x &= 0x0000ffff; // x = ---- ---- ---- ---- fedc ba98 7654 3210
+ x = (x ^ (x << 8)) & 0x00ff00ff; // x = ---- ---- fedc ba98 ---- ---- 7654 3210
+ x = (x ^ (x << 4)) & 0x0f0f0f0f; // x = ---- fedc ---- ba98 ---- 7654 ---- 3210
+ x = (x ^ (x << 2)) & 0x33333333; // x = --fe --dc --ba --98 --76 --54 --32 --10
+ x = (x ^ (x << 1)) & 0x55555555; // x = -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0
+ return x;
+}
+
+// "Insert" two 0 bits after each of the 10 low bits of x
+inline uint32 part1By2(uint32 x)
+{
+ x &= 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210
+ x = (x ^ (x << 16)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210
+ x = (x ^ (x << 8)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210
+ x = (x ^ (x << 4)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10
+ x = (x ^ (x << 2)) & 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
+ return x;
+}
+
+inline uint32 encodeMorton2(uint32 x, uint32 y)
+{
+ return (part1By1(y) << 1) + part1By1(x);
+}
+
+inline uint32 encodeMorton3(uint32 x, uint32 y, uint32 z)
+{
+ return (part1By2(z) << 2) + (part1By2(y) << 1) + part1By2(x);
+}
+
+// Inverse of part1By1 - "delete" all odd-indexed bits
+inline uint32 compact1By1(uint32 x)
+{
+ x &= 0x55555555; // x = -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0
+ x = (x ^ (x >> 1)) & 0x33333333; // x = --fe --dc --ba --98 --76 --54 --32 --10
+ x = (x ^ (x >> 2)) & 0x0f0f0f0f; // x = ---- fedc ---- ba98 ---- 7654 ---- 3210
+ x = (x ^ (x >> 4)) & 0x00ff00ff; // x = ---- ---- fedc ba98 ---- ---- 7654 3210
+ x = (x ^ (x >> 8)) & 0x0000ffff; // x = ---- ---- ---- ---- fedc ba98 7654 3210
+ return x;
+}
+
+// Inverse of part1By2 - "delete" all bits not at positions divisible by 3
+inline uint32 compact1By2(uint32 x)
+{
+ x &= 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
+ x = (x ^ (x >> 2)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10
+ x = (x ^ (x >> 4)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210
+ x = (x ^ (x >> 8)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210
+ x = (x ^ (x >> 16)) & 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210
+ return x;
+}
+
+inline uint32 decodeMorton2X(uint32 code)
+{
+ return compact1By1(code >> 0);
+}
+
+inline uint32 decodeMorton2Y(uint32 code)
+{
+ return compact1By1(code >> 1);
+}
+
+inline uint32 decodeMorton3X(uint32 code)
+{
+ return compact1By2(code >> 0);
+}
+
+inline uint32 decodeMorton3Y(uint32 code)
+{
+ return compact1By2(code >> 1);
+}
+
+inline uint32 decodeMorton3Z(uint32 code)
+{
+ return compact1By2(code >> 2);
+} \ No newline at end of file
diff --git a/thirdparty/thekla_atlas/nvmath/Plane.cpp b/thirdparty/thekla_atlas/nvmath/Plane.cpp
new file mode 100644
index 0000000000..8b54f829ad
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Plane.cpp
@@ -0,0 +1,27 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "Plane.h"
+#include "Plane.inl"
+#include "Matrix.inl"
+
+namespace nv
+{
+ Plane transformPlane(const Matrix & m, const Plane & p)
+ {
+ Vector3 newVec = transformVector(m, p.vector());
+
+ Vector3 ptInPlane = p.offset() * p.vector();
+ ptInPlane = transformPoint(m, ptInPlane);
+
+ return Plane(newVec, ptInPlane);
+ }
+
+ Vector3 planeIntersection(const Plane & a, const Plane & b, const Plane & c)
+ {
+ return dot(a.vector(), cross(b.vector(), c.vector())) * (
+ a.offset() * cross(b.vector(), c.vector()) +
+ c.offset() * cross(a.vector(), b.vector()) +
+ b.offset() * cross(c.vector(), a.vector()));
+ }
+
+} // nv namespace
diff --git a/thirdparty/thekla_atlas/nvmath/Plane.h b/thirdparty/thekla_atlas/nvmath/Plane.h
new file mode 100644
index 0000000000..dc468b28e2
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Plane.h
@@ -0,0 +1,42 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MATH_PLANE_H
+#define NV_MATH_PLANE_H
+
+#include "nvmath.h"
+#include "Vector.h"
+
+namespace nv
+{
+ class Matrix;
+
+ class NVMATH_CLASS Plane
+ {
+ public:
+ Plane();
+ Plane(float x, float y, float z, float w);
+ Plane(const Vector4 & v);
+ Plane(const Vector3 & v, float d);
+ Plane(const Vector3 & normal, const Vector3 & point);
+ Plane(const Vector3 & v0, const Vector3 & v1, const Vector3 & v2);
+
+ const Plane & operator=(const Plane & v);
+
+ Vector3 vector() const;
+ float offset() const;
+ Vector3 normal() const;
+
+ void operator*=(float s);
+
+ Vector4 v;
+ };
+
+ Plane transformPlane(const Matrix &, const Plane &);
+
+ Vector3 planeIntersection(const Plane & a, const Plane & b, const Plane & c);
+
+
+} // nv namespace
+
+#endif // NV_MATH_PLANE_H
diff --git a/thirdparty/thekla_atlas/nvmath/Plane.inl b/thirdparty/thekla_atlas/nvmath/Plane.inl
new file mode 100644
index 0000000000..2277e38cd5
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Plane.inl
@@ -0,0 +1,50 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MATH_PLANE_INL
+#define NV_MATH_PLANE_INL
+
+#include "Plane.h"
+#include "Vector.inl"
+
+namespace nv
+{
+ inline Plane::Plane() {}
+ inline Plane::Plane(float x, float y, float z, float w) : v(x, y, z, w) {}
+ inline Plane::Plane(const Vector4 & v) : v(v) {}
+ inline Plane::Plane(const Vector3 & v, float d) : v(v, d) {}
+ inline Plane::Plane(const Vector3 & normal, const Vector3 & point) : v(normal, -dot(normal, point)) {}
+ inline Plane::Plane(const Vector3 & v0, const Vector3 & v1, const Vector3 & v2) {
+ Vector3 n = cross(v1-v0, v2-v0);
+ float d = -dot(n, v0);
+ v = Vector4(n, d);
+ }
+
+ inline const Plane & Plane::operator=(const Plane & p) { v = p.v; return *this; }
+
+ inline Vector3 Plane::vector() const { return v.xyz(); }
+ inline float Plane::offset() const { return v.w; }
+ inline Vector3 Plane::normal() const { return normalize(vector(), 0.0f); }
+
+ // Normalize plane.
+ inline Plane normalize(const Plane & plane, float epsilon = NV_EPSILON)
+ {
+ const float len = length(plane.vector());
+ const float inv = isZero(len, epsilon) ? 0 : 1.0f / len;
+ return Plane(plane.v * inv);
+ }
+
+ // Get the signed distance from the given point to this plane.
+ inline float distance(const Plane & plane, const Vector3 & point)
+ {
+ return dot(plane.vector(), point) + plane.offset();
+ }
+
+ inline void Plane::operator*=(float s)
+ {
+ v *= s;
+ }
+
+} // nv namespace
+
+#endif // NV_MATH_PLANE_H
diff --git a/thirdparty/thekla_atlas/nvmath/ProximityGrid.cpp b/thirdparty/thekla_atlas/nvmath/ProximityGrid.cpp
new file mode 100644
index 0000000000..3553e48f64
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/ProximityGrid.cpp
@@ -0,0 +1,158 @@
+#include "ProximityGrid.h"
+
+#include "Box.inl"
+#include "Morton.h"
+
+
+using namespace nv;
+
+ProximityGrid::ProximityGrid() {
+}
+
+void ProximityGrid::reset() {
+ cellArray.clear();
+}
+
+void ProximityGrid::init(const Array<Vector3> & pointArray) {
+
+ // Compute bounding box.
+ Box box;
+ box.clearBounds();
+
+ const uint count = pointArray.count();
+
+ for (uint i = 0; i < count; i++) {
+ box.addPointToBounds(pointArray[i]);
+ }
+
+ init(box, count);
+
+ // Insert all points.
+ for (uint i = 0; i < count; i++) {
+ add(pointArray[i], i);
+ }
+}
+
+
+void ProximityGrid::init(const Box & box, uint count) {
+ reset();
+
+ // Determine grid size.
+ float cellWidth;
+
+ Vector3 diagonal = box.extents() * 2.f;
+ float volume = box.volume();
+
+ if (equal(volume, 0)) {
+ // Degenerate box, treat like a quad.
+ Vector2 quad;
+ if (diagonal.x < diagonal.y && diagonal.x < diagonal.z) {
+ quad.x = diagonal.y;
+ quad.y = diagonal.z;
+ }
+ else if (diagonal.y < diagonal.x && diagonal.y < diagonal.z) {
+ quad.x = diagonal.x;
+ quad.y = diagonal.z;
+ }
+ else {
+ quad.x = diagonal.x;
+ quad.y = diagonal.y;
+ }
+
+ float cellArea = quad.x * quad.y / count;
+ cellWidth = sqrtf(cellArea); // pow(cellArea, 1.0f / 2.0f);
+ }
+ else {
+ // Ideally we want one cell per point.
+ float cellVolume = volume / count;
+ cellWidth = pow(cellVolume, 1.0f / 3.0f);
+ }
+
+ nvDebugCheck(cellWidth != 0);
+
+ sx = max(1, ftoi_ceil(diagonal.x / cellWidth));
+ sy = max(1, ftoi_ceil(diagonal.y / cellWidth));
+ sz = max(1, ftoi_ceil(diagonal.z / cellWidth));
+
+ invCellSize.x = float(sx) / diagonal.x;
+ invCellSize.y = float(sy) / diagonal.y;
+ invCellSize.z = float(sz) / diagonal.z;
+
+ cellArray.resize(sx * sy * sz);
+
+ corner = box.minCorner; // @@ Align grid better?
+}
+
+// Gather all points inside the given sphere.
+// Radius is assumed to be small, so we don't bother culling the cells.
+void ProximityGrid::gather(const Vector3 & position, float radius, Array<uint> & indexArray) {
+ int x0 = index_x(position.x - radius);
+ int x1 = index_x(position.x + radius);
+
+ int y0 = index_y(position.y - radius);
+ int y1 = index_y(position.y + radius);
+
+ int z0 = index_z(position.z - radius);
+ int z1 = index_z(position.z + radius);
+
+ for (int z = z0; z <= z1; z++) {
+ for (int y = y0; y <= y1; y++) {
+ for (int x = x0; x <= x1; x++) {
+ int idx = index(x, y, z);
+ indexArray.append(cellArray[idx].indexArray);
+ }
+ }
+ }
+}
+
+
+uint32 ProximityGrid::mortonCount() const {
+ uint64 s = U64(max3(sx, sy, sz));
+ s = nextPowerOfTwo(s);
+
+ if (s > 1024) {
+ return U32(s * s * min3(sx, sy, sz));
+ }
+
+ return U32(s * s * s);
+}
+
+int ProximityGrid::mortonIndex(uint32 code) const {
+ uint32 x, y, z;
+
+ uint s = U32(max3(sx, sy, sz));
+ if (s > 1024) {
+ // Use layered two-dimensional morton order.
+ s = nextPowerOfTwo(s);
+ uint layer = code / (s * s);
+ code = code % (s * s);
+
+ uint layer_count = U32(min3(sx, sy, sz));
+ if (sx == layer_count) {
+ x = layer;
+ y = decodeMorton2X(code);
+ z = decodeMorton2Y(code);
+ }
+ else if (sy == layer_count) {
+ x = decodeMorton2Y(code);
+ y = layer;
+ z = decodeMorton2X(code);
+ }
+ else /*if (sz == layer_count)*/ {
+ x = decodeMorton2X(code);
+ y = decodeMorton2Y(code);
+ z = layer;
+ }
+ }
+ else {
+ x = decodeMorton3X(code);
+ y = decodeMorton3Y(code);
+ z = decodeMorton3Z(code);
+ }
+
+ if (x >= U32(sx) || y >= U32(sy) || z >= U32(sz)) {
+ return -1;
+ }
+
+ return index(x, y, z);
+}
diff --git a/thirdparty/thekla_atlas/nvmath/ProximityGrid.h b/thirdparty/thekla_atlas/nvmath/ProximityGrid.h
new file mode 100644
index 0000000000..a21bb3bd68
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/ProximityGrid.h
@@ -0,0 +1,99 @@
+#pragma once
+#ifndef NV_MATH_PROXIMITYGRID_H
+#define NV_MATH_PROXIMITYGRID_H
+
+#include "Vector.h"
+#include "ftoi.h"
+
+#include "nvcore/Array.inl"
+
+
+// A simple, dynamic proximity grid based on Jon's code.
+// Instead of storing pointers here I store indices.
+
+namespace nv {
+
+ class Box;
+
+ struct Cell {
+ Array<uint> indexArray;
+ };
+
+ struct ProximityGrid {
+ ProximityGrid();
+
+ void reset();
+ void init(const Array<Vector3> & pointArray);
+ void init(const Box & box, uint count);
+
+ int index_x(float x) const;
+ int index_y(float y) const;
+ int index_z(float z) const;
+ int index(int x, int y, int z) const;
+ int index(const Vector3 & pos) const;
+
+ uint32 mortonCount() const;
+ int mortonIndex(uint32 code) const;
+
+ void add(const Vector3 & pos, uint key);
+ bool remove(const Vector3 & pos, uint key);
+
+ void gather(const Vector3 & pos, float radius, Array<uint> & indices);
+
+ Array<Cell> cellArray;
+
+ Vector3 corner;
+ Vector3 invCellSize;
+ int sx, sy, sz;
+ };
+
+ // For morton traversal, do:
+ // for (int code = 0; code < mortonCount(); code++) {
+ // int idx = mortonIndex(code);
+ // if (idx < 0) continue;
+ // }
+
+
+
+ inline int ProximityGrid::index_x(float x) const {
+ return clamp(ftoi_floor((x - corner.x) * invCellSize.x), 0, sx-1);
+ }
+
+ inline int ProximityGrid::index_y(float y) const {
+ return clamp(ftoi_floor((y - corner.y) * invCellSize.y), 0, sy-1);
+ }
+
+ inline int ProximityGrid::index_z(float z) const {
+ return clamp(ftoi_floor((z - corner.z) * invCellSize.z), 0, sz-1);
+ }
+
+ inline int ProximityGrid::index(int x, int y, int z) const {
+ nvDebugCheck(x >= 0 && x < sx);
+ nvDebugCheck(y >= 0 && y < sy);
+ nvDebugCheck(z >= 0 && z < sz);
+ int idx = (z * sy + y) * sx + x;
+ nvDebugCheck(idx >= 0 && uint(idx) < cellArray.count());
+ return idx;
+ }
+
+ inline int ProximityGrid::index(const Vector3 & pos) const {
+ int x = index_x(pos.x);
+ int y = index_y(pos.y);
+ int z = index_z(pos.z);
+ return index(x, y, z);
+ }
+
+
+ inline void ProximityGrid::add(const Vector3 & pos, uint key) {
+ uint idx = index(pos);
+ cellArray[idx].indexArray.append(key);
+ }
+
+ inline bool ProximityGrid::remove(const Vector3 & pos, uint key) {
+ uint idx = index(pos);
+ return cellArray[idx].indexArray.remove(key);
+ }
+
+} // nv namespace
+
+#endif // NV_MATH_PROXIMITYGRID_H
diff --git a/thirdparty/thekla_atlas/nvmath/Quaternion.h b/thirdparty/thekla_atlas/nvmath/Quaternion.h
new file mode 100644
index 0000000000..dc5219e5e4
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Quaternion.h
@@ -0,0 +1,213 @@
+// This code is in the public domain -- castano@gmail.com
+
+#pragma once
+#ifndef NV_MATH_QUATERNION_H
+#define NV_MATH_QUATERNION_H
+
+#include "nvmath/nvmath.h"
+#include "nvmath/Vector.inl" // @@ Do not include inl files from header files.
+#include "nvmath/Matrix.h"
+
+namespace nv
+{
+
+ class NVMATH_CLASS Quaternion
+ {
+ public:
+ typedef Quaternion const & Arg;
+
+ Quaternion();
+ explicit Quaternion(float f);
+ Quaternion(float x, float y, float z, float w);
+ Quaternion(Vector4::Arg v);
+
+ const Quaternion & operator=(Quaternion::Arg v);
+
+ Vector4 asVector() const;
+
+ union {
+ struct {
+ float x, y, z, w;
+ };
+ float component[4];
+ };
+ };
+
+ inline Quaternion::Quaternion() {}
+ inline Quaternion::Quaternion(float f) : x(f), y(f), z(f), w(f) {}
+ inline Quaternion::Quaternion(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {}
+ inline Quaternion::Quaternion(Vector4::Arg v) : x(v.x), y(v.y), z(v.z), w(v.w) {}
+
+ // @@ Move all these to Quaternion.inl!
+
+ inline const Quaternion & Quaternion::operator=(Quaternion::Arg v) {
+ x = v.x;
+ y = v.y;
+ z = v.z;
+ w = v.w;
+ return *this;
+ }
+
+ inline Vector4 Quaternion::asVector() const { return Vector4(x, y, z, w); }
+
+ inline Quaternion mul(Quaternion::Arg a, Quaternion::Arg b)
+ {
+ return Quaternion(
+ + a.x*b.w + a.y*b.z - a.z*b.y + a.w*b.x,
+ - a.x*b.z + a.y*b.w + a.z*b.x + a.w*b.y,
+ + a.x*b.y - a.y*b.x + a.z*b.w + a.w*b.z,
+ - a.x*b.x - a.y*b.y - a.z*b.z + a.w*b.w);
+ }
+
+ inline Quaternion mul(Quaternion::Arg a, Vector3::Arg b)
+ {
+ return Quaternion(
+ + a.y*b.z - a.z*b.y + a.w*b.x,
+ - a.x*b.z + a.z*b.x + a.w*b.y,
+ + a.x*b.y - a.y*b.x + a.w*b.z,
+ - a.x*b.x - a.y*b.y - a.z*b.z );
+ }
+
+ inline Quaternion mul(Vector3::Arg a, Quaternion::Arg b)
+ {
+ return Quaternion(
+ + a.x*b.w + a.y*b.z - a.z*b.y,
+ - a.x*b.z + a.y*b.w + a.z*b.x,
+ + a.x*b.y - a.y*b.x + a.z*b.w,
+ - a.x*b.x - a.y*b.y - a.z*b.z);
+ }
+
+ inline Quaternion operator *(Quaternion::Arg a, Quaternion::Arg b)
+ {
+ return mul(a, b);
+ }
+
+ inline Quaternion operator *(Quaternion::Arg a, Vector3::Arg b)
+ {
+ return mul(a, b);
+ }
+
+ inline Quaternion operator *(Vector3::Arg a, Quaternion::Arg b)
+ {
+ return mul(a, b);
+ }
+
+
+ inline Quaternion scale(Quaternion::Arg q, float s)
+ {
+ return scale(q.asVector(), s);
+ }
+ inline Quaternion operator *(Quaternion::Arg q, float s)
+ {
+ return scale(q, s);
+ }
+ inline Quaternion operator *(float s, Quaternion::Arg q)
+ {
+ return scale(q, s);
+ }
+
+ inline Quaternion scale(Quaternion::Arg q, Vector4::Arg s)
+ {
+ return scale(q.asVector(), s);
+ }
+ /*inline Quaternion operator *(Quaternion::Arg q, Vector4::Arg s)
+ {
+ return scale(q, s);
+ }
+ inline Quaternion operator *(Vector4::Arg s, Quaternion::Arg q)
+ {
+ return scale(q, s);
+ }*/
+
+ inline Quaternion conjugate(Quaternion::Arg q)
+ {
+ return scale(q, Vector4(-1, -1, -1, 1));
+ }
+
+ inline float length(Quaternion::Arg q)
+ {
+ return length(q.asVector());
+ }
+
+ inline bool isNormalized(Quaternion::Arg q, float epsilon = NV_NORMAL_EPSILON)
+ {
+ return equal(length(q), 1, epsilon);
+ }
+
+ inline Quaternion normalize(Quaternion::Arg q, float epsilon = NV_EPSILON)
+ {
+ float l = length(q);
+ nvDebugCheck(!isZero(l, epsilon));
+ Quaternion n = scale(q, 1.0f / l);
+ nvDebugCheck(isNormalized(n));
+ return n;
+ }
+
+ inline Quaternion inverse(Quaternion::Arg q)
+ {
+ return conjugate(normalize(q));
+ }
+
+ /// Create a rotation quaternion for @a angle alpha around normal vector @a v.
+ inline Quaternion axisAngle(Vector3::Arg v, float alpha)
+ {
+ float s = sinf(alpha * 0.5f);
+ float c = cosf(alpha * 0.5f);
+ return Quaternion(Vector4(v * s, c));
+ }
+
+ inline Vector3 imag(Quaternion::Arg q)
+ {
+ return q.asVector().xyz();
+ }
+
+ inline float real(Quaternion::Arg q)
+ {
+ return q.w;
+ }
+
+
+ /// Transform vector.
+ inline Vector3 transform(Quaternion::Arg q, Vector3::Arg v)
+ {
+ //Quaternion t = q * v * conjugate(q);
+ //return imag(t);
+
+ // Faster method by Fabian Giesen and others:
+ // http://molecularmusings.wordpress.com/2013/05/24/a-faster-quaternion-vector-multiplication/
+ // http://mollyrocket.com/forums/viewtopic.php?t=833&sid=3a84e00a70ccb046cfc87ac39881a3d0
+
+ Vector3 t = 2 * cross(imag(q), v);
+ return v + q.w * t + cross(imag(q), t);
+ }
+
+ // @@ Not tested.
+ // From Insomniac's Mike Day:
+ // http://www.insomniacgames.com/converting-a-rotation-matrix-to-a-quaternion/
+ inline Quaternion fromMatrix(const Matrix & m) {
+ if (m(2, 2) < 0) {
+ if (m(0, 0) < m(1,1)) {
+ float t = 1 - m(0, 0) - m(1, 1) - m(2, 2);
+ return Quaternion(t, m(0,1)+m(1,0), m(2,0)+m(0,2), m(1,2)-m(2,1));
+ }
+ else {
+ float t = 1 - m(0, 0) + m(1, 1) - m(2, 2);
+ return Quaternion(t, m(0,1) + m(1,0), m(1,2) + m(2,1), m(2,0) - m(0,2));
+ }
+ }
+ else {
+ if (m(0, 0) < -m(1, 1)) {
+ float t = 1 - m(0, 0) - m(1, 1) + m(2, 2);
+ return Quaternion(t, m(2,0) + m(0,2), m(1,2) + m(2,1), m(0,1) - m(1,0));
+ }
+ else {
+ float t = 1 + m(0, 0) + m(1, 1) + m(2, 2);
+ return Quaternion(t, m(1,2) - m(2,1), m(2,0) - m(0,2), m(0,1) - m(1,0));
+ }
+ }
+ }
+
+
+} // nv namespace
+
+#endif // NV_MATH_QUATERNION_H
diff --git a/thirdparty/thekla_atlas/nvmath/Random.cpp b/thirdparty/thekla_atlas/nvmath/Random.cpp
new file mode 100644
index 0000000000..1a60e7f5e7
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Random.cpp
@@ -0,0 +1,54 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include <nvmath/Random.h>
+#include <time.h>
+
+using namespace nv;
+
+// Statics
+const uint16 Rand48::a0 = 0xE66D;
+const uint16 Rand48::a1 = 0xDEEC;
+const uint16 Rand48::a2 = 0x0005;
+const uint16 Rand48::c0 = 0x000B;
+
+
+/// Get a random seed based on the current time.
+uint Rand::randomSeed()
+{
+ return (uint)time(NULL);
+}
+
+
+void MTRand::initialize( uint32 seed )
+{
+ // Initialize generator state with seed
+ // See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier.
+ // In previous versions, most significant bits (MSBs) of the seed affect
+ // only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto.
+ uint32 *s = state;
+ uint32 *r = state;
+ int i = 1;
+ *s++ = seed & 0xffffffffUL;
+ for( ; i < N; ++i )
+ {
+ *s++ = ( 1812433253UL * ( *r ^ (*r >> 30) ) + i ) & 0xffffffffUL;
+ r++;
+ }
+}
+
+
+void MTRand::reload()
+{
+ // Generate N new values in state
+ // Made clearer and faster by Matthew Bellew (matthew.bellew@home.com)
+ uint32 *p = state;
+ int i;
+ for( i = N - M; i--; ++p )
+ *p = twist( p[M], p[0], p[1] );
+ for( i = M; --i; ++p )
+ *p = twist( p[M-N], p[0], p[1] );
+ *p = twist( p[M-N], p[0], state[0] );
+
+ left = N, next = state;
+}
+
diff --git a/thirdparty/thekla_atlas/nvmath/Random.h b/thirdparty/thekla_atlas/nvmath/Random.h
new file mode 100644
index 0000000000..223292706a
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Random.h
@@ -0,0 +1,376 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_RANDOM_H
+#define NV_MATH_RANDOM_H
+
+#include "nvmath.h"
+#include "nvcore/Utils.h" // nextPowerOfTwo
+
+
+namespace nv
+{
+
+ /// Interface of the random number generators.
+ class Rand
+ {
+ public:
+
+ virtual ~Rand() {}
+
+ enum time_e { Time };
+
+ /// Provide a new seed.
+ virtual void seed( uint s ) { /* empty */ };
+
+ /// Get an integer random number.
+ virtual uint get() = 0;
+
+ /// Get a random number on [0, max] interval.
+ uint getRange( uint max )
+ {
+ if (max == 0) return 0;
+ if (max == NV_UINT32_MAX) return get();
+
+ const uint np2 = nextPowerOfTwo( max+1 ); // @@ This fails if max == NV_UINT32_MAX
+ const uint mask = np2 - 1;
+ uint n;
+ do { n = get() & mask; } while( n > max );
+ return n;
+ }
+
+ /// Random number on [0.0, 1.0] interval.
+ float getFloat()
+ {
+ union
+ {
+ uint32 i;
+ float f;
+ } pun;
+
+ pun.i = 0x3f800000UL | (get() & 0x007fffffUL);
+ return pun.f - 1.0f;
+ }
+
+ float getFloatRange(float min, float max) {
+ return getFloat() * (max - min) + min;
+ }
+
+ /*
+ /// Random number on [0.0, 1.0] interval.
+ double getReal()
+ {
+ return double(get()) * (1.0/4294967295.0); // 2^32-1
+ }
+
+ /// Random number on [0.0, 1.0) interval.
+ double getRealExclusive()
+ {
+ return double(get()) * (1.0/4294967296.0); // 2^32
+ }
+ */
+
+ /// Get the max value of the random number.
+ uint max() const { return NV_UINT32_MAX; }
+
+ // Get a random seed.
+ static uint randomSeed();
+
+ };
+
+
+ /// Very simple random number generator with low storage requirements.
+ class SimpleRand : public Rand
+ {
+ public:
+
+ /// Constructor that uses the current time as the seed.
+ SimpleRand( time_e )
+ {
+ seed(randomSeed());
+ }
+
+ /// Constructor that uses the given seed.
+ SimpleRand( uint s = 0 )
+ {
+ seed(s);
+ }
+
+ /// Set the given seed.
+ virtual void seed( uint s )
+ {
+ current = s;
+ }
+
+ /// Get a random number.
+ virtual uint get()
+ {
+ return current = current * 1103515245 + 12345;
+ }
+
+ private:
+
+ uint current;
+
+ };
+
+
+ /// Mersenne twister random number generator.
+ class MTRand : public Rand
+ {
+ public:
+
+ enum { N = 624 }; // length of state vector
+ enum { M = 397 };
+
+ /// Constructor that uses the current time as the seed.
+ MTRand( time_e )
+ {
+ seed(randomSeed());
+ }
+
+ /// Constructor that uses the given seed.
+ MTRand( uint s = 0 )
+ {
+ seed(s);
+ }
+
+ /// Constructor that uses the given seeds.
+ NVMATH_API MTRand( const uint * seed_array, uint length );
+
+
+ /// Provide a new seed.
+ virtual void seed( uint s )
+ {
+ initialize(s);
+ reload();
+ }
+
+ /// Get a random number between 0 - 65536.
+ virtual uint get()
+ {
+ // Pull a 32-bit integer from the generator state
+ // Every other access function simply transforms the numbers extracted here
+ if( left == 0 ) {
+ reload();
+ }
+ left--;
+
+ uint s1;
+ s1 = *next++;
+ s1 ^= (s1 >> 11);
+ s1 ^= (s1 << 7) & 0x9d2c5680U;
+ s1 ^= (s1 << 15) & 0xefc60000U;
+ return ( s1 ^ (s1 >> 18) );
+ };
+
+
+ private:
+
+ NVMATH_API void initialize( uint32 seed );
+ NVMATH_API void reload();
+
+ uint hiBit( uint u ) const { return u & 0x80000000U; }
+ uint loBit( uint u ) const { return u & 0x00000001U; }
+ uint loBits( uint u ) const { return u & 0x7fffffffU; }
+ uint mixBits( uint u, uint v ) const { return hiBit(u) | loBits(v); }
+ uint twist( uint m, uint s0, uint s1 ) const { return m ^ (mixBits(s0,s1)>>1) ^ ((~loBit(s1)+1) & 0x9908b0dfU); }
+
+ private:
+
+ uint state[N]; // internal state
+ uint * next; // next value to get from state
+ int left; // number of values left before reload needed
+
+ };
+
+
+
+ /** George Marsaglia's random number generator.
+ * Code based on Thatcher Ulrich public domain source code:
+ * http://cvs.sourceforge.net/viewcvs.py/tu-testbed/tu-testbed/base/tu_random.cpp?rev=1.7&view=auto
+ *
+ * PRNG code adapted from the complimentary-multiply-with-carry
+ * code in the article: George Marsaglia, "Seeds for Random Number
+ * Generators", Communications of the ACM, May 2003, Vol 46 No 5,
+ * pp90-93.
+ *
+ * The article says:
+ *
+ * "Any one of the choices for seed table size and multiplier will
+ * provide a RNG that has passed extensive tests of randomness,
+ * particularly those in [3], yet is simple and fast --
+ * approximately 30 million random 32-bit integers per second on a
+ * 850MHz PC. The period is a*b^n, where a is the multiplier, n
+ * the size of the seed table and b=2^32-1. (a is chosen so that
+ * b is a primitive root of the prime a*b^n + 1.)"
+ *
+ * [3] Marsaglia, G., Zaman, A., and Tsang, W. Toward a universal
+ * random number generator. _Statistics and Probability Letters
+ * 8_ (1990), 35-39.
+ */
+ class GMRand : public Rand
+ {
+ public:
+
+ enum { SEED_COUNT = 8 };
+
+ // const uint64 a = 123471786; // for SEED_COUNT=1024
+ // const uint64 a = 123554632; // for SEED_COUNT=512
+ // const uint64 a = 8001634; // for SEED_COUNT=255
+ // const uint64 a = 8007626; // for SEED_COUNT=128
+ // const uint64 a = 647535442; // for SEED_COUNT=64
+ // const uint64 a = 547416522; // for SEED_COUNT=32
+ // const uint64 a = 487198574; // for SEED_COUNT=16
+ // const uint64 a = 716514398U; // for SEED_COUNT=8
+ enum { a = 716514398U };
+
+
+ GMRand( time_e )
+ {
+ seed(randomSeed());
+ }
+
+ GMRand(uint s = 987654321)
+ {
+ seed(s);
+ }
+
+
+ /// Provide a new seed.
+ virtual void seed( uint s )
+ {
+ c = 362436;
+ i = SEED_COUNT - 1;
+
+ for(int i = 0; i < SEED_COUNT; i++) {
+ s = s ^ (s << 13);
+ s = s ^ (s >> 17);
+ s = s ^ (s << 5);
+ Q[i] = s;
+ }
+ }
+
+ /// Get a random number between 0 - 65536.
+ virtual uint get()
+ {
+ const uint32 r = 0xFFFFFFFE;
+
+ uint64 t;
+ uint32 x;
+
+ i = (i + 1) & (SEED_COUNT - 1);
+ t = a * Q[i] + c;
+ c = uint32(t >> 32);
+ x = uint32(t + c);
+
+ if( x < c ) {
+ x++;
+ c++;
+ }
+
+ uint32 val = r - x;
+ Q[i] = val;
+ return val;
+ };
+
+
+ private:
+
+ uint32 c;
+ uint32 i;
+ uint32 Q[8];
+
+ };
+
+
+ /** Random number implementation from the GNU Sci. Lib. (GSL).
+ * Adapted from Nicholas Chapman version:
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough
+ * This is the Unix rand48() generator. The generator returns the
+ * upper 32 bits from each term of the sequence,
+ *
+ * x_{n+1} = (a x_n + c) mod m
+ *
+ * using 48-bit unsigned arithmetic, with a = 0x5DEECE66D , c = 0xB
+ * and m = 2^48. The seed specifies the upper 32 bits of the initial
+ * value, x_1, with the lower 16 bits set to 0x330E.
+ *
+ * The theoretical value of x_{10001} is 244131582646046.
+ *
+ * The period of this generator is ? FIXME (probably around 2^48).
+ */
+ class Rand48 : public Rand
+ {
+ public:
+
+ Rand48( time_e )
+ {
+ seed(randomSeed());
+ }
+
+ Rand48( uint s = 0x1234ABCD )
+ {
+ seed(s);
+ }
+
+
+ /** Set the given seed. */
+ virtual void seed( uint s ) {
+ vstate.x0 = 0x330E;
+ vstate.x1 = uint16(s & 0xFFFF);
+ vstate.x2 = uint16((s >> 16) & 0xFFFF);
+ }
+
+ /** Get a random number. */
+ virtual uint get() {
+
+ advance();
+
+ uint x1 = vstate.x1;
+ uint x2 = vstate.x2;
+ return (x2 << 16) + x1;
+ }
+
+
+ private:
+
+ void advance()
+ {
+ /* work with unsigned long ints throughout to get correct integer
+ promotions of any unsigned short ints */
+ const uint32 x0 = vstate.x0;
+ const uint32 x1 = vstate.x1;
+ const uint32 x2 = vstate.x2;
+
+ uint32 a;
+ a = a0 * x0 + c0;
+
+ vstate.x0 = uint16(a & 0xFFFF);
+ a >>= 16;
+
+ /* although the next line may overflow we only need the top 16 bits
+ in the following stage, so it does not matter */
+
+ a += a0 * x1 + a1 * x0;
+ vstate.x1 = uint16(a & 0xFFFF);
+
+ a >>= 16;
+ a += a0 * x2 + a1 * x1 + a2 * x0;
+ vstate.x2 = uint16(a & 0xFFFF);
+ }
+
+
+ private:
+ NVMATH_API static const uint16 a0, a1, a2, c0;
+
+ struct rand48_state_t {
+ uint16 x0, x1, x2;
+ } vstate;
+
+ };
+
+} // nv namespace
+
+#endif // NV_MATH_RANDOM_H
diff --git a/thirdparty/thekla_atlas/nvmath/Solver.cpp b/thirdparty/thekla_atlas/nvmath/Solver.cpp
new file mode 100644
index 0000000000..191793ee29
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Solver.cpp
@@ -0,0 +1,744 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "Solver.h"
+#include "Sparse.h"
+
+#include "nvcore/Array.inl"
+
+using namespace nv;
+
+namespace
+{
+ class Preconditioner
+ {
+ public:
+ // Virtual dtor.
+ virtual ~Preconditioner() { }
+
+ // Apply preconditioning step.
+ virtual void apply(const FullVector & x, FullVector & y) const = 0;
+ };
+
+
+ // Jacobi preconditioner.
+ class JacobiPreconditioner : public Preconditioner
+ {
+ public:
+
+ JacobiPreconditioner(const SparseMatrix & M, bool symmetric) : m_inverseDiagonal(M.width())
+ {
+ nvCheck(M.isSquare());
+
+ for(uint x = 0; x < M.width(); x++)
+ {
+ float elem = M.getCoefficient(x, x);
+ //nvDebugCheck( elem != 0.0f ); // This can be zero in the presence of zero area triangles.
+
+ if (symmetric)
+ {
+ m_inverseDiagonal[x] = (elem != 0) ? 1.0f / sqrtf(fabsf(elem)) : 1.0f;
+ }
+ else
+ {
+ m_inverseDiagonal[x] = (elem != 0) ? 1.0f / elem : 1.0f;
+ }
+ }
+ }
+
+ void apply(const FullVector & x, FullVector & y) const
+ {
+ nvDebugCheck(x.dimension() == m_inverseDiagonal.dimension());
+ nvDebugCheck(y.dimension() == m_inverseDiagonal.dimension());
+
+ // @@ Wrap vector component-wise product into a separate function.
+ const uint D = x.dimension();
+ for (uint i = 0; i < D; i++)
+ {
+ y[i] = m_inverseDiagonal[i] * x[i];
+ }
+ }
+
+ private:
+
+ FullVector m_inverseDiagonal;
+
+ };
+
+} // namespace
+
+
+static bool ConjugateGradientSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon);
+static bool ConjugateGradientSolver(const Preconditioner & preconditioner, const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon);
+
+
+// Solve the symmetric system: At·A·x = At·b
+bool nv::LeastSquaresSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon/*1e-5f*/)
+{
+ nvDebugCheck(A.width() == x.dimension());
+ nvDebugCheck(A.height() == b.dimension());
+ nvDebugCheck(A.height() >= A.width()); // @@ If height == width we could solve it directly...
+
+ const uint D = A.width();
+
+ SparseMatrix At(A.height(), A.width());
+ transpose(A, At);
+
+ FullVector Atb(D);
+ //mult(Transposed, A, b, Atb);
+ mult(At, b, Atb);
+
+ SparseMatrix AtA(D);
+ //mult(Transposed, A, NoTransposed, A, AtA);
+ mult(At, A, AtA);
+
+ return SymmetricSolver(AtA, Atb, x, epsilon);
+}
+
+
+// See section 10.4.3 in: Mesh Parameterization: Theory and Practice, Siggraph Course Notes, August 2007
+bool nv::LeastSquaresSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, const uint * lockedParameters, uint lockedCount, float epsilon/*= 1e-5f*/)
+{
+ nvDebugCheck(A.width() == x.dimension());
+ nvDebugCheck(A.height() == b.dimension());
+ nvDebugCheck(A.height() >= A.width() - lockedCount);
+
+ // @@ This is not the most efficient way of building a system with reduced degrees of freedom. It would be faster to do it on the fly.
+
+ const uint D = A.width() - lockedCount;
+ nvDebugCheck(D > 0);
+
+ // Compute: b - Al * xl
+ FullVector b_Alxl(b);
+
+ for (uint y = 0; y < A.height(); y++)
+ {
+ const uint count = A.getRow(y).count();
+ for (uint e = 0; e < count; e++)
+ {
+ uint column = A.getRow(y)[e].x;
+
+ bool isFree = true;
+ for (uint i = 0; i < lockedCount; i++)
+ {
+ isFree &= (lockedParameters[i] != column);
+ }
+
+ if (!isFree)
+ {
+ b_Alxl[y] -= x[column] * A.getRow(y)[e].v;
+ }
+ }
+ }
+
+ // Remove locked columns from A.
+ SparseMatrix Af(D, A.height());
+
+ for (uint y = 0; y < A.height(); y++)
+ {
+ const uint count = A.getRow(y).count();
+ for (uint e = 0; e < count; e++)
+ {
+ uint column = A.getRow(y)[e].x;
+ uint ix = column;
+
+ bool isFree = true;
+ for (uint i = 0; i < lockedCount; i++)
+ {
+ isFree &= (lockedParameters[i] != column);
+ if (column > lockedParameters[i]) ix--; // shift columns
+ }
+
+ if (isFree)
+ {
+ Af.setCoefficient(ix, y, A.getRow(y)[e].v);
+ }
+ }
+ }
+
+ // Remove elements from x
+ FullVector xf(D);
+
+ for (uint i = 0, j = 0; i < A.width(); i++)
+ {
+ bool isFree = true;
+ for (uint l = 0; l < lockedCount; l++)
+ {
+ isFree &= (lockedParameters[l] != i);
+ }
+
+ if (isFree)
+ {
+ xf[j++] = x[i];
+ }
+ }
+
+ // Solve reduced system.
+ bool result = LeastSquaresSolver(Af, b_Alxl, xf, epsilon);
+
+ // Copy results back to x.
+ for (uint i = 0, j = 0; i < A.width(); i++)
+ {
+ bool isFree = true;
+ for (uint l = 0; l < lockedCount; l++)
+ {
+ isFree &= (lockedParameters[l] != i);
+ }
+
+ if (isFree)
+ {
+ x[i] = xf[j++];
+ }
+ }
+
+ return result;
+}
+
+
+bool nv::SymmetricSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon/*1e-5f*/)
+{
+ nvDebugCheck(A.height() == A.width());
+ nvDebugCheck(A.height() == b.dimension());
+ nvDebugCheck(b.dimension() == x.dimension());
+
+ JacobiPreconditioner jacobi(A, true);
+ return ConjugateGradientSolver(jacobi, A, b, x, epsilon);
+
+ //return ConjugateGradientSolver(A, b, x, epsilon);
+}
+
+
+/**
+* Compute the solution of the sparse linear system Ab=x using the Conjugate
+* Gradient method.
+*
+* Solving sparse linear systems:
+* (1) A·x = b
+*
+* The conjugate gradient algorithm solves (1) only in the case that A is
+* symmetric and positive definite. It is based on the idea of minimizing the
+* function
+*
+* (2) f(x) = 1/2·x·A·x - b·x
+*
+* This function is minimized when its gradient
+*
+* (3) df = A·x - b
+*
+* is zero, which is equivalent to (1). The minimization is carried out by
+* generating a succession of search directions p.k and improved minimizers x.k.
+* At each stage a quantity alfa.k is found that minimizes f(x.k + alfa.k·p.k),
+* and x.k+1 is set equal to the new point x.k + alfa.k·p.k. The p.k and x.k are
+* built up in such a way that x.k+1 is also the minimizer of f over the whole
+* vector space of directions already taken, {p.1, p.2, . . . , p.k}. After N
+* iterations you arrive at the minimizer over the entire vector space, i.e., the
+* solution to (1).
+*
+* For a really good explanation of the method see:
+*
+* "An Introduction to the Conjugate Gradient Method Without the Agonizing Pain",
+* Jonhathan Richard Shewchuk.
+*
+**/
+/*static*/ bool ConjugateGradientSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon)
+{
+ nvDebugCheck( A.isSquare() );
+ nvDebugCheck( A.width() == b.dimension() );
+ nvDebugCheck( A.width() == x.dimension() );
+
+ int i = 0;
+ const int D = A.width();
+ const int i_max = 4 * D; // Convergence should be linear, but in some cases, it's not.
+
+ FullVector r(D); // residual
+ FullVector p(D); // search direction
+ FullVector q(D); //
+ float delta_0;
+ float delta_old;
+ float delta_new;
+ float alpha;
+ float beta;
+
+ // r = b - A·x;
+ copy(b, r);
+ sgemv(-1, A, x, 1, r);
+
+ // p = r;
+ copy(r, p);
+
+ delta_new = dot( r, r );
+ delta_0 = delta_new;
+
+ while (i < i_max && delta_new > epsilon*epsilon*delta_0)
+ {
+ i++;
+
+ // q = A·p
+ mult(A, p, q);
+
+ // alpha = delta_new / p·q
+ alpha = delta_new / dot( p, q );
+
+ // x = alfa·p + x
+ saxpy(alpha, p, x);
+
+ if ((i & 31) == 0) // recompute r after 32 steps
+ {
+ // r = b - A·x
+ copy(b, r);
+ sgemv(-1, A, x, 1, r);
+ }
+ else
+ {
+ // r = r - alpha·q
+ saxpy(-alpha, q, r);
+ }
+
+ delta_old = delta_new;
+ delta_new = dot( r, r );
+
+ beta = delta_new / delta_old;
+
+ // p = beta·p + r
+ scal(beta, p);
+ saxpy(1, r, p);
+ }
+
+ return delta_new <= epsilon*epsilon*delta_0;
+}
+
+
+// Conjugate gradient with preconditioner.
+/*static*/ bool ConjugateGradientSolver(const Preconditioner & preconditioner, const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon)
+{
+ nvDebugCheck( A.isSquare() );
+ nvDebugCheck( A.width() == b.dimension() );
+ nvDebugCheck( A.width() == x.dimension() );
+
+ int i = 0;
+ const int D = A.width();
+ const int i_max = 4 * D; // Convergence should be linear, but in some cases, it's not.
+
+ FullVector r(D); // residual
+ FullVector p(D); // search direction
+ FullVector q(D); //
+ FullVector s(D); // preconditioned
+ float delta_0;
+ float delta_old;
+ float delta_new;
+ float alpha;
+ float beta;
+
+ // r = b - A·x
+ copy(b, r);
+ sgemv(-1, A, x, 1, r);
+
+
+ // p = M^-1 · r
+ preconditioner.apply(r, p);
+ //copy(r, p);
+
+
+ delta_new = dot(r, p);
+ delta_0 = delta_new;
+
+ while (i < i_max && delta_new > epsilon*epsilon*delta_0)
+ {
+ i++;
+
+ // q = A·p
+ mult(A, p, q);
+
+ // alpha = delta_new / p·q
+ alpha = delta_new / dot(p, q);
+
+ // x = alfa·p + x
+ saxpy(alpha, p, x);
+
+ if ((i & 31) == 0) // recompute r after 32 steps
+ {
+ // r = b - A·x
+ copy(b, r);
+ sgemv(-1, A, x, 1, r);
+ }
+ else
+ {
+ // r = r - alfa·q
+ saxpy(-alpha, q, r);
+ }
+
+ // s = M^-1 · r
+ preconditioner.apply(r, s);
+ //copy(r, s);
+
+ delta_old = delta_new;
+ delta_new = dot( r, s );
+
+ beta = delta_new / delta_old;
+
+ // p = s + beta·p
+ scal(beta, p);
+ saxpy(1, s, p);
+ }
+
+ return delta_new <= epsilon*epsilon*delta_0;
+}
+
+
+#if 0 // Nonsymmetric solvers
+
+/** Bi-conjugate gradient method. */
+MATHLIB_API int BiConjugateGradientSolve( const SparseMatrix &A, const DenseVector &b, DenseVector &x, float epsilon ) {
+ piDebugCheck( A.IsSquare() );
+ piDebugCheck( A.Width() == b.Dim() );
+ piDebugCheck( A.Width() == x.Dim() );
+
+ int i = 0;
+ const int D = A.Width();
+ const int i_max = 4 * D;
+
+ float resid;
+ float rho_1 = 0;
+ float rho_2 = 0;
+ float alpha;
+ float beta;
+
+ DenseVector r(D);
+ DenseVector rtilde(D);
+ DenseVector p(D);
+ DenseVector ptilde(D);
+ DenseVector q(D);
+ DenseVector qtilde(D);
+ DenseVector tmp(D); // temporal vector.
+
+ // r = b - A·x;
+ A.Product( x, tmp );
+ r.Sub( b, tmp );
+
+ // rtilde = r
+ rtilde.Set( r );
+
+ // p = r;
+ p.Set( r );
+
+ // ptilde = rtilde
+ ptilde.Set( rtilde );
+
+
+
+ float normb = b.Norm();
+ if( normb == 0.0 ) normb = 1;
+
+ // test convergence
+ resid = r.Norm() / normb;
+ if( resid < epsilon ) {
+ // method converges?
+ return 0;
+ }
+
+
+ while( i < i_max ) {
+
+ i++;
+
+ rho_1 = DenseVectorDotProduct( r, rtilde );
+
+ if( rho_1 == 0 ) {
+ // method fails.
+ return -i;
+ }
+
+ if (i == 1) {
+ p.Set( r );
+ ptilde.Set( rtilde );
+ }
+ else {
+ beta = rho_1 / rho_2;
+
+ // p = r + beta * p;
+ p.Mad( r, p, beta );
+
+ // ptilde = ztilde + beta * ptilde;
+ ptilde.Mad( rtilde, ptilde, beta );
+ }
+
+ // q = A * p;
+ A.Product( p, q );
+
+ // qtilde = A^t * ptilde;
+ A.TransProduct( ptilde, qtilde );
+
+ alpha = rho_1 / DenseVectorDotProduct( ptilde, q );
+
+ // x += alpha * p;
+ x.Mad( x, p, alpha );
+
+ // r -= alpha * q;
+ r.Mad( r, q, -alpha );
+
+ // rtilde -= alpha * qtilde;
+ rtilde.Mad( rtilde, qtilde, -alpha );
+
+ rho_2 = rho_1;
+
+ // test convergence
+ resid = r.Norm() / normb;
+ if( resid < epsilon ) {
+ // method converges
+ return i;
+ }
+ }
+
+ return i;
+}
+
+
+/** Bi-conjugate gradient stabilized method. */
+int BiCGSTABSolve( const SparseMatrix &A, const DenseVector &b, DenseVector &x, float epsilon ) {
+ piDebugCheck( A.IsSquare() );
+ piDebugCheck( A.Width() == b.Dim() );
+ piDebugCheck( A.Width() == x.Dim() );
+
+ int i = 0;
+ const int D = A.Width();
+ const int i_max = 2 * D;
+
+
+ float resid;
+ float rho_1 = 0;
+ float rho_2 = 0;
+ float alpha = 0;
+ float beta = 0;
+ float omega = 0;
+
+ DenseVector p(D);
+ DenseVector phat(D);
+ DenseVector s(D);
+ DenseVector shat(D);
+ DenseVector t(D);
+ DenseVector v(D);
+
+ DenseVector r(D);
+ DenseVector rtilde(D);
+
+ DenseVector tmp(D);
+
+ // r = b - A·x;
+ A.Product( x, tmp );
+ r.Sub( b, tmp );
+
+ // rtilde = r
+ rtilde.Set( r );
+
+
+ float normb = b.Norm();
+ if( normb == 0.0 ) normb = 1;
+
+ // test convergence
+ resid = r.Norm() / normb;
+ if( resid < epsilon ) {
+ // method converges?
+ return 0;
+ }
+
+
+ while( i<i_max ) {
+
+ i++;
+
+ rho_1 = DenseVectorDotProduct( rtilde, r );
+ if( rho_1 == 0 ) {
+ // method fails
+ return -i;
+ }
+
+
+ if( i == 1 ) {
+ p.Set( r );
+ }
+ else {
+ beta = (rho_1 / rho_2) * (alpha / omega);
+
+ // p = r + beta * (p - omega * v);
+ p.Mad( p, v, -omega );
+ p.Mad( r, p, beta );
+ }
+
+ //phat = M.solve(p);
+ phat.Set( p );
+ //Precond( &phat, p );
+
+ //v = A * phat;
+ A.Product( phat, v );
+
+ alpha = rho_1 / DenseVectorDotProduct( rtilde, v );
+
+ // s = r - alpha * v;
+ s.Mad( r, v, -alpha );
+
+
+ resid = s.Norm() / normb;
+ if( resid < epsilon ) {
+ // x += alpha * phat;
+ x.Mad( x, phat, alpha );
+ return i;
+ }
+
+ //shat = M.solve(s);
+ shat.Set( s );
+ //Precond( &shat, s );
+
+ //t = A * shat;
+ A.Product( shat, t );
+
+ omega = DenseVectorDotProduct( t, s ) / DenseVectorDotProduct( t, t );
+
+ // x += alpha * phat + omega * shat;
+ x.Mad( x, shat, omega );
+ x.Mad( x, phat, alpha );
+
+ //r = s - omega * t;
+ r.Mad( s, t, -omega );
+
+ rho_2 = rho_1;
+
+ resid = r.Norm() / normb;
+ if( resid < epsilon ) {
+ return i;
+ }
+
+ if( omega == 0 ) {
+ return -i; // ???
+ }
+ }
+
+ return i;
+}
+
+
+/** Bi-conjugate gradient stabilized method. */
+int BiCGSTABPrecondSolve( const SparseMatrix &A, const DenseVector &b, DenseVector &x, const IPreconditioner &M, float epsilon ) {
+ piDebugCheck( A.IsSquare() );
+ piDebugCheck( A.Width() == b.Dim() );
+ piDebugCheck( A.Width() == x.Dim() );
+
+ int i = 0;
+ const int D = A.Width();
+ const int i_max = D;
+ // const int i_max = 1000;
+
+
+ float resid;
+ float rho_1 = 0;
+ float rho_2 = 0;
+ float alpha = 0;
+ float beta = 0;
+ float omega = 0;
+
+ DenseVector p(D);
+ DenseVector phat(D);
+ DenseVector s(D);
+ DenseVector shat(D);
+ DenseVector t(D);
+ DenseVector v(D);
+
+ DenseVector r(D);
+ DenseVector rtilde(D);
+
+ DenseVector tmp(D);
+
+ // r = b - A·x;
+ A.Product( x, tmp );
+ r.Sub( b, tmp );
+
+ // rtilde = r
+ rtilde.Set( r );
+
+
+ float normb = b.Norm();
+ if( normb == 0.0 ) normb = 1;
+
+ // test convergence
+ resid = r.Norm() / normb;
+ if( resid < epsilon ) {
+ // method converges?
+ return 0;
+ }
+
+
+ while( i<i_max ) {
+
+ i++;
+
+ rho_1 = DenseVectorDotProduct( rtilde, r );
+ if( rho_1 == 0 ) {
+ // method fails
+ return -i;
+ }
+
+
+ if( i == 1 ) {
+ p.Set( r );
+ }
+ else {
+ beta = (rho_1 / rho_2) * (alpha / omega);
+
+ // p = r + beta * (p - omega * v);
+ p.Mad( p, v, -omega );
+ p.Mad( r, p, beta );
+ }
+
+ //phat = M.solve(p);
+ //phat.Set( p );
+ M.Precond( &phat, p );
+
+ //v = A * phat;
+ A.Product( phat, v );
+
+ alpha = rho_1 / DenseVectorDotProduct( rtilde, v );
+
+ // s = r - alpha * v;
+ s.Mad( r, v, -alpha );
+
+
+ resid = s.Norm() / normb;
+
+ //printf( "--- Iteration %d: residual = %f\n", i, resid );
+
+ if( resid < epsilon ) {
+ // x += alpha * phat;
+ x.Mad( x, phat, alpha );
+ return i;
+ }
+
+ //shat = M.solve(s);
+ //shat.Set( s );
+ M.Precond( &shat, s );
+
+ //t = A * shat;
+ A.Product( shat, t );
+
+ omega = DenseVectorDotProduct( t, s ) / DenseVectorDotProduct( t, t );
+
+ // x += alpha * phat + omega * shat;
+ x.Mad( x, shat, omega );
+ x.Mad( x, phat, alpha );
+
+ //r = s - omega * t;
+ r.Mad( s, t, -omega );
+
+ rho_2 = rho_1;
+
+ resid = r.Norm() / normb;
+ if( resid < epsilon ) {
+ return i;
+ }
+
+ if( omega == 0 ) {
+ return -i; // ???
+ }
+ }
+
+ return i;
+}
+
+#endif
diff --git a/thirdparty/thekla_atlas/nvmath/Solver.h b/thirdparty/thekla_atlas/nvmath/Solver.h
new file mode 100644
index 0000000000..2bbf92736a
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Solver.h
@@ -0,0 +1,24 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_SOLVER_H
+#define NV_MATH_SOLVER_H
+
+#include "nvmath.h"
+
+namespace nv
+{
+ class SparseMatrix;
+ class FullVector;
+
+
+ // Linear solvers.
+ NVMATH_API bool LeastSquaresSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon = 1e-5f);
+ NVMATH_API bool LeastSquaresSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, const uint * lockedParameters, uint lockedCount, float epsilon = 1e-5f);
+ NVMATH_API bool SymmetricSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon = 1e-5f);
+ //NVMATH_API void NonSymmetricSolver(const SparseMatrix & A, const FullVector & b, FullVector & x, float epsilon = 1e-5f);
+
+} // nv namespace
+
+
+#endif // NV_MATH_SOLVER_H
diff --git a/thirdparty/thekla_atlas/nvmath/Sparse.cpp b/thirdparty/thekla_atlas/nvmath/Sparse.cpp
new file mode 100644
index 0000000000..421e7ee022
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Sparse.cpp
@@ -0,0 +1,889 @@
+// This code is in the public domain -- Ignacio Castaño <castanyo@yahoo.es>
+
+#include "Sparse.h"
+#include "KahanSum.h"
+
+#include "nvcore/Array.inl"
+
+#define USE_KAHAN_SUM 0
+
+
+using namespace nv;
+
+
+FullVector::FullVector(uint dim)
+{
+ m_array.resize(dim);
+}
+
+FullVector::FullVector(const FullVector & v) : m_array(v.m_array)
+{
+}
+
+const FullVector & FullVector::operator=(const FullVector & v)
+{
+ nvCheck(dimension() == v.dimension());
+
+ m_array = v.m_array;
+
+ return *this;
+}
+
+
+void FullVector::fill(float f)
+{
+ const uint dim = dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ m_array[i] = f;
+ }
+}
+
+void FullVector::operator+= (const FullVector & v)
+{
+ nvDebugCheck(dimension() == v.dimension());
+
+ const uint dim = dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ m_array[i] += v.m_array[i];
+ }
+}
+
+void FullVector::operator-= (const FullVector & v)
+{
+ nvDebugCheck(dimension() == v.dimension());
+
+ const uint dim = dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ m_array[i] -= v.m_array[i];
+ }
+}
+
+void FullVector::operator*= (const FullVector & v)
+{
+ nvDebugCheck(dimension() == v.dimension());
+
+ const uint dim = dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ m_array[i] *= v.m_array[i];
+ }
+}
+
+void FullVector::operator+= (float f)
+{
+ const uint dim = dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ m_array[i] += f;
+ }
+}
+
+void FullVector::operator-= (float f)
+{
+ const uint dim = dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ m_array[i] -= f;
+ }
+}
+
+void FullVector::operator*= (float f)
+{
+ const uint dim = dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ m_array[i] *= f;
+ }
+}
+
+
+void nv::saxpy(float a, const FullVector & x, FullVector & y)
+{
+ nvDebugCheck(x.dimension() == y.dimension());
+
+ const uint dim = x.dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ y[i] += a * x[i];
+ }
+}
+
+void nv::copy(const FullVector & x, FullVector & y)
+{
+ nvDebugCheck(x.dimension() == y.dimension());
+
+ const uint dim = x.dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ y[i] = x[i];
+ }
+}
+
+void nv::scal(float a, FullVector & x)
+{
+ const uint dim = x.dimension();
+ for (uint i = 0; i < dim; i++)
+ {
+ x[i] *= a;
+ }
+}
+
+float nv::dot(const FullVector & x, const FullVector & y)
+{
+ nvDebugCheck(x.dimension() == y.dimension());
+
+ const uint dim = x.dimension();
+
+#if USE_KAHAN_SUM
+ KahanSum kahan;
+ for (uint i = 0; i < dim; i++)
+ {
+ kahan.add(x[i] * y[i]);
+ }
+ return kahan.sum();
+#else
+ float sum = 0;
+ for (uint i = 0; i < dim; i++)
+ {
+ sum += x[i] * y[i];
+ }
+ return sum;
+#endif
+}
+
+
+FullMatrix::FullMatrix(uint d) : m_width(d), m_height(d)
+{
+ m_array.resize(d*d, 0.0f);
+}
+
+FullMatrix::FullMatrix(uint w, uint h) : m_width(w), m_height(h)
+{
+ m_array.resize(w*h, 0.0f);
+}
+
+FullMatrix::FullMatrix(const FullMatrix & m) : m_width(m.m_width), m_height(m.m_height)
+{
+ m_array = m.m_array;
+}
+
+const FullMatrix & FullMatrix::operator=(const FullMatrix & m)
+{
+ nvCheck(width() == m.width());
+ nvCheck(height() == m.height());
+
+ m_array = m.m_array;
+
+ return *this;
+}
+
+
+float FullMatrix::getCoefficient(uint x, uint y) const
+{
+ nvDebugCheck( x < width() );
+ nvDebugCheck( y < height() );
+
+ return m_array[y * width() + x];
+}
+
+void FullMatrix::setCoefficient(uint x, uint y, float f)
+{
+ nvDebugCheck( x < width() );
+ nvDebugCheck( y < height() );
+
+ m_array[y * width() + x] = f;
+}
+
+void FullMatrix::addCoefficient(uint x, uint y, float f)
+{
+ nvDebugCheck( x < width() );
+ nvDebugCheck( y < height() );
+
+ m_array[y * width() + x] += f;
+}
+
+void FullMatrix::mulCoefficient(uint x, uint y, float f)
+{
+ nvDebugCheck( x < width() );
+ nvDebugCheck( y < height() );
+
+ m_array[y * width() + x] *= f;
+}
+
+float FullMatrix::dotRow(uint y, const FullVector & v) const
+{
+ nvDebugCheck( v.dimension() == width() );
+ nvDebugCheck( y < height() );
+
+ float sum = 0;
+
+ const uint count = v.dimension();
+ for (uint i = 0; i < count; i++)
+ {
+ sum += m_array[y * count + i] * v[i];
+ }
+
+ return sum;
+}
+
+void FullMatrix::madRow(uint y, float alpha, FullVector & v) const
+{
+ nvDebugCheck( v.dimension() == width() );
+ nvDebugCheck( y < height() );
+
+ const uint count = v.dimension();
+ for (uint i = 0; i < count; i++)
+ {
+ v[i] += m_array[y * count + i];
+ }
+}
+
+
+// y = M * x
+void nv::mult(const FullMatrix & M, const FullVector & x, FullVector & y)
+{
+ mult(NoTransposed, M, x, y);
+}
+
+void nv::mult(Transpose TM, const FullMatrix & M, const FullVector & x, FullVector & y)
+{
+ const uint w = M.width();
+ const uint h = M.height();
+
+ if (TM == Transposed)
+ {
+ nvDebugCheck( h == x.dimension() );
+ nvDebugCheck( w == y.dimension() );
+
+ y.fill(0.0f);
+
+ for (uint i = 0; i < h; i++)
+ {
+ M.madRow(i, x[i], y);
+ }
+ }
+ else
+ {
+ nvDebugCheck( w == x.dimension() );
+ nvDebugCheck( h == y.dimension() );
+
+ for (uint i = 0; i < h; i++)
+ {
+ y[i] = M.dotRow(i, x);
+ }
+ }
+}
+
+// y = alpha*A*x + beta*y
+void nv::sgemv(float alpha, const FullMatrix & A, const FullVector & x, float beta, FullVector & y)
+{
+ sgemv(alpha, NoTransposed, A, x, beta, y);
+}
+
+void nv::sgemv(float alpha, Transpose TA, const FullMatrix & A, const FullVector & x, float beta, FullVector & y)
+{
+ const uint w = A.width();
+ const uint h = A.height();
+
+ if (TA == Transposed)
+ {
+ nvDebugCheck( h == x.dimension() );
+ nvDebugCheck( w == y.dimension() );
+
+ for (uint i = 0; i < h; i++)
+ {
+ A.madRow(i, alpha * x[i], y);
+ }
+ }
+ else
+ {
+ nvDebugCheck( w == x.dimension() );
+ nvDebugCheck( h == y.dimension() );
+
+ for (uint i = 0; i < h; i++)
+ {
+ y[i] = alpha * A.dotRow(i, x) + beta * y[i];
+ }
+ }
+}
+
+
+// Multiply a row of A by a column of B.
+static float dot(uint j, Transpose TA, const FullMatrix & A, uint i, Transpose TB, const FullMatrix & B)
+{
+ const uint w = (TA == NoTransposed) ? A.width() : A.height();
+ nvDebugCheck(w == ((TB == NoTransposed) ? B.height() : A.width()));
+
+ float sum = 0.0f;
+
+ for (uint k = 0; k < w; k++)
+ {
+ const float a = (TA == NoTransposed) ? A.getCoefficient(k, j) : A.getCoefficient(j, k); // @@ Move branches out of the loop?
+ const float b = (TB == NoTransposed) ? B.getCoefficient(i, k) : A.getCoefficient(k, i);
+ sum += a * b;
+ }
+
+ return sum;
+}
+
+
+// C = A * B
+void nv::mult(const FullMatrix & A, const FullMatrix & B, FullMatrix & C)
+{
+ mult(NoTransposed, A, NoTransposed, B, C);
+}
+
+void nv::mult(Transpose TA, const FullMatrix & A, Transpose TB, const FullMatrix & B, FullMatrix & C)
+{
+ sgemm(1.0f, TA, A, TB, B, 0.0f, C);
+}
+
+// C = alpha*A*B + beta*C
+void nv::sgemm(float alpha, const FullMatrix & A, const FullMatrix & B, float beta, FullMatrix & C)
+{
+ sgemm(alpha, NoTransposed, A, NoTransposed, B, beta, C);
+}
+
+void nv::sgemm(float alpha, Transpose TA, const FullMatrix & A, Transpose TB, const FullMatrix & B, float beta, FullMatrix & C)
+{
+ const uint w = C.width();
+ const uint h = C.height();
+
+ uint aw = (TA == NoTransposed) ? A.width() : A.height();
+ uint ah = (TA == NoTransposed) ? A.height() : A.width();
+ uint bw = (TB == NoTransposed) ? B.width() : B.height();
+ uint bh = (TB == NoTransposed) ? B.height() : B.width();
+
+ nvDebugCheck(aw == bh);
+ nvDebugCheck(bw == ah);
+ nvDebugCheck(w == bw);
+ nvDebugCheck(h == ah);
+
+ for (uint y = 0; y < h; y++)
+ {
+ for (uint x = 0; x < w; x++)
+ {
+ float c = alpha * ::dot(x, TA, A, y, TB, B) + beta * C.getCoefficient(x, y);
+ C.setCoefficient(x, y, c);
+ }
+ }
+}
+
+
+
+
+
+/// Ctor. Init the size of the sparse matrix.
+SparseMatrix::SparseMatrix(uint d) : m_width(d)
+{
+ m_array.resize(d);
+}
+
+/// Ctor. Init the size of the sparse matrix.
+SparseMatrix::SparseMatrix(uint w, uint h) : m_width(w)
+{
+ m_array.resize(h);
+}
+
+SparseMatrix::SparseMatrix(const SparseMatrix & m) : m_width(m.m_width)
+{
+ m_array = m.m_array;
+}
+
+const SparseMatrix & SparseMatrix::operator=(const SparseMatrix & m)
+{
+ nvCheck(width() == m.width());
+ nvCheck(height() == m.height());
+
+ m_array = m.m_array;
+
+ return *this;
+}
+
+
+// x is column, y is row
+float SparseMatrix::getCoefficient(uint x, uint y) const
+{
+ nvDebugCheck( x < width() );
+ nvDebugCheck( y < height() );
+
+ const uint count = m_array[y].count();
+ for (uint i = 0; i < count; i++)
+ {
+ if (m_array[y][i].x == x) return m_array[y][i].v;
+ }
+
+ return 0.0f;
+}
+
+void SparseMatrix::setCoefficient(uint x, uint y, float f)
+{
+ nvDebugCheck( x < width() );
+ nvDebugCheck( y < height() );
+
+ const uint count = m_array[y].count();
+ for (uint i = 0; i < count; i++)
+ {
+ if (m_array[y][i].x == x)
+ {
+ m_array[y][i].v = f;
+ return;
+ }
+ }
+
+ if (f != 0.0f)
+ {
+ Coefficient c = { x, f };
+ m_array[y].append( c );
+ }
+}
+
+void SparseMatrix::addCoefficient(uint x, uint y, float f)
+{
+ nvDebugCheck( x < width() );
+ nvDebugCheck( y < height() );
+
+ if (f != 0.0f)
+ {
+ const uint count = m_array[y].count();
+ for (uint i = 0; i < count; i++)
+ {
+ if (m_array[y][i].x == x)
+ {
+ m_array[y][i].v += f;
+ return;
+ }
+ }
+
+ Coefficient c = { x, f };
+ m_array[y].append( c );
+ }
+}
+
+void SparseMatrix::mulCoefficient(uint x, uint y, float f)
+{
+ nvDebugCheck( x < width() );
+ nvDebugCheck( y < height() );
+
+ const uint count = m_array[y].count();
+ for (uint i = 0; i < count; i++)
+ {
+ if (m_array[y][i].x == x)
+ {
+ m_array[y][i].v *= f;
+ return;
+ }
+ }
+
+ if (f != 0.0f)
+ {
+ Coefficient c = { x, f };
+ m_array[y].append( c );
+ }
+}
+
+
+float SparseMatrix::sumRow(uint y) const
+{
+ nvDebugCheck( y < height() );
+
+ const uint count = m_array[y].count();
+
+#if USE_KAHAN_SUM
+ KahanSum kahan;
+ for (uint i = 0; i < count; i++)
+ {
+ kahan.add(m_array[y][i].v);
+ }
+ return kahan.sum();
+#else
+ float sum = 0;
+ for (uint i = 0; i < count; i++)
+ {
+ sum += m_array[y][i].v;
+ }
+ return sum;
+#endif
+}
+
+float SparseMatrix::dotRow(uint y, const FullVector & v) const
+{
+ nvDebugCheck( y < height() );
+
+ const uint count = m_array[y].count();
+
+#if USE_KAHAN_SUM
+ KahanSum kahan;
+ for (uint i = 0; i < count; i++)
+ {
+ kahan.add(m_array[y][i].v * v[m_array[y][i].x]);
+ }
+ return kahan.sum();
+#else
+ float sum = 0;
+ for (uint i = 0; i < count; i++)
+ {
+ sum += m_array[y][i].v * v[m_array[y][i].x];
+ }
+ return sum;
+#endif
+}
+
+void SparseMatrix::madRow(uint y, float alpha, FullVector & v) const
+{
+ nvDebugCheck(y < height());
+
+ const uint count = m_array[y].count();
+ for (uint i = 0; i < count; i++)
+ {
+ v[m_array[y][i].x] += alpha * m_array[y][i].v;
+ }
+}
+
+
+void SparseMatrix::clearRow(uint y)
+{
+ nvDebugCheck( y < height() );
+
+ m_array[y].clear();
+}
+
+void SparseMatrix::scaleRow(uint y, float f)
+{
+ nvDebugCheck( y < height() );
+
+ const uint count = m_array[y].count();
+ for (uint i = 0; i < count; i++)
+ {
+ m_array[y][i].v *= f;
+ }
+}
+
+void SparseMatrix::normalizeRow(uint y)
+{
+ nvDebugCheck( y < height() );
+
+ float norm = 0.0f;
+
+ const uint count = m_array[y].count();
+ for (uint i = 0; i < count; i++)
+ {
+ float f = m_array[y][i].v;
+ norm += f * f;
+ }
+
+ scaleRow(y, 1.0f / sqrtf(norm));
+}
+
+
+void SparseMatrix::clearColumn(uint x)
+{
+ nvDebugCheck(x < width());
+
+ for (uint y = 0; y < height(); y++)
+ {
+ const uint count = m_array[y].count();
+ for (uint e = 0; e < count; e++)
+ {
+ if (m_array[y][e].x == x)
+ {
+ m_array[y][e].v = 0.0f;
+ break;
+ }
+ }
+ }
+}
+
+void SparseMatrix::scaleColumn(uint x, float f)
+{
+ nvDebugCheck(x < width());
+
+ for (uint y = 0; y < height(); y++)
+ {
+ const uint count = m_array[y].count();
+ for (uint e = 0; e < count; e++)
+ {
+ if (m_array[y][e].x == x)
+ {
+ m_array[y][e].v *= f;
+ break;
+ }
+ }
+ }
+}
+
+const Array<SparseMatrix::Coefficient> & SparseMatrix::getRow(uint y) const
+{
+ return m_array[y];
+}
+
+
+bool SparseMatrix::isSymmetric() const
+{
+ for (uint y = 0; y < height(); y++)
+ {
+ const uint count = m_array[y].count();
+ for (uint e = 0; e < count; e++)
+ {
+ const uint x = m_array[y][e].x;
+ if (x > y) {
+ float v = m_array[y][e].v;
+
+ if (!equal(getCoefficient(y, x), v)) { // @@ epsilon
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+
+// y = M * x
+void nv::mult(const SparseMatrix & M, const FullVector & x, FullVector & y)
+{
+ mult(NoTransposed, M, x, y);
+}
+
+void nv::mult(Transpose TM, const SparseMatrix & M, const FullVector & x, FullVector & y)
+{
+ const uint w = M.width();
+ const uint h = M.height();
+
+ if (TM == Transposed)
+ {
+ nvDebugCheck( h == x.dimension() );
+ nvDebugCheck( w == y.dimension() );
+
+ y.fill(0.0f);
+
+ for (uint i = 0; i < h; i++)
+ {
+ M.madRow(i, x[i], y);
+ }
+ }
+ else
+ {
+ nvDebugCheck( w == x.dimension() );
+ nvDebugCheck( h == y.dimension() );
+
+ for (uint i = 0; i < h; i++)
+ {
+ y[i] = M.dotRow(i, x);
+ }
+ }
+}
+
+// y = alpha*A*x + beta*y
+void nv::sgemv(float alpha, const SparseMatrix & A, const FullVector & x, float beta, FullVector & y)
+{
+ sgemv(alpha, NoTransposed, A, x, beta, y);
+}
+
+void nv::sgemv(float alpha, Transpose TA, const SparseMatrix & A, const FullVector & x, float beta, FullVector & y)
+{
+ const uint w = A.width();
+ const uint h = A.height();
+
+ if (TA == Transposed)
+ {
+ nvDebugCheck( h == x.dimension() );
+ nvDebugCheck( w == y.dimension() );
+
+ for (uint i = 0; i < h; i++)
+ {
+ A.madRow(i, alpha * x[i], y);
+ }
+ }
+ else
+ {
+ nvDebugCheck( w == x.dimension() );
+ nvDebugCheck( h == y.dimension() );
+
+ for (uint i = 0; i < h; i++)
+ {
+ y[i] = alpha * A.dotRow(i, x) + beta * y[i];
+ }
+ }
+}
+
+
+// dot y-row of A by x-column of B
+static float dotRowColumn(int y, const SparseMatrix & A, int x, const SparseMatrix & B)
+{
+ const Array<SparseMatrix::Coefficient> & row = A.getRow(y);
+
+ const uint count = row.count();
+
+#if USE_KAHAN_SUM
+ KahanSum kahan;
+ for (uint i = 0; i < count; i++)
+ {
+ const SparseMatrix::Coefficient & c = row[i];
+ kahan.add(c.v * B.getCoefficient(x, c.x));
+ }
+ return kahan.sum();
+#else
+ float sum = 0.0f;
+ for (uint i = 0; i < count; i++)
+ {
+ const SparseMatrix::Coefficient & c = row[i];
+ sum += c.v * B.getCoefficient(x, c.x);
+ }
+ return sum;
+#endif
+}
+
+// dot y-row of A by x-row of B
+static float dotRowRow(int y, const SparseMatrix & A, int x, const SparseMatrix & B)
+{
+ const Array<SparseMatrix::Coefficient> & row = A.getRow(y);
+
+ const uint count = row.count();
+
+#if USE_KAHAN_SUM
+ KahanSum kahan;
+ for (uint i = 0; i < count; i++)
+ {
+ const SparseMatrix::Coefficient & c = row[i];
+ kahan.add(c.v * B.getCoefficient(c.x, x));
+ }
+ return kahan.sum();
+#else
+ float sum = 0.0f;
+ for (uint i = 0; i < count; i++)
+ {
+ const SparseMatrix::Coefficient & c = row[i];
+ sum += c.v * B.getCoefficient(c.x, x);
+ }
+ return sum;
+#endif
+}
+
+// dot y-column of A by x-column of B
+static float dotColumnColumn(int y, const SparseMatrix & A, int x, const SparseMatrix & B)
+{
+ nvDebugCheck(A.height() == B.height());
+
+ const uint h = A.height();
+
+#if USE_KAHAN_SUM
+ KahanSum kahan;
+ for (uint i = 0; i < h; i++)
+ {
+ kahan.add(A.getCoefficient(y, i) * B.getCoefficient(x, i));
+ }
+ return kahan.sum();
+#else
+ float sum = 0.0f;
+ for (uint i = 0; i < h; i++)
+ {
+ sum += A.getCoefficient(y, i) * B.getCoefficient(x, i);
+ }
+ return sum;
+#endif
+}
+
+
+void nv::transpose(const SparseMatrix & A, SparseMatrix & B)
+{
+ nvDebugCheck(A.width() == B.height());
+ nvDebugCheck(B.width() == A.height());
+
+ const uint w = A.width();
+ for (uint x = 0; x < w; x++)
+ {
+ B.clearRow(x);
+ }
+
+ const uint h = A.height();
+ for (uint y = 0; y < h; y++)
+ {
+ const Array<SparseMatrix::Coefficient> & row = A.getRow(y);
+
+ const uint count = row.count();
+ for (uint i = 0; i < count; i++)
+ {
+ const SparseMatrix::Coefficient & c = row[i];
+ nvDebugCheck(c.x < w);
+
+ B.setCoefficient(y, c.x, c.v);
+ }
+ }
+}
+
+// C = A * B
+void nv::mult(const SparseMatrix & A, const SparseMatrix & B, SparseMatrix & C)
+{
+ mult(NoTransposed, A, NoTransposed, B, C);
+}
+
+void nv::mult(Transpose TA, const SparseMatrix & A, Transpose TB, const SparseMatrix & B, SparseMatrix & C)
+{
+ sgemm(1.0f, TA, A, TB, B, 0.0f, C);
+}
+
+// C = alpha*A*B + beta*C
+void nv::sgemm(float alpha, const SparseMatrix & A, const SparseMatrix & B, float beta, SparseMatrix & C)
+{
+ sgemm(alpha, NoTransposed, A, NoTransposed, B, beta, C);
+}
+
+void nv::sgemm(float alpha, Transpose TA, const SparseMatrix & A, Transpose TB, const SparseMatrix & B, float beta, SparseMatrix & C)
+{
+ const uint w = C.width();
+ const uint h = C.height();
+
+ uint aw = (TA == NoTransposed) ? A.width() : A.height();
+ uint ah = (TA == NoTransposed) ? A.height() : A.width();
+ uint bw = (TB == NoTransposed) ? B.width() : B.height();
+ uint bh = (TB == NoTransposed) ? B.height() : B.width();
+
+ nvDebugCheck(aw == bh);
+ nvDebugCheck(bw == ah);
+ nvDebugCheck(w == bw);
+ nvDebugCheck(h == ah);
+
+
+ for (uint y = 0; y < h; y++)
+ {
+ for (uint x = 0; x < w; x++)
+ {
+ float c = beta * C.getCoefficient(x, y);
+
+ if (TA == NoTransposed && TB == NoTransposed)
+ {
+ // dot y-row of A by x-column of B.
+ c += alpha * dotRowColumn(y, A, x, B);
+ }
+ else if (TA == Transposed && TB == Transposed)
+ {
+ // dot y-column of A by x-row of B.
+ c += alpha * dotRowColumn(x, B, y, A);
+ }
+ else if (TA == Transposed && TB == NoTransposed)
+ {
+ // dot y-column of A by x-column of B.
+ c += alpha * dotColumnColumn(y, A, x, B);
+ }
+ else if (TA == NoTransposed && TB == Transposed)
+ {
+ // dot y-row of A by x-row of B.
+ c += alpha * dotRowRow(y, A, x, B);
+ }
+
+ C.setCoefficient(x, y, c);
+ }
+ }
+}
+
+// C = At * A
+void nv::sqm(const SparseMatrix & A, SparseMatrix & C)
+{
+ // This is quite expensive...
+ mult(Transposed, A, NoTransposed, A, C);
+}
diff --git a/thirdparty/thekla_atlas/nvmath/Sparse.h b/thirdparty/thekla_atlas/nvmath/Sparse.h
new file mode 100644
index 0000000000..6b03ed51f3
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Sparse.h
@@ -0,0 +1,204 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_SPARSE_H
+#define NV_MATH_SPARSE_H
+
+#include "nvmath.h"
+#include "nvcore/Array.h"
+
+
+// Full and sparse vector and matrix classes. BLAS subset.
+
+namespace nv
+{
+ class FullVector;
+ class FullMatrix;
+ class SparseMatrix;
+
+
+ /// Fixed size vector class.
+ class FullVector
+ {
+ public:
+
+ FullVector(uint dim);
+ FullVector(const FullVector & v);
+
+ const FullVector & operator=(const FullVector & v);
+
+ uint dimension() const { return m_array.count(); }
+
+ const float & operator[]( uint index ) const { return m_array[index]; }
+ float & operator[] ( uint index ) { return m_array[index]; }
+
+ void fill(float f);
+
+ void operator+= (const FullVector & v);
+ void operator-= (const FullVector & v);
+ void operator*= (const FullVector & v);
+
+ void operator+= (float f);
+ void operator-= (float f);
+ void operator*= (float f);
+
+
+ private:
+
+ Array<float> m_array;
+
+ };
+
+ // Pseudo-BLAS interface.
+ NVMATH_API void saxpy(float a, const FullVector & x, FullVector & y); // y = a * x + y
+ NVMATH_API void copy(const FullVector & x, FullVector & y);
+ NVMATH_API void scal(float a, FullVector & x);
+ NVMATH_API float dot(const FullVector & x, const FullVector & y);
+
+
+ enum Transpose
+ {
+ NoTransposed = 0,
+ Transposed = 1
+ };
+
+ /// Full matrix class.
+ class FullMatrix
+ {
+ public:
+
+ FullMatrix(uint d);
+ FullMatrix(uint w, uint h);
+ FullMatrix(const FullMatrix & m);
+
+ const FullMatrix & operator=(const FullMatrix & m);
+
+ uint width() const { return m_width; }
+ uint height() const { return m_height; }
+ bool isSquare() const { return m_width == m_height; }
+
+ float getCoefficient(uint x, uint y) const;
+
+ void setCoefficient(uint x, uint y, float f);
+ void addCoefficient(uint x, uint y, float f);
+ void mulCoefficient(uint x, uint y, float f);
+
+ float dotRow(uint y, const FullVector & v) const;
+ void madRow(uint y, float alpha, FullVector & v) const;
+
+ protected:
+
+ bool isValid() const {
+ return m_array.size() == (m_width * m_height);
+ }
+
+ private:
+
+ const uint m_width;
+ const uint m_height;
+ Array<float> m_array;
+
+ };
+
+ NVMATH_API void mult(const FullMatrix & M, const FullVector & x, FullVector & y);
+ NVMATH_API void mult(Transpose TM, const FullMatrix & M, const FullVector & x, FullVector & y);
+
+ // y = alpha*A*x + beta*y
+ NVMATH_API void sgemv(float alpha, const FullMatrix & A, const FullVector & x, float beta, FullVector & y);
+ NVMATH_API void sgemv(float alpha, Transpose TA, const FullMatrix & A, const FullVector & x, float beta, FullVector & y);
+
+ NVMATH_API void mult(const FullMatrix & A, const FullMatrix & B, FullMatrix & C);
+ NVMATH_API void mult(Transpose TA, const FullMatrix & A, Transpose TB, const FullMatrix & B, FullMatrix & C);
+
+ // C = alpha*A*B + beta*C
+ NVMATH_API void sgemm(float alpha, const FullMatrix & A, const FullMatrix & B, float beta, FullMatrix & C);
+ NVMATH_API void sgemm(float alpha, Transpose TA, const FullMatrix & A, Transpose TB, const FullMatrix & B, float beta, FullMatrix & C);
+
+
+ /**
+ * Sparse matrix class. The matrix is assumed to be sparse and to have
+ * very few non-zero elements, for this reason it's stored in indexed
+ * format. To multiply column vectors efficiently, the matrix stores
+ * the elements in indexed-column order, there is a list of indexed
+ * elements for each row of the matrix. As with the FullVector the
+ * dimension of the matrix is constant.
+ **/
+ class SparseMatrix
+ {
+ friend class FullMatrix;
+ public:
+
+ // An element of the sparse array.
+ struct Coefficient {
+ uint x; // column
+ float v; // value
+ };
+
+
+ public:
+
+ SparseMatrix(uint d);
+ SparseMatrix(uint w, uint h);
+ SparseMatrix(const SparseMatrix & m);
+
+ const SparseMatrix & operator=(const SparseMatrix & m);
+
+
+ uint width() const { return m_width; }
+ uint height() const { return m_array.count(); }
+ bool isSquare() const { return width() == height(); }
+
+ float getCoefficient(uint x, uint y) const; // x is column, y is row
+
+ void setCoefficient(uint x, uint y, float f);
+ void addCoefficient(uint x, uint y, float f);
+ void mulCoefficient(uint x, uint y, float f);
+
+ float sumRow(uint y) const;
+ float dotRow(uint y, const FullVector & v) const;
+ void madRow(uint y, float alpha, FullVector & v) const;
+
+ void clearRow(uint y);
+ void scaleRow(uint y, float f);
+ void normalizeRow(uint y);
+
+ void clearColumn(uint x);
+ void scaleColumn(uint x, float f);
+
+ const Array<Coefficient> & getRow(uint y) const;
+
+ bool isSymmetric() const;
+
+ private:
+
+ /// Number of columns.
+ const uint m_width;
+
+ /// Array of matrix elements.
+ Array< Array<Coefficient> > m_array;
+
+ };
+
+ NVMATH_API void transpose(const SparseMatrix & A, SparseMatrix & B);
+
+ NVMATH_API void mult(const SparseMatrix & M, const FullVector & x, FullVector & y);
+ NVMATH_API void mult(Transpose TM, const SparseMatrix & M, const FullVector & x, FullVector & y);
+
+ // y = alpha*A*x + beta*y
+ NVMATH_API void sgemv(float alpha, const SparseMatrix & A, const FullVector & x, float beta, FullVector & y);
+ NVMATH_API void sgemv(float alpha, Transpose TA, const SparseMatrix & A, const FullVector & x, float beta, FullVector & y);
+
+ NVMATH_API void mult(const SparseMatrix & A, const SparseMatrix & B, SparseMatrix & C);
+ NVMATH_API void mult(Transpose TA, const SparseMatrix & A, Transpose TB, const SparseMatrix & B, SparseMatrix & C);
+
+ // C = alpha*A*B + beta*C
+ NVMATH_API void sgemm(float alpha, const SparseMatrix & A, const SparseMatrix & B, float beta, SparseMatrix & C);
+ NVMATH_API void sgemm(float alpha, Transpose TA, const SparseMatrix & A, Transpose TB, const SparseMatrix & B, float beta, SparseMatrix & C);
+
+ // C = At * A
+ NVMATH_API void sqm(const SparseMatrix & A, SparseMatrix & C);
+
+} // nv namespace
+
+
+#endif // NV_MATH_SPARSE_H
diff --git a/thirdparty/thekla_atlas/nvmath/Sphere.cpp b/thirdparty/thekla_atlas/nvmath/Sphere.cpp
new file mode 100644
index 0000000000..e0c1ad652c
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Sphere.cpp
@@ -0,0 +1,431 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "Sphere.h"
+#include "Vector.inl"
+#include "Box.inl"
+
+#include <float.h> // FLT_MAX
+
+using namespace nv;
+
+const float radiusEpsilon = 1e-4f;
+
+Sphere::Sphere(Vector3::Arg p0, Vector3::Arg p1)
+{
+ if (p0 == p1) *this = Sphere(p0);
+ else {
+ center = (p0 + p1) * 0.5f;
+ radius = length(p0 - center) + radiusEpsilon;
+
+ float d0 = length(p0 - center);
+ float d1 = length(p1 - center);
+ nvDebugCheck(equal(d0, radius - radiusEpsilon));
+ nvDebugCheck(equal(d1, radius - radiusEpsilon));
+ }
+}
+
+Sphere::Sphere(Vector3::Arg p0, Vector3::Arg p1, Vector3::Arg p2)
+{
+ if (p0 == p1 || p0 == p2) *this = Sphere(p1, p2);
+ else if (p1 == p2) *this = Sphere(p0, p2);
+ else {
+ Vector3 a = p1 - p0;
+ Vector3 b = p2 - p0;
+ Vector3 c = cross(a, b);
+
+ float denominator = 2.0f * lengthSquared(c);
+
+ if (!isZero(denominator)) {
+ Vector3 d = (lengthSquared(b) * cross(c, a) + lengthSquared(a) * cross(b, c)) / denominator;
+
+ center = p0 + d;
+ radius = length(d) + radiusEpsilon;
+
+ float d0 = length(p0 - center);
+ float d1 = length(p1 - center);
+ float d2 = length(p2 - center);
+ nvDebugCheck(equal(d0, radius - radiusEpsilon));
+ nvDebugCheck(equal(d1, radius - radiusEpsilon));
+ nvDebugCheck(equal(d2, radius - radiusEpsilon));
+ }
+ else {
+ // @@ This is a specialization of the code below, but really, the only thing we need to do here is to find the two most distant points.
+ // Compute all possible spheres, invalidate those that do not contain the four points, keep the smallest.
+ Sphere s0(p1, p2);
+ float d0 = distanceSquared(s0, p0);
+ if (d0 > 0) s0.radius = NV_FLOAT_MAX;
+
+ Sphere s1(p0, p2);
+ float d1 = distanceSquared(s1, p1);
+ if (d1 > 0) s1.radius = NV_FLOAT_MAX;
+
+ Sphere s2(p0, p1);
+ float d2 = distanceSquared(s2, p2);
+ if (d2 > 0) s1.radius = NV_FLOAT_MAX;
+
+ if (s0.radius < s1.radius && s0.radius < s2.radius) {
+ center = s0.center;
+ radius = s0.radius;
+ }
+ else if (s1.radius < s2.radius) {
+ center = s1.center;
+ radius = s1.radius;
+ }
+ else {
+ center = s2.center;
+ radius = s2.radius;
+ }
+ }
+ }
+}
+
+Sphere::Sphere(Vector3::Arg p0, Vector3::Arg p1, Vector3::Arg p2, Vector3::Arg p3)
+{
+ if (p0 == p1 || p0 == p2 || p0 == p3) *this = Sphere(p1, p2, p3);
+ else if (p1 == p2 || p1 == p3) *this = Sphere(p0, p2, p3);
+ else if (p2 == p3) *this = Sphere(p0, p1, p2);
+ else {
+ // @@ This only works if the points are not coplanar!
+ Vector3 a = p1 - p0;
+ Vector3 b = p2 - p0;
+ Vector3 c = p3 - p0;
+
+ float denominator = 2.0f * dot(c, cross(a, b)); // triple product.
+
+ if (!isZero(denominator)) {
+ Vector3 d = (lengthSquared(c) * cross(a, b) + lengthSquared(b) * cross(c, a) + lengthSquared(a) * cross(b, c)) / denominator;
+
+ center = p0 + d;
+ radius = length(d) + radiusEpsilon;
+
+ float d0 = length(p0 - center);
+ float d1 = length(p1 - center);
+ float d2 = length(p2 - center);
+ float d3 = length(p3 - center);
+ nvDebugCheck(equal(d0, radius - radiusEpsilon));
+ nvDebugCheck(equal(d1, radius - radiusEpsilon));
+ nvDebugCheck(equal(d2, radius - radiusEpsilon));
+ nvDebugCheck(equal(d3, radius - radiusEpsilon));
+ }
+ else {
+ // Compute all possible spheres, invalidate those that do not contain the four points, keep the smallest.
+ Sphere s0(p1, p2, p3);
+ float d0 = distanceSquared(s0, p0);
+ if (d0 > 0) s0.radius = NV_FLOAT_MAX;
+
+ Sphere s1(p0, p2, p3);
+ float d1 = distanceSquared(s1, p1);
+ if (d1 > 0) s1.radius = NV_FLOAT_MAX;
+
+ Sphere s2(p0, p1, p3);
+ float d2 = distanceSquared(s2, p2);
+ if (d2 > 0) s2.radius = NV_FLOAT_MAX;
+
+ Sphere s3(p0, p1, p2);
+ float d3 = distanceSquared(s3, p3);
+ if (d3 > 0) s2.radius = NV_FLOAT_MAX;
+
+ if (s0.radius < s1.radius && s0.radius < s2.radius && s0.radius < s3.radius) {
+ center = s0.center;
+ radius = s0.radius;
+ }
+ else if (s1.radius < s2.radius && s1.radius < s3.radius) {
+ center = s1.center;
+ radius = s1.radius;
+ }
+ else if (s1.radius < s3.radius) {
+ center = s2.center;
+ radius = s2.radius;
+ }
+ else {
+ center = s3.center;
+ radius = s3.radius;
+ }
+ }
+ }
+}
+
+
+float nv::distanceSquared(const Sphere & sphere, const Vector3 & point)
+{
+ return lengthSquared(sphere.center - point) - square(sphere.radius);
+}
+
+
+
+// Implementation of "MiniBall" based on:
+// http://www.flipcode.com/archives/Smallest_Enclosing_Spheres.shtml
+
+static Sphere recurseMini(const Vector3 *P[], uint p, uint b = 0)
+{
+ Sphere MB;
+
+ switch(b)
+ {
+ case 0:
+ MB = Sphere(*P[0]);
+ break;
+ case 1:
+ MB = Sphere(*P[-1]);
+ break;
+ case 2:
+ MB = Sphere(*P[-1], *P[-2]);
+ break;
+ case 3:
+ MB = Sphere(*P[-1], *P[-2], *P[-3]);
+ break;
+ case 4:
+ MB = Sphere(*P[-1], *P[-2], *P[-3], *P[-4]);
+ return MB;
+ }
+
+ for (uint i = 0; i < p; i++)
+ {
+ if (distanceSquared(MB, *P[i]) > 0) // Signed square distance to sphere
+ {
+ for (uint j = i; j > 0; j--)
+ {
+ swap(P[j], P[j-1]);
+ }
+
+ MB = recurseMini(P + 1, i, b + 1);
+ }
+ }
+
+ return MB;
+}
+
+static bool allInside(const Sphere & sphere, const Vector3 * pointArray, const uint pointCount) {
+ for (uint i = 0; i < pointCount; i++) {
+ if (distanceSquared(sphere, pointArray[i]) >= NV_EPSILON) {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+Sphere nv::miniBall(const Vector3 * pointArray, const uint pointCount)
+{
+ nvDebugCheck(pointArray != NULL);
+ nvDebugCheck(pointCount > 0);
+
+ const Vector3 **L = new const Vector3*[pointCount];
+
+ for (uint i = 0; i < pointCount; i++) {
+ L[i] = &pointArray[i];
+ }
+
+ Sphere sphere = recurseMini(L, pointCount);
+
+ delete [] L;
+
+ nvDebugCheck(allInside(sphere, pointArray, pointCount));
+
+ return sphere;
+}
+
+
+// Approximate bounding sphere, based on "An Efficient Bounding Sphere" by Jack Ritter, from "Graphics Gems"
+Sphere nv::approximateSphere_Ritter(const Vector3 * pointArray, const uint pointCount)
+{
+ nvDebugCheck(pointArray != NULL);
+ nvDebugCheck(pointCount > 0);
+
+ Vector3 xmin, xmax, ymin, ymax, zmin, zmax;
+
+ xmin = xmax = ymin = ymax = zmin = zmax = pointArray[0];
+
+ // FIRST PASS: find 6 minima/maxima points
+ xmin.x = ymin.y = zmin.z = FLT_MAX;
+ xmax.x = ymax.y = zmax.z = -FLT_MAX;
+
+ for (uint i = 0; i < pointCount; i++)
+ {
+ const Vector3 & p = pointArray[i];
+ if (p.x < xmin.x) xmin = p;
+ if (p.x > xmax.x) xmax = p;
+ if (p.y < ymin.y) ymin = p;
+ if (p.y > ymax.y) ymax = p;
+ if (p.z < zmin.z) zmin = p;
+ if (p.z > zmax.z) zmax = p;
+ }
+
+ float xspan = lengthSquared(xmax - xmin);
+ float yspan = lengthSquared(ymax - ymin);
+ float zspan = lengthSquared(zmax - zmin);
+
+ // Set points dia1 & dia2 to the maximally separated pair.
+ Vector3 dia1 = xmin;
+ Vector3 dia2 = xmax;
+ float maxspan = xspan;
+ if (yspan > maxspan) {
+ maxspan = yspan;
+ dia1 = ymin;
+ dia2 = ymax;
+ }
+ if (zspan > maxspan) {
+ dia1 = zmin;
+ dia2 = zmax;
+ }
+
+ // |dia1-dia2| is a diameter of initial sphere
+
+ // calc initial center
+ Sphere sphere;
+ sphere.center = (dia1 + dia2) / 2.0f;
+
+ // calculate initial radius**2 and radius
+ float rad_sq = lengthSquared(dia2 - sphere.center);
+ sphere.radius = sqrtf(rad_sq);
+
+
+ // SECOND PASS: increment current sphere
+ for (uint i = 0; i < pointCount; i++)
+ {
+ const Vector3 & p = pointArray[i];
+
+ float old_to_p_sq = lengthSquared(p - sphere.center);
+
+ if (old_to_p_sq > rad_sq) // do r**2 test first
+ {
+ // this point is outside of current sphere
+ float old_to_p = sqrtf(old_to_p_sq);
+
+ // calc radius of new sphere
+ sphere.radius = (sphere.radius + old_to_p) / 2.0f;
+ rad_sq = sphere.radius * sphere.radius; // for next r**2 compare
+
+ float old_to_new = old_to_p - sphere.radius;
+
+ // calc center of new sphere
+ sphere.center = (sphere.radius * sphere.center + old_to_new * p) / old_to_p;
+ }
+ }
+
+ nvDebugCheck(allInside(sphere, pointArray, pointCount));
+
+ return sphere;
+}
+
+
+static float computeSphereRadius(const Vector3 & center, const Vector3 * pointArray, const uint pointCount) {
+
+ float maxRadius2 = 0;
+
+ for (uint i = 0; i < pointCount; i++)
+ {
+ const Vector3 & p = pointArray[i];
+
+ float r2 = lengthSquared(center - p);
+
+ if (r2 > maxRadius2) {
+ maxRadius2 = r2;
+ }
+ }
+
+ return sqrtf(maxRadius2) + radiusEpsilon;
+}
+
+
+Sphere nv::approximateSphere_AABB(const Vector3 * pointArray, const uint pointCount)
+{
+ nvDebugCheck(pointArray != NULL);
+ nvDebugCheck(pointCount > 0);
+
+ Box box;
+ box.clearBounds();
+
+ for (uint i = 0; i < pointCount; i++) {
+ box.addPointToBounds(pointArray[i]);
+ }
+
+ Sphere sphere;
+ sphere.center = box.center();
+ sphere.radius = computeSphereRadius(sphere.center, pointArray, pointCount);
+
+ nvDebugCheck(allInside(sphere, pointArray, pointCount));
+
+ return sphere;
+}
+
+
+static void computeExtremalPoints(const Vector3 & dir, const Vector3 * pointArray, uint pointCount, Vector3 * minPoint, Vector3 * maxPoint) {
+ nvDebugCheck(pointCount > 0);
+
+ uint mini = 0;
+ uint maxi = 0;
+ float minDist = FLT_MAX;
+ float maxDist = -FLT_MAX;
+
+ for (uint i = 0; i < pointCount; i++) {
+ float d = dot(dir, pointArray[i]);
+
+ if (d < minDist) {
+ minDist = d;
+ mini = i;
+ }
+ if (d > maxDist) {
+ maxDist = d;
+ maxi = i;
+ }
+ }
+ nvDebugCheck(minDist != FLT_MAX);
+ nvDebugCheck(maxDist != -FLT_MAX);
+
+ *minPoint = pointArray[mini];
+ *maxPoint = pointArray[maxi];
+}
+
+// EPOS algorithm based on:
+// http://www.ep.liu.se/ecp/034/009/ecp083409.pdf
+Sphere nv::approximateSphere_EPOS6(const Vector3 * pointArray, uint pointCount)
+{
+ nvDebugCheck(pointArray != NULL);
+ nvDebugCheck(pointCount > 0);
+
+ Vector3 extremalPoints[6];
+
+ // Compute 6 extremal points.
+ computeExtremalPoints(Vector3(1, 0, 0), pointArray, pointCount, extremalPoints+0, extremalPoints+1);
+ computeExtremalPoints(Vector3(0, 1, 0), pointArray, pointCount, extremalPoints+2, extremalPoints+3);
+ computeExtremalPoints(Vector3(0, 0, 1), pointArray, pointCount, extremalPoints+4, extremalPoints+5);
+
+ Sphere sphere = miniBall(extremalPoints, 6);
+ sphere.radius = computeSphereRadius(sphere.center, pointArray, pointCount);
+
+ nvDebugCheck(allInside(sphere, pointArray, pointCount));
+
+ return sphere;
+}
+
+Sphere nv::approximateSphere_EPOS14(const Vector3 * pointArray, uint pointCount)
+{
+ nvDebugCheck(pointArray != NULL);
+ nvDebugCheck(pointCount > 0);
+
+ Vector3 extremalPoints[14];
+
+ // Compute 14 extremal points.
+ computeExtremalPoints(Vector3(1, 0, 0), pointArray, pointCount, extremalPoints+0, extremalPoints+1);
+ computeExtremalPoints(Vector3(0, 1, 0), pointArray, pointCount, extremalPoints+2, extremalPoints+3);
+ computeExtremalPoints(Vector3(0, 0, 1), pointArray, pointCount, extremalPoints+4, extremalPoints+5);
+
+ float d = sqrtf(1.0f/3.0f);
+
+ computeExtremalPoints(Vector3(d, d, d), pointArray, pointCount, extremalPoints+6, extremalPoints+7);
+ computeExtremalPoints(Vector3(-d, d, d), pointArray, pointCount, extremalPoints+8, extremalPoints+9);
+ computeExtremalPoints(Vector3(-d, -d, d), pointArray, pointCount, extremalPoints+10, extremalPoints+11);
+ computeExtremalPoints(Vector3(d, -d, d), pointArray, pointCount, extremalPoints+12, extremalPoints+13);
+
+
+ Sphere sphere = miniBall(extremalPoints, 14);
+ sphere.radius = computeSphereRadius(sphere.center, pointArray, pointCount);
+
+ nvDebugCheck(allInside(sphere, pointArray, pointCount));
+
+ return sphere;
+}
+
+
+
diff --git a/thirdparty/thekla_atlas/nvmath/Sphere.h b/thirdparty/thekla_atlas/nvmath/Sphere.h
new file mode 100644
index 0000000000..300731af44
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Sphere.h
@@ -0,0 +1,43 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MATH_SPHERE_H
+#define NV_MATH_SPHERE_H
+
+#include "Vector.h"
+
+namespace nv
+{
+
+ class Sphere
+ {
+ public:
+ Sphere() {}
+ Sphere(Vector3::Arg center, float radius) : center(center), radius(radius) {}
+
+ Sphere(Vector3::Arg center) : center(center), radius(0.0f) {}
+ Sphere(Vector3::Arg p0, Vector3::Arg p1);
+ Sphere(Vector3::Arg p0, Vector3::Arg p1, Vector3::Arg p2);
+ Sphere(Vector3::Arg p0, Vector3::Arg p1, Vector3::Arg p2, Vector3::Arg p3);
+
+ Vector3 center;
+ float radius;
+ };
+
+ // Returns negative values if point is inside.
+ float distanceSquared(const Sphere & sphere, const Vector3 &point);
+
+
+ // Welz's algorithm. Fairly slow, recursive implementation uses large stack.
+ Sphere miniBall(const Vector3 * pointArray, uint pointCount);
+
+ Sphere approximateSphere_Ritter(const Vector3 * pointArray, uint pointCount);
+ Sphere approximateSphere_AABB(const Vector3 * pointArray, uint pointCount);
+ Sphere approximateSphere_EPOS6(const Vector3 * pointArray, uint pointCount);
+ Sphere approximateSphere_EPOS14(const Vector3 * pointArray, uint pointCount);
+
+
+} // nv namespace
+
+
+#endif // NV_MATH_SPHERE_H
diff --git a/thirdparty/thekla_atlas/nvmath/TypeSerialization.cpp b/thirdparty/thekla_atlas/nvmath/TypeSerialization.cpp
new file mode 100644
index 0000000000..72fa678f47
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/TypeSerialization.cpp
@@ -0,0 +1,54 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "TypeSerialization.h"
+
+#include "nvcore/Stream.h"
+
+#include "nvmath/Vector.h"
+#include "nvmath/Matrix.h"
+#include "nvmath/Quaternion.h"
+#include "nvmath/Basis.h"
+#include "nvmath/Box.h"
+#include "nvmath/Plane.inl"
+
+using namespace nv;
+
+Stream & nv::operator<< (Stream & s, Vector2 & v)
+{
+ return s << v.x << v.y;
+}
+
+Stream & nv::operator<< (Stream & s, Vector3 & v)
+{
+ return s << v.x << v.y << v.z;
+}
+
+Stream & nv::operator<< (Stream & s, Vector4 & v)
+{
+ return s << v.x << v.y << v.z << v.w;
+}
+
+Stream & nv::operator<< (Stream & s, Matrix & m)
+{
+ return s;
+}
+
+Stream & nv::operator<< (Stream & s, Quaternion & q)
+{
+ return s << q.x << q.y << q.z << q.w;
+}
+
+Stream & nv::operator<< (Stream & s, Basis & basis)
+{
+ return s << basis.tangent << basis.bitangent << basis.normal;
+}
+
+Stream & nv::operator<< (Stream & s, Box & box)
+{
+ return s << box.minCorner << box.maxCorner;
+}
+
+Stream & nv::operator<< (Stream & s, Plane & plane)
+{
+ return s << plane.v;
+}
diff --git a/thirdparty/thekla_atlas/nvmath/TypeSerialization.h b/thirdparty/thekla_atlas/nvmath/TypeSerialization.h
new file mode 100644
index 0000000000..32d6de827e
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/TypeSerialization.h
@@ -0,0 +1,35 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MATH_TYPESERIALIZATION_H
+#define NV_MATH_TYPESERIALIZATION_H
+
+#include "nvmath.h"
+
+namespace nv
+{
+ class Stream;
+
+ class Vector2;
+ class Vector3;
+ class Vector4;
+
+ class Matrix;
+ class Quaternion;
+ class Basis;
+ class Box;
+ class Plane;
+
+ NVMATH_API Stream & operator<< (Stream & s, Vector2 & obj);
+ NVMATH_API Stream & operator<< (Stream & s, Vector3 & obj);
+ NVMATH_API Stream & operator<< (Stream & s, Vector4 & obj);
+
+ NVMATH_API Stream & operator<< (Stream & s, Matrix & obj);
+ NVMATH_API Stream & operator<< (Stream & s, Quaternion & obj);
+ NVMATH_API Stream & operator<< (Stream & s, Basis & obj);
+ NVMATH_API Stream & operator<< (Stream & s, Box & obj);
+ NVMATH_API Stream & operator<< (Stream & s, Plane & obj);
+
+} // nv namespace
+
+#endif // NV_MATH_TYPESERIALIZATION_H
diff --git a/thirdparty/thekla_atlas/nvmath/Vector.cpp b/thirdparty/thekla_atlas/nvmath/Vector.cpp
new file mode 100644
index 0000000000..9122a1b0e9
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Vector.cpp
@@ -0,0 +1,4 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "Vector.h"
+#include "Vector.inl"
diff --git a/thirdparty/thekla_atlas/nvmath/Vector.h b/thirdparty/thekla_atlas/nvmath/Vector.h
new file mode 100644
index 0000000000..ad18672a8a
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Vector.h
@@ -0,0 +1,149 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_VECTOR_H
+#define NV_MATH_VECTOR_H
+
+#include "nvmath.h"
+
+namespace nv
+{
+ class NVMATH_CLASS Vector2
+ {
+ public:
+ typedef Vector2 const & Arg;
+
+ Vector2();
+ explicit Vector2(float f);
+ Vector2(float x, float y);
+ Vector2(Vector2::Arg v);
+
+ //template <typename T> explicit Vector2(const T & v) : x(v.x), y(v.y) {}
+ //template <typename T> operator T() const { return T(x, y); }
+
+ const Vector2 & operator=(Vector2::Arg v);
+
+ const float * ptr() const;
+
+ void set(float x, float y);
+
+ Vector2 operator-() const;
+ void operator+=(Vector2::Arg v);
+ void operator-=(Vector2::Arg v);
+ void operator*=(float s);
+ void operator*=(Vector2::Arg v);
+
+ friend bool operator==(Vector2::Arg a, Vector2::Arg b);
+ friend bool operator!=(Vector2::Arg a, Vector2::Arg b);
+
+ union {
+ struct {
+ float x, y;
+ };
+ float component[2];
+ };
+ };
+
+ class NVMATH_CLASS Vector3
+ {
+ public:
+ typedef Vector3 const & Arg;
+
+ Vector3();
+ explicit Vector3(float x);
+ //explicit Vector3(int x) : x(float(x)), y(float(x)), z(float(x)) {}
+ Vector3(float x, float y, float z);
+ Vector3(Vector2::Arg v, float z);
+ Vector3(Vector3::Arg v);
+
+ //template <typename T> explicit Vector3(const T & v) : x(v.x), y(v.y), z(v.z) {}
+ //template <typename T> operator T() const { return T(x, y, z); }
+
+ const Vector3 & operator=(Vector3::Arg v);
+
+ Vector2 xy() const;
+
+ const float * ptr() const;
+
+ void set(float x, float y, float z);
+
+ Vector3 operator-() const;
+ void operator+=(Vector3::Arg v);
+ void operator-=(Vector3::Arg v);
+ void operator*=(float s);
+ void operator/=(float s);
+ void operator*=(Vector3::Arg v);
+ void operator/=(Vector3::Arg v);
+
+ friend bool operator==(Vector3::Arg a, Vector3::Arg b);
+ friend bool operator!=(Vector3::Arg a, Vector3::Arg b);
+
+ union {
+ struct {
+ float x, y, z;
+ };
+ float component[3];
+ };
+ };
+
+ class NVMATH_CLASS Vector4
+ {
+ public:
+ typedef Vector4 const & Arg;
+
+ Vector4();
+ explicit Vector4(float x);
+ Vector4(float x, float y, float z, float w);
+ Vector4(Vector2::Arg v, float z, float w);
+ Vector4(Vector2::Arg v, Vector2::Arg u);
+ Vector4(Vector3::Arg v, float w);
+ Vector4(Vector4::Arg v);
+ // Vector4(const Quaternion & v);
+
+ //template <typename T> explicit Vector4(const T & v) : x(v.x), y(v.y), z(v.z), w(v.w) {}
+ //template <typename T> operator T() const { return T(x, y, z, w); }
+
+ const Vector4 & operator=(Vector4::Arg v);
+
+ Vector2 xy() const;
+ Vector2 zw() const;
+ Vector3 xyz() const;
+
+ const float * ptr() const;
+
+ void set(float x, float y, float z, float w);
+
+ Vector4 operator-() const;
+ void operator+=(Vector4::Arg v);
+ void operator-=(Vector4::Arg v);
+ void operator*=(float s);
+ void operator/=(float s);
+ void operator*=(Vector4::Arg v);
+ void operator/=(Vector4::Arg v);
+
+ friend bool operator==(Vector4::Arg a, Vector4::Arg b);
+ friend bool operator!=(Vector4::Arg a, Vector4::Arg b);
+
+ union {
+ struct {
+ float x, y, z, w;
+ };
+ float component[4];
+ };
+ };
+
+} // nv namespace
+
+// If we had these functions, they would be ambiguous, the compiler would not know which one to pick:
+//template <typename T> Vector2 to(const T & v) { return Vector2(v.x, v.y); }
+//template <typename T> Vector3 to(const T & v) { return Vector3(v.x, v.y, v.z); }
+//template <typename T> Vector4 to(const T & v) { return Vector4(v.x, v.y, v.z, v.z); }
+
+// We could use a cast operator so that we could infer the expected type, but that doesn't work the same way in all compilers and produces horrible error messages.
+
+// Instead we simply have explicit casts:
+template <typename T> T to(const nv::Vector2 & v) { NV_COMPILER_CHECK(sizeof(T) == sizeof(nv::Vector2)); return T(v.x, v.y); }
+template <typename T> T to(const nv::Vector3 & v) { NV_COMPILER_CHECK(sizeof(T) == sizeof(nv::Vector3)); return T(v.x, v.y, v.z); }
+template <typename T> T to(const nv::Vector4 & v) { NV_COMPILER_CHECK(sizeof(T) == sizeof(nv::Vector4)); return T(v.x, v.y, v.z, v.w); }
+
+#endif // NV_MATH_VECTOR_H
diff --git a/thirdparty/thekla_atlas/nvmath/Vector.inl b/thirdparty/thekla_atlas/nvmath/Vector.inl
new file mode 100644
index 0000000000..bcaec7bf2a
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/Vector.inl
@@ -0,0 +1,919 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_VECTOR_INL
+#define NV_MATH_VECTOR_INL
+
+#include "Vector.h"
+#include "nvcore/Utils.h" // min, max
+#include "nvcore/Hash.h" // hash
+
+namespace nv
+{
+
+ // Helpers to convert vector types. Assume T has x,y members and 2 argument constructor.
+ //template <typename T> T to(Vector2::Arg v) { return T(v.x, v.y); }
+
+ // Helpers to convert vector types. Assume T has x,y,z members and 3 argument constructor.
+ //template <typename T> T to(Vector3::Arg v) { return T(v.x, v.y, v.z); }
+
+ // Helpers to convert vector types. Assume T has x,y,z members and 3 argument constructor.
+ //template <typename T> T to(Vector4::Arg v) { return T(v.x, v.y, v.z, v.w); }
+
+
+ // Vector2
+ inline Vector2::Vector2() {}
+ inline Vector2::Vector2(float f) : x(f), y(f) {}
+ inline Vector2::Vector2(float x, float y) : x(x), y(y) {}
+ inline Vector2::Vector2(Vector2::Arg v) : x(v.x), y(v.y) {}
+
+ inline const Vector2 & Vector2::operator=(Vector2::Arg v)
+ {
+ x = v.x;
+ y = v.y;
+ return *this;
+ }
+
+ inline const float * Vector2::ptr() const
+ {
+ return &x;
+ }
+
+ inline void Vector2::set(float x, float y)
+ {
+ this->x = x;
+ this->y = y;
+ }
+
+ inline Vector2 Vector2::operator-() const
+ {
+ return Vector2(-x, -y);
+ }
+
+ inline void Vector2::operator+=(Vector2::Arg v)
+ {
+ x += v.x;
+ y += v.y;
+ }
+
+ inline void Vector2::operator-=(Vector2::Arg v)
+ {
+ x -= v.x;
+ y -= v.y;
+ }
+
+ inline void Vector2::operator*=(float s)
+ {
+ x *= s;
+ y *= s;
+ }
+
+ inline void Vector2::operator*=(Vector2::Arg v)
+ {
+ x *= v.x;
+ y *= v.y;
+ }
+
+ inline bool operator==(Vector2::Arg a, Vector2::Arg b)
+ {
+ return a.x == b.x && a.y == b.y;
+ }
+ inline bool operator!=(Vector2::Arg a, Vector2::Arg b)
+ {
+ return a.x != b.x || a.y != b.y;
+ }
+
+
+ // Vector3
+ inline Vector3::Vector3() {}
+ inline Vector3::Vector3(float f) : x(f), y(f), z(f) {}
+ inline Vector3::Vector3(float x, float y, float z) : x(x), y(y), z(z) {}
+ inline Vector3::Vector3(Vector2::Arg v, float z) : x(v.x), y(v.y), z(z) {}
+ inline Vector3::Vector3(Vector3::Arg v) : x(v.x), y(v.y), z(v.z) {}
+
+ inline const Vector3 & Vector3::operator=(Vector3::Arg v)
+ {
+ x = v.x;
+ y = v.y;
+ z = v.z;
+ return *this;
+ }
+
+
+ inline Vector2 Vector3::xy() const
+ {
+ return Vector2(x, y);
+ }
+
+ inline const float * Vector3::ptr() const
+ {
+ return &x;
+ }
+
+ inline void Vector3::set(float x, float y, float z)
+ {
+ this->x = x;
+ this->y = y;
+ this->z = z;
+ }
+
+ inline Vector3 Vector3::operator-() const
+ {
+ return Vector3(-x, -y, -z);
+ }
+
+ inline void Vector3::operator+=(Vector3::Arg v)
+ {
+ x += v.x;
+ y += v.y;
+ z += v.z;
+ }
+
+ inline void Vector3::operator-=(Vector3::Arg v)
+ {
+ x -= v.x;
+ y -= v.y;
+ z -= v.z;
+ }
+
+ inline void Vector3::operator*=(float s)
+ {
+ x *= s;
+ y *= s;
+ z *= s;
+ }
+
+ inline void Vector3::operator/=(float s)
+ {
+ float is = 1.0f / s;
+ x *= is;
+ y *= is;
+ z *= is;
+ }
+
+ inline void Vector3::operator*=(Vector3::Arg v)
+ {
+ x *= v.x;
+ y *= v.y;
+ z *= v.z;
+ }
+
+ inline void Vector3::operator/=(Vector3::Arg v)
+ {
+ x /= v.x;
+ y /= v.y;
+ z /= v.z;
+ }
+
+ inline bool operator==(Vector3::Arg a, Vector3::Arg b)
+ {
+ return a.x == b.x && a.y == b.y && a.z == b.z;
+ }
+ inline bool operator!=(Vector3::Arg a, Vector3::Arg b)
+ {
+ return a.x != b.x || a.y != b.y || a.z != b.z;
+ }
+
+
+ // Vector4
+ inline Vector4::Vector4() {}
+ inline Vector4::Vector4(float f) : x(f), y(f), z(f), w(f) {}
+ inline Vector4::Vector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {}
+ inline Vector4::Vector4(Vector2::Arg v, float z, float w) : x(v.x), y(v.y), z(z), w(w) {}
+ inline Vector4::Vector4(Vector2::Arg v, Vector2::Arg u) : x(v.x), y(v.y), z(u.x), w(u.y) {}
+ inline Vector4::Vector4(Vector3::Arg v, float w) : x(v.x), y(v.y), z(v.z), w(w) {}
+ inline Vector4::Vector4(Vector4::Arg v) : x(v.x), y(v.y), z(v.z), w(v.w) {}
+
+ inline const Vector4 & Vector4::operator=(const Vector4 & v)
+ {
+ x = v.x;
+ y = v.y;
+ z = v.z;
+ w = v.w;
+ return *this;
+ }
+
+ inline Vector2 Vector4::xy() const
+ {
+ return Vector2(x, y);
+ }
+
+ inline Vector2 Vector4::zw() const
+ {
+ return Vector2(z, w);
+ }
+
+ inline Vector3 Vector4::xyz() const
+ {
+ return Vector3(x, y, z);
+ }
+
+ inline const float * Vector4::ptr() const
+ {
+ return &x;
+ }
+
+ inline void Vector4::set(float x, float y, float z, float w)
+ {
+ this->x = x;
+ this->y = y;
+ this->z = z;
+ this->w = w;
+ }
+
+ inline Vector4 Vector4::operator-() const
+ {
+ return Vector4(-x, -y, -z, -w);
+ }
+
+ inline void Vector4::operator+=(Vector4::Arg v)
+ {
+ x += v.x;
+ y += v.y;
+ z += v.z;
+ w += v.w;
+ }
+
+ inline void Vector4::operator-=(Vector4::Arg v)
+ {
+ x -= v.x;
+ y -= v.y;
+ z -= v.z;
+ w -= v.w;
+ }
+
+ inline void Vector4::operator*=(float s)
+ {
+ x *= s;
+ y *= s;
+ z *= s;
+ w *= s;
+ }
+
+ inline void Vector4::operator/=(float s)
+ {
+ x /= s;
+ y /= s;
+ z /= s;
+ w /= s;
+ }
+
+ inline void Vector4::operator*=(Vector4::Arg v)
+ {
+ x *= v.x;
+ y *= v.y;
+ z *= v.z;
+ w *= v.w;
+ }
+
+ inline void Vector4::operator/=(Vector4::Arg v)
+ {
+ x /= v.x;
+ y /= v.y;
+ z /= v.z;
+ w /= v.w;
+ }
+
+ inline bool operator==(Vector4::Arg a, Vector4::Arg b)
+ {
+ return a.x == b.x && a.y == b.y && a.z == b.z && a.w == b.w;
+ }
+ inline bool operator!=(Vector4::Arg a, Vector4::Arg b)
+ {
+ return a.x != b.x || a.y != b.y || a.z != b.z || a.w != b.w;
+ }
+
+
+
+ // Functions
+
+
+ // Vector2
+
+ inline Vector2 add(Vector2::Arg a, Vector2::Arg b)
+ {
+ return Vector2(a.x + b.x, a.y + b.y);
+ }
+ inline Vector2 operator+(Vector2::Arg a, Vector2::Arg b)
+ {
+ return add(a, b);
+ }
+
+ inline Vector2 sub(Vector2::Arg a, Vector2::Arg b)
+ {
+ return Vector2(a.x - b.x, a.y - b.y);
+ }
+ inline Vector2 operator-(Vector2::Arg a, Vector2::Arg b)
+ {
+ return sub(a, b);
+ }
+
+ inline Vector2 scale(Vector2::Arg v, float s)
+ {
+ return Vector2(v.x * s, v.y * s);
+ }
+
+ inline Vector2 scale(Vector2::Arg v, Vector2::Arg s)
+ {
+ return Vector2(v.x * s.x, v.y * s.y);
+ }
+
+ inline Vector2 operator*(Vector2::Arg v, float s)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector2 operator*(Vector2::Arg v1, Vector2::Arg v2)
+ {
+ return Vector2(v1.x*v2.x, v1.y*v2.y);
+ }
+
+ inline Vector2 operator*(float s, Vector2::Arg v)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector2 operator/(Vector2::Arg v, float s)
+ {
+ return scale(v, 1.0f/s);
+ }
+
+ inline Vector2 lerp(Vector2::Arg v1, Vector2::Arg v2, float t)
+ {
+ const float s = 1.0f - t;
+ return Vector2(v1.x * s + t * v2.x, v1.y * s + t * v2.y);
+ }
+
+ inline float dot(Vector2::Arg a, Vector2::Arg b)
+ {
+ return a.x * b.x + a.y * b.y;
+ }
+
+ inline float lengthSquared(Vector2::Arg v)
+ {
+ return v.x * v.x + v.y * v.y;
+ }
+
+ inline float length(Vector2::Arg v)
+ {
+ return sqrtf(lengthSquared(v));
+ }
+
+ inline float distance(Vector2::Arg a, Vector2::Arg b)
+ {
+ return length(a - b);
+ }
+
+ inline float inverseLength(Vector2::Arg v)
+ {
+ return 1.0f / sqrtf(lengthSquared(v));
+ }
+
+ inline bool isNormalized(Vector2::Arg v, float epsilon = NV_NORMAL_EPSILON)
+ {
+ return equal(length(v), 1, epsilon);
+ }
+
+ inline Vector2 normalize(Vector2::Arg v, float epsilon = NV_EPSILON)
+ {
+ float l = length(v);
+ nvDebugCheck(!isZero(l, epsilon));
+ Vector2 n = scale(v, 1.0f / l);
+ nvDebugCheck(isNormalized(n));
+ return n;
+ }
+
+ inline Vector2 normalizeSafe(Vector2::Arg v, Vector2::Arg fallback, float epsilon = NV_EPSILON)
+ {
+ float l = length(v);
+ if (isZero(l, epsilon)) {
+ return fallback;
+ }
+ return scale(v, 1.0f / l);
+ }
+
+ // Safe, branchless normalization from Andy Firth. All error checking ommitted.
+ // http://altdevblogaday.com/2011/08/21/practical-flt-point-tricks/
+ inline Vector2 normalizeFast(Vector2::Arg v)
+ {
+ const float very_small_float = 1.0e-037f;
+ float l = very_small_float + length(v);
+ return scale(v, 1.0f / l);
+ }
+
+ inline bool equal(Vector2::Arg v1, Vector2::Arg v2, float epsilon = NV_EPSILON)
+ {
+ return equal(v1.x, v2.x, epsilon) && equal(v1.y, v2.y, epsilon);
+ }
+
+ inline Vector2 min(Vector2::Arg a, Vector2::Arg b)
+ {
+ return Vector2(min(a.x, b.x), min(a.y, b.y));
+ }
+
+ inline Vector2 max(Vector2::Arg a, Vector2::Arg b)
+ {
+ return Vector2(max(a.x, b.x), max(a.y, b.y));
+ }
+
+ inline Vector2 clamp(Vector2::Arg v, float min, float max)
+ {
+ return Vector2(clamp(v.x, min, max), clamp(v.y, min, max));
+ }
+
+ inline Vector2 saturate(Vector2::Arg v)
+ {
+ return Vector2(saturate(v.x), saturate(v.y));
+ }
+
+ inline bool isFinite(Vector2::Arg v)
+ {
+ return isFinite(v.x) && isFinite(v.y);
+ }
+
+ inline Vector2 validate(Vector2::Arg v, Vector2::Arg fallback = Vector2(0.0f))
+ {
+ if (!isFinite(v)) return fallback;
+ Vector2 vf = v;
+ nv::floatCleanup(vf.component, 2);
+ return vf;
+ }
+
+ // Note, this is the area scaled by 2!
+ inline float triangleArea(Vector2::Arg v0, Vector2::Arg v1)
+ {
+ return (v0.x * v1.y - v0.y * v1.x); // * 0.5f;
+ }
+ inline float triangleArea(Vector2::Arg a, Vector2::Arg b, Vector2::Arg c)
+ {
+ // IC: While it may be appealing to use the following expression:
+ //return (c.x * a.y + a.x * b.y + b.x * c.y - b.x * a.y - c.x * b.y - a.x * c.y); // * 0.5f;
+
+ // That's actually a terrible idea. Small triangles far from the origin can end up producing fairly large floating point
+ // numbers and the results becomes very unstable and dependent on the order of the factors.
+
+ // Instead, it's preferable to subtract the vertices first, and multiply the resulting small values together. The result
+ // in this case is always much more accurate (as long as the triangle is small) and less dependent of the location of
+ // the triangle.
+
+ //return ((a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x)); // * 0.5f;
+ return triangleArea(a-c, b-c);
+ }
+
+
+ template <>
+ inline uint hash(const Vector2 & v, uint h)
+ {
+ return sdbmFloatHash(v.component, 2, h);
+ }
+
+
+
+ // Vector3
+
+ inline Vector3 add(Vector3::Arg a, Vector3::Arg b)
+ {
+ return Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
+ }
+ inline Vector3 add(Vector3::Arg a, float b)
+ {
+ return Vector3(a.x + b, a.y + b, a.z + b);
+ }
+ inline Vector3 operator+(Vector3::Arg a, Vector3::Arg b)
+ {
+ return add(a, b);
+ }
+ inline Vector3 operator+(Vector3::Arg a, float b)
+ {
+ return add(a, b);
+ }
+
+ inline Vector3 sub(Vector3::Arg a, Vector3::Arg b)
+ {
+ return Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
+ }
+ inline Vector3 sub(Vector3::Arg a, float b)
+ {
+ return Vector3(a.x - b, a.y - b, a.z - b);
+ }
+ inline Vector3 operator-(Vector3::Arg a, Vector3::Arg b)
+ {
+ return sub(a, b);
+ }
+ inline Vector3 operator-(Vector3::Arg a, float b)
+ {
+ return sub(a, b);
+ }
+
+ inline Vector3 cross(Vector3::Arg a, Vector3::Arg b)
+ {
+ return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);
+ }
+
+ inline Vector3 scale(Vector3::Arg v, float s)
+ {
+ return Vector3(v.x * s, v.y * s, v.z * s);
+ }
+
+ inline Vector3 scale(Vector3::Arg v, Vector3::Arg s)
+ {
+ return Vector3(v.x * s.x, v.y * s.y, v.z * s.z);
+ }
+
+ inline Vector3 operator*(Vector3::Arg v, float s)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector3 operator*(float s, Vector3::Arg v)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector3 operator*(Vector3::Arg v, Vector3::Arg s)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector3 operator/(Vector3::Arg v, float s)
+ {
+ return scale(v, 1.0f/s);
+ }
+
+ /*inline Vector3 add_scaled(Vector3::Arg a, Vector3::Arg b, float s)
+ {
+ return Vector3(a.x + b.x * s, a.y + b.y * s, a.z + b.z * s);
+ }*/
+
+ inline Vector3 lerp(Vector3::Arg v1, Vector3::Arg v2, float t)
+ {
+ const float s = 1.0f - t;
+ return Vector3(v1.x * s + t * v2.x, v1.y * s + t * v2.y, v1.z * s + t * v2.z);
+ }
+
+ inline float dot(Vector3::Arg a, Vector3::Arg b)
+ {
+ return a.x * b.x + a.y * b.y + a.z * b.z;
+ }
+
+ inline float lengthSquared(Vector3::Arg v)
+ {
+ return v.x * v.x + v.y * v.y + v.z * v.z;
+ }
+
+ inline float length(Vector3::Arg v)
+ {
+ return sqrtf(lengthSquared(v));
+ }
+
+ inline float distance(Vector3::Arg a, Vector3::Arg b)
+ {
+ return length(a - b);
+ }
+
+ inline float distanceSquared(Vector3::Arg a, Vector3::Arg b)
+ {
+ return lengthSquared(a - b);
+ }
+
+ inline float inverseLength(Vector3::Arg v)
+ {
+ return 1.0f / sqrtf(lengthSquared(v));
+ }
+
+ inline bool isNormalized(Vector3::Arg v, float epsilon = NV_NORMAL_EPSILON)
+ {
+ return equal(length(v), 1, epsilon);
+ }
+
+ inline Vector3 normalize(Vector3::Arg v, float epsilon = NV_EPSILON)
+ {
+ float l = length(v);
+ nvDebugCheck(!isZero(l, epsilon));
+ Vector3 n = scale(v, 1.0f / l);
+ nvDebugCheck(isNormalized(n));
+ return n;
+ }
+
+ inline Vector3 normalizeSafe(Vector3::Arg v, Vector3::Arg fallback, float epsilon = NV_EPSILON)
+ {
+ float l = length(v);
+ if (isZero(l, epsilon)) {
+ return fallback;
+ }
+ return scale(v, 1.0f / l);
+ }
+
+ // Safe, branchless normalization from Andy Firth. All error checking ommitted.
+ // http://altdevblogaday.com/2011/08/21/practical-flt-point-tricks/
+ inline Vector3 normalizeFast(Vector3::Arg v)
+ {
+ const float very_small_float = 1.0e-037f;
+ float l = very_small_float + length(v);
+ return scale(v, 1.0f / l);
+ }
+
+ inline bool equal(Vector3::Arg v1, Vector3::Arg v2, float epsilon = NV_EPSILON)
+ {
+ return equal(v1.x, v2.x, epsilon) && equal(v1.y, v2.y, epsilon) && equal(v1.z, v2.z, epsilon);
+ }
+
+ inline Vector3 min(Vector3::Arg a, Vector3::Arg b)
+ {
+ return Vector3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z));
+ }
+
+ inline Vector3 max(Vector3::Arg a, Vector3::Arg b)
+ {
+ return Vector3(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z));
+ }
+
+ inline Vector3 clamp(Vector3::Arg v, float min, float max)
+ {
+ return Vector3(clamp(v.x, min, max), clamp(v.y, min, max), clamp(v.z, min, max));
+ }
+
+ inline Vector3 saturate(Vector3::Arg v)
+ {
+ return Vector3(saturate(v.x), saturate(v.y), saturate(v.z));
+ }
+
+ inline Vector3 floor(Vector3::Arg v)
+ {
+ return Vector3(floorf(v.x), floorf(v.y), floorf(v.z));
+ }
+
+ inline Vector3 ceil(Vector3::Arg v)
+ {
+ return Vector3(ceilf(v.x), ceilf(v.y), ceilf(v.z));
+ }
+
+ inline bool isFinite(Vector3::Arg v)
+ {
+ return isFinite(v.x) && isFinite(v.y) && isFinite(v.z);
+ }
+
+ inline Vector3 validate(Vector3::Arg v, Vector3::Arg fallback = Vector3(0.0f))
+ {
+ if (!isFinite(v)) return fallback;
+ Vector3 vf = v;
+ nv::floatCleanup(vf.component, 3);
+ return vf;
+ }
+
+ inline Vector3 reflect(Vector3::Arg v, Vector3::Arg n)
+ {
+ return v - (2 * dot(v, n)) * n;
+ }
+
+ template <>
+ inline uint hash(const Vector3 & v, uint h)
+ {
+ return sdbmFloatHash(v.component, 3, h);
+ }
+
+
+ // Vector4
+
+ inline Vector4 add(Vector4::Arg a, Vector4::Arg b)
+ {
+ return Vector4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);
+ }
+ inline Vector4 operator+(Vector4::Arg a, Vector4::Arg b)
+ {
+ return add(a, b);
+ }
+
+ inline Vector4 sub(Vector4::Arg a, Vector4::Arg b)
+ {
+ return Vector4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);
+ }
+ inline Vector4 operator-(Vector4::Arg a, Vector4::Arg b)
+ {
+ return sub(a, b);
+ }
+
+ inline Vector4 scale(Vector4::Arg v, float s)
+ {
+ return Vector4(v.x * s, v.y * s, v.z * s, v.w * s);
+ }
+
+ inline Vector4 scale(Vector4::Arg v, Vector4::Arg s)
+ {
+ return Vector4(v.x * s.x, v.y * s.y, v.z * s.z, v.w * s.w);
+ }
+
+ inline Vector4 operator*(Vector4::Arg v, float s)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector4 operator*(float s, Vector4::Arg v)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector4 operator*(Vector4::Arg v, Vector4::Arg s)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector4 operator/(Vector4::Arg v, float s)
+ {
+ return scale(v, 1.0f/s);
+ }
+
+ /*inline Vector4 add_scaled(Vector4::Arg a, Vector4::Arg b, float s)
+ {
+ return Vector4(a.x + b.x * s, a.y + b.y * s, a.z + b.z * s, a.w + b.w * s);
+ }*/
+
+ inline Vector4 lerp(Vector4::Arg v1, Vector4::Arg v2, float t)
+ {
+ const float s = 1.0f - t;
+ return Vector4(v1.x * s + t * v2.x, v1.y * s + t * v2.y, v1.z * s + t * v2.z, v1.w * s + t * v2.w);
+ }
+
+ inline float dot(Vector4::Arg a, Vector4::Arg b)
+ {
+ return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
+ }
+
+ inline float lengthSquared(Vector4::Arg v)
+ {
+ return v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
+ }
+
+ inline float length(Vector4::Arg v)
+ {
+ return sqrtf(lengthSquared(v));
+ }
+
+ inline float inverseLength(Vector4::Arg v)
+ {
+ return 1.0f / sqrtf(lengthSquared(v));
+ }
+
+ inline bool isNormalized(Vector4::Arg v, float epsilon = NV_NORMAL_EPSILON)
+ {
+ return equal(length(v), 1, epsilon);
+ }
+
+ inline Vector4 normalize(Vector4::Arg v, float epsilon = NV_EPSILON)
+ {
+ float l = length(v);
+ nvDebugCheck(!isZero(l, epsilon));
+ Vector4 n = scale(v, 1.0f / l);
+ nvDebugCheck(isNormalized(n));
+ return n;
+ }
+
+ inline Vector4 normalizeSafe(Vector4::Arg v, Vector4::Arg fallback, float epsilon = NV_EPSILON)
+ {
+ float l = length(v);
+ if (isZero(l, epsilon)) {
+ return fallback;
+ }
+ return scale(v, 1.0f / l);
+ }
+
+ // Safe, branchless normalization from Andy Firth. All error checking ommitted.
+ // http://altdevblogaday.com/2011/08/21/practical-flt-point-tricks/
+ inline Vector4 normalizeFast(Vector4::Arg v)
+ {
+ const float very_small_float = 1.0e-037f;
+ float l = very_small_float + length(v);
+ return scale(v, 1.0f / l);
+ }
+
+ inline bool equal(Vector4::Arg v1, Vector4::Arg v2, float epsilon = NV_EPSILON)
+ {
+ return equal(v1.x, v2.x, epsilon) && equal(v1.y, v2.y, epsilon) && equal(v1.z, v2.z, epsilon) && equal(v1.w, v2.w, epsilon);
+ }
+
+ inline Vector4 min(Vector4::Arg a, Vector4::Arg b)
+ {
+ return Vector4(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z), min(a.w, b.w));
+ }
+
+ inline Vector4 max(Vector4::Arg a, Vector4::Arg b)
+ {
+ return Vector4(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z), max(a.w, b.w));
+ }
+
+ inline Vector4 clamp(Vector4::Arg v, float min, float max)
+ {
+ return Vector4(clamp(v.x, min, max), clamp(v.y, min, max), clamp(v.z, min, max), clamp(v.w, min, max));
+ }
+
+ inline Vector4 saturate(Vector4::Arg v)
+ {
+ return Vector4(saturate(v.x), saturate(v.y), saturate(v.z), saturate(v.w));
+ }
+
+ inline bool isFinite(Vector4::Arg v)
+ {
+ return isFinite(v.x) && isFinite(v.y) && isFinite(v.z) && isFinite(v.w);
+ }
+
+ inline Vector4 validate(Vector4::Arg v, Vector4::Arg fallback = Vector4(0.0f))
+ {
+ if (!isFinite(v)) return fallback;
+ Vector4 vf = v;
+ nv::floatCleanup(vf.component, 4);
+ return vf;
+ }
+
+ template <>
+ inline uint hash(const Vector4 & v, uint h)
+ {
+ return sdbmFloatHash(v.component, 4, h);
+ }
+
+
+#if NV_OS_IOS // LLVM is not happy with implicit conversion of immediate constants to float
+
+ //int:
+
+ inline Vector2 scale(Vector2::Arg v, int s)
+ {
+ return Vector2(v.x * s, v.y * s);
+ }
+
+ inline Vector2 operator*(Vector2::Arg v, int s)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector2 operator*(int s, Vector2::Arg v)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector2 operator/(Vector2::Arg v, int s)
+ {
+ return scale(v, 1.0f/s);
+ }
+
+ inline Vector3 scale(Vector3::Arg v, int s)
+ {
+ return Vector3(v.x * s, v.y * s, v.z * s);
+ }
+
+ inline Vector3 operator*(Vector3::Arg v, int s)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector3 operator*(int s, Vector3::Arg v)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector3 operator/(Vector3::Arg v, int s)
+ {
+ return scale(v, 1.0f/s);
+ }
+
+ inline Vector4 scale(Vector4::Arg v, int s)
+ {
+ return Vector4(v.x * s, v.y * s, v.z * s, v.w * s);
+ }
+
+ inline Vector4 operator*(Vector4::Arg v, int s)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector4 operator*(int s, Vector4::Arg v)
+ {
+ return scale(v, s);
+ }
+
+ inline Vector4 operator/(Vector4::Arg v, int s)
+ {
+ return scale(v, 1.0f/s);
+ }
+
+ //double:
+
+ inline Vector3 operator*(Vector3::Arg v, double s)
+ {
+ return scale(v, (float)s);
+ }
+
+ inline Vector3 operator*(double s, Vector3::Arg v)
+ {
+ return scale(v, (float)s);
+ }
+
+ inline Vector3 operator/(Vector3::Arg v, double s)
+ {
+ return scale(v, 1.f/((float)s));
+ }
+
+#endif //NV_OS_IOS
+
+} // nv namespace
+
+#endif // NV_MATH_VECTOR_INL
diff --git a/thirdparty/thekla_atlas/nvmath/ftoi.h b/thirdparty/thekla_atlas/nvmath/ftoi.h
new file mode 100644
index 0000000000..bee15c0908
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/ftoi.h
@@ -0,0 +1,258 @@
+// This code is in the public domain -- castano@gmail.com
+
+#pragma once
+#ifndef NV_MATH_FTOI_H
+#define NV_MATH_FTOI_H
+
+#include "nvmath/nvmath.h"
+
+#include <math.h>
+
+namespace nv
+{
+ // Optimized float to int conversions. See:
+ // http://cbloomrants.blogspot.com/2009/01/01-17-09-float-to-int.html
+ // http://www.stereopsis.com/sree/fpu2006.html
+ // http://assemblyrequired.crashworks.org/2009/01/12/why-you-should-never-cast-floats-to-ints/
+ // http://chrishecker.com/Miscellaneous_Technical_Articles#Floating_Point
+
+
+ union DoubleAnd64 {
+ uint64 i;
+ double d;
+ };
+
+ static const double floatutil_xs_doublemagic = (6755399441055744.0); // 2^52 * 1.5
+ static const double floatutil_xs_doublemagicdelta = (1.5e-8); // almost .5f = .5f + 1e^(number of exp bit)
+ static const double floatutil_xs_doublemagicroundeps = (0.5f - floatutil_xs_doublemagicdelta); // almost .5f = .5f - 1e^(number of exp bit)
+
+ NV_FORCEINLINE int ftoi_round_xs(double val, double magic) {
+#if 1
+ DoubleAnd64 dunion;
+ dunion.d = val + magic;
+ return (int32) dunion.i; // just cast to grab the bottom bits
+#else
+ val += magic;
+ return ((int*)&val)[0]; // @@ Assumes little endian.
+#endif
+ }
+
+ NV_FORCEINLINE int ftoi_round_xs(float val) {
+ return ftoi_round_xs(val, floatutil_xs_doublemagic);
+ }
+
+ NV_FORCEINLINE int ftoi_floor_xs(float val) {
+ return ftoi_round_xs(val - floatutil_xs_doublemagicroundeps, floatutil_xs_doublemagic);
+ }
+
+ NV_FORCEINLINE int ftoi_ceil_xs(float val) {
+ return ftoi_round_xs(val + floatutil_xs_doublemagicroundeps, floatutil_xs_doublemagic);
+ }
+
+ NV_FORCEINLINE int ftoi_trunc_xs(float val) {
+ return (val<0) ? ftoi_ceil_xs(val) : ftoi_floor_xs(val);
+ }
+
+#if NV_CPU_X86 || NV_CPU_X86_64
+
+ NV_FORCEINLINE int ftoi_round_sse(float f) {
+ return _mm_cvt_ss2si(_mm_set_ss(f));
+ }
+
+ NV_FORCEINLINE int ftoi_trunc_sse(float f) {
+ return _mm_cvtt_ss2si(_mm_set_ss(f));
+ }
+
+#endif
+
+
+
+#if NV_USE_SSE
+
+ NV_FORCEINLINE int ftoi_round(float val) {
+ return ftoi_round_sse(val);
+ }
+
+ NV_FORCEINLINE int ftoi_trunc(float f) {
+ return ftoi_trunc_sse(f);
+ }
+
+ // We can probably do better than this. See for example:
+ // http://dss.stephanierct.com/DevBlog/?p=8
+ NV_FORCEINLINE int ftoi_floor(float val) {
+ return ftoi_round(floorf(val));
+ }
+
+ NV_FORCEINLINE int ftoi_ceil(float val) {
+ return ftoi_round(ceilf(val));
+ }
+
+#else
+
+ // In theory this should work with any double floating point math implementation, but it appears that MSVC produces incorrect code
+ // when SSE2 is targeted and fast math is enabled (/arch:SSE2 & /fp:fast). These problems go away with /fp:precise, which is the default mode.
+
+ NV_FORCEINLINE int ftoi_round(float val) {
+ return ftoi_round_xs(val);
+ }
+
+ NV_FORCEINLINE int ftoi_floor(float val) {
+ return ftoi_floor_xs(val);
+ }
+
+ NV_FORCEINLINE int ftoi_ceil(float val) {
+ return ftoi_ceil_xs(val);
+ }
+
+ NV_FORCEINLINE int ftoi_trunc(float f) {
+ return ftoi_trunc_xs(f);
+ }
+
+#endif
+
+
+ inline void test_ftoi() {
+
+ // Round to nearest integer.
+ nvCheck(ftoi_round(0.1f) == 0);
+ nvCheck(ftoi_round(0.6f) == 1);
+ nvCheck(ftoi_round(-0.2f) == 0);
+ nvCheck(ftoi_round(-0.7f) == -1);
+ nvCheck(ftoi_round(10.1f) == 10);
+ nvCheck(ftoi_round(10.6f) == 11);
+ nvCheck(ftoi_round(-90.1f) == -90);
+ nvCheck(ftoi_round(-90.6f) == -91);
+
+ nvCheck(ftoi_round(0) == 0);
+ nvCheck(ftoi_round(1) == 1);
+ nvCheck(ftoi_round(-1) == -1);
+
+ nvCheck(ftoi_round(0.5f) == 0); // How are midpoints rounded? Bankers rounding.
+ nvCheck(ftoi_round(1.5f) == 2);
+ nvCheck(ftoi_round(2.5f) == 2);
+ nvCheck(ftoi_round(3.5f) == 4);
+ nvCheck(ftoi_round(4.5f) == 4);
+ nvCheck(ftoi_round(-0.5f) == 0);
+ nvCheck(ftoi_round(-1.5f) == -2);
+
+
+ // Truncation (round down if > 0, round up if < 0).
+ nvCheck(ftoi_trunc(0.1f) == 0);
+ nvCheck(ftoi_trunc(0.6f) == 0);
+ nvCheck(ftoi_trunc(-0.2f) == 0);
+ nvCheck(ftoi_trunc(-0.7f) == 0); // @@ When using /arch:SSE2 in Win32, msvc produce wrong code for this one. It is skipping the addition.
+ nvCheck(ftoi_trunc(1.99f) == 1);
+ nvCheck(ftoi_trunc(-1.2f) == -1);
+
+ // Floor (round down).
+ nvCheck(ftoi_floor(0.1f) == 0);
+ nvCheck(ftoi_floor(0.6f) == 0);
+ nvCheck(ftoi_floor(-0.2f) == -1);
+ nvCheck(ftoi_floor(-0.7f) == -1);
+ nvCheck(ftoi_floor(1.99f) == 1);
+ nvCheck(ftoi_floor(-1.2f) == -2);
+
+ nvCheck(ftoi_floor(0) == 0);
+ nvCheck(ftoi_floor(1) == 1);
+ nvCheck(ftoi_floor(-1) == -1);
+ nvCheck(ftoi_floor(2) == 2);
+ nvCheck(ftoi_floor(-2) == -2);
+
+ // Ceil (round up).
+ nvCheck(ftoi_ceil(0.1f) == 1);
+ nvCheck(ftoi_ceil(0.6f) == 1);
+ nvCheck(ftoi_ceil(-0.2f) == 0);
+ nvCheck(ftoi_ceil(-0.7f) == 0);
+ nvCheck(ftoi_ceil(1.99f) == 2);
+ nvCheck(ftoi_ceil(-1.2f) == -1);
+
+ nvCheck(ftoi_ceil(0) == 0);
+ nvCheck(ftoi_ceil(1) == 1);
+ nvCheck(ftoi_ceil(-1) == -1);
+ nvCheck(ftoi_ceil(2) == 2);
+ nvCheck(ftoi_ceil(-2) == -2);
+ }
+
+
+
+
+
+ // Safe versions using standard casts.
+
+ inline int iround(float f)
+ {
+ return ftoi_round(f);
+ //return int(floorf(f + 0.5f));
+ }
+
+ inline int iround(double f)
+ {
+ return int(::floor(f + 0.5));
+ }
+
+ inline int ifloor(float f)
+ {
+ return ftoi_floor(f);
+ //return int(floorf(f));
+ }
+
+ inline int iceil(float f)
+ {
+ return int(ceilf(f));
+ }
+
+
+
+ // I'm always confused about which quantizer to use. I think we should choose a quantizer based on how the values are expanded later and this is generally using the 'exact endpoints' rule.
+ // Some notes from cbloom: http://cbloomrants.blogspot.com/2011/07/07-26-11-pixel-int-to-float-options.html
+
+ // Quantize a float in the [0,1] range, using exact end points or uniform bins.
+ inline float quantizeFloat(float x, uint bits, bool exactEndPoints = true) {
+ nvDebugCheck(bits <= 16);
+
+ float range = float(1 << bits);
+ if (exactEndPoints) {
+ return floorf(x * (range-1) + 0.5f) / (range-1);
+ }
+ else {
+ return (floorf(x * range) + 0.5f) / range;
+ }
+ }
+
+
+ // This is the most common rounding mode:
+ //
+ // 0 1 2 3
+ // |___|_______|_______|___|
+ // 0 1
+ //
+ // You get that if you take the unit floating point number multiply by 'N-1' and round to nearest. That is, `i = round(f * (N-1))`.
+ // You reconstruct the original float dividing by 'N-1': `f = i / (N-1)`
+
+
+ // 0 1 2 3
+ // |_____|_____|_____|_____|
+ // 0 1
+
+ /*enum BinningMode {
+ RoundMode_ExactEndPoints,
+ RoundMode_UniformBins,
+ };*/
+
+ template <int N>
+ inline uint unitFloatToFixed(float f) {
+ return ftoi_round(f * ((1<<N)-1));
+ }
+
+ inline uint8 unitFloatToFixed8(float f) {
+ return (uint8)unitFloatToFixed<8>(f);
+ }
+
+ inline uint16 unitFloatToFixed16(float f) {
+ return (uint16)unitFloatToFixed<16>(f);
+ }
+
+
+} // nv
+
+#endif // NV_MATH_FTOI_H
diff --git a/thirdparty/thekla_atlas/nvmath/nvmath.h b/thirdparty/thekla_atlas/nvmath/nvmath.h
new file mode 100644
index 0000000000..695f452c1d
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmath/nvmath.h
@@ -0,0 +1,337 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MATH_H
+#define NV_MATH_H
+
+#include "nvcore/nvcore.h"
+#include "nvcore/Debug.h" // nvDebugCheck
+#include "nvcore/Utils.h" // max, clamp
+
+#include <math.h>
+
+#if NV_OS_WIN32 || NV_OS_XBOX || NV_OS_DURANGO
+#include <float.h> // finite, isnan
+#endif
+
+#if NV_CPU_X86 || NV_CPU_X86_64
+ //#include <intrin.h>
+ #include <xmmintrin.h>
+#endif
+
+
+
+// Function linkage
+#if NVMATH_SHARED
+#ifdef NVMATH_EXPORTS
+#define NVMATH_API DLL_EXPORT
+#define NVMATH_CLASS DLL_EXPORT_CLASS
+#else
+#define NVMATH_API DLL_IMPORT
+#define NVMATH_CLASS DLL_IMPORT
+#endif
+#else // NVMATH_SHARED
+#define NVMATH_API
+#define NVMATH_CLASS
+#endif // NVMATH_SHARED
+
+// Set some reasonable defaults.
+#ifndef NV_USE_ALTIVEC
+# define NV_USE_ALTIVEC NV_CPU_PPC
+//# define NV_USE_ALTIVEC defined(__VEC__)
+#endif
+
+#ifndef NV_USE_SSE
+# if NV_CPU_X86_64
+ // x64 always supports at least SSE2
+# define NV_USE_SSE 2
+# elif NV_CC_MSVC && defined(_M_IX86_FP)
+ // Also on x86 with the /arch:SSE flag in MSVC.
+# define NV_USE_SSE _M_IX86_FP // 1=SSE, 2=SS2
+# elif defined(__SSE__)
+# define NV_USE_SSE 1
+# elif defined(__SSE2__)
+# define NV_USE_SSE 2
+# else
+ // Otherwise we assume no SSE.
+# define NV_USE_SSE 0
+# endif
+#endif
+
+
+// Internally set NV_USE_SIMD when either altivec or sse is available.
+#if NV_USE_ALTIVEC && NV_USE_SSE
+# error "Cannot enable both altivec and sse!"
+#endif
+
+
+
+#ifndef PI
+#define PI float(3.1415926535897932384626433833)
+#endif
+
+#define NV_EPSILON (0.0001f)
+#define NV_NORMAL_EPSILON (0.001f)
+
+/*
+#define SQ(r) ((r)*(r))
+
+#define SIGN_BITMASK 0x80000000
+
+/// Integer representation of a floating-point value.
+#define IR(x) ((uint32 &)(x))
+
+/// Absolute integer representation of a floating-point value
+#define AIR(x) (IR(x) & 0x7fffffff)
+
+/// Floating-point representation of an integer value.
+#define FR(x) ((float&)(x))
+
+/// Integer-based comparison of a floating point value.
+/// Don't use it blindly, it can be faster or slower than the FPU comparison, depends on the context.
+#define IS_NEGATIVE_FLOAT(x) (IR(x)&SIGN_BITMASK)
+*/
+
+extern "C" inline double sqrt_assert(const double f)
+{
+ nvDebugCheck(f >= 0.0f);
+ return sqrt(f);
+}
+
+inline float sqrtf_assert(const float f)
+{
+ nvDebugCheck(f >= 0.0f);
+ return sqrtf(f);
+}
+
+extern "C" inline double acos_assert(const double f)
+{
+ nvDebugCheck(f >= -1.0f && f <= 1.0f);
+ return acos(f);
+}
+
+inline float acosf_assert(const float f)
+{
+ nvDebugCheck(f >= -1.0f && f <= 1.0f);
+ return acosf(f);
+}
+
+extern "C" inline double asin_assert(const double f)
+{
+ nvDebugCheck(f >= -1.0f && f <= 1.0f);
+ return asin(f);
+}
+
+inline float asinf_assert(const float f)
+{
+ nvDebugCheck(f >= -1.0f && f <= 1.0f);
+ return asinf(f);
+}
+
+// Replace default functions with asserting ones.
+#if !NV_CC_MSVC || (NV_CC_MSVC && (_MSC_VER < 1700)) // IC: Apparently this was causing problems in Visual Studio 2012. See Issue 194: https://code.google.com/p/nvidia-texture-tools/issues/detail?id=194
+#define sqrt sqrt_assert
+#define sqrtf sqrtf_assert
+#define acos acos_assert
+#define acosf acosf_assert
+#define asin asin_assert
+#define asinf asinf_assert
+#endif
+
+#if NV_CC_MSVC
+NV_FORCEINLINE float log2f(float x)
+{
+ nvCheck(x >= 0);
+ return logf(x) / logf(2.0f);
+}
+NV_FORCEINLINE float exp2f(float x)
+{
+ return powf(2.0f, x);
+}
+#endif
+
+namespace nv
+{
+ inline float toRadian(float degree) { return degree * (PI / 180.0f); }
+ inline float toDegree(float radian) { return radian * (180.0f / PI); }
+
+ // Robust floating point comparisons:
+ // http://realtimecollisiondetection.net/blog/?p=89
+ inline bool equal(const float f0, const float f1, const float epsilon = NV_EPSILON)
+ {
+ //return fabs(f0-f1) <= epsilon;
+ return fabs(f0-f1) <= epsilon * max3(1.0f, fabsf(f0), fabsf(f1));
+ }
+
+ inline bool isZero(const float f, const float epsilon = NV_EPSILON)
+ {
+ return fabs(f) <= epsilon;
+ }
+
+ inline bool isFinite(const float f)
+ {
+#if NV_OS_WIN32 || NV_OS_XBOX || NV_OS_DURANGO
+ return _finite(f) != 0;
+#elif NV_OS_DARWIN || NV_OS_FREEBSD || NV_OS_OPENBSD || NV_OS_ORBIS
+ return isfinite(f);
+#elif NV_OS_LINUX
+ return finitef(f);
+#else
+# error "isFinite not supported"
+#endif
+ //return std::isfinite (f);
+ //return finite (f);
+ }
+
+ inline bool isNan(const float f)
+ {
+#if NV_OS_WIN32 || NV_OS_XBOX || NV_OS_DURANGO
+ return _isnan(f) != 0;
+#elif NV_OS_DARWIN || NV_OS_FREEBSD || NV_OS_OPENBSD || NV_OS_ORBIS
+ return isnan(f);
+#elif NV_OS_LINUX
+ return isnanf(f);
+#else
+# error "isNan not supported"
+#endif
+ }
+
+ inline uint log2(uint32 i)
+ {
+ uint32 value = 0;
+ while( i >>= 1 ) value++;
+ return value;
+ }
+
+ inline uint log2(uint64 i)
+ {
+ uint64 value = 0;
+ while (i >>= 1) value++;
+ return U32(value);
+ }
+
+ inline float lerp(float f0, float f1, float t)
+ {
+ const float s = 1.0f - t;
+ return f0 * s + f1 * t;
+ }
+
+ inline float square(float f) { return f * f; }
+ inline int square(int i) { return i * i; }
+
+ inline float cube(float f) { return f * f * f; }
+ inline int cube(int i) { return i * i * i; }
+
+ inline float frac(float f)
+ {
+ return f - floor(f);
+ }
+
+ inline float floatRound(float f)
+ {
+ return floorf(f + 0.5f);
+ }
+
+ // Eliminates negative zeros from a float array.
+ inline void floatCleanup(float * fp, int n)
+ {
+ for (int i = 0; i < n; i++) {
+ //nvDebugCheck(isFinite(fp[i]));
+ union { float f; uint32 i; } x = { fp[i] };
+ if (x.i == 0x80000000) fp[i] = 0.0f;
+ }
+ }
+
+ inline float saturate(float f) {
+ return clamp(f, 0.0f, 1.0f);
+ }
+
+ inline float linearstep(float edge0, float edge1, float x) {
+ // Scale, bias and saturate x to 0..1 range
+ return saturate((x - edge0) / (edge1 - edge0));
+ }
+
+ inline float smoothstep(float edge0, float edge1, float x) {
+ x = linearstep(edge0, edge1, x);
+
+ // Evaluate polynomial
+ return x*x*(3 - 2*x);
+ }
+
+ inline int sign(float a)
+ {
+ return (a > 0) - (a < 0);
+ //if (a > 0.0f) return 1;
+ //if (a < 0.0f) return -1;
+ //return 0;
+ }
+
+ union Float754 {
+ unsigned int raw;
+ float value;
+ struct {
+ #if NV_BIG_ENDIAN
+ unsigned int negative:1;
+ unsigned int biasedexponent:8;
+ unsigned int mantissa:23;
+ #else
+ unsigned int mantissa:23;
+ unsigned int biasedexponent:8;
+ unsigned int negative:1;
+ #endif
+ } field;
+ };
+
+ // Return the exponent of x ~ Floor(Log2(x))
+ inline int floatExponent(float x)
+ {
+ Float754 f;
+ f.value = x;
+ return (f.field.biasedexponent - 127);
+ }
+
+
+ // FloatRGB9E5
+ union Float3SE {
+ uint32 v;
+ struct {
+ #if NV_BIG_ENDIAN
+ uint32 e : 5;
+ uint32 zm : 9;
+ uint32 ym : 9;
+ uint32 xm : 9;
+ #else
+ uint32 xm : 9;
+ uint32 ym : 9;
+ uint32 zm : 9;
+ uint32 e : 5;
+ #endif
+ };
+ };
+
+ // FloatR11G11B10
+ union Float3PK {
+ uint32 v;
+ struct {
+ #if NV_BIG_ENDIAN
+ uint32 ze : 5;
+ uint32 zm : 5;
+ uint32 ye : 5;
+ uint32 ym : 6;
+ uint32 xe : 5;
+ uint32 xm : 6;
+ #else
+ uint32 xm : 6;
+ uint32 xe : 5;
+ uint32 ym : 6;
+ uint32 ye : 5;
+ uint32 zm : 5;
+ uint32 ze : 5;
+ #endif
+ };
+ };
+
+
+} // nv
+
+#endif // NV_MATH_H
diff --git a/thirdparty/thekla_atlas/nvmesh/BaseMesh.cpp b/thirdparty/thekla_atlas/nvmesh/BaseMesh.cpp
new file mode 100644
index 0000000000..f17d3b46fd
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/BaseMesh.cpp
@@ -0,0 +1,19 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "BaseMesh.h"
+#include "Stream.h"
+#include "nvmath/TypeSerialization.h"
+
+
+namespace nv
+{
+ static Stream & operator<< (Stream & s, BaseMesh::Vertex & vertex)
+ {
+ return s << vertex.id << vertex.pos << vertex.nor << vertex.tex;
+ }
+
+ Stream & operator<< (Stream & s, BaseMesh & mesh)
+ {
+ return s << mesh.m_vertexArray;
+ }
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/BaseMesh.h b/thirdparty/thekla_atlas/nvmesh/BaseMesh.h
new file mode 100644
index 0000000000..c8559511f1
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/BaseMesh.h
@@ -0,0 +1,72 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MESH_BASEMESH_H
+#define NV_MESH_BASEMESH_H
+
+#include "nvmesh.h"
+#include "nvmath/Vector.h"
+#include "nvcore/Array.h"
+#include "nvcore/Hash.h"
+
+namespace nv
+{
+
+ /// Base mesh without connectivity.
+ class BaseMesh
+ {
+ public:
+ struct Vertex;
+
+ BaseMesh() {}
+
+ BaseMesh(uint vertexNum) :
+ m_vertexArray(vertexNum) {}
+
+ // Vertex methods.
+ uint vertexCount() const { return m_vertexArray.count(); }
+ const Vertex & vertexAt(uint i) const { return m_vertexArray[i]; }
+ Vertex & vertexAt(uint i) { return m_vertexArray[i]; }
+ const Array<Vertex> & vertices() const { return m_vertexArray; }
+ Array<Vertex> & vertices() { return m_vertexArray; }
+
+ friend Stream & operator<< (Stream & s, BaseMesh & obj);
+
+ protected:
+
+ Array<Vertex> m_vertexArray;
+ };
+
+
+ /// BaseMesh vertex.
+ struct BaseMesh::Vertex
+ {
+ Vertex() : id(NIL), pos(0.0f), nor(0.0f), tex(0.0f) {}
+
+ uint id; // @@ Vertex should be an index into the vertex data.
+ Vector3 pos;
+ Vector3 nor;
+ Vector2 tex;
+ };
+
+ inline bool operator==(const BaseMesh::Vertex & a, const BaseMesh::Vertex & b)
+ {
+ return a.pos == b.pos && a.nor == b.nor && a.tex == b.tex;
+ }
+
+ inline bool operator!=(const BaseMesh::Vertex & a, const BaseMesh::Vertex & b)
+ {
+ return a.pos != b.pos && a.nor != b.nor && a.tex != b.tex;
+ }
+
+ template <> struct Hash<BaseMesh::Vertex>
+ {
+ uint operator()(const BaseMesh::Vertex & v) const
+ {
+ return Hash<Vector3>()(v.pos);
+ }
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_BASEMESH_H
diff --git a/thirdparty/thekla_atlas/nvmesh/MeshBuilder.cpp b/thirdparty/thekla_atlas/nvmesh/MeshBuilder.cpp
new file mode 100644
index 0000000000..24d8ddff89
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/MeshBuilder.cpp
@@ -0,0 +1,1000 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "nvmesh.h" // pch
+
+#include "MeshBuilder.h"
+#include "TriMesh.h"
+#include "QuadTriMesh.h"
+#include "halfedge/Mesh.h"
+#include "halfedge/Vertex.h"
+#include "halfedge/Face.h"
+
+#include "weld/Weld.h"
+
+#include "nvmath/Box.h"
+#include "nvmath/Vector.inl"
+
+#include "nvcore/StrLib.h"
+#include "nvcore/RadixSort.h"
+#include "nvcore/Ptr.h"
+#include "nvcore/Array.inl"
+#include "nvcore/HashMap.inl"
+
+
+using namespace nv;
+
+/*
+By default the mesh builder creates 3 streams (position, normal, texcoord), I'm planning to add support for extra streams as follows:
+
+enum StreamType { StreamType_Float, StreamType_Vector2, StreamType_Vector3, StreamType_Vector4 };
+
+uint addStream(const char *, uint idx, StreamType);
+
+uint addAttribute(float)
+uint addAttribute(Vector2)
+uint addAttribute(Vector3)
+uint addAttribute(Vector4)
+
+struct Vertex
+{
+ uint pos;
+ uint nor;
+ uint tex;
+ uint * attribs; // NULL or NIL terminated array?
+};
+
+All streams must be added before hand, so that you know the size of the attribs array.
+
+The vertex hash function could be kept as is, but the == operator should be extended to test
+the extra atributes when available.
+
+That might require a custom hash implementation, or an extension of the current one. How to
+handle the variable number of attributes in the attribs array?
+
+bool operator()(const Vertex & a, const Vertex & b) const
+{
+ if (a.pos != b.pos || a.nor != b.nor || a.tex != b.tex) return false;
+ if (a.attribs == NULL && b.attribs == NULL) return true;
+ return 0 == memcmp(a.attribs, b.attribs, ???);
+}
+
+We could use a NIL terminated array, or provide custom user data to the equals functor.
+
+vertexMap.setUserData((void *)vertexAttribCount);
+
+bool operator()(const Vertex & a, const Vertex & b, void * userData) const { ... }
+
+*/
+
+
+
+namespace
+{
+ struct Material
+ {
+ Material() : faceCount(0) {}
+ Material(const String & str) : name(str), faceCount(0) {}
+
+ String name;
+ uint faceCount;
+ };
+
+ struct Vertex
+ {
+ //Vertex() {}
+ //Vertex(uint p, uint n, uint t0, uint t1, uint c) : pos(p), nor(n), tex0(t0), tex1(t1), col(c) {}
+
+ friend bool operator==(const Vertex & a, const Vertex & b)
+ {
+ return a.pos == b.pos && a.nor == b.nor && a.tex[0] == b.tex[0] && a.tex[1] == b.tex[1] && a.col[0] == b.col[0] && a.col[1] == b.col[1] && a.col[2] == b.col[2];
+ }
+
+ uint pos;
+ uint nor;
+ uint tex[2];
+ uint col[3];
+ };
+
+ struct Face
+ {
+ uint id;
+ uint firstIndex;
+ uint indexCount;
+ uint material;
+ uint group;
+ };
+
+} // namespace
+
+
+namespace nv
+{
+ // This is a much better hash than the default and greatly improves performance!
+ template <> struct Hash<Vertex>
+ {
+ uint operator()(const Vertex & v) const { return v.pos + v.nor + v.tex[0]/* + v.col*/; }
+ };
+}
+
+struct MeshBuilder::PrivateData
+{
+ PrivateData() : currentGroup(NIL), currentMaterial(NIL), maxFaceIndexCount(0) {}
+
+ uint pushVertex(uint p, uint n, uint t0, uint t1, uint c0, uint c1, uint c2);
+ uint pushVertex(const Vertex & v);
+
+ Array<Vector3> posArray;
+ Array<Vector3> norArray;
+ Array<Vector2> texArray[2];
+ Array<Vector4> colArray[3];
+
+ Array<Vertex> vertexArray;
+ HashMap<Vertex, uint> vertexMap;
+
+ HashMap<String, uint> materialMap;
+ Array<Material> materialArray;
+
+ uint currentGroup;
+ uint currentMaterial;
+
+ Array<uint> indexArray;
+ Array<Face> faceArray;
+
+ uint maxFaceIndexCount;
+};
+
+
+uint MeshBuilder::PrivateData::pushVertex(uint p, uint n, uint t0, uint t1, uint c0, uint c1, uint c2)
+{
+ Vertex v;
+ v.pos = p;
+ v.nor = n;
+ v.tex[0] = t0;
+ v.tex[1] = t1;
+ v.col[0] = c0;
+ v.col[1] = c1;
+ v.col[2] = c2;
+ return pushVertex(v);
+}
+
+uint MeshBuilder::PrivateData::pushVertex(const Vertex & v)
+{
+ // Lookup vertex v in map.
+ uint idx;
+ if (vertexMap.get(v, &idx))
+ {
+ return idx;
+ }
+
+ idx = vertexArray.count();
+ vertexArray.pushBack(v);
+ vertexMap.add(v, idx);
+
+ return idx;
+}
+
+
+MeshBuilder::MeshBuilder() : d(new PrivateData())
+{
+}
+
+MeshBuilder::~MeshBuilder()
+{
+ nvDebugCheck(d != NULL);
+ delete d;
+}
+
+
+// Builder methods.
+uint MeshBuilder::addPosition(const Vector3 & v)
+{
+ d->posArray.pushBack(validate(v));
+ return d->posArray.count() - 1;
+}
+
+uint MeshBuilder::addNormal(const Vector3 & v)
+{
+ d->norArray.pushBack(validate(v));
+ return d->norArray.count() - 1;
+}
+
+uint MeshBuilder::addTexCoord(const Vector2 & v, uint set/*=0*/)
+{
+ d->texArray[set].pushBack(validate(v));
+ return d->texArray[set].count() - 1;
+}
+
+uint MeshBuilder::addColor(const Vector4 & v, uint set/*=0*/)
+{
+ d->colArray[set].pushBack(validate(v));
+ return d->colArray[set].count() - 1;
+}
+
+void MeshBuilder::beginGroup(uint id)
+{
+ d->currentGroup = id;
+}
+
+void MeshBuilder::endGroup()
+{
+ d->currentGroup = NIL;
+}
+
+// Add named material, check for uniquenes.
+uint MeshBuilder::addMaterial(const char * name)
+{
+ uint index;
+ if (d->materialMap.get(name, &index)) {
+ nvDebugCheck(d->materialArray[index].name == name);
+ }
+ else {
+ index = d->materialArray.count();
+ d->materialMap.add(name, index);
+
+ Material material(name);
+ d->materialArray.append(material);
+ }
+ return index;
+}
+
+void MeshBuilder::beginMaterial(uint id)
+{
+ d->currentMaterial = id;
+}
+
+void MeshBuilder::endMaterial()
+{
+ d->currentMaterial = NIL;
+}
+
+void MeshBuilder::beginPolygon(uint id/*=0*/)
+{
+ Face face;
+ face.id = id;
+ face.firstIndex = d->indexArray.count();
+ face.indexCount = 0;
+ face.material = d->currentMaterial;
+ face.group = d->currentGroup;
+
+ d->faceArray.pushBack(face);
+}
+
+uint MeshBuilder::addVertex(uint p, uint n/*= NIL*/, uint t0/*= NIL*/, uint t1/*= NIL*/, uint c0/*= NIL*/, uint c1/*= NIL*/, uint c2/*= NIL*/)
+{
+ // @@ In theory there's no need to add vertices before faces, but I'm adding this to debug problems in our maya exporter:
+ nvDebugCheck(p < d->posArray.count());
+ nvDebugCheck(n == NIL || n < d->norArray.count());
+ nvDebugCheck(t0 == NIL || t0 < d->texArray[0].count());
+ nvDebugCheck(t1 == NIL || t1 < d->texArray[1].count());
+ //nvDebugCheck(c0 == NIL || c0 < d->colArray[0].count());
+ if (c0 > d->colArray[0].count()) c0 = NIL; // @@ This seems to be happening in loc_swamp_catwalk.mb! No idea why.
+ nvDebugCheck(c1 == NIL || c1 < d->colArray[1].count());
+ nvDebugCheck(c2 == NIL || c2 < d->colArray[2].count());
+
+ uint idx = d->pushVertex(p, n, t0, t1, c0, c1, c2);
+ d->indexArray.pushBack(idx);
+ d->faceArray.back().indexCount++;
+ return idx;
+}
+
+uint MeshBuilder::addVertex(const Vector3 & pos)
+{
+ uint p = addPosition(pos);
+ return addVertex(p);
+}
+
+#if 0
+uint MeshBuilder::addVertex(const Vector3 & pos, const Vector3 & nor, const Vector2 & tex0, const Vector2 & tex1, const Vector4 & col0, const Vector4 & col1)
+{
+ uint p = addPosition(pos);
+ uint n = addNormal(nor);
+ uint t0 = addTexCoord(tex0, 0);
+ uint t1 = addTexCoord(tex1, 1);
+ uint c0 = addColor(col0);
+ uint c1 = addColor(col1);
+ return addVertex(p, n, t0, t1, c0, c1);
+}
+#endif
+
+// Return true if the face is valid and was added to the mesh.
+bool MeshBuilder::endPolygon()
+{
+ const Face & face = d->faceArray.back();
+ const uint count = face.indexCount;
+
+ // Validate polygon here.
+ bool invalid = count <= 2;
+
+ if (!invalid) {
+ // Skip zero area polygons. Or polygons with degenerate edges (which will result in zero-area triangles).
+ const uint first = face.firstIndex;
+ for (uint j = count - 1, i = 0; i < count; j = i, i++) {
+ uint v0 = d->indexArray[first + i];
+ uint v1 = d->indexArray[first + j];
+
+ uint p0 = d->vertexArray[v0].pos;
+ uint p1 = d->vertexArray[v1].pos;
+
+ if (p0 == p1) {
+ invalid = true;
+ break;
+ }
+
+ if (equal(d->posArray[p0], d->posArray[p1], FLT_EPSILON)) {
+ invalid = true;
+ break;
+ }
+ }
+
+ uint v0 = d->indexArray[first];
+ uint p0 = d->vertexArray[v0].pos;
+ Vector3 x0 = d->posArray[p0];
+
+ float area = 0.0f;
+ for (uint j = 1, i = 2; i < count; j = i, i++) {
+ uint v1 = d->indexArray[first + i];
+ uint v2 = d->indexArray[first + j];
+
+ uint p1 = d->vertexArray[v1].pos;
+ uint p2 = d->vertexArray[v2].pos;
+
+ Vector3 x1 = d->posArray[p1];
+ Vector3 x2 = d->posArray[p2];
+
+ area += length(cross(x1-x0, x2-x0));
+ }
+
+ if (0.5 * area < 1e-6) { // Reduce this threshold if artists have legitimate complains.
+ invalid = true;
+ }
+
+ // @@ This is not complete. We may still get zero area triangles after triangulation.
+ // However, our plugin triangulates before building the mesh, so hopefully that's not a problem.
+
+ }
+
+ if (invalid)
+ {
+ d->indexArray.resize(d->indexArray.size() - count);
+ d->faceArray.popBack();
+ return false;
+ }
+ else
+ {
+ if (d->currentMaterial != NIL) {
+ d->materialArray[d->currentMaterial].faceCount++;
+ }
+
+ d->maxFaceIndexCount = max(d->maxFaceIndexCount, count);
+ return true;
+ }
+}
+
+
+uint MeshBuilder::weldPositions()
+{
+ Array<uint> xrefs;
+ Weld<Vector3> weldVector3;
+
+ if (d->posArray.count()) {
+ // Weld vertex attributes.
+ weldVector3(d->posArray, xrefs);
+
+ // Remap vertex indices.
+ const uint vertexCount = d->vertexArray.count();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ Vertex & vertex = d->vertexArray[v];
+ if (vertex.pos != NIL) vertex.pos = xrefs[vertex.pos];
+ }
+ }
+
+ return d->posArray.count();
+}
+
+uint MeshBuilder::weldNormals()
+{
+ Array<uint> xrefs;
+ Weld<Vector3> weldVector3;
+
+ if (d->norArray.count()) {
+ // Weld vertex attributes.
+ weldVector3(d->norArray, xrefs);
+
+ // Remap vertex indices.
+ const uint vertexCount = d->vertexArray.count();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ Vertex & vertex = d->vertexArray[v];
+ if (vertex.nor != NIL) vertex.nor = xrefs[vertex.nor];
+ }
+ }
+
+ return d->norArray.count();
+}
+
+uint MeshBuilder::weldTexCoords(uint set/*=0*/)
+{
+ Array<uint> xrefs;
+ Weld<Vector2> weldVector2;
+
+ if (d->texArray[set].count()) {
+ // Weld vertex attributes.
+ weldVector2(d->texArray[set], xrefs);
+
+ // Remap vertex indices.
+ const uint vertexCount = d->vertexArray.count();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ Vertex & vertex = d->vertexArray[v];
+ if (vertex.tex[set] != NIL) vertex.tex[set] = xrefs[vertex.tex[set]];
+ }
+ }
+
+ return d->texArray[set].count();
+}
+
+uint MeshBuilder::weldColors(uint set/*=0*/)
+{
+ Array<uint> xrefs;
+ Weld<Vector4> weldVector4;
+
+ if (d->colArray[set].count()) {
+ // Weld vertex attributes.
+ weldVector4(d->colArray[set], xrefs);
+
+ // Remap vertex indices.
+ const uint vertexCount = d->vertexArray.count();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ Vertex & vertex = d->vertexArray[v];
+ if (vertex.col[set] != NIL) vertex.col[set] = xrefs[vertex.col[set]];
+ }
+ }
+
+ return d->colArray[set].count();
+}
+
+void MeshBuilder::weldVertices() {
+
+ if (d->vertexArray.count() == 0) {
+ // Nothing to do.
+ return;
+ }
+
+ Array<uint> xrefs;
+ Weld<Vertex> weldVertex;
+
+ // Weld vertices.
+ weldVertex(d->vertexArray, xrefs);
+
+ // Remap face indices.
+ const uint indexCount = d->indexArray.count();
+ for (uint i = 0; i < indexCount; i++)
+ {
+ d->indexArray[i] = xrefs[d->indexArray[i]];
+ }
+
+ // Remap vertex map.
+ foreach(i, d->vertexMap)
+ {
+ d->vertexMap[i].value = xrefs[d->vertexMap[i].value];
+ }
+}
+
+
+void MeshBuilder::optimize()
+{
+ if (d->vertexArray.count() == 0)
+ {
+ return;
+ }
+
+ weldPositions();
+ weldNormals();
+ weldTexCoords(0);
+ weldTexCoords(1);
+ weldColors();
+
+ weldVertices();
+}
+
+
+
+
+
+
+void MeshBuilder::removeUnusedMaterials(Array<uint> & newMaterialId)
+{
+ uint materialCount = d->materialArray.count();
+
+ // Reset face counts.
+ for (uint i = 0; i < materialCount; i++) {
+ d->materialArray[i].faceCount = 0;
+ }
+
+ // Count faces.
+ foreach(i, d->faceArray) {
+ Face & face = d->faceArray[i];
+
+ if (face.material != NIL) {
+ nvDebugCheck(face.material < materialCount);
+
+ d->materialArray[face.material].faceCount++;
+ }
+ }
+
+ // Remove unused materials.
+ newMaterialId.resize(materialCount);
+
+ for (uint i = 0, m = 0; i < materialCount; i++)
+ {
+ if (d->materialArray[m].faceCount > 0)
+ {
+ newMaterialId[i] = m++;
+ }
+ else
+ {
+ newMaterialId[i] = NIL;
+ d->materialArray.removeAt(m);
+ }
+ }
+
+ materialCount = d->materialArray.count();
+
+ // Update face material ids.
+ foreach(i, d->faceArray) {
+ Face & face = d->faceArray[i];
+
+ if (face.material != NIL) {
+ uint id = newMaterialId[face.material];
+ nvDebugCheck(id != NIL && id < materialCount);
+
+ face.material = id;
+ }
+ }
+}
+
+void MeshBuilder::sortFacesByGroup()
+{
+ const uint faceCount = d->faceArray.count();
+
+ Array<uint> faceGroupArray;
+ faceGroupArray.resize(faceCount);
+
+ for (uint i = 0; i < faceCount; i++) {
+ faceGroupArray[i] = d->faceArray[i].group;
+ }
+
+ RadixSort radix;
+ radix.sort(faceGroupArray);
+
+ Array<Face> newFaceArray;
+ newFaceArray.resize(faceCount);
+
+ for (uint i = 0; i < faceCount; i++) {
+ newFaceArray[i] = d->faceArray[radix.rank(i)];
+ }
+
+ swap(newFaceArray, d->faceArray);
+}
+
+void MeshBuilder::sortFacesByMaterial()
+{
+ const uint faceCount = d->faceArray.count();
+
+ Array<uint> faceMaterialArray;
+ faceMaterialArray.resize(faceCount);
+
+ for (uint i = 0; i < faceCount; i++) {
+ faceMaterialArray[i] = d->faceArray[i].material;
+ }
+
+ RadixSort radix;
+ radix.sort(faceMaterialArray);
+
+ Array<Face> newFaceArray;
+ newFaceArray.resize(faceCount);
+
+ for (uint i = 0; i < faceCount; i++) {
+ newFaceArray[i] = d->faceArray[radix.rank(i)];
+ }
+
+ swap(newFaceArray, d->faceArray);
+}
+
+
+void MeshBuilder::reset()
+{
+ nvDebugCheck(d != NULL);
+ delete d;
+ d = new PrivateData();
+}
+
+void MeshBuilder::done()
+{
+ if (d->currentGroup != NIL) {
+ endGroup();
+ }
+
+ if (d->currentMaterial != NIL) {
+ endMaterial();
+ }
+}
+
+// Hints.
+void MeshBuilder::hintTriangleCount(uint count)
+{
+ d->indexArray.reserve(d->indexArray.count() + count * 4);
+}
+
+void MeshBuilder::hintVertexCount(uint count)
+{
+ d->vertexArray.reserve(d->vertexArray.count() + count);
+ d->vertexMap.resize(d->vertexMap.count() + count);
+}
+
+void MeshBuilder::hintPositionCount(uint count)
+{
+ d->posArray.reserve(d->posArray.count() + count);
+}
+
+void MeshBuilder::hintNormalCount(uint count)
+{
+ d->norArray.reserve(d->norArray.count() + count);
+}
+
+void MeshBuilder::hintTexCoordCount(uint count, uint set/*=0*/)
+{
+ d->texArray[set].reserve(d->texArray[set].count() + count);
+}
+
+void MeshBuilder::hintColorCount(uint count, uint set/*=0*/)
+{
+ d->colArray[set].reserve(d->colArray[set].count() + count);
+}
+
+
+// Helpers.
+void MeshBuilder::addTriangle(uint v0, uint v1, uint v2)
+{
+ beginPolygon();
+ addVertex(v0);
+ addVertex(v1);
+ addVertex(v2);
+ endPolygon();
+}
+
+void MeshBuilder::addQuad(uint v0, uint v1, uint v2, uint v3)
+{
+ beginPolygon();
+ addVertex(v0);
+ addVertex(v1);
+ addVertex(v2);
+ addVertex(v3);
+ endPolygon();
+}
+
+
+// Get tri mesh.
+TriMesh * MeshBuilder::buildTriMesh() const
+{
+ const uint faceCount = d->faceArray.count();
+ uint triangleCount = 0;
+ for (uint f = 0; f < faceCount; f++) {
+ triangleCount += d->faceArray[f].indexCount - 2;
+ }
+
+ const uint vertexCount = d->vertexArray.count();
+ TriMesh * mesh = new TriMesh(triangleCount, vertexCount);
+
+ // Build faces.
+ Array<TriMesh::Face> & faces = mesh->faces();
+
+ for(uint f = 0; f < faceCount; f++)
+ {
+ int firstIndex = d->faceArray[f].firstIndex;
+ int indexCount = d->faceArray[f].indexCount;
+
+ int v0 = d->indexArray[firstIndex + 0];
+ int v1 = d->indexArray[firstIndex + 1];
+
+ for(int t = 0; t < indexCount - 2; t++) {
+ int v2 = d->indexArray[firstIndex + t + 2];
+
+ TriMesh::Face face;
+ face.id = faces.count();
+ face.v[0] = v0;
+ face.v[1] = v1;
+ face.v[2] = v2;
+ faces.append(face);
+
+ v1 = v2;
+ }
+ }
+
+ // Build vertices.
+ Array<BaseMesh::Vertex> & vertices = mesh->vertices();
+
+ for(uint i = 0; i < vertexCount; i++)
+ {
+ BaseMesh::Vertex vertex;
+ vertex.id = i;
+ if (d->vertexArray[i].pos != NIL) vertex.pos = d->posArray[d->vertexArray[i].pos];
+ if (d->vertexArray[i].nor != NIL) vertex.nor = d->norArray[d->vertexArray[i].nor];
+ if (d->vertexArray[i].tex[0] != NIL) vertex.tex = d->texArray[0][d->vertexArray[i].tex[0]];
+
+ vertices.append(vertex);
+ }
+
+ return mesh;
+}
+
+// Get quad/tri mesh.
+QuadTriMesh * MeshBuilder::buildQuadTriMesh() const
+{
+ const uint faceCount = d->faceArray.count();
+ const uint vertexCount = d->vertexArray.count();
+ QuadTriMesh * mesh = new QuadTriMesh(faceCount, vertexCount);
+
+ // Build faces.
+ Array<QuadTriMesh::Face> & faces = mesh->faces();
+
+ for (uint f = 0; f < faceCount; f++)
+ {
+ int firstIndex = d->faceArray[f].firstIndex;
+ int indexCount = d->faceArray[f].indexCount;
+
+ QuadTriMesh::Face face;
+ face.id = f;
+
+ face.v[0] = d->indexArray[firstIndex + 0];
+ face.v[1] = d->indexArray[firstIndex + 1];
+ face.v[2] = d->indexArray[firstIndex + 2];
+
+ // Only adds triangles and quads. Ignores polygons.
+ if (indexCount == 3) {
+ face.v[3] = NIL;
+ faces.append(face);
+ }
+ else if (indexCount == 4) {
+ face.v[3] = d->indexArray[firstIndex + 3];
+ faces.append(face);
+ }
+ }
+
+ // Build vertices.
+ Array<BaseMesh::Vertex> & vertices = mesh->vertices();
+
+ for(uint i = 0; i < vertexCount; i++)
+ {
+ BaseMesh::Vertex vertex;
+ vertex.id = i;
+ if (d->vertexArray[i].pos != NIL) vertex.pos = d->posArray[d->vertexArray[i].pos];
+ if (d->vertexArray[i].nor != NIL) vertex.nor = d->norArray[d->vertexArray[i].nor];
+ if (d->vertexArray[i].tex[0] != NIL) vertex.tex = d->texArray[0][d->vertexArray[i].tex[0]];
+
+ vertices.append(vertex);
+ }
+
+ return mesh;
+}
+
+// Get half edge mesh.
+HalfEdge::Mesh * MeshBuilder::buildHalfEdgeMesh(bool weldPositions, Error * error/*=NULL*/, Array<uint> * badFaces/*=NULL*/) const
+{
+ if (error != NULL) *error = Error_None;
+
+ const uint vertexCount = d->vertexArray.count();
+ AutoPtr<HalfEdge::Mesh> mesh(new HalfEdge::Mesh());
+
+ for(uint v = 0; v < vertexCount; v++)
+ {
+ HalfEdge::Vertex * vertex = mesh->addVertex(d->posArray[d->vertexArray[v].pos]);
+ if (d->vertexArray[v].nor != NIL) vertex->nor = d->norArray[d->vertexArray[v].nor];
+ if (d->vertexArray[v].tex[0] != NIL) vertex->tex = Vector2(d->texArray[0][d->vertexArray[v].tex[0]]);
+ if (d->vertexArray[v].col[0] != NIL) vertex->col = d->colArray[0][d->vertexArray[v].col[0]];
+ }
+
+ if (weldPositions) {
+ mesh->linkColocals();
+ }
+ else {
+ // Build canonical map from position indices.
+ Array<uint> canonicalMap(vertexCount);
+
+ foreach (i, d->vertexArray) {
+ canonicalMap.append(d->vertexArray[i].pos);
+ }
+
+ mesh->linkColocalsWithCanonicalMap(canonicalMap);
+ }
+
+ const uint faceCount = d->faceArray.count();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const uint firstIndex = d->faceArray[f].firstIndex;
+ const uint indexCount = d->faceArray[f].indexCount;
+
+ HalfEdge::Face * face = mesh->addFace(d->indexArray, firstIndex, indexCount);
+
+ // @@ This is too late, removing the face here will leave the mesh improperly connected.
+ /*if (face->area() <= FLT_EPSILON) {
+ mesh->remove(face);
+ face = NULL;
+ }*/
+
+ if (face == NULL) {
+ // Non manifold mesh.
+ if (error != NULL) *error = Error_NonManifoldEdge;
+ if (badFaces != NULL) {
+ badFaces->append(d->faceArray[f].id);
+ }
+ //return NULL; // IC: Ignore error and continue building the mesh.
+ }
+
+ if (face != NULL) {
+ face->group = d->faceArray[f].group;
+ face->material = d->faceArray[f].material;
+ }
+ }
+
+ mesh->linkBoundary();
+
+ // We cannot fix functions here, because this would introduce new vertices and these vertices won't have the corresponding builder data.
+
+ // Maybe the builder should perform the search for T-junctions and update the vertex data directly.
+
+ // For now, we don't fix T-junctions at export time, but only during parameterization.
+
+ //mesh->fixBoundaryJunctions();
+
+ //mesh->sewBoundary();
+
+ return mesh.release();
+}
+
+
+bool MeshBuilder::buildPositions(Array<Vector3> & positionArray)
+{
+ const uint vertexCount = d->vertexArray.count();
+ positionArray.resize(vertexCount);
+
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ nvDebugCheck(d->vertexArray[v].pos != NIL);
+ positionArray[v] = d->posArray[d->vertexArray[v].pos];
+ }
+
+ return true;
+}
+
+bool MeshBuilder::buildNormals(Array<Vector3> & normalArray)
+{
+ bool anyNormal = false;
+
+ const uint vertexCount = d->vertexArray.count();
+ normalArray.resize(vertexCount);
+
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ if (d->vertexArray[v].nor == NIL) {
+ normalArray[v] = Vector3(0, 0, 1);
+ }
+ else {
+ anyNormal = true;
+ normalArray[v] = d->norArray[d->vertexArray[v].nor];
+ }
+ }
+
+ return anyNormal;
+}
+
+bool MeshBuilder::buildTexCoords(Array<Vector2> & texCoordArray, uint set/*=0*/)
+{
+ bool anyTexCoord = false;
+
+ const uint vertexCount = d->vertexArray.count();
+ texCoordArray.resize(vertexCount);
+
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ if (d->vertexArray[v].tex[set] == NIL) {
+ texCoordArray[v] = Vector2(0, 0);
+ }
+ else {
+ anyTexCoord = true;
+ texCoordArray[v] = d->texArray[set][d->vertexArray[v].tex[set]];
+ }
+ }
+
+ return anyTexCoord;
+}
+
+bool MeshBuilder::buildColors(Array<Vector4> & colorArray, uint set/*=0*/)
+{
+ bool anyColor = false;
+
+ const uint vertexCount = d->vertexArray.count();
+ colorArray.resize(vertexCount);
+
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ if (d->vertexArray[v].col[set] == NIL) {
+ colorArray[v] = Vector4(0, 0, 0, 1);
+ }
+ else {
+ anyColor = true;
+ colorArray[v] = d->colArray[set][d->vertexArray[v].col[set]];
+ }
+ }
+
+ return anyColor;
+}
+
+void MeshBuilder::buildVertexToPositionMap(Array<int> &map)
+{
+ const uint vertexCount = d->vertexArray.count();
+ map.resize(vertexCount);
+
+ foreach (i, d->vertexArray) {
+ map[i] = d->vertexArray[i].pos;
+ }
+}
+
+
+
+uint MeshBuilder::vertexCount() const
+{
+ return d->vertexArray.count();
+}
+
+
+uint MeshBuilder::positionCount() const
+{
+ return d->posArray.count();
+}
+
+uint MeshBuilder::normalCount() const
+{
+ return d->norArray.count();
+}
+
+uint MeshBuilder::texCoordCount(uint set/*=0*/) const
+{
+ return d->texArray[set].count();
+}
+
+uint MeshBuilder::colorCount(uint set/*=0*/) const
+{
+ return d->colArray[set].count();
+}
+
+
+uint MeshBuilder::materialCount() const
+{
+ return d->materialArray.count();
+}
+
+const char * MeshBuilder::material(uint i) const
+{
+ return d->materialArray[i].name;
+}
+
+
+uint MeshBuilder::positionIndex(uint vertex) const
+{
+ return d->vertexArray[vertex].pos;
+}
+uint MeshBuilder::normalIndex(uint vertex) const
+{
+ return d->vertexArray[vertex].nor;
+}
+uint MeshBuilder::texCoordIndex(uint vertex, uint set/*=0*/) const
+{
+ return d->vertexArray[vertex].tex[set];
+}
+uint MeshBuilder::colorIndex(uint vertex, uint set/*=0*/) const
+{
+ return d->vertexArray[vertex].col[set];
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/MeshBuilder.h b/thirdparty/thekla_atlas/nvmesh/MeshBuilder.h
new file mode 100644
index 0000000000..5b3af3fc1d
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/MeshBuilder.h
@@ -0,0 +1,119 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MESH_MESHBUILDER_H
+#define NV_MESH_MESHBUILDER_H
+
+#include "nvmesh.h"
+#include "nvcore/Array.h"
+#include "nvmath/Vector.h"
+
+namespace nv
+{
+ class String;
+ class TriMesh;
+ class QuadTriMesh;
+ namespace HalfEdge { class Mesh; }
+
+
+ /// Mesh builder is a helper class for importers.
+ /// Ideally it should handle any vertex data, but for now it only accepts positions,
+ /// normals and texcoords.
+ class MeshBuilder
+ {
+ NV_FORBID_COPY(MeshBuilder);
+ NV_FORBID_HEAPALLOC();
+ public:
+ MeshBuilder();
+ ~MeshBuilder();
+
+ // Builder methods.
+ uint addPosition(const Vector3 & v);
+ uint addNormal(const Vector3 & v);
+ uint addTexCoord(const Vector2 & v, uint set = 0);
+ uint addColor(const Vector4 & v, uint set = 0);
+
+ void beginGroup(uint id);
+ void endGroup();
+
+ uint addMaterial(const char * name);
+ void beginMaterial(uint id);
+ void endMaterial();
+
+ void beginPolygon(uint id = 0);
+ uint addVertex(uint p, uint n = NIL, uint t0 = NIL, uint t1 = NIL, uint c0 = NIL, uint c1 = NIL, uint c2 = NIL);
+ uint addVertex(const Vector3 & p);
+ //uint addVertex(const Vector3 & p, const Vector3 & n, const Vector2 & t0 = Vector2(0), const Vector2 & t1 = Vector2(0), const Vector4 & c0 = Vector4(0), const Vector4 & c1 = Vector4(0));
+ bool endPolygon();
+
+ uint weldPositions();
+ uint weldNormals();
+ uint weldTexCoords(uint set = 0);
+ uint weldColors(uint set = 0);
+ void weldVertices();
+
+ void optimize(); // eliminate duplicate components and duplicate vertices.
+ void removeUnusedMaterials(Array<uint> & newMaterialId);
+ void sortFacesByGroup();
+ void sortFacesByMaterial();
+
+ void done();
+ void reset();
+
+ // Hints.
+ void hintTriangleCount(uint count);
+ void hintVertexCount(uint count);
+ void hintPositionCount(uint count);
+ void hintNormalCount(uint count);
+ void hintTexCoordCount(uint count, uint set = 0);
+ void hintColorCount(uint count, uint set = 0);
+
+ // Helpers.
+ void addTriangle(uint v0, uint v1, uint v2);
+ void addQuad(uint v0, uint v1, uint v2, uint v3);
+
+ // Get result.
+ TriMesh * buildTriMesh() const;
+ QuadTriMesh * buildQuadTriMesh() const;
+
+ enum Error {
+ Error_None,
+ Error_NonManifoldEdge,
+ Error_NonManifoldVertex,
+ };
+
+ HalfEdge::Mesh * buildHalfEdgeMesh(bool weldPositions, Error * error = NULL, Array<uint> * badFaces = NULL) const;
+
+ bool buildPositions(Array<Vector3> & positionArray);
+ bool buildNormals(Array<Vector3> & normalArray);
+ bool buildTexCoords(Array<Vector2> & texCoordArray, uint set = 0);
+ bool buildColors(Array<Vector4> & colorArray, uint set = 0);
+ void buildVertexToPositionMap(Array<int> & map);
+
+
+ // Expose attribute indices of the unified vertex array.
+ uint vertexCount() const;
+
+ uint positionCount() const;
+ uint normalCount() const;
+ uint texCoordCount(uint set = 0) const;
+ uint colorCount(uint set = 0) const;
+
+ uint materialCount() const;
+ const char * material(uint i) const;
+
+ uint positionIndex(uint vertex) const;
+ uint normalIndex(uint vertex) const;
+ uint texCoordIndex(uint vertex, uint set = 0) const;
+ uint colorIndex(uint vertex, uint set = 0) const;
+
+ private:
+
+ struct PrivateData;
+ PrivateData * d;
+
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_MESHBUILDER_H
diff --git a/thirdparty/thekla_atlas/nvmesh/MeshTopology.cpp b/thirdparty/thekla_atlas/nvmesh/MeshTopology.cpp
new file mode 100644
index 0000000000..e7e1dce421
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/MeshTopology.cpp
@@ -0,0 +1,122 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "nvmesh.h" // pch
+
+#include "nvcore/Array.h"
+#include "nvcore/BitArray.h"
+
+#include "nvmesh/MeshTopology.h"
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Edge.h"
+#include "nvmesh/halfedge/Face.h"
+
+using namespace nv;
+
+void MeshTopology::buildTopologyInfo(const HalfEdge::Mesh * mesh)
+{
+ const uint vertexCount = mesh->colocalVertexCount();
+ const uint faceCount = mesh->faceCount();
+ const uint edgeCount = mesh->edgeCount();
+
+ nvDebug( "--- Building mesh topology:\n" );
+
+ Array<uint> stack(faceCount);
+
+ BitArray bitFlags(faceCount);
+ bitFlags.clearAll();
+
+ // Compute connectivity.
+ nvDebug( "--- Computing connectivity.\n" );
+
+ m_connectedCount = 0;
+
+ for(uint f = 0; f < faceCount; f++ ) {
+ if( bitFlags.bitAt(f) == false ) {
+ m_connectedCount++;
+
+ stack.pushBack( f );
+ while( !stack.isEmpty() ) {
+
+ const uint top = stack.back();
+ nvCheck(top != NIL);
+ stack.popBack();
+
+ if( bitFlags.bitAt(top) == false ) {
+ bitFlags.setBitAt(top);
+
+ const HalfEdge::Face * face = mesh->faceAt(top);
+ const HalfEdge::Edge * firstEdge = face->edge;
+ const HalfEdge::Edge * edge = firstEdge;
+
+ do {
+ const HalfEdge::Face * neighborFace = edge->pair->face;
+ if (neighborFace != NULL) {
+ stack.pushBack(neighborFace->id);
+ }
+ edge = edge->next;
+ } while(edge != firstEdge);
+ }
+ }
+ }
+ }
+ nvCheck(stack.isEmpty());
+ nvDebug( "--- %d connected components.\n", m_connectedCount );
+
+
+ // Count boundary loops.
+ nvDebug( "--- Counting boundary loops.\n" );
+ m_boundaryCount = 0;
+
+ bitFlags.resize(edgeCount);
+ bitFlags.clearAll();
+
+ // Don't forget to link the boundary otherwise this won't work.
+ for (uint e = 0; e < edgeCount; e++)
+ {
+ const HalfEdge::Edge * startEdge = mesh->edgeAt(e);
+ if (startEdge != NULL && startEdge->isBoundary() && bitFlags.bitAt(e) == false)
+ {
+ nvDebugCheck(startEdge->face != NULL);
+ nvDebugCheck(startEdge->pair->face == NULL);
+
+ startEdge = startEdge->pair;
+
+ m_boundaryCount++;
+
+ const HalfEdge::Edge * edge = startEdge;
+ do {
+ bitFlags.setBitAt(edge->id / 2);
+ edge = edge->next;
+ } while(startEdge != edge);
+ }
+ }
+ nvDebug("--- %d boundary loops found.\n", m_boundaryCount );
+
+
+ // Compute euler number.
+ m_eulerNumber = vertexCount - edgeCount + faceCount;
+ nvDebug("--- Euler number: %d.\n", m_eulerNumber);
+
+
+ // Compute genus. (only valid on closed connected surfaces)
+ m_genus = -1;
+ if( isClosed() && isConnected() ) {
+ m_genus = (2 - m_eulerNumber) / 2;
+ nvDebug("--- Genus: %d.\n", m_genus);
+ }
+}
+
+
+/*static*/ bool MeshTopology::isQuadOnly(const HalfEdge::Mesh * mesh)
+{
+ const uint faceCount = mesh->faceCount();
+ for(uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ if (face->edgeCount() != 4) {
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/MeshTopology.h b/thirdparty/thekla_atlas/nvmesh/MeshTopology.h
new file mode 100644
index 0000000000..c3d7477b15
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/MeshTopology.h
@@ -0,0 +1,66 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MESH_MESHTOPOLOGY_H
+#define NV_MESH_MESHTOPOLOGY_H
+
+#include <nvmesh/nvmesh.h>
+
+namespace nv
+{
+ namespace HalfEdge { class Mesh; }
+ class MeshAdjacency;
+
+ /// Mesh topology information.
+ class MeshTopology
+ {
+ public:
+ MeshTopology(const HalfEdge::Mesh * mesh) { buildTopologyInfo(mesh); }
+
+ /// Determine if the mesh is connected.
+ bool isConnected() const { return m_connectedCount == 1; }
+
+ /// Determine if the mesh is closed. (Each edge is shared by two faces)
+ bool isClosed() const { return m_boundaryCount == 0; }
+
+ /// Return true if the mesh has the topology of a disk.
+ bool isDisk() const { return isConnected() && m_boundaryCount == 1/* && m_eulerNumber == 1*/; }
+
+ /// Return the number of connected components.
+ int connectedCount() const { return m_connectedCount; }
+
+ /// Return the number of open holes.
+ int holeCount() const { return m_boundaryCount; }
+
+ /// Return the genus of the mesh.
+ int genus() const { return m_genus; }
+
+ /// Return the euler number of the mesh.
+ int euler() const { return m_eulerNumber; }
+
+
+ static bool isQuadOnly(const HalfEdge::Mesh * mesh);
+
+
+ private:
+
+ NVMESH_API void buildTopologyInfo(const HalfEdge::Mesh * mesh);
+
+ private:
+
+ ///< Number of boundary loops.
+ int m_boundaryCount;
+
+ ///< Number of connected components.
+ int m_connectedCount;
+
+ ///< Euler number.
+ int m_eulerNumber;
+
+ /// Mesh genus.
+ int m_genus;
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_MESHTOPOLOGY_H
diff --git a/thirdparty/thekla_atlas/nvmesh/QuadTriMesh.cpp b/thirdparty/thekla_atlas/nvmesh/QuadTriMesh.cpp
new file mode 100644
index 0000000000..64a071abe9
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/QuadTriMesh.cpp
@@ -0,0 +1,36 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "QuadTriMesh.h"
+#include "Stream.h"
+
+using namespace nv;
+
+
+bool QuadTriMesh::isQuadFace(uint i) const
+{
+ return m_faceArray[i].isQuadFace();
+}
+
+const QuadTriMesh::Vertex & QuadTriMesh::faceVertex(uint f, uint v) const
+{
+ if (isQuadFace(f)) nvDebugCheck(v < 4);
+ else nvDebugCheck(v < 3);
+
+ const Face & face = this->faceAt(f);
+ return this->vertexAt(face.v[v]);
+}
+
+
+namespace nv
+{
+ static Stream & operator<< (Stream & s, QuadTriMesh::Face & face)
+ {
+ return s << face.id << face.v[0] << face.v[1] << face.v[2] << face.v[3];
+ }
+
+ Stream & operator<< (Stream & s, QuadTriMesh & mesh)
+ {
+ return s << mesh.m_faceArray << (BaseMesh &) mesh;
+ }
+}
+
diff --git a/thirdparty/thekla_atlas/nvmesh/QuadTriMesh.h b/thirdparty/thekla_atlas/nvmesh/QuadTriMesh.h
new file mode 100644
index 0000000000..b8465f2db0
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/QuadTriMesh.h
@@ -0,0 +1,60 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MESH_QUADTRIMESH_H
+#define NV_MESH_QUADTRIMESH_H
+
+#include "nvcore/Array.h"
+#include "nvmath/Vector.h"
+#include "nvmesh/nvmesh.h"
+#include "nvmesh/BaseMesh.h"
+
+namespace nv
+{
+ class Stream;
+
+ /// Mixed quad/triangle mesh.
+ class QuadTriMesh : public BaseMesh
+ {
+ public:
+ struct Face;
+ typedef BaseMesh::Vertex Vertex;
+
+ QuadTriMesh() {};
+ QuadTriMesh(uint faceCount, uint vertexCount) : BaseMesh(vertexCount), m_faceArray(faceCount) {}
+
+ // Face methods.
+ uint faceCount() const { return m_faceArray.count(); }
+
+ const Face & faceAt(uint i) const { return m_faceArray[i]; }
+ Face & faceAt(uint i) { return m_faceArray[i]; }
+
+ const Array<Face> & faces() const { return m_faceArray; }
+ Array<Face> & faces() { return m_faceArray; }
+
+ bool isQuadFace(uint i) const;
+
+ const Vertex & faceVertex(uint f, uint v) const;
+
+ friend Stream & operator<< (Stream & s, QuadTriMesh & obj);
+
+ private:
+
+ Array<Face> m_faceArray;
+
+ };
+
+
+ /// QuadTriMesh face.
+ struct QuadTriMesh::Face
+ {
+ uint id;
+ uint v[4];
+
+ bool isQuadFace() const { return v[3] != NIL; }
+ };
+
+} // nv namespace
+
+
+#endif // NV_MESH_QUADTRIMESH_H
diff --git a/thirdparty/thekla_atlas/nvmesh/TriMesh.cpp b/thirdparty/thekla_atlas/nvmesh/TriMesh.cpp
new file mode 100644
index 0000000000..bf10a474fb
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/TriMesh.cpp
@@ -0,0 +1,25 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "TriMesh.h"
+
+using namespace nv;
+
+
+/// Triangle mesh.
+Vector3 TriMesh::faceNormal(uint f) const
+{
+ const Face & face = this->faceAt(f);
+ const Vector3 & p0 = this->vertexAt(face.v[0]).pos;
+ const Vector3 & p1 = this->vertexAt(face.v[1]).pos;
+ const Vector3 & p2 = this->vertexAt(face.v[2]).pos;
+ return normalizeSafe(cross(p1 - p0, p2 - p0), Vector3(0.0f), 0.0f);
+}
+
+/// Get face vertex.
+const TriMesh::Vertex & TriMesh::faceVertex(uint f, uint v) const
+{
+ nvDebugCheck(v < 3);
+ const Face & face = this->faceAt(f);
+ return this->vertexAt(face.v[v]);
+}
+
diff --git a/thirdparty/thekla_atlas/nvmesh/TriMesh.h b/thirdparty/thekla_atlas/nvmesh/TriMesh.h
new file mode 100644
index 0000000000..bc5672c1ac
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/TriMesh.h
@@ -0,0 +1,51 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MESH_TRIMESH_H
+#define NV_MESH_TRIMESH_H
+
+#include "nvcore/Array.h"
+#include "nvmath/Vector.inl"
+#include "nvmesh/nvmesh.h"
+#include "nvmesh/BaseMesh.h"
+
+namespace nv
+{
+ /// Triangle mesh.
+ class TriMesh : public BaseMesh
+ {
+ public:
+ struct Face;
+ typedef BaseMesh::Vertex Vertex;
+
+ TriMesh(uint faceCount, uint vertexCount) : BaseMesh(vertexCount), m_faceArray(faceCount) {}
+
+ // Face methods.
+ uint faceCount() const { return m_faceArray.count(); }
+ const Face & faceAt(uint i) const { return m_faceArray[i]; }
+ Face & faceAt(uint i) { return m_faceArray[i]; }
+ const Array<Face> & faces() const { return m_faceArray; }
+ Array<Face> & faces() { return m_faceArray; }
+
+ NVMESH_API Vector3 faceNormal(uint f) const;
+ NVMESH_API const Vertex & faceVertex(uint f, uint v) const;
+
+ friend Stream & operator<< (Stream & s, BaseMesh & obj);
+
+ private:
+
+ Array<Face> m_faceArray;
+
+ };
+
+
+ /// TriMesh face.
+ struct TriMesh::Face
+ {
+ uint id;
+ uint v[3];
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_TRIMESH_H
diff --git a/thirdparty/thekla_atlas/nvmesh/geometry/Bounds.cpp b/thirdparty/thekla_atlas/nvmesh/geometry/Bounds.cpp
new file mode 100644
index 0000000000..69fd1deb24
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/geometry/Bounds.cpp
@@ -0,0 +1,54 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#include "nvmesh.h" // pch
+
+#include "Bounds.h"
+
+#include "nvmesh/BaseMesh.h"
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Vertex.h"
+
+#include "nvmath/Box.inl"
+
+using namespace nv;
+
+Box MeshBounds::box(const BaseMesh * mesh)
+{
+ nvCheck(mesh != NULL);
+
+ Box bounds;
+ bounds.clearBounds();
+
+ const uint vertexCount = mesh->vertexCount();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ const BaseMesh::Vertex & vertex = mesh->vertexAt(v);
+ bounds.addPointToBounds( vertex.pos );
+ }
+
+ return bounds;
+}
+
+Box MeshBounds::box(const HalfEdge::Mesh * mesh)
+{
+ nvCheck(mesh != NULL);
+
+ Box bounds;
+ bounds.clearBounds();
+
+ const uint vertexCount = mesh->vertexCount();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ const HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+ nvDebugCheck(vertex != NULL);
+ bounds.addPointToBounds( vertex->pos );
+ }
+
+ return bounds;
+}
+
+/*Sphere MeshBounds::sphere(const HalfEdge::Mesh * mesh)
+{
+ // @@ TODO
+ return Sphere();
+}*/
diff --git a/thirdparty/thekla_atlas/nvmesh/geometry/Bounds.h b/thirdparty/thekla_atlas/nvmesh/geometry/Bounds.h
new file mode 100644
index 0000000000..1cb5b7b905
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/geometry/Bounds.h
@@ -0,0 +1,28 @@
+// This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
+
+#pragma once
+#ifndef NV_MESH_MESHBOUNDS_H
+#define NV_MESH_MESHBOUNDS_H
+
+#include <nvmath/Sphere.h>
+#include <nvmath/Box.h>
+
+#include <nvmesh/nvmesh.h>
+
+namespace nv
+{
+ class BaseMesh;
+ namespace HalfEdge { class Mesh; }
+
+ // Bounding volumes computation.
+ namespace MeshBounds
+ {
+ Box box(const BaseMesh * mesh);
+ Box box(const HalfEdge::Mesh * mesh);
+
+ Sphere sphere(const HalfEdge::Mesh * mesh);
+ }
+
+} // nv namespace
+
+#endif // NV_MESH_MESHBOUNDS_H
diff --git a/thirdparty/thekla_atlas/nvmesh/geometry/Measurements.cpp b/thirdparty/thekla_atlas/nvmesh/geometry/Measurements.cpp
new file mode 100644
index 0000000000..e0c271663b
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/geometry/Measurements.cpp
@@ -0,0 +1,36 @@
+// This code is in the public domain -- castano@gmail.com
+
+#include "nvmesh.h" // pch
+
+#include "Measurements.h"
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Face.h"
+
+using namespace nv;
+
+float nv::computeSurfaceArea(const HalfEdge::Mesh * mesh)
+{
+ float area = 0;
+
+ for (HalfEdge::Mesh::ConstFaceIterator it(mesh->faces()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Face * face = it.current();
+ area += face->area();
+ }
+ nvDebugCheck(area >= 0);
+
+ return area;
+}
+
+float nv::computeParametricArea(const HalfEdge::Mesh * mesh)
+{
+ float area = 0;
+
+ for (HalfEdge::Mesh::ConstFaceIterator it(mesh->faces()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Face * face = it.current();
+ area += face->parametricArea();
+ }
+
+ return area;
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/geometry/Measurements.h b/thirdparty/thekla_atlas/nvmesh/geometry/Measurements.h
new file mode 100644
index 0000000000..0be863b79e
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/geometry/Measurements.h
@@ -0,0 +1,18 @@
+// This code is in the public domain -- castano@gmail.com
+
+#pragma once
+#ifndef NV_MESH_MESHMEASUREMENTS_H
+#define NV_MESH_MESHMEASUREMENTS_H
+
+#include "nvmesh/nvmesh.h"
+
+namespace nv
+{
+ namespace HalfEdge { class Mesh; }
+
+ float computeSurfaceArea(const HalfEdge::Mesh * mesh);
+ float computeParametricArea(const HalfEdge::Mesh * mesh);
+
+} // nv namespace
+
+#endif // NV_MESH_MESHMEASUREMENTS_H
diff --git a/thirdparty/thekla_atlas/nvmesh/halfedge/Edge.cpp b/thirdparty/thekla_atlas/nvmesh/halfedge/Edge.cpp
new file mode 100644
index 0000000000..671650296c
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/halfedge/Edge.cpp
@@ -0,0 +1,57 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "nvmesh.h" // pch
+
+#include "Edge.h"
+#include "Vertex.h"
+
+#include "nvmath/Vector.inl"
+
+using namespace nv;
+using namespace HalfEdge;
+
+Vector3 Edge::midPoint() const
+{
+ return (to()->pos + from()->pos) * 0.5f;
+}
+
+float Edge::length() const
+{
+ return ::length(to()->pos - from()->pos);
+}
+
+// Return angle between this edge and the previous one.
+float Edge::angle() const {
+ Vector3 p = vertex->pos;
+ Vector3 a = prev->vertex->pos;
+ Vector3 b = next->vertex->pos;
+
+ Vector3 v0 = a - p;
+ Vector3 v1 = b - p;
+
+ return acosf(dot(v0, v1) / (nv::length(v0) * nv::length(v1)));
+}
+
+bool Edge::isValid() const
+{
+ // null face is OK.
+ if (next == NULL || prev == NULL || pair == NULL || vertex == NULL) return false;
+ if (next->prev != this) return false;
+ if (prev->next != this) return false;
+ if (pair->pair != this) return false;
+ return true;
+}
+
+/*
+Edge * Edge::nextBoundary() {
+ nvDebugCheck(this->m_pair == NULL);
+
+}
+
+Edge * Edge::prevBoundary() {
+ nvDebugCheck(this->m_pair == NULL);
+
+}
+*/
+
+
diff --git a/thirdparty/thekla_atlas/nvmesh/halfedge/Edge.h b/thirdparty/thekla_atlas/nvmesh/halfedge/Edge.h
new file mode 100644
index 0000000000..25c47f4860
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/halfedge/Edge.h
@@ -0,0 +1,70 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MESH_HALFEDGE_EDGE_H
+#define NV_MESH_HALFEDGE_EDGE_H
+
+#include "nvmath/Vector.h"
+
+namespace nv
+{
+ namespace HalfEdge { class Vertex; class Face; class Edge; }
+
+ /// Half edge edge.
+ class HalfEdge::Edge
+ {
+ NV_FORBID_COPY(Edge);
+ public:
+
+ uint id;
+
+ Edge * next;
+ Edge * prev; // This is not strictly half-edge, but makes algorithms easier and faster.
+ Edge * pair;
+ Vertex * vertex;
+ Face * face;
+
+
+ // Default constructor.
+ Edge(uint id) : id(id), next(NULL), prev(NULL), pair(NULL), vertex(NULL), face(NULL)
+ {
+ }
+
+
+ // Vertex queries.
+ const Vertex * from() const { return vertex; }
+ Vertex * from() { return vertex; }
+
+ const Vertex * to() const { return pair->vertex; } // This used to be 'next->vertex', but that changed often when the connectivity of the mesh changes.
+ Vertex * to() { return pair->vertex; }
+
+
+ // Edge queries.
+ void setNext(Edge * e) { next = e; if (e != NULL) e->prev = this; }
+ void setPrev(Edge * e) { prev = e; if (e != NULL) e->next = this; }
+
+ // @@ Add these helpers:
+ //Edge * nextBoundary();
+ //Edge * prevBoundary();
+
+
+ // @@ It would be more simple to only check m_pair == NULL
+ // Face queries.
+ bool isBoundary() const { return !(face && pair->face); }
+
+ // @@ This is not exactly accurate, we should compare the texture coordinates...
+ bool isSeam() const { return vertex != pair->next->vertex || next->vertex != pair->vertex; }
+
+ bool isValid() const;
+
+ // Geometric queries.
+ Vector3 midPoint() const;
+ float length() const;
+ float angle() const;
+
+ };
+
+} // nv namespace
+
+
+#endif // NV_MESH_HALFEDGE_EDGE_H
diff --git a/thirdparty/thekla_atlas/nvmesh/halfedge/Face.cpp b/thirdparty/thekla_atlas/nvmesh/halfedge/Face.cpp
new file mode 100644
index 0000000000..9f6987154e
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/halfedge/Face.cpp
@@ -0,0 +1,268 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "nvmesh.h" // pch
+
+#include "Face.h"
+#include "Vertex.h"
+
+#include "nvmath/Fitting.h"
+#include "nvmath/Plane.h"
+#include "nvmath/Vector.inl"
+
+#include "nvcore/Array.h"
+
+
+using namespace nv;
+using namespace HalfEdge;
+
+/// Get face area.
+float Face::area() const
+{
+ float area = 0;
+ const Vector3 & v0 = edge->from()->pos;
+
+ for (ConstEdgeIterator it(edges(edge->next)); it.current() != edge->prev; it.advance())
+ {
+ const Edge * e = it.current();
+
+ const Vector3 & v1 = e->vertex->pos;
+ const Vector3 & v2 = e->next->vertex->pos;
+
+ area += length(cross(v1-v0, v2-v0));
+ }
+
+ return area * 0.5f;
+}
+
+float Face::parametricArea() const
+{
+ float area = 0;
+ const Vector2 & v0 = edge->from()->tex;
+
+ for (ConstEdgeIterator it(edges(edge->next)); it.current() != edge->prev; it.advance())
+ {
+ const Edge * e = it.current();
+
+ const Vector2 & v1 = e->vertex->tex;
+ const Vector2 & v2 = e->next->vertex->tex;
+
+ area += triangleArea(v0, v1, v2);
+ }
+
+ return area * 0.5f;
+}
+
+
+/// Get boundary length.
+float Face::boundaryLength() const
+{
+ float bl = 0;
+
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance())
+ {
+ const Edge * edge = it.current();
+ bl += edge->length();
+ }
+
+ return bl;
+}
+
+
+/// Get face normal.
+Vector3 Face::normal() const
+{
+ Vector3 n(0);
+
+ const Vertex * vertex0 = NULL;
+
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance())
+ {
+ const Edge * edge = it.current();
+ nvCheck(edge != NULL);
+
+ if (vertex0 == NULL)
+ {
+ vertex0 = edge->vertex;
+ }
+ else if (edge->next->vertex != vertex0)
+ {
+ const HalfEdge::Vertex * vertex1 = edge->from();
+ const HalfEdge::Vertex * vertex2 = edge->to();
+
+ const Vector3 & p0 = vertex0->pos;
+ const Vector3 & p1 = vertex1->pos;
+ const Vector3 & p2 = vertex2->pos;
+
+ Vector3 v10 = p1 - p0;
+ Vector3 v20 = p2 - p0;
+
+ n += cross(v10, v20);
+ }
+ }
+
+ return normalizeSafe(n, Vector3(0, 0, 1), 0.0f);
+
+
+ // Get face points eliminating duplicates.
+ /*Array<Vector3> points(4);
+
+ points.append(m_edge->prev()->from()->pos);
+
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance())
+ {
+ const Edge * edge = it.current();
+ nvDebugCheck(edge != NULL);
+
+ const Vector3 & p = edge->from()->pos;
+ if (points.back() != p)
+ {
+ points.append(edge->from()->pos);
+ }
+ }
+
+ points.popBack();
+
+ if (points.count() < 3)
+ {
+ // Invalid normal.
+ return Vector3(0.0f);
+ }
+ else
+ {
+ // Compute regular normal.
+ Vector3 normal = normalizeSafe(cross(points[1] - points[0], points[2] - points[0]), Vector3(0.0f), 0.0f);
+
+#pragma NV_MESSAGE("TODO: make sure these three points are not colinear")
+
+ if (points.count() > 3)
+ {
+ // Compute best fitting plane to the points.
+ Plane plane = Fit::bestPlane(points.count(), points.buffer());
+
+ // Adjust normal orientation.
+ if (dot(normal, plane.vector()) > 0) {
+ normal = plane.vector();
+ }
+ else {
+ normal = -plane.vector();
+ }
+ }
+
+ nvDebugCheck(isNormalized(normal));
+ return normal;
+ }*/
+}
+
+Vector3 Face::centroid() const
+{
+ Vector3 sum(0.0f);
+ uint count = 0;
+
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance())
+ {
+ const Edge * edge = it.current();
+ sum += edge->from()->pos;
+ count++;
+ }
+
+ return sum / float(count);
+}
+
+
+bool Face::isValid() const
+{
+ uint count = 0;
+
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance())
+ {
+ const Edge * edge = it.current();
+ if (edge->face != this) return false;
+ if (!edge->isValid()) return false;
+ if (!edge->pair->isValid()) return false;
+ count++;
+ }
+
+ if (count < 3) return false;
+
+ return true;
+}
+
+
+// Determine if this face contains the given edge.
+bool Face::contains(const Edge * e) const
+{
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance())
+ {
+ if(it.current() == e) return true;
+ }
+ return false;
+}
+
+// Returns index in this face of the given edge.
+uint Face::edgeIndex(const Edge * e) const
+{
+ int i = 0;
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance(), i++)
+ {
+ if(it.current() == e) return i;
+ }
+ return NIL;
+}
+
+
+Edge * Face::edgeAt(uint idx)
+{
+ int i = 0;
+ for(EdgeIterator it(edges()); !it.isDone(); it.advance(), i++) {
+ if (i == idx) return it.current();
+ }
+ return NULL;
+}
+const Edge * Face::edgeAt(uint idx) const
+{
+ int i = 0;
+ for(ConstEdgeIterator it(edges()); !it.isDone(); it.advance(), i++) {
+ if (i == idx) return it.current();
+ }
+ return NULL;
+}
+
+
+// Count the number of edges in this face.
+uint Face::edgeCount() const
+{
+ uint count = 0;
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance()) { ++count; }
+ return count;
+}
+
+// Determine if this is a boundary face.
+bool Face::isBoundary() const
+{
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance())
+ {
+ const Edge * edge = it.current();
+ nvDebugCheck(edge->pair != NULL);
+
+ if (edge->pair->face == NULL) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// Count the number of boundary edges in the face.
+uint Face::boundaryCount() const
+{
+ uint count = 0;
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance())
+ {
+ const Edge * edge = it.current();
+ nvDebugCheck(edge->pair != NULL);
+
+ if (edge->pair->face == NULL) {
+ count++;
+ }
+ }
+ return count;
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/halfedge/Face.h b/thirdparty/thekla_atlas/nvmesh/halfedge/Face.h
new file mode 100644
index 0000000000..677f8666f0
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/halfedge/Face.h
@@ -0,0 +1,106 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MESH_HALFEDGE_FACE_H
+#define NV_MESH_HALFEDGE_FACE_H
+
+#include <nvmesh/halfedge/Edge.h>
+
+namespace nv
+{
+ namespace HalfEdge { class Vertex; class Face; class Edge; }
+
+ /// Face of a half-edge mesh.
+ class HalfEdge::Face
+ {
+ NV_FORBID_COPY(Face);
+ public:
+
+ uint id;
+ uint16 group;
+ uint16 material;
+ Edge * edge;
+
+
+ Face(uint id) : id(id), group(~0), material(~0), edge(NULL) {}
+
+ float area() const;
+ float parametricArea() const;
+ float boundaryLength() const;
+ Vector3 normal() const;
+ Vector3 centroid() const;
+
+ bool isValid() const;
+
+ bool contains(const Edge * e) const;
+ uint edgeIndex(const Edge * e) const;
+
+ Edge * edgeAt(uint idx);
+ const Edge * edgeAt(uint idx) const;
+
+ uint edgeCount() const;
+ bool isBoundary() const;
+ uint boundaryCount() const;
+
+
+ // The iterator that visits the edges of this face in clockwise order.
+ class EdgeIterator //: public Iterator<Edge *>
+ {
+ public:
+ EdgeIterator(Edge * e) : m_end(NULL), m_current(e) { }
+
+ virtual void advance()
+ {
+ if (m_end == NULL) m_end = m_current;
+ m_current = m_current->next;
+ }
+
+ virtual bool isDone() const { return m_end == m_current; }
+ virtual Edge * current() const { return m_current; }
+ Vertex * vertex() const { return m_current->vertex; }
+
+ private:
+ Edge * m_end;
+ Edge * m_current;
+ };
+
+ EdgeIterator edges() { return EdgeIterator(edge); }
+ EdgeIterator edges(Edge * e)
+ {
+ nvDebugCheck(contains(e));
+ return EdgeIterator(e);
+ }
+
+ // The iterator that visits the edges of this face in clockwise order.
+ class ConstEdgeIterator //: public Iterator<const Edge *>
+ {
+ public:
+ ConstEdgeIterator(const Edge * e) : m_end(NULL), m_current(e) { }
+ ConstEdgeIterator(const EdgeIterator & it) : m_end(NULL), m_current(it.current()) { }
+
+ virtual void advance()
+ {
+ if (m_end == NULL) m_end = m_current;
+ m_current = m_current->next;
+ }
+
+ virtual bool isDone() const { return m_end == m_current; }
+ virtual const Edge * current() const { return m_current; }
+ const Vertex * vertex() const { return m_current->vertex; }
+
+ private:
+ const Edge * m_end;
+ const Edge * m_current;
+ };
+
+ ConstEdgeIterator edges() const { return ConstEdgeIterator(edge); }
+ ConstEdgeIterator edges(const Edge * e) const
+ {
+ nvDebugCheck(contains(e));
+ return ConstEdgeIterator(e);
+ }
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_HALFEDGE_FACE_H
diff --git a/thirdparty/thekla_atlas/nvmesh/halfedge/Mesh.cpp b/thirdparty/thekla_atlas/nvmesh/halfedge/Mesh.cpp
new file mode 100644
index 0000000000..0012513bce
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/halfedge/Mesh.cpp
@@ -0,0 +1,1284 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include "nvmesh.h" // pch
+
+#include "Mesh.h"
+#include "Edge.h"
+#include "Vertex.h"
+#include "Face.h"
+
+#include "nvmesh/TriMesh.h"
+#include "nvmesh/QuadTriMesh.h"
+#include "nvmesh/MeshBuilder.h"
+
+#include "nvmath/Vector.inl"
+#include "nvcore/Array.inl"
+#include "nvcore/HashMap.inl"
+
+
+using namespace nv;
+using namespace HalfEdge;
+
+Mesh::Mesh() : m_colocalVertexCount(0)
+{
+ errorCount = 0;
+}
+
+Mesh::Mesh(const Mesh * mesh)
+{
+ errorCount = 0;
+
+ // Copy mesh vertices.
+ const uint vertexCount = mesh->vertexCount();
+ m_vertexArray.resize(vertexCount);
+
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ const Vertex * vertex = mesh->vertexAt(v);
+ nvDebugCheck(vertex->id == v);
+
+ m_vertexArray[v] = new Vertex(v);
+ m_vertexArray[v]->pos = vertex->pos;
+ m_vertexArray[v]->nor = vertex->nor;
+ m_vertexArray[v]->tex = vertex->tex;
+ }
+
+ m_colocalVertexCount = vertexCount;
+
+
+ // Copy mesh faces.
+ const uint faceCount = mesh->faceCount();
+
+ Array<uint> indexArray(3);
+
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const Face * face = mesh->faceAt(f);
+
+ for(Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance()) {
+ const Vertex * vertex = it.current()->from();
+ indexArray.append(vertex->id);
+ }
+
+ addFace(indexArray);
+ indexArray.clear();
+ }
+}
+
+Mesh::~Mesh()
+{
+ clear();
+}
+
+
+void Mesh::clear()
+{
+ deleteAll(m_vertexArray);
+ m_vertexArray.clear();
+
+ foreach(i, m_edgeMap)
+ {
+ delete m_edgeMap[i].value;
+ }
+ //deleteAll(m_edgeArray); // edgeArray only contains 1/2 of the edges!
+ m_edgeArray.clear();
+ m_edgeMap.clear();
+
+ deleteAll(m_faceArray);
+ m_faceArray.clear();
+}
+
+
+Vertex * Mesh::addVertex(const Vector3 & pos)
+{
+ nvDebugCheck(isFinite(pos));
+
+ Vertex * v = new Vertex(m_vertexArray.count());
+ v->pos = pos;
+ m_vertexArray.append(v);
+
+ return v;
+
+// return addVertex(m_vertexArray.count(), pos);
+}
+
+/*Vertex * Mesh::addVertex(uint id, const Vector3 & pos)
+{
+ nvDebugCheck(isFinite(pos));
+
+ Vertex * v = new Vertex(id);
+ v->pos = pos;
+ m_vertexArray.append(v);
+
+ return v;
+}*/
+
+/*void Mesh::addVertices(const Mesh * mesh)
+{
+nvCheck(mesh != NULL);
+
+// Add mesh vertices
+for (uint v = 0; v < vertexCount; v++)
+{
+const Vertex * vertex = mesh->vertexAt(v);
+nvDebugCheck(vertex != NULL);
+
+Vertex * v = addVertex(vertex->pos());
+nvDebugCheck(v != NULL);
+
+v->setNor(vertex->nor());
+v->setTex(vertex->tex());
+}
+}*/
+
+
+/// Link colocal vertices based on geometric location only.
+void Mesh::linkColocals()
+{
+ nvDebug("--- Linking colocals:\n");
+
+ const uint vertexCount = this->vertexCount();
+ HashMap<Vector3, Vertex *> vertexMap(vertexCount);
+
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ Vertex * vertex = vertexAt(v);
+
+ Vertex * colocal;
+ if (vertexMap.get(vertex->pos, &colocal))
+ {
+ colocal->linkColocal(vertex);
+ }
+ else
+ {
+ vertexMap.add(vertex->pos, vertex);
+ }
+ }
+
+ m_colocalVertexCount = vertexMap.count();
+
+ nvDebug("--- %d vertex positions.\n", m_colocalVertexCount);
+
+ // @@ Remove duplicated vertices? or just leave them as colocals?
+}
+
+void Mesh::linkColocalsWithCanonicalMap(const Array<uint> & canonicalMap)
+{
+ nvDebug("--- Linking colocals:\n");
+
+ uint vertexMapSize = 0;
+ foreach(i, canonicalMap) {
+ vertexMapSize = max(vertexMapSize, canonicalMap[i] + 1);
+ }
+
+ Array<Vertex *> vertexMap;
+ vertexMap.resize(vertexMapSize, NULL);
+
+ m_colocalVertexCount = 0;
+
+ const uint vertexCount = this->vertexCount();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ Vertex * vertex = vertexAt(v);
+
+ Vertex * colocal = vertexMap[canonicalMap[v]];
+ if (colocal != NULL)
+ {
+ nvDebugCheck(vertex->pos == colocal->pos);
+ colocal->linkColocal(vertex);
+ }
+ else
+ {
+ vertexMap[canonicalMap[v]] = vertex;
+ m_colocalVertexCount++;
+ }
+ }
+
+ nvDebug("--- %d vertex positions.\n", m_colocalVertexCount);
+}
+
+
+Face * Mesh::addFace()
+{
+ Face * f = new Face(m_faceArray.count());
+ m_faceArray.append(f);
+ return f;
+}
+
+Face * Mesh::addFace(uint v0, uint v1, uint v2)
+{
+ Array<uint> indexArray(3);
+ indexArray << v0 << v1 << v2;
+ return addFace(indexArray, 0, 3);
+}
+
+Face * Mesh::addFace(uint v0, uint v1, uint v2, uint v3)
+{
+ Array<uint> indexArray(4);
+ indexArray << v0 << v1 << v2 << v3;
+ return addFace(indexArray, 0, 4);
+}
+
+Face * Mesh::addFace(const Array<uint> & indexArray)
+{
+ return addFace(indexArray, 0, indexArray.count());
+}
+
+
+Face * Mesh::addFace(const Array<uint> & indexArray, uint first, uint num)
+{
+ nvDebugCheck(first < indexArray.count());
+ nvDebugCheck(num <= indexArray.count()-first);
+ nvDebugCheck(num > 2);
+
+ if (!canAddFace(indexArray, first, num)) {
+ errorCount++;
+ return NULL;
+ }
+
+ Face * f = new Face(m_faceArray.count());
+
+ Edge * firstEdge = NULL;
+ Edge * last = NULL;
+ Edge * current = NULL;
+
+ for(uint i = 0; i < num-1; i++)
+ {
+ current = addEdge(indexArray[first+i], indexArray[first+i+1]);
+ nvCheck(current != NULL && current->face == NULL);
+
+ current->face = f;
+
+ if (last != NULL) last->setNext(current);
+ else firstEdge = current;
+
+ last = current;
+ }
+
+ current = addEdge(indexArray[first+num-1], indexArray[first]);
+ nvCheck(current != NULL && current->face == NULL);
+
+ current->face = f;
+
+ last->setNext(current);
+ current->setNext(firstEdge);
+
+ f->edge = firstEdge;
+ m_faceArray.append(f);
+
+ return f;
+}
+
+/*void Mesh::addFaces(const Mesh * mesh)
+{
+nvCheck(mesh != NULL);
+
+Array indexArray;
+// Add faces
+
+}*/
+
+
+// Return true if the face can be added to the manifold mesh.
+bool Mesh::canAddFace(const Array<uint> & indexArray, uint first, uint num) const
+{
+ for (uint j = num - 1, i = 0; i < num; j = i++) {
+ if (!canAddEdge(indexArray[first+j], indexArray[first+i])) {
+ errorIndex0 = indexArray[first+j];
+ errorIndex1 = indexArray[first+i];
+ return false;
+ }
+ }
+
+ // We also have to make sure the face does not have any duplicate edge!
+ for (uint i = 0; i < num; i++) {
+
+ int i0 = indexArray[first + i + 0];
+ int i1 = indexArray[first + (i + 1)%num];
+
+ for (uint j = i + 1; j < num; j++) {
+ int j0 = indexArray[first + j + 0];
+ int j1 = indexArray[first + (j + 1)%num];
+
+ if (i0 == j0 && i1 == j1) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+// Return true if the edge doesn't exist or doesn't have any adjacent face.
+bool Mesh::canAddEdge(uint i, uint j) const
+{
+ if (i == j) {
+ // Skip degenerate edges.
+ return false;
+ }
+
+ // Same check, but taking into account colocal vertices.
+ const Vertex * v0 = vertexAt(i);
+ const Vertex * v1 = vertexAt(j);
+
+ for(Vertex::ConstVertexIterator it(v0->colocals()); !it.isDone(); it.advance())
+ {
+ if (it.current() == v1)
+ {
+ // Skip degenerate edges.
+ return false;
+ }
+ }
+
+ // Make sure edge has not been added yet.
+ Edge * edge = findEdge(i, j);
+
+ return edge == NULL || edge->face == NULL; // We ignore edges that don't have an adjacent face yet, since this face could become the edge's face.
+}
+
+Edge * Mesh::addEdge(uint i, uint j)
+{
+ nvCheck(i != j);
+
+ Edge * edge = findEdge(i, j);
+
+ if (edge != NULL) {
+ // Edge may already exist, but its face must not be set.
+ nvDebugCheck(edge->face == NULL);
+
+ // Nothing else to do!
+
+ }
+ else {
+ // Add new edge.
+
+ // Lookup pair.
+ Edge * pair = findEdge(j, i);
+
+ if (pair != NULL)
+ {
+ // Create edge with same id.
+ edge = new Edge(pair->id + 1);
+
+ // Link edge pairs.
+ edge->pair = pair;
+ pair->pair = edge;
+
+ // @@ I'm not sure this is necessary!
+ pair->vertex->setEdge(pair);
+ }
+ else
+ {
+ // Create edge.
+ edge = new Edge(2*m_edgeArray.count());
+
+ // Add only unpaired edges.
+ m_edgeArray.append(edge);
+ }
+
+ edge->vertex = m_vertexArray[i];
+ m_edgeMap.add(Key(i,j), edge);
+ }
+
+ // Face and Next are set by addFace.
+
+ return edge;
+}
+
+
+/// Find edge, test all colocals.
+Edge * Mesh::findEdge(uint i, uint j) const
+{
+ Edge * edge = NULL;
+
+ const Vertex * v0 = vertexAt(i);
+ const Vertex * v1 = vertexAt(j);
+
+ // Test all colocal pairs.
+ for(Vertex::ConstVertexIterator it0(v0->colocals()); !it0.isDone(); it0.advance())
+ {
+ for(Vertex::ConstVertexIterator it1(v1->colocals()); !it1.isDone(); it1.advance())
+ {
+ Key key(it0.current()->id, it1.current()->id);
+
+ if (edge == NULL) {
+ m_edgeMap.get(key, &edge);
+#if !defined(_DEBUG)
+ if (edge != NULL) return edge;
+#endif
+ }
+ else {
+ // Make sure that only one edge is found.
+ nvDebugCheck(!m_edgeMap.get(key));
+ }
+ }
+ }
+
+ return edge;
+}
+
+/// Link boundary edges once the mesh has been created.
+void Mesh::linkBoundary()
+{
+ nvDebug("--- Linking boundaries:\n");
+
+ int num = 0;
+
+ // Create boundary edges.
+ uint edgeCount = this->edgeCount();
+ for(uint e = 0; e < edgeCount; e++)
+ {
+ Edge * edge = edgeAt(e);
+ if (edge != NULL && edge->pair == NULL) {
+ Edge * pair = new Edge(edge->id + 1);
+
+ uint i = edge->from()->id;
+ uint j = edge->next->from()->id;
+
+ Key key(j,i);
+ nvCheck(!m_edgeMap.get(key));
+
+ pair->vertex = m_vertexArray[j];
+ m_edgeMap.add(key, pair);
+
+ edge->pair = pair;
+ pair->pair = edge;
+
+ num++;
+ }
+ }
+
+ // Link boundary edges.
+ for (uint e = 0; e < edgeCount; e++) {
+ Edge * edge = edgeAt(e);
+ if (edge != NULL && edge->pair->face == NULL) {
+ linkBoundaryEdge(edge->pair);
+ }
+ }
+
+ nvDebug("--- %d boundary edges.\n", num);
+}
+
+/// Link this boundary edge.
+void Mesh::linkBoundaryEdge(Edge * edge)
+{
+ nvCheck(edge->face == NULL);
+
+ // Make sure next pointer has not been set. @@ We want to be able to relink boundary edges after mesh changes.
+ //nvCheck(edge->next() == NULL);
+
+ Edge * next = edge;
+ while(next->pair->face != NULL) {
+ // Get pair prev
+ Edge * e = next->pair->next;
+ while (e->next != next->pair) {
+ e = e->next;
+ }
+ next = e;
+ }
+ edge->setNext(next->pair);
+
+ // Adjust vertex edge, so that it's the boundary edge. (required for isBoundary())
+ if (edge->vertex->edge != edge)
+ {
+ // Multiple boundaries in the same edge.
+ //nvCheck( edge->vertex()->edge() == NULL || edge->vertex()->edge()->face() != NULL );
+ edge->vertex->edge = edge;
+ }
+}
+
+
+/// Convert to tri mesh.
+TriMesh * Mesh::toTriMesh() const
+{
+ uint triangleCount = 0;
+
+ // Count triangle faces.
+ const uint faceCount = this->faceCount();
+ for(uint f = 0; f < faceCount; f++)
+ {
+ const Face * face = faceAt(f);
+ triangleCount += face->edgeCount() - 2;
+ }
+
+ TriMesh * triMesh = new TriMesh(triangleCount, vertexCount());
+
+ // Add vertices.
+ Array<TriMesh::Vertex> & vertices = triMesh->vertices();
+
+ const uint vertexCount = this->vertexCount();
+ for(uint v = 0; v < vertexCount; v++)
+ {
+ const Vertex * vertex = vertexAt(v);
+
+ TriMesh::Vertex triVertex;
+ triVertex.id = vertices.count();
+ triVertex.pos = vertex->pos;
+ triVertex.nor = vertex->nor;
+ triVertex.tex = vertex->tex;
+
+ vertices.append(triVertex);
+ }
+
+ // Add triangles.
+ Array<TriMesh::Face> & triangles = triMesh->faces();
+
+ for(uint f = 0; f < faceCount; f++)
+ {
+ const Face * face = faceAt(f);
+
+ // @@ Triangulate arbitrary polygons correctly.
+ const uint v0 = face->edge->vertex->id;
+ uint v1 = face->edge->next->vertex->id;
+
+ for(Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ uint v2 = it.current()->vertex->id;
+
+ // Skip the first two vertices.
+ if (v2 == v0 || v2 == v1) continue;
+
+ TriMesh::Face triangle;
+ triangle.id = triangles.count();
+ triangle.v[0] = v0;
+ triangle.v[1] = v1;
+ triangle.v[2] = v2;
+
+ v1 = v2;
+
+ triangles.append(triangle);
+ }
+ }
+
+ return triMesh;
+}
+
+QuadTriMesh * Mesh::toQuadTriMesh() const
+{
+ MeshBuilder builder;
+
+ const uint vertexCount = this->vertexCount();
+ builder.hintVertexCount(vertexCount);
+
+ for(uint v = 0; v < vertexCount; v++)
+ {
+ const Vertex * vertex = vertexAt(v);
+
+ builder.addPosition(vertex->pos);
+ builder.addNormal(vertex->nor);
+ builder.addTexCoord(vertex->tex);
+ }
+
+ const uint faceCount = this->faceCount();
+ builder.hintTriangleCount(faceCount);
+
+ for(uint f = 0; f < faceCount; f++)
+ {
+ const Face * face = faceAt(f);
+
+ builder.beginPolygon();
+
+ for(Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ uint v = it.current()->vertex->id;
+ builder.addVertex(v, v, v);
+ }
+
+ builder.endPolygon();
+ }
+
+ builder.done();
+
+ return builder.buildQuadTriMesh();
+}
+
+
+// Triangulate in place.
+void Mesh::triangulate() {
+
+ bool all_triangles = true;
+
+ const uint faceCount = m_faceArray.count();
+ for (uint f = 0; f < faceCount; f++) {
+ Face * face = m_faceArray[f];
+ if (face->edgeCount() != 3) {
+ all_triangles = false;
+ break;
+ }
+ }
+
+ if (all_triangles) {
+ return;
+ }
+
+
+ // Do not touch vertices, but rebuild edges and faces.
+ Array<Edge *> edgeArray;
+ Array<Face *> faceArray;
+
+ swap(edgeArray, m_edgeArray);
+ swap(faceArray, m_faceArray);
+ m_edgeMap.clear();
+
+ for (uint f = 0; f < faceCount; f++) {
+ Face * face = faceArray[f];
+
+ // Trivial fan-like triangulation.
+ const uint v0 = face->edge->vertex->id;
+ uint v2, v1 = -1;
+
+ for (Face::EdgeIterator it(face->edges()); !it.isDone(); it.advance()) {
+ Edge * edge = it.current();
+ v2 = edge->to()->id;
+ if (v2 == v0) break;
+ if (v1 != -1) addFace(v0, v1, v2);
+ v1 = v2;
+ }
+ }
+
+ nvDebugCheck(m_faceArray.count() > faceCount); // triangle count > face count
+
+ linkBoundary();
+
+ deleteAll(edgeArray);
+ deleteAll(faceArray);
+}
+
+
+/*
+Fixing T-junctions.
+
+- Find T-junctions. Find vertices that are on an edge.
+ - This test is approximate.
+ - Insert edges on a spatial index to speedup queries.
+ - Consider only open edges, that is edges that have no pairs.
+ - Consider only vertices on boundaries.
+- Close T-junction.
+ - Split edge.
+
+*/
+bool Mesh::splitBoundaryEdges() {
+
+ Array<Vertex *> boundaryVertices;
+
+ foreach(i, m_vertexArray) {
+ Vertex * v = m_vertexArray[i];
+ if (v->isBoundary()) {
+ boundaryVertices.append(v);
+ }
+ }
+
+ nvDebug("Fixing T-junctions:\n");
+
+ int splitCount = 0;
+
+ foreach(v, boundaryVertices) {
+ Vertex * vertex = boundaryVertices[v];
+
+ Vector3 x0 = vertex->pos;
+
+ // Find edges that this vertex overlaps with.
+ foreach(e, m_edgeArray) {
+ //for (uint e = 0; e < m_edgeArray.count(); e++) {
+ Edge * edge = m_edgeArray[e];
+ if (edge != NULL && edge->isBoundary()) {
+
+ if (edge->from() == vertex || edge->to() == vertex) {
+ continue;
+ }
+
+ Vector3 x1 = edge->from()->pos;
+ Vector3 x2 = edge->to()->pos;
+
+ Vector3 v01 = x0 - x1;
+ Vector3 v21 = x2 - x1;
+
+ float l = length(v21);
+ float d = length(cross(v01, v21)) / l;
+
+ if (isZero(d)) {
+ float t = dot(v01, v21) / (l * l);
+
+ // @@ Snap x0 to x1 or x2, if too close? No, do vertex snapping elsewhere.
+ /*if (equal(t, 0.0f, 0.01f)) {
+ //vertex->setPos(x1);
+ }
+ else if (equal(t, 1.0f, 0.01f)) {
+ //vertex->setPos(x2);
+ }
+ else*/
+ if (t > 0.0f + NV_EPSILON && t < 1.0f - NV_EPSILON) {
+ nvDebugCheck(equal(lerp(x1, x2, t), x0));
+
+ Vertex * splitVertex = splitBoundaryEdge(edge, t, x0);
+ vertex->linkColocal(splitVertex); // @@ Should we do this here?
+ splitCount++;
+ }
+ }
+ }
+ }
+ }
+
+ nvDebug(" - %d edges split.\n", splitCount);
+
+ nvDebugCheck(isValid());
+
+ return splitCount != 0;
+}
+
+
+// For this to be effective, we have to fix the boundary junctions first.
+Edge * Mesh::sewBoundary(Edge * startEdge) {
+ nvDebugCheck(startEdge->face == NULL);
+
+ // @@ We may want to be more conservative linking colocals in order to preserve the input topology. One way of doing that is by linking colocals only
+ // if the vertices next to them are linked as well. That is, by sewing boundaries after detecting them. If any pair of consecutive edges have their first
+ // and last vertex in the same position, then it can be linked.
+
+ Edge * lastBoundarySeen = startEdge;
+
+ nvDebug("Sewing Boundary:\n");
+
+ int count = 0;
+ int sewnCount = 0;
+
+ Edge * edge = startEdge;
+ do {
+ nvDebugCheck(edge->face == NULL);
+
+ Edge * edge_a = edge;
+ Edge * edge_b = edge->prev;
+
+ Edge * pair_a = edge_a->pair;
+ Edge * pair_b = edge_b->pair;
+
+ Vertex * v0a = edge_a->to();
+ Vertex * v0b = edge_b->from();
+ Vertex * v1a = edge_a->from();
+ Vertex * v1b = edge_b->to();
+
+ nvDebugCheck(v1a->isColocal(v1b));
+
+ /*
+ v0b + _+ v0a
+ \ /
+ b \ / a
+ \|/
+ v1b + v1a
+ */
+
+ // @@ This should not happen while sewing, but it may be produced somewhere else.
+ nvDebugCheck(edge_a != edge_b);
+
+ if (v0a->pos == v0b->pos) {
+
+ // Link vertices.
+ v0a->linkColocal(v0b);
+
+ // Remove edges to be collapsed.
+ disconnect(edge_a);
+ disconnect(edge_b);
+ disconnect(pair_a);
+ disconnect(pair_b);
+
+ // Link new boundary edges.
+ Edge * prevBoundary = edge_b->prev;
+ Edge * nextBoundary = edge_a->next;
+ if (nextBoundary != NULL) {
+ nvDebugCheck(nextBoundary->face == NULL);
+ nvDebugCheck(prevBoundary->face == NULL);
+ nextBoundary->setPrev(prevBoundary);
+
+ // Make sure boundary vertex points to boundary edge.
+ v0a->setEdge(nextBoundary); // This updates all colocals.
+ }
+ lastBoundarySeen = prevBoundary;
+
+ // Creat new edge.
+ Edge * newEdge_a = addEdge(v0a->id, v1a->id); // pair_a->from()->id, pair_a->to()->id
+ Edge * newEdge_b = addEdge(v1b->id, v0b->id);
+
+ newEdge_a->pair = newEdge_b;
+ newEdge_b->pair = newEdge_a;
+
+ newEdge_a->face = pair_a->face;
+ newEdge_b->face = pair_b->face;
+
+ newEdge_a->setNext(pair_a->next);
+ newEdge_a->setPrev(pair_a->prev);
+
+ newEdge_b->setNext(pair_b->next);
+ newEdge_b->setPrev(pair_b->prev);
+
+ delete edge_a;
+ delete edge_b;
+ delete pair_a;
+ delete pair_b;
+
+ edge = nextBoundary; // If nextBoundary is NULL we have closed the loop.
+ sewnCount++;
+ }
+ else {
+ edge = edge->next;
+ }
+
+ count++;
+ } while(edge != NULL && edge != lastBoundarySeen);
+
+ nvDebug(" - Sewn %d out of %d.\n", sewnCount, count);
+
+ if (lastBoundarySeen != NULL) {
+ nvDebugCheck(lastBoundarySeen->face == NULL);
+ }
+
+ return lastBoundarySeen;
+}
+
+
+// @@ We must always disconnect edge pairs simultaneously.
+void Mesh::disconnect(Edge * edge) {
+ nvDebugCheck(edge != NULL);
+
+ // Remove from edge list.
+ if ((edge->id & 1) == 0) {
+ nvDebugCheck(m_edgeArray[edge->id / 2] == edge);
+ m_edgeArray[edge->id / 2] = NULL;
+ }
+
+ // Remove edge from map. @@ Store map key inside edge?
+ nvDebugCheck(edge->from() != NULL && edge->to() != NULL);
+ bool removed = m_edgeMap.remove(Key(edge->from()->id, edge->to()->id));
+ nvDebugCheck(removed == true);
+
+ // Disconnect from vertex.
+ if (edge->vertex != NULL) {
+ if (edge->vertex->edge == edge) {
+ if (edge->prev && edge->prev->pair) {
+ edge->vertex->edge = edge->prev->pair;
+ }
+ else if (edge->pair && edge->pair->next) {
+ edge->vertex->edge = edge->pair->next;
+ }
+ else {
+ edge->vertex->edge = NULL;
+ // @@ Remove disconnected vertex?
+ }
+ }
+ //edge->setVertex(NULL);
+ }
+
+ // Disconnect from face.
+ if (edge->face != NULL) {
+ if (edge->face->edge == edge) {
+ if (edge->next != NULL && edge->next != edge) {
+ edge->face->edge = edge->next;
+ }
+ else if (edge->prev != NULL && edge->prev != edge) {
+ edge->face->edge = edge->prev;
+ }
+ else {
+ edge->face->edge = NULL;
+ // @@ Remove disconnected face?
+ }
+ }
+ //edge->setFace(NULL);
+ }
+
+ // @@ Hack, we don't disconnect from pair, because pair needs us to remove itself from the map.
+ // Disconect from pair.
+ /*if (edge->pair != NULL) {
+ if (edge->pair->pair == edge) {
+ edge->pair->setPair(NULL);
+ }
+ //edge->setPair(NULL);
+ }*/
+
+ // Disconnect from previous.
+ if (edge->prev) {
+ if (edge->prev->next == edge) {
+ edge->prev->setNext(NULL);
+ }
+ //edge->setPrev(NULL);
+ }
+
+ // Disconnect from next.
+ if (edge->next) {
+ if (edge->next->prev == edge) {
+ edge->next->setPrev(NULL);
+ }
+ //edge->setNext(NULL);
+ }
+}
+
+
+void Mesh::remove(Edge * edge) {
+ nvDebugCheck(edge != NULL);
+
+ disconnect(edge);
+
+ delete edge;
+}
+
+void Mesh::remove(Vertex * vertex) {
+ nvDebugCheck(vertex != NULL);
+
+ // Remove from vertex list.
+ m_vertexArray[vertex->id] = NULL;
+
+ // Disconnect from colocals.
+ vertex->unlinkColocal();
+
+ // Disconnect from edges.
+ if (vertex->edge != NULL) {
+ // @@ Removing a connected vertex is asking for trouble...
+ if (vertex->edge->vertex == vertex) {
+ // @@ Connect edge to a colocal?
+ vertex->edge->vertex = NULL;
+ }
+
+ vertex->setEdge(NULL);
+ }
+
+ delete vertex;
+}
+
+void Mesh::remove(Face * face) {
+ nvDebugCheck(face != NULL);
+
+ // Remove from face list.
+ m_faceArray[face->id] = NULL;
+
+ // Disconnect from edges.
+ if (face->edge != NULL) {
+ nvDebugCheck(face->edge->face == face);
+
+ face->edge->face = NULL;
+
+ face->edge = NULL;
+ }
+
+ delete face;
+}
+
+
+void Mesh::compactEdges() {
+ const uint edgeCount = m_edgeArray.count();
+
+ uint c = 0;
+ for (uint i = 0; i < edgeCount; i++) {
+ if (m_edgeArray[i] != NULL) {
+ if (i != c) {
+ m_edgeArray[c] = m_edgeArray[i];
+ m_edgeArray[c]->id = 2 * c;
+ if (m_edgeArray[c]->pair != NULL) {
+ m_edgeArray[c]->pair->id = 2 * c + 1;
+ }
+ }
+ c++;
+ }
+ }
+
+ m_edgeArray.resize(c);
+}
+
+
+void Mesh::compactVertices() {
+ const uint vertexCount = m_vertexArray.count();
+
+ uint c = 0;
+ for (uint i = 0; i < vertexCount; i++) {
+ if (m_vertexArray[i] != NULL) {
+ if (i != c) {
+ m_vertexArray[c] = m_vertexArray[i];
+ m_vertexArray[c]->id = c;
+ }
+ c++;
+ }
+ }
+
+ m_vertexArray.resize(c);
+
+ // @@ Generate xref array for external attributes.
+}
+
+
+void Mesh::compactFaces() {
+ const uint faceCount = m_faceArray.count();
+
+ uint c = 0;
+ for (uint i = 0; i < faceCount; i++) {
+ if (m_faceArray[i] != NULL) {
+ if (i != c) {
+ m_faceArray[c] = m_faceArray[i];
+ m_faceArray[c]->id = c;
+ }
+ c++;
+ }
+ }
+
+ m_faceArray.resize(c);
+}
+
+
+Vertex * Mesh::splitBoundaryEdge(Edge * edge, float t, const Vector3 & pos) {
+
+ /*
+ We want to go from this configuration:
+
+ + +
+ | ^
+ edge |<->| pair
+ v |
+ + +
+
+ To this one:
+
+ + +
+ | ^
+ e0 |<->| p0
+ v |
+ vertex + +
+ | ^
+ e1 |<->| p1
+ v |
+ + +
+
+ */
+
+
+ Edge * pair = edge->pair;
+
+ // Make sure boundaries are linked.
+ nvDebugCheck(pair != NULL);
+
+ // Make sure edge is a boundary edge.
+ nvDebugCheck(pair->face == NULL);
+
+ // Add new vertex.
+ Vertex * vertex = addVertex(pos);
+ vertex->nor = lerp(edge->from()->nor, edge->to()->nor, t);
+ vertex->tex = lerp(edge->from()->tex, edge->to()->tex, t);
+ vertex->col = lerp(edge->from()->col, edge->to()->col, t);
+
+ disconnect(edge);
+ disconnect(pair);
+
+ // Add edges.
+ Edge * e0 = addEdge(edge->from()->id, vertex->id);
+ Edge * p0 = addEdge(vertex->id, pair->to()->id);
+
+ Edge * e1 = addEdge(vertex->id, edge->to()->id);
+ Edge * p1 = addEdge(pair->from()->id, vertex->id);
+
+ // Link edges.
+ e0->setNext(e1);
+ p1->setNext(p0);
+
+ e0->setPrev(edge->prev);
+ e1->setNext(edge->next);
+
+ p1->setPrev(pair->prev);
+ p0->setNext(pair->next);
+
+ nvDebugCheck(e0->next == e1);
+ nvDebugCheck(e1->prev == e0);
+
+ nvDebugCheck(p1->next == p0);
+ nvDebugCheck(p0->prev == p1);
+
+ nvDebugCheck(p0->pair == e0);
+ nvDebugCheck(e0->pair == p0);
+
+ nvDebugCheck(p1->pair == e1);
+ nvDebugCheck(e1->pair == p1);
+
+ // Link faces.
+ e0->face = edge->face;
+ e1->face = edge->face;
+
+ // Link vertices.
+ edge->from()->setEdge(e0);
+ vertex->setEdge(e1);
+
+ delete edge;
+ delete pair;
+
+ return vertex;
+}
+
+#if 0
+// Without introducing new vertices.
+void Mesh::splitBoundaryEdge(Edge * edge, Vertex * vertex) {
+
+ /*
+ We want to go from this configuration:
+
+ | | pn
+ + +
+ | ^
+ | |
+ edge |<->| pair
+ | |
+ v |
+ + +
+ | | pp
+
+ To this one:
+ \ /
+ \ /
+ + +
+ | ^
+ e0 |<->| p0
+ v |
+ vertex + +
+ | ^
+ e1 |<->| p1
+ v |
+ + +
+ / \
+ / \
+ */
+
+
+ Edge * pair = edge->pair;
+ Edge * pn = pair->next();
+ Edge * pp = pair->prev();
+
+ // Make sure boundaries are linked.
+ nvDebugCheck(pair != NULL);
+
+ // Make sure edge is a boundary edge.
+ nvDebugCheck(pair->face() == NULL);
+
+ nvDebugCheck(edge->isValid());
+ nvDebugCheck(pair->isValid());
+
+ disconnect(edge);
+ disconnect(pair);
+
+ // Add edges.
+ Edge * e0 = addEdge(edge->from()->id(), vertex->id());
+ Edge * e1 = addEdge(vertex->id(), edge->to()->id());
+
+ // Link faces.
+ e0->setFace(edge->face());
+ e1->setFace(edge->face());
+
+ // Link pairs.
+ Edge * p0 = findEdge(vertex->id(), pair->to()->id());
+ if (p0 == NULL) {
+ p0 = addEdge(vertex->id(), pair->to()->id());
+ pn->setPrev(p0);
+ }
+ else {
+ nvDebugCheck(p0->face() != NULL);
+ if (e0->prev() != NULL) {
+ pn->setPrev(e0->prev());
+ }
+ else {
+ nvDebugCheck(pn == e0);
+ }
+ }
+
+ Edge * p1 = findEdge(pair->from()->id(), vertex->id());
+ if (p1 == NULL) {
+ p1 = addEdge(pair->from()->id(), vertex->id());
+ pp->setNext(p1);
+ }
+ else {
+ nvDebugCheck(p1->face() != NULL);
+ if (e1->next() != NULL) {
+ pp->setPrev(e1->next());
+ }
+ else {
+ nvDebugCheck(pp == e1);
+ }
+ }
+
+ // Link edges.
+ e0->setNext(e1); // e1->setPrev(e0)
+
+ if (p0->face() == p1->face()) { // can be null
+ p1->setNext(p0); // p0->setPrev(p1)
+ }
+ else {
+ //if (p1->face() == NULL) p1->setNext(
+ }
+
+
+ e0->setPrev(edge->prev());
+ e1->setNext(edge->next());
+
+ nvDebugCheck(e0->pair == p0);
+ nvDebugCheck(e1->pair == p1);
+ nvDebugCheck(p0->pair == e0);
+ nvDebugCheck(p1->pair == e1);
+
+ nvDebugCheck(e0->isValid());
+ nvDebugCheck(e1->isValid());
+ nvDebugCheck(pp->isValid());
+ nvDebugCheck(pn->isValid());
+
+ nvDebugCheck(e0->pair->isValid());
+ nvDebugCheck(e1->pair->isValid());
+ nvDebugCheck(pp->pair->isValid());
+ nvDebugCheck(pn->pair->isValid());
+
+ nvDebugCheck(edge->face->isValid());
+
+ if (pn->pair->face != NULL) {
+ nvDebugCheck(pn->pair->face->isValid());
+ }
+
+ if (pp->pair->face() != NULL) {
+ nvDebugCheck(pn->pair->face->isValid());
+ }
+
+ if (p0->face != NULL) {
+ nvDebugCheck(p0->face->isValid());
+ }
+
+ if (p1->face() != NULL) {
+ nvDebugCheck(p1->face()->isValid());
+ }
+
+ nvDebugCheck(isValid()); // Only for extreme debugging.
+
+ // Link vertices.
+ edge->from()->setEdge(e0);
+ vertex->setEdge(p0);
+
+ delete edge;
+ delete pair;
+}
+#endif
+
+bool Mesh::isValid() const
+{
+ // Make sure all edges are valid.
+ const uint edgeCount = m_edgeArray.count();
+ for (uint e = 0; e < edgeCount; e++) {
+ Edge * edge = m_edgeArray[e];
+ if (edge != NULL) {
+ if (edge->id != 2*e) {
+ return false;
+ }
+ if (!edge->isValid()) {
+ return false;
+ }
+
+ if (edge->pair->id != 2*e+1) {
+ return false;
+ }
+ if (!edge->pair->isValid()) {
+ return false;
+ }
+ }
+ }
+
+ // @@ Make sure all faces are valid.
+
+ // @@ Make sure all vertices are valid.
+
+ return true;
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/halfedge/Mesh.h b/thirdparty/thekla_atlas/nvmesh/halfedge/Mesh.h
new file mode 100644
index 0000000000..c202c2ef9a
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/halfedge/Mesh.h
@@ -0,0 +1,274 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MESH_HALFEDGE_MESH_H
+#define NV_MESH_HALFEDGE_MESH_H
+
+#include "nvmesh/nvmesh.h"
+#include "nvcore/Array.h"
+#include "nvcore/HashMap.h"
+
+/*
+If I were to redo this again, there are a number of things that I would do differently.
+- Edge map is only useful when importing a mesh to guarantee the result is two-manifold. However, when manipulating the mesh
+ it's a pain to maintain the map up to date.
+- Edge array only points to the even vertices. There's no good reason for that. The map becomes required to traverse all edges
+ or you have to make sure edges are properly paired.
+- Linked boundaries. It's cleaner to assume a NULL pair means a boundary edge. Makes easier to seal boundaries. The only reason
+ why we link boundaries is to simplify traversal, but that could be done with two helper functions (nextBoundary, prevBoundary).
+- Minimize the amount of state that needs to be set in a certain way:
+ - boundary vertices point to boundary edge.
+- Remove parenthesis! Make some members public.
+- Remove member functions with side effects:
+ - e->setNext(n) modifies e->next and n->prev, instead use "link(e, n)", or "e->next = n, n->prev = e"
+*/
+
+
+namespace nv
+{
+ class Vector3;
+ class TriMesh;
+ class QuadTriMesh;
+ //template <typename T> struct Hash<Mesh::Key>;
+
+ namespace HalfEdge
+ {
+ class Edge;
+ class Face;
+ class Vertex;
+
+ /// Simple half edge mesh designed for dynamic mesh manipulation.
+ class Mesh
+ {
+ public:
+
+ Mesh();
+ Mesh(const Mesh * mesh);
+ ~Mesh();
+
+ void clear();
+
+ Vertex * addVertex(const Vector3 & pos);
+ //Vertex * addVertex(uint id, const Vector3 & pos);
+ //void addVertices(const Mesh * mesh);
+
+ void linkColocals();
+ void linkColocalsWithCanonicalMap(const Array<uint> & canonicalMap);
+ void resetColocalLinks();
+
+ Face * addFace();
+ Face * addFace(uint v0, uint v1, uint v2);
+ Face * addFace(uint v0, uint v1, uint v2, uint v3);
+ Face * addFace(const Array<uint> & indexArray);
+ Face * addFace(const Array<uint> & indexArray, uint first, uint num);
+ //void addFaces(const Mesh * mesh);
+
+ // These functions disconnect the given element from the mesh and delete it.
+ void disconnect(Edge * edge);
+ void disconnectPair(Edge * edge);
+ void disconnect(Vertex * vertex);
+ void disconnect(Face * face);
+
+ void remove(Edge * edge);
+ void remove(Vertex * vertex);
+ void remove(Face * face);
+
+ // Remove holes from arrays and reassign indices.
+ void compactEdges();
+ void compactVertices();
+ void compactFaces();
+
+ void triangulate();
+
+ void linkBoundary();
+
+ bool splitBoundaryEdges(); // Returns true if any split was made.
+
+ // Sew the boundary that starts at the given edge, returns one edge that still belongs to boundary, or NULL if boundary closed.
+ HalfEdge::Edge * sewBoundary(Edge * startEdge);
+
+
+ // Vertices
+ uint vertexCount() const { return m_vertexArray.count(); }
+ const Vertex * vertexAt(int i) const { return m_vertexArray[i]; }
+ Vertex * vertexAt(int i) { return m_vertexArray[i]; }
+
+ uint colocalVertexCount() const { return m_colocalVertexCount; }
+
+ // Faces
+ uint faceCount() const { return m_faceArray.count(); }
+ const Face * faceAt(int i) const { return m_faceArray[i]; }
+ Face * faceAt(int i) { return m_faceArray[i]; }
+
+ // Edges
+ uint edgeCount() const { return m_edgeArray.count(); }
+ const Edge * edgeAt(int i) const { return m_edgeArray[i]; }
+ Edge * edgeAt(int i) { return m_edgeArray[i]; }
+
+ class ConstVertexIterator;
+
+ class VertexIterator
+ {
+ friend class ConstVertexIterator;
+ public:
+ VertexIterator(Mesh * mesh) : m_mesh(mesh), m_current(0) { }
+
+ virtual void advance() { m_current++; }
+ virtual bool isDone() const { return m_current == m_mesh->vertexCount(); }
+ virtual Vertex * current() const { return m_mesh->vertexAt(m_current); }
+
+ private:
+ HalfEdge::Mesh * m_mesh;
+ uint m_current;
+ };
+ VertexIterator vertices() { return VertexIterator(this); }
+
+ class ConstVertexIterator
+ {
+ public:
+ ConstVertexIterator(const Mesh * mesh) : m_mesh(mesh), m_current(0) { }
+ ConstVertexIterator(class VertexIterator & it) : m_mesh(it.m_mesh), m_current(it.m_current) { }
+
+ virtual void advance() { m_current++; }
+ virtual bool isDone() const { return m_current == m_mesh->vertexCount(); }
+ virtual const Vertex * current() const { return m_mesh->vertexAt(m_current); }
+
+ private:
+ const HalfEdge::Mesh * m_mesh;
+ uint m_current;
+ };
+ ConstVertexIterator vertices() const { return ConstVertexIterator(this); }
+
+ class ConstFaceIterator;
+
+ class FaceIterator
+ {
+ friend class ConstFaceIterator;
+ public:
+ FaceIterator(Mesh * mesh) : m_mesh(mesh), m_current(0) { }
+
+ virtual void advance() { m_current++; }
+ virtual bool isDone() const { return m_current == m_mesh->faceCount(); }
+ virtual Face * current() const { return m_mesh->faceAt(m_current); }
+
+ private:
+ HalfEdge::Mesh * m_mesh;
+ uint m_current;
+ };
+ FaceIterator faces() { return FaceIterator(this); }
+
+ class ConstFaceIterator
+ {
+ public:
+ ConstFaceIterator(const Mesh * mesh) : m_mesh(mesh), m_current(0) { }
+ ConstFaceIterator(const FaceIterator & it) : m_mesh(it.m_mesh), m_current(it.m_current) { }
+
+ virtual void advance() { m_current++; }
+ virtual bool isDone() const { return m_current == m_mesh->faceCount(); }
+ virtual const Face * current() const { return m_mesh->faceAt(m_current); }
+
+ private:
+ const HalfEdge::Mesh * m_mesh;
+ uint m_current;
+ };
+ ConstFaceIterator faces() const { return ConstFaceIterator(this); }
+
+ class ConstEdgeIterator;
+
+ class EdgeIterator
+ {
+ friend class ConstEdgeIterator;
+ public:
+ EdgeIterator(Mesh * mesh) : m_mesh(mesh), m_current(0) { }
+
+ virtual void advance() { m_current++; }
+ virtual bool isDone() const { return m_current == m_mesh->edgeCount(); }
+ virtual Edge * current() const { return m_mesh->edgeAt(m_current); }
+
+ private:
+ HalfEdge::Mesh * m_mesh;
+ uint m_current;
+ };
+ EdgeIterator edges() { return EdgeIterator(this); }
+
+ class ConstEdgeIterator
+ {
+ public:
+ ConstEdgeIterator(const Mesh * mesh) : m_mesh(mesh), m_current(0) { }
+ ConstEdgeIterator(const EdgeIterator & it) : m_mesh(it.m_mesh), m_current(it.m_current) { }
+
+ virtual void advance() { m_current++; }
+ virtual bool isDone() const { return m_current == m_mesh->edgeCount(); }
+ virtual const Edge * current() const { return m_mesh->edgeAt(m_current); }
+
+ private:
+ const HalfEdge::Mesh * m_mesh;
+ uint m_current;
+ };
+ ConstEdgeIterator edges() const { return ConstEdgeIterator(this); }
+
+ // @@ Add half-edge iterator.
+
+
+
+ // Convert to tri mesh.
+ TriMesh * toTriMesh() const;
+ QuadTriMesh * toQuadTriMesh() const;
+
+ bool isValid() const;
+
+ public:
+
+ // Error status:
+ mutable uint errorCount;
+ mutable uint errorIndex0;
+ mutable uint errorIndex1;
+
+ private:
+
+ bool canAddFace(const Array<uint> & indexArray, uint first, uint num) const;
+ bool canAddEdge(uint i, uint j) const;
+ Edge * addEdge(uint i, uint j);
+
+ Edge * findEdge(uint i, uint j) const;
+
+ void linkBoundaryEdge(Edge * edge);
+ Vertex * splitBoundaryEdge(Edge * edge, float t, const Vector3 & pos);
+ void splitBoundaryEdge(Edge * edge, Vertex * vertex);
+
+ private:
+
+ Array<Vertex *> m_vertexArray;
+ Array<Edge *> m_edgeArray;
+ Array<Face *> m_faceArray;
+
+ struct Key {
+ Key() {}
+ Key(const Key & k) : p0(k.p0), p1(k.p1) {}
+ Key(uint v0, uint v1) : p0(v0), p1(v1) {}
+ void operator=(const Key & k) { p0 = k.p0; p1 = k.p1; }
+ bool operator==(const Key & k) const { return p0 == k.p0 && p1 == k.p1; }
+
+ uint p0;
+ uint p1;
+ };
+ friend struct Hash<Mesh::Key>;
+
+ HashMap<Key, Edge *> m_edgeMap;
+
+ uint m_colocalVertexCount;
+
+ };
+ /*
+ // This is a much better hash than the default and greatly improves performance!
+ template <> struct hash<Mesh::Key>
+ {
+ uint operator()(const Mesh::Key & k) const { return k.p0 + k.p1; }
+ };
+ */
+
+ } // HalfEdge namespace
+
+} // nv namespace
+
+#endif // NV_MESH_HALFEDGE_MESH_H
diff --git a/thirdparty/thekla_atlas/nvmesh/halfedge/Vertex.cpp b/thirdparty/thekla_atlas/nvmesh/halfedge/Vertex.cpp
new file mode 100644
index 0000000000..66dad69f8a
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/halfedge/Vertex.cpp
@@ -0,0 +1,94 @@
+// This code is in the public domain -- castano@gmail.com
+
+#include "nvmesh.h" // pch
+
+#include "Vertex.h"
+
+#include "nvmath/Vector.inl"
+
+using namespace nv;
+using namespace HalfEdge;
+
+
+// Set first edge of all colocals.
+void Vertex::setEdge(Edge * e)
+{
+ for (VertexIterator it(colocals()); !it.isDone(); it.advance()) {
+ it.current()->edge = e;
+ }
+}
+
+// Update position of all colocals.
+void Vertex::setPos(const Vector3 & p)
+{
+ for (VertexIterator it(colocals()); !it.isDone(); it.advance()) {
+ it.current()->pos = p;
+ }
+}
+
+
+uint HalfEdge::Vertex::colocalCount() const
+{
+ uint count = 0;
+ for (ConstVertexIterator it(colocals()); !it.isDone(); it.advance()) { ++count; }
+ return count;
+}
+
+uint HalfEdge::Vertex::valence() const
+{
+ uint count = 0;
+ for (ConstEdgeIterator it(edges()); !it.isDone(); it.advance()) { ++count; }
+ return count;
+}
+
+const HalfEdge::Vertex * HalfEdge::Vertex::firstColocal() const
+{
+ uint firstId = id;
+ const Vertex * vertex = this;
+
+ for (ConstVertexIterator it(colocals()); !it.isDone(); it.advance())
+ {
+ if (it.current()->id < firstId) {
+ firstId = vertex->id;
+ vertex = it.current();
+ }
+ }
+
+ return vertex;
+}
+
+HalfEdge::Vertex * HalfEdge::Vertex::firstColocal()
+{
+ Vertex * vertex = this;
+ uint firstId = id;
+
+ for (VertexIterator it(colocals()); !it.isDone(); it.advance())
+ {
+ if (it.current()->id < firstId) {
+ firstId = vertex->id;
+ vertex = it.current();
+ }
+ }
+
+ return vertex;
+}
+
+bool HalfEdge::Vertex::isFirstColocal() const
+{
+ return firstColocal() == this;
+}
+
+bool HalfEdge::Vertex::isColocal(const Vertex * v) const {
+ if (this == v) return true;
+ if (pos != v->pos) return false;
+
+ for (ConstVertexIterator it(colocals()); !it.isDone(); it.advance())
+ {
+ if (v == it.current()) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
diff --git a/thirdparty/thekla_atlas/nvmesh/halfedge/Vertex.h b/thirdparty/thekla_atlas/nvmesh/halfedge/Vertex.h
new file mode 100644
index 0000000000..1c5c8d7141
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/halfedge/Vertex.h
@@ -0,0 +1,221 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MESH_HALFEDGE_VERTEX_H
+#define NV_MESH_HALFEDGE_VERTEX_H
+
+#include "nvmesh/halfedge/Edge.h"
+
+namespace nv
+{
+ namespace HalfEdge { class Vertex; class Face; class Edge; }
+
+ // Half edge vertex.
+ class HalfEdge::Vertex
+ {
+ NV_FORBID_COPY(Vertex);
+ public:
+
+ uint id;
+
+ Edge * edge;
+ Vertex * next;
+ Vertex * prev;
+
+ Vector3 pos;
+ Vector3 nor;
+ Vector2 tex;
+ Vector4 col;
+
+
+ Vertex(uint id) : id(id), edge(NULL), pos(0.0f), nor(0.0f), tex(0.0f), col(0.0f) {
+ next = this;
+ prev = this;
+ }
+
+
+ void setEdge(Edge * e);
+ void setPos(const Vector3 & p);
+
+ uint colocalCount() const;
+ uint valence() const;
+ bool isFirstColocal() const;
+ const Vertex * firstColocal() const;
+ Vertex * firstColocal();
+
+ bool isColocal(const Vertex * v) const;
+
+
+ void linkColocal(Vertex * v) {
+ next->prev = v;
+ v->next = next;
+ next = v;
+ v->prev = this;
+ }
+ void unlinkColocal() {
+ next->prev = prev;
+ prev->next = next;
+ next = this;
+ prev = this;
+ }
+
+
+ // @@ Note: This only works if linkBoundary has been called.
+ bool isBoundary() const {
+ return (edge && !edge->face);
+ }
+
+
+ // for(EdgeIterator it(iterator()); !it.isDone(); it.advance()) { ... }
+ //
+ // EdgeIterator it(iterator());
+ // while(!it.isDone()) {
+ // ...
+ // id.advance();
+ // }
+
+ // Iterator that visits the edges around this vertex in counterclockwise order.
+ class EdgeIterator //: public Iterator<Edge *>
+ {
+ public:
+ EdgeIterator(Edge * e) : m_end(NULL), m_current(e) { }
+
+ virtual void advance()
+ {
+ if (m_end == NULL) m_end = m_current;
+ m_current = m_current->pair->next;
+ //m_current = m_current->prev->pair;
+ }
+
+ virtual bool isDone() const { return m_end == m_current; }
+ virtual Edge * current() const { return m_current; }
+ Vertex * vertex() const { return m_current->vertex; }
+
+ private:
+ Edge * m_end;
+ Edge * m_current;
+ };
+
+ EdgeIterator edges() { return EdgeIterator(edge); }
+ EdgeIterator edges(Edge * e) { return EdgeIterator(e); }
+
+ // Iterator that visits the edges around this vertex in counterclockwise order.
+ class ConstEdgeIterator //: public Iterator<Edge *>
+ {
+ public:
+ ConstEdgeIterator(const Edge * e) : m_end(NULL), m_current(e) { }
+ ConstEdgeIterator(EdgeIterator it) : m_end(NULL), m_current(it.current()) { }
+
+ virtual void advance()
+ {
+ if (m_end == NULL) m_end = m_current;
+ m_current = m_current->pair->next;
+ //m_current = m_current->prev->pair;
+ }
+
+ virtual bool isDone() const { return m_end == m_current; }
+ virtual const Edge * current() const { return m_current; }
+ const Vertex * vertex() const { return m_current->to(); }
+
+ private:
+ const Edge * m_end;
+ const Edge * m_current;
+ };
+
+ ConstEdgeIterator edges() const { return ConstEdgeIterator(edge); }
+ ConstEdgeIterator edges(const Edge * e) const { return ConstEdgeIterator(e); }
+
+
+ // Iterator that visits the edges around this vertex in counterclockwise order.
+ class ReverseEdgeIterator //: public Iterator<Edge *>
+ {
+ public:
+ ReverseEdgeIterator(Edge * e) : m_end(NULL), m_current(e) { }
+
+ virtual void advance()
+ {
+ if (m_end == NULL) m_end = m_current;
+ m_current = m_current->prev->pair;
+ }
+
+ virtual bool isDone() const { return m_end == m_current; }
+ virtual Edge * current() const { return m_current; }
+ Vertex * vertex() const { return m_current->vertex; }
+
+ private:
+ Edge * m_end;
+ Edge * m_current;
+ };
+
+ // Iterator that visits the edges around this vertex in counterclockwise order.
+ class ReverseConstEdgeIterator //: public Iterator<Edge *>
+ {
+ public:
+ ReverseConstEdgeIterator(const Edge * e) : m_end(NULL), m_current(e) { }
+
+ virtual void advance()
+ {
+ if (m_end == NULL) m_end = m_current;
+ m_current = m_current->prev->pair;
+ }
+
+ virtual bool isDone() const { return m_end == m_current; }
+ virtual const Edge * current() const { return m_current; }
+ const Vertex * vertex() const { return m_current->to(); }
+
+ private:
+ const Edge * m_end;
+ const Edge * m_current;
+ };
+
+
+
+ // Iterator that visits all the colocal vertices.
+ class VertexIterator //: public Iterator<Edge *>
+ {
+ public:
+ VertexIterator(Vertex * v) : m_end(NULL), m_current(v) { }
+
+ virtual void advance()
+ {
+ if (m_end == NULL) m_end = m_current;
+ m_current = m_current->next;
+ }
+
+ virtual bool isDone() const { return m_end == m_current; }
+ virtual Vertex * current() const { return m_current; }
+
+ private:
+ Vertex * m_end;
+ Vertex * m_current;
+ };
+
+ VertexIterator colocals() { return VertexIterator(this); }
+
+ // Iterator that visits all the colocal vertices.
+ class ConstVertexIterator //: public Iterator<Edge *>
+ {
+ public:
+ ConstVertexIterator(const Vertex * v) : m_end(NULL), m_current(v) { }
+
+ virtual void advance()
+ {
+ if (m_end == NULL) m_end = m_current;
+ m_current = m_current->next;
+ }
+
+ virtual bool isDone() const { return m_end == m_current; }
+ virtual const Vertex * current() const { return m_current; }
+
+ private:
+ const Vertex * m_end;
+ const Vertex * m_current;
+ };
+
+ ConstVertexIterator colocals() const { return ConstVertexIterator(this); }
+
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_HALFEDGE_VERTEX_H
diff --git a/thirdparty/thekla_atlas/nvmesh/nvmesh.cpp b/thirdparty/thekla_atlas/nvmesh/nvmesh.cpp
new file mode 100644
index 0000000000..d007eda332
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/nvmesh.cpp
@@ -0,0 +1,2 @@
+#include "nvmesh.h" // pch
+
diff --git a/thirdparty/thekla_atlas/nvmesh/nvmesh.h b/thirdparty/thekla_atlas/nvmesh/nvmesh.h
new file mode 100644
index 0000000000..eb6819675d
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/nvmesh.h
@@ -0,0 +1,34 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MESH_H
+#define NV_MESH_H
+
+#include "nvcore/nvcore.h"
+
+// Function linkage
+#if NVMESH_SHARED
+#ifdef NVMESH_EXPORTS
+#define NVMESH_API DLL_EXPORT
+#define NVMESH_CLASS DLL_EXPORT_CLASS
+#else
+#define NVMESH_API DLL_IMPORT
+#define NVMESH_CLASS DLL_IMPORT
+#endif
+#else
+#define NVMESH_API
+#define NVMESH_CLASS
+#endif
+
+#if 1 //USE_PRECOMPILED_HEADERS // If using precompiled headers:
+//#include <string.h> // strlen, strcmp, etc.
+//#include "nvcore/StrLib.h"
+//#include "nvcore/StdStream.h"
+//#include "nvcore/Memory.h"
+//#include "nvcore/Debug.h"
+//#include "nvmath/Vector.h"
+//#include "nvcore/Array.h"
+//#include "nvcore/HashMap.h"
+#endif
+
+#endif // NV_MESH_H
diff --git a/thirdparty/thekla_atlas/nvmesh/param/Atlas.cpp b/thirdparty/thekla_atlas/nvmesh/param/Atlas.cpp
new file mode 100644
index 0000000000..98f92cef96
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/Atlas.cpp
@@ -0,0 +1,1519 @@
+// Copyright NVIDIA Corporation 2006 -- Ignacio Castano <icastano@nvidia.com>
+
+#include "nvmesh.h" // pch
+
+#include "Atlas.h"
+#include "Util.h"
+#include "AtlasBuilder.h"
+#include "AtlasPacker.h"
+#include "SingleFaceMap.h"
+#include "OrthogonalProjectionMap.h"
+#include "LeastSquaresConformalMap.h"
+#include "ParameterizationQuality.h"
+
+//#include "nvmesh/export/MeshExportOBJ.h"
+
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Face.h"
+#include "nvmesh/halfedge/Vertex.h"
+
+#include "nvmesh/MeshBuilder.h"
+#include "nvmesh/MeshTopology.h"
+#include "nvmesh/param/Util.h"
+#include "nvmesh/geometry/Measurements.h"
+
+#include "nvmath/Vector.inl"
+#include "nvmath/Fitting.h"
+#include "nvmath/Box.inl"
+#include "nvmath/ProximityGrid.h"
+#include "nvmath/Morton.h"
+
+#include "nvcore/StrLib.h"
+#include "nvcore/Array.inl"
+#include "nvcore/HashMap.inl"
+
+using namespace nv;
+
+
+/// Ctor.
+Atlas::Atlas()
+{
+ failed=false;
+}
+
+// Dtor.
+Atlas::~Atlas()
+{
+ deleteAll(m_meshChartsArray);
+}
+
+uint Atlas::chartCount() const
+{
+ uint count = 0;
+ foreach(c, m_meshChartsArray) {
+ count += m_meshChartsArray[c]->chartCount();
+ }
+ return count;
+}
+
+const Chart * Atlas::chartAt(uint i) const
+{
+ foreach(c, m_meshChartsArray) {
+ uint count = m_meshChartsArray[c]->chartCount();
+
+ if (i < count) {
+ return m_meshChartsArray[c]->chartAt(i);
+ }
+
+ i -= count;
+ }
+
+ return NULL;
+}
+
+Chart * Atlas::chartAt(uint i)
+{
+ foreach(c, m_meshChartsArray) {
+ uint count = m_meshChartsArray[c]->chartCount();
+
+ if (i < count) {
+ return m_meshChartsArray[c]->chartAt(i);
+ }
+
+ i -= count;
+ }
+
+ return NULL;
+}
+
+// Extract the charts and add to this atlas.
+void Atlas::addMeshCharts(MeshCharts * meshCharts)
+{
+ m_meshChartsArray.append(meshCharts);
+}
+
+void Atlas::extractCharts(const HalfEdge::Mesh * mesh)
+{
+ MeshCharts * meshCharts = new MeshCharts(mesh);
+ meshCharts->extractCharts();
+ addMeshCharts(meshCharts);
+}
+
+void Atlas::computeCharts(const HalfEdge::Mesh * mesh, const SegmentationSettings & settings, const Array<uint> & unchartedMaterialArray)
+{
+ failed=false;
+ MeshCharts * meshCharts = new MeshCharts(mesh);
+ meshCharts->computeCharts(settings, unchartedMaterialArray);
+ addMeshCharts(meshCharts);
+}
+
+
+
+
+#if 0
+
+/// Compute a seamless texture atlas.
+bool Atlas::computeSeamlessTextureAtlas(bool groupFaces/*= true*/, bool scaleTiles/*= false*/, uint w/*= 1024*/, uint h/* = 1024*/)
+{
+ // Implement seamless texture atlas similar to what ZBrush does. See also:
+ // "Meshed Atlases for Real-Time Procedural Solid Texturing"
+ // http://graphics.cs.uiuc.edu/~jch/papers/rtpst.pdf
+
+ // Other methods that we should experiment with:
+ //
+ // Seamless Texture Atlases:
+ // http://www.cs.jhu.edu/~bpurnomo/STA/index.html
+ //
+ // Rectangular Multi-Chart Geometry Images:
+ // http://graphics.cs.uiuc.edu/~jch/papers/rmcgi.pdf
+ //
+ // Discrete differential geometry also provide a way of constructing
+ // seamless quadrangulations as shown in:
+ // http://www.geometry.caltech.edu/pubs/TACD06.pdf
+ //
+
+#pragma message(NV_FILE_LINE "TODO: Implement seamless texture atlas.")
+
+ if (groupFaces)
+ {
+ // @@ TODO.
+ }
+ else
+ {
+ // @@ Create one atlas per face.
+ }
+
+ if (scaleTiles)
+ {
+ // @@ TODO
+ }
+
+ /*
+ if (!isQuadMesh(m_mesh)) {
+ // Only handle quads for now.
+ return false;
+ }
+
+ // Each face is a chart.
+ const uint faceCount = m_mesh->faceCount();
+ m_chartArray.resize(faceCount);
+
+ for(uint f = 0; f < faceCount; f++) {
+ m_chartArray[f].faceArray.clear();
+ m_chartArray[f].faceArray.append(f);
+ }
+
+ // Map each face to a separate square.
+
+ // Determine face layout according to width and height.
+ float aspect = float(m_width) / float(m_height);
+
+ uint i = 2;
+ uint total = (m_width / (i+1)) * (m_height / (i+1));
+ while(total > faceCount) {
+ i *= 2;
+ total = (m_width / (i+1)) * (m_height / (i+1));
+ }
+
+ uint tileSize = i / 2;
+
+ int x = 0;
+ int y = 0;
+
+ m_result = new HalfEdge::Mesh();
+
+ // Once you have that it's just matter of traversing the faces.
+ for(uint f = 0; f < faceCount; f++) {
+ // Compute texture coordinates.
+ Vector2 tex[4];
+ tex[0] = Vector2(float(x), float(y));
+ tex[1] = Vector2(float(x+tileSize), float(y));
+ tex[2] = Vector2(float(x+tileSize), float(y+tileSize));
+ tex[3] = Vector2(float(x), float(y+tileSize));
+
+ Array<uint> indexArray(4);
+
+ const HalfEdge::Face * face = m_mesh->faceAt(f);
+
+ int i = 0;
+ for(HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance(), i++) {
+ const HalfEdge::Edge * edge = it.current();
+ const HalfEdge::Vertex * vertex = edge->from();
+
+ HalfEdge::Vertex * newVertex = m_result->addVertex(vertex->id(), vertex->pos());
+
+ newVertex->setTex(Vector3(tex[i], 0));
+ newVertex->setNor(vertex->nor());
+
+ indexArray.append(m_result->vertexCount() + 1);
+ }
+
+ m_result->addFace(indexArray);
+
+ // Move to the next tile.
+ x += tileSize + 1;
+ if (x + tileSize > m_width) {
+ x = 0;
+ y += tileSize + 1;
+ }
+ }
+ */
+
+ return false;
+}
+
+#endif
+
+
+void Atlas::parameterizeCharts()
+{
+ foreach(i, m_meshChartsArray) {
+ m_meshChartsArray[i]->parameterizeCharts();
+ }
+}
+
+
+float Atlas::packCharts(int quality, float texelsPerUnit, bool blockAlign, bool conservative)
+{
+ AtlasPacker packer(this);
+ packer.packCharts(quality, texelsPerUnit, blockAlign, conservative);
+ if (hasFailed())
+ return 0;
+ return packer.computeAtlasUtilization();
+}
+
+
+
+
+/// Ctor.
+MeshCharts::MeshCharts(const HalfEdge::Mesh * mesh) : m_mesh(mesh)
+{
+}
+
+// Dtor.
+MeshCharts::~MeshCharts()
+{
+ deleteAll(m_chartArray);
+}
+
+
+void MeshCharts::extractCharts()
+{
+ const uint faceCount = m_mesh->faceCount();
+
+ int first = 0;
+ Array<uint> queue(faceCount);
+
+ BitArray bitFlags(faceCount);
+ bitFlags.clearAll();
+
+ for (uint f = 0; f < faceCount; f++)
+ {
+ if (bitFlags.bitAt(f) == false)
+ {
+ // Start new patch. Reset queue.
+ first = 0;
+ queue.clear();
+ queue.append(f);
+ bitFlags.setBitAt(f);
+
+ while (first != queue.count())
+ {
+ const HalfEdge::Face * face = m_mesh->faceAt(queue[first]);
+
+ // Visit face neighbors of queue[first]
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+ nvDebugCheck(edge->pair != NULL);
+
+ if (!edge->isBoundary() && /*!edge->isSeam()*/
+ //!(edge->from()->tex() != edge->pair()->to()->tex() || edge->to()->tex() != edge->pair()->from()->tex()))
+ !(edge->from() != edge->pair->to() || edge->to() != edge->pair->from())) // Preserve existing seams (not just texture seams).
+ {
+ const HalfEdge::Face * neighborFace = edge->pair->face;
+ nvDebugCheck(neighborFace != NULL);
+
+ if (bitFlags.bitAt(neighborFace->id) == false)
+ {
+ queue.append(neighborFace->id);
+ bitFlags.setBitAt(neighborFace->id);
+ }
+ }
+ }
+
+ first++;
+ }
+
+ Chart * chart = new Chart();
+ chart->build(m_mesh, queue);
+
+ m_chartArray.append(chart);
+ }
+ }
+}
+
+
+/*
+LSCM:
+- identify sharp features using local dihedral angles.
+- identify seed faces farthest from sharp features.
+- grow charts from these seeds.
+
+MCGIM:
+- phase 1: chart growth
+ - grow all charts simultaneously using dijkstra search on the dual graph of the mesh.
+ - graph edges are weighted based on planarity metric.
+ - metric uses distance to global chart normal.
+ - terminate when all faces have been assigned.
+- phase 2: seed computation:
+ - place new seed of the chart at the most interior face.
+ - most interior is evaluated using distance metric only.
+
+- method repeates the two phases, until the location of the seeds does not change.
+ - cycles are detected by recording all the previous seeds and chartification terminates.
+
+D-Charts:
+
+- Uniaxial conic metric:
+ - N_c = axis of the generalized cone that best fits the chart. (cone can a be cylinder or a plane).
+ - omega_c = angle between the face normals and the axis.
+ - Fitting error between chart C and tringle t: F(c,t) = (N_c*n_t - cos(omega_c))^2
+
+- Compactness metrics:
+ - Roundness:
+ - C(c,t) = pi * D(S_c,t)^2 / A_c
+ - S_c = chart seed.
+ - D(S_c,t) = length of the shortest path inside the chart betwen S_c and t.
+ - A_c = chart area.
+ - Straightness:
+ - P(c,t) = l_out(c,t) / l_in(c,t)
+ - l_out(c,t) = lenght of the edges not shared between C and t.
+ - l_in(c,t) = lenght of the edges shared between C and t.
+
+- Combined metric:
+ - Cost(c,t) = F(c,t)^alpha + C(c,t)^beta + P(c,t)^gamma
+ - alpha = 1, beta = 0.7, gamma = 0.5
+
+
+
+
+Our basic approach:
+- Just one iteration of k-means?
+- Avoid dijkstra by greedily growing charts until a threshold is met. Increase threshold and repeat until no faces left.
+- If distortion metric is too high, split chart, add two seeds.
+- If chart size is low, try removing chart.
+
+
+Postprocess:
+- If topology is not disk:
+ - Fill holes, if new faces fit proxy.
+ - Find best cut, otherwise.
+- After parameterization:
+ - If boundary self-intersects:
+ - cut chart along the closest two diametral boundary vertices, repeat parametrization.
+ - what if the overlap is on an appendix? How do we find that out and cut appropiately?
+ - emphasize roundness metrics to prevent those cases.
+ - If interior self-overlaps: preserve boundary parameterization and use mean-value map.
+
+*/
+
+
+SegmentationSettings::SegmentationSettings()
+{
+ // Charts have no area or boundary limits right now.
+ maxChartArea = NV_FLOAT_MAX;
+ maxBoundaryLength = NV_FLOAT_MAX;
+
+ proxyFitMetricWeight = 1.0f;
+ roundnessMetricWeight = 0.1f;
+ straightnessMetricWeight = 0.25f;
+ normalSeamMetricWeight = 1.0f;
+ textureSeamMetricWeight = 0.1f;
+}
+
+
+
+void MeshCharts::computeCharts(const SegmentationSettings & settings, const Array<uint> & unchartedMaterialArray)
+{
+ Chart * vertexMap = NULL;
+
+ if (unchartedMaterialArray.count() != 0) {
+ vertexMap = new Chart();
+ vertexMap->buildVertexMap(m_mesh, unchartedMaterialArray);
+
+ if (vertexMap->faceCount() == 0) {
+ delete vertexMap;
+ vertexMap = NULL;
+ }
+ }
+
+
+ AtlasBuilder builder(m_mesh);
+
+ if (vertexMap != NULL) {
+ // Mark faces that do not need to be charted.
+ builder.markUnchartedFaces(vertexMap->faceArray());
+
+ m_chartArray.append(vertexMap);
+ }
+
+ if (builder.facesLeft != 0) {
+
+ // Tweak these values:
+ const float maxThreshold = 2;
+ const uint growFaceCount = 32;
+ const uint maxIterations = 4;
+
+ builder.settings = settings;
+
+ //builder.settings.proxyFitMetricWeight *= 0.75; // relax proxy fit weight during initial seed placement.
+ //builder.settings.roundnessMetricWeight = 0;
+ //builder.settings.straightnessMetricWeight = 0;
+
+ // This seems a reasonable estimate.
+ uint maxSeedCount = max(6U, builder.facesLeft);
+
+ // Create initial charts greedely.
+ nvDebug("### Placing seeds\n");
+ builder.placeSeeds(maxThreshold, maxSeedCount);
+ nvDebug("### Placed %d seeds (max = %d)\n", builder.chartCount(), maxSeedCount);
+
+ builder.updateProxies();
+
+ builder.mergeCharts();
+
+ #if 1
+ nvDebug("### Relocating seeds\n");
+ builder.relocateSeeds();
+
+ nvDebug("### Reset charts\n");
+ builder.resetCharts();
+
+ if (vertexMap != NULL) {
+ builder.markUnchartedFaces(vertexMap->faceArray());
+ }
+
+ builder.settings = settings;
+
+ nvDebug("### Growing charts\n");
+
+ // Restart process growing charts in parallel.
+ uint iteration = 0;
+ while (true)
+ {
+ if (!builder.growCharts(maxThreshold, growFaceCount))
+ {
+ nvDebug("### Can't grow anymore\n");
+
+ // If charts cannot grow more: fill holes, merge charts, relocate seeds and start new iteration.
+
+ nvDebug("### Filling holes\n");
+ builder.fillHoles(maxThreshold);
+ nvDebug("### Using %d charts now\n", builder.chartCount());
+
+ builder.updateProxies();
+
+ nvDebug("### Merging charts\n");
+ builder.mergeCharts();
+ nvDebug("### Using %d charts now\n", builder.chartCount());
+
+ nvDebug("### Reseeding\n");
+ if (!builder.relocateSeeds())
+ {
+ nvDebug("### Cannot relocate seeds anymore\n");
+
+ // Done!
+ break;
+ }
+
+ if (iteration == maxIterations)
+ {
+ nvDebug("### Reached iteration limit\n");
+ break;
+ }
+ iteration++;
+
+ nvDebug("### Reset charts\n");
+ builder.resetCharts();
+
+ if (vertexMap != NULL) {
+ builder.markUnchartedFaces(vertexMap->faceArray());
+ }
+
+ nvDebug("### Growing charts\n");
+ }
+ };
+ #endif
+
+ // Make sure no holes are left!
+ nvDebugCheck(builder.facesLeft == 0);
+
+ const uint chartCount = builder.chartArray.count();
+ for (uint i = 0; i < chartCount; i++)
+ {
+ Chart * chart = new Chart();
+ m_chartArray.append(chart);
+
+ chart->build(m_mesh, builder.chartFaces(i));
+ }
+ }
+
+
+ const uint chartCount = m_chartArray.count();
+
+ // Build face indices.
+ m_faceChart.resize(m_mesh->faceCount());
+ m_faceIndex.resize(m_mesh->faceCount());
+
+ for (uint i = 0; i < chartCount; i++)
+ {
+ const Chart * chart = m_chartArray[i];
+
+ const uint faceCount = chart->faceCount();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ uint idx = chart->faceAt(f);
+ m_faceChart[idx] = i;
+ m_faceIndex[idx] = f;
+ }
+ }
+
+ // Build an exclusive prefix sum of the chart vertex counts.
+ m_chartVertexCountPrefixSum.resize(chartCount);
+
+ if (chartCount > 0)
+ {
+ m_chartVertexCountPrefixSum[0] = 0;
+
+ for (uint i = 1; i < chartCount; i++)
+ {
+ const Chart * chart = m_chartArray[i-1];
+ m_chartVertexCountPrefixSum[i] = m_chartVertexCountPrefixSum[i-1] + chart->vertexCount();
+ }
+
+ m_totalVertexCount = m_chartVertexCountPrefixSum[chartCount - 1] + m_chartArray[chartCount-1]->vertexCount();
+ }
+ else
+ {
+ m_totalVertexCount = 0;
+ }
+}
+
+
+void MeshCharts::parameterizeCharts()
+{
+ ParameterizationQuality globalParameterizationQuality;
+
+ // Parameterize the charts.
+ uint diskCount = 0;
+ const uint chartCount = m_chartArray.count();
+ for (uint i = 0; i < chartCount; i++)\
+ {
+ Chart * chart = m_chartArray[i];
+
+ bool isValid = false;
+
+ if (chart->isVertexMapped()) {
+ continue;
+ }
+
+ if (chart->isDisk())
+ {
+ diskCount++;
+
+ ParameterizationQuality chartParameterizationQuality;
+
+ if (chart->faceCount() == 1) {
+ computeSingleFaceMap(chart->unifiedMesh());
+
+ chartParameterizationQuality = ParameterizationQuality(chart->unifiedMesh());
+ }
+ else {
+ computeOrthogonalProjectionMap(chart->unifiedMesh());
+ ParameterizationQuality orthogonalQuality(chart->unifiedMesh());
+
+ computeLeastSquaresConformalMap(chart->unifiedMesh());
+ ParameterizationQuality lscmQuality(chart->unifiedMesh());
+
+ // If the orthogonal projection produces better results, just use that.
+ // @@ It may be dangerous to do this, because isValid() does not detect self-overlaps.
+ // @@ Another problem is that with very thin patches with nearly zero parametric area, the results of our metric are not accurate.
+ /*if (orthogonalQuality.isValid() && orthogonalQuality.rmsStretchMetric() < lscmQuality.rmsStretchMetric()) {
+ computeOrthogonalProjectionMap(chart->unifiedMesh());
+ chartParameterizationQuality = orthogonalQuality;
+ }
+ else*/ {
+ chartParameterizationQuality = lscmQuality;
+ }
+
+ // If conformal map failed,
+
+ // @@ Experiment with other parameterization methods.
+ //computeCircularBoundaryMap(chart->unifiedMesh());
+ //computeConformalMap(chart->unifiedMesh());
+ //computeNaturalConformalMap(chart->unifiedMesh());
+ //computeGuidanceGradientMap(chart->unifiedMesh());
+ }
+
+ //ParameterizationQuality chartParameterizationQuality(chart->unifiedMesh());
+
+ isValid = chartParameterizationQuality.isValid();
+
+ if (!isValid)
+ {
+ nvDebug("*** Invalid parameterization.\n");
+#if 0
+ // Dump mesh to inspect problem:
+ static int pieceCount = 0;
+
+ StringBuilder fileName;
+ fileName.format("invalid_chart_%d.obj", pieceCount++);
+ exportMesh(chart->unifiedMesh(), fileName.str());
+#endif
+ }
+
+ // @@ Check that parameterization quality is above a certain threshold.
+
+ // @@ Detect boundary self-intersections.
+
+ globalParameterizationQuality += chartParameterizationQuality;
+ }
+
+ if (!isValid)
+ {
+ //nvDebugBreak();
+ // @@ Run the builder again, but only on this chart.
+ //AtlasBuilder builder(chart->chartMesh());
+ }
+
+ // Transfer parameterization from unified mesh to chart mesh.
+ chart->transferParameterization();
+
+ }
+
+ nvDebug(" Parameterized %d/%d charts.\n", diskCount, chartCount);
+ nvDebug(" RMS stretch metric: %f\n", globalParameterizationQuality.rmsStretchMetric());
+ nvDebug(" MAX stretch metric: %f\n", globalParameterizationQuality.maxStretchMetric());
+ nvDebug(" RMS conformal metric: %f\n", globalParameterizationQuality.rmsConformalMetric());
+ nvDebug(" RMS authalic metric: %f\n", globalParameterizationQuality.maxAuthalicMetric());
+}
+
+
+
+Chart::Chart() : m_chartMesh(NULL), m_unifiedMesh(NULL), m_isDisk(false), m_isVertexMapped(false)
+{
+}
+
+void Chart::build(const HalfEdge::Mesh * originalMesh, const Array<uint> & faceArray)
+{
+ // Copy face indices.
+ m_faceArray = faceArray;
+
+ const uint meshVertexCount = originalMesh->vertexCount();
+
+ m_chartMesh = new HalfEdge::Mesh();
+ m_unifiedMesh = new HalfEdge::Mesh();
+
+ Array<uint> chartMeshIndices;
+ chartMeshIndices.resize(meshVertexCount, ~0);
+
+ Array<uint> unifiedMeshIndices;
+ unifiedMeshIndices.resize(meshVertexCount, ~0);
+
+ // Add vertices.
+ const uint faceCount = faceArray.count();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = originalMesh->faceAt(faceArray[f]);
+ nvDebugCheck(face != NULL);
+
+ for(HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Vertex * vertex = it.current()->vertex;
+ const HalfEdge::Vertex * unifiedVertex = vertex->firstColocal();
+
+ if (unifiedMeshIndices[unifiedVertex->id] == ~0)
+ {
+ unifiedMeshIndices[unifiedVertex->id] = m_unifiedMesh->vertexCount();
+
+ nvDebugCheck(vertex->pos == unifiedVertex->pos);
+ m_unifiedMesh->addVertex(vertex->pos);
+ }
+
+ if (chartMeshIndices[vertex->id] == ~0)
+ {
+ chartMeshIndices[vertex->id] = m_chartMesh->vertexCount();
+ m_chartToOriginalMap.append(vertex->id);
+ m_chartToUnifiedMap.append(unifiedMeshIndices[unifiedVertex->id]);
+
+ HalfEdge::Vertex * v = m_chartMesh->addVertex(vertex->pos);
+ v->nor = vertex->nor;
+ v->tex = vertex->tex;
+ }
+ }
+ }
+
+ // This is ignoring the canonical map:
+ // - Is it really necessary to link colocals?
+
+ m_chartMesh->linkColocals();
+ //m_unifiedMesh->linkColocals(); // Not strictly necessary, no colocals in the unified mesh. # Wrong.
+
+ // This check is not valid anymore, if the original mesh vertices were linked with a canonical map, then it might have
+ // some colocal vertices that were unlinked. So, the unified mesh might have some duplicate vertices, because firstColocal()
+ // is not guaranteed to return the same vertex for two colocal vertices.
+ //nvCheck(m_chartMesh->colocalVertexCount() == m_unifiedMesh->vertexCount());
+
+ // Is that OK? What happens in meshes were that happens? Does anything break? Apparently not...
+
+
+
+ Array<uint> faceIndices(7);
+
+ // Add faces.
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = originalMesh->faceAt(faceArray[f]);
+ nvDebugCheck(face != NULL);
+
+ faceIndices.clear();
+
+ for(HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Vertex * vertex = it.current()->vertex;
+ nvDebugCheck(vertex != NULL);
+
+ faceIndices.append(chartMeshIndices[vertex->id]);
+ }
+
+ m_chartMesh->addFace(faceIndices);
+
+ faceIndices.clear();
+
+ for(HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Vertex * vertex = it.current()->vertex;
+ nvDebugCheck(vertex != NULL);
+
+ vertex = vertex->firstColocal();
+
+ faceIndices.append(unifiedMeshIndices[vertex->id]);
+ }
+
+ m_unifiedMesh->addFace(faceIndices);
+ }
+
+ m_chartMesh->linkBoundary();
+ m_unifiedMesh->linkBoundary();
+
+ //exportMesh(m_unifiedMesh.ptr(), "debug_input.obj");
+
+ if (m_unifiedMesh->splitBoundaryEdges()) {
+ m_unifiedMesh = unifyVertices(m_unifiedMesh.ptr());
+ }
+
+ //exportMesh(m_unifiedMesh.ptr(), "debug_split.obj");
+
+ // Closing the holes is not always the best solution and does not fix all the problems.
+ // We need to do some analysis of the holes and the genus to:
+ // - Find cuts that reduce genus.
+ // - Find cuts to connect holes.
+ // - Use minimal spanning trees or seamster.
+ if (!closeHoles()) {
+ /*static int pieceCount = 0;
+ StringBuilder fileName;
+ fileName.format("debug_hole_%d.obj", pieceCount++);
+ exportMesh(m_unifiedMesh.ptr(), fileName.str());*/
+ }
+
+ m_unifiedMesh = triangulate(m_unifiedMesh.ptr());
+
+ //exportMesh(m_unifiedMesh.ptr(), "debug_triangulated.obj");
+
+
+ // Analyze chart topology.
+ MeshTopology topology(m_unifiedMesh.ptr());
+ m_isDisk = topology.isDisk();
+
+ // This is sometimes failing, when triangulate fails to add a triangle, it generates a hole in the mesh.
+ //nvDebugCheck(m_isDisk);
+
+ /*if (!m_isDisk) {
+ static int pieceCount = 0;
+ StringBuilder fileName;
+ fileName.format("debug_hole_%d.obj", pieceCount++);
+ exportMesh(m_unifiedMesh.ptr(), fileName.str());
+ }*/
+
+
+#if 0
+ if (!m_isDisk) {
+ nvDebugBreak();
+
+ static int pieceCount = 0;
+
+ StringBuilder fileName;
+ fileName.format("debug_nodisk_%d.obj", pieceCount++);
+ exportMesh(m_chartMesh.ptr(), fileName.str());
+ }
+#endif
+
+}
+
+
+void Chart::buildVertexMap(const HalfEdge::Mesh * originalMesh, const Array<uint> & unchartedMaterialArray)
+{
+ nvCheck(m_chartMesh == NULL && m_unifiedMesh == NULL);
+
+ m_isVertexMapped = true;
+
+ // Build face indices.
+ m_faceArray.clear();
+
+ const uint meshFaceCount = originalMesh->faceCount();
+ for (uint f = 0; f < meshFaceCount; f++) {
+ const HalfEdge::Face * face = originalMesh->faceAt(f);
+
+ if (unchartedMaterialArray.contains(face->material)) {
+ m_faceArray.append(f);
+ }
+ }
+
+ const uint faceCount = m_faceArray.count();
+
+ if (faceCount == 0) {
+ return;
+ }
+
+
+ // @@ The chartMesh construction is basically the same as with regular charts, don't duplicate!
+
+ const uint meshVertexCount = originalMesh->vertexCount();
+
+ m_chartMesh = new HalfEdge::Mesh();
+
+ Array<uint> chartMeshIndices;
+ chartMeshIndices.resize(meshVertexCount, ~0);
+
+ // Vertex map mesh only has disconnected vertices.
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = originalMesh->faceAt(m_faceArray[f]);
+ nvDebugCheck(face != NULL);
+
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Vertex * vertex = it.current()->vertex;
+
+ if (chartMeshIndices[vertex->id] == ~0)
+ {
+ chartMeshIndices[vertex->id] = m_chartMesh->vertexCount();
+ m_chartToOriginalMap.append(vertex->id);
+
+ HalfEdge::Vertex * v = m_chartMesh->addVertex(vertex->pos);
+ v->nor = vertex->nor;
+ v->tex = vertex->tex; // @@ Not necessary.
+ }
+ }
+ }
+
+ // @@ Link colocals using the original mesh canonical map? Build canonical map on the fly? Do we need to link colocals at all for this?
+ //m_chartMesh->linkColocals();
+
+ Array<uint> faceIndices(7);
+
+ // Add faces.
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = originalMesh->faceAt(m_faceArray[f]);
+ nvDebugCheck(face != NULL);
+
+ faceIndices.clear();
+
+ for(HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Vertex * vertex = it.current()->vertex;
+ nvDebugCheck(vertex != NULL);
+ nvDebugCheck(chartMeshIndices[vertex->id] != ~0);
+
+ faceIndices.append(chartMeshIndices[vertex->id]);
+ }
+
+ HalfEdge::Face * new_face = m_chartMesh->addFace(faceIndices);
+ nvDebugCheck(new_face != NULL);
+ }
+
+ m_chartMesh->linkBoundary();
+
+
+ const uint chartVertexCount = m_chartMesh->vertexCount();
+
+ Box bounds;
+ bounds.clearBounds();
+
+ for (uint i = 0; i < chartVertexCount; i++) {
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(i);
+ bounds.addPointToBounds(vertex->pos);
+ }
+
+ ProximityGrid grid;
+ grid.init(bounds, chartVertexCount);
+
+ for (uint i = 0; i < chartVertexCount; i++) {
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(i);
+ grid.add(vertex->pos, i);
+ }
+
+
+#if 0
+ // Arrange vertices in a rectangle.
+ vertexMapWidth = ftoi_ceil(sqrtf(float(chartVertexCount)));
+ vertexMapHeight = (chartVertexCount + vertexMapWidth - 1) / vertexMapWidth;
+ nvDebugCheck(vertexMapWidth >= vertexMapHeight);
+
+ int x = 0, y = 0;
+ for (uint i = 0; i < chartVertexCount; i++) {
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(i);
+
+ vertex->tex.x = float(x);
+ vertex->tex.y = float(y);
+
+ x++;
+ if (x == vertexMapWidth) {
+ x = 0;
+ y++;
+ nvCheck(y < vertexMapHeight);
+ }
+ }
+
+#elif 0
+ // Arrange vertices in a rectangle, traversing grid in 3D morton order and laying them down in 2D morton order.
+ vertexMapWidth = ftoi_ceil(sqrtf(float(chartVertexCount)));
+ vertexMapHeight = (chartVertexCount + vertexMapWidth - 1) / vertexMapWidth;
+ nvDebugCheck(vertexMapWidth >= vertexMapHeight);
+
+ int n = 0;
+ uint32 texelCode = 0;
+
+ uint cellsVisited = 0;
+
+ const uint32 cellCodeCount = grid.mortonCount();
+ for (uint32 cellCode = 0; cellCode < cellCodeCount; cellCode++) {
+ int cell = grid.mortonIndex(cellCode);
+ if (cell < 0) continue;
+
+ cellsVisited++;
+
+ const Array<uint> & indexArray = grid.cellArray[cell].indexArray;
+
+ foreach(i, indexArray) {
+ uint idx = indexArray[i];
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(idx);
+
+ //vertex->tex.x = float(n % rectangleWidth) + 0.5f;
+ //vertex->tex.y = float(n / rectangleWidth) + 0.5f;
+
+ // Lay down the points in z order too.
+ uint x, y;
+ do {
+ x = decodeMorton2X(texelCode);
+ y = decodeMorton2Y(texelCode);
+ texelCode++;
+ } while (x >= U32(vertexMapWidth) || y >= U32(vertexMapHeight));
+
+ vertex->tex.x = float(x);
+ vertex->tex.y = float(y);
+
+ n++;
+ }
+ }
+
+ nvDebugCheck(cellsVisited == grid.cellArray.count());
+ nvDebugCheck(n == chartVertexCount);
+
+#else
+
+ uint texelCount = 0;
+
+ const float positionThreshold = 0.01f;
+ const float normalThreshold = 0.01f;
+
+ uint verticesVisited = 0;
+ uint cellsVisited = 0;
+
+ Array<int> vertexIndexArray;
+ vertexIndexArray.resize(chartVertexCount, -1); // Init all indices to -1.
+
+ // Traverse vertices in morton order. @@ It may be more interesting to sort them based on orientation.
+ const uint cellCodeCount = grid.mortonCount();
+ for (uint cellCode = 0; cellCode < cellCodeCount; cellCode++) {
+ int cell = grid.mortonIndex(cellCode);
+ if (cell < 0) continue;
+
+ cellsVisited++;
+
+ const Array<uint> & indexArray = grid.cellArray[cell].indexArray;
+
+ foreach(i, indexArray) {
+ uint idx = indexArray[i];
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(idx);
+
+ nvDebugCheck(vertexIndexArray[idx] == -1);
+
+ Array<uint> neighbors;
+ grid.gather(vertex->pos, positionThreshold, /*ref*/neighbors);
+
+ // Compare against all nearby vertices, cluster greedily.
+ foreach(j, neighbors) {
+ uint otherIdx = neighbors[j];
+
+ if (vertexIndexArray[otherIdx] != -1) {
+ HalfEdge::Vertex * otherVertex = m_chartMesh->vertexAt(otherIdx);
+
+ if (distance(vertex->pos, otherVertex->pos) < positionThreshold &&
+ distance(vertex->nor, otherVertex->nor) < normalThreshold)
+ {
+ vertexIndexArray[idx] = vertexIndexArray[otherIdx];
+ break;
+ }
+ }
+ }
+
+ // If index not assigned, assign new one.
+ if (vertexIndexArray[idx] == -1) {
+ vertexIndexArray[idx] = texelCount++;
+ }
+
+ verticesVisited++;
+ }
+ }
+
+ nvDebugCheck(cellsVisited == grid.cellArray.count());
+ nvDebugCheck(verticesVisited == chartVertexCount);
+
+ vertexMapWidth = ftoi_ceil(sqrtf(float(texelCount)));
+ vertexMapWidth = (vertexMapWidth + 3) & ~3; // Width aligned to 4.
+ vertexMapHeight = vertexMapWidth == 0 ? 0 : (texelCount + vertexMapWidth - 1) / vertexMapWidth;
+ //vertexMapHeight = (vertexMapHeight + 3) & ~3; // Height aligned to 4.
+ nvDebugCheck(vertexMapWidth >= vertexMapHeight);
+
+ nvDebug("Reduced vertex count from %d to %d.\n", chartVertexCount, texelCount);
+
+#if 0
+ // This lays down the clustered vertices linearly.
+ for (uint i = 0; i < chartVertexCount; i++) {
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(i);
+
+ int idx = vertexIndexArray[i];
+
+ vertex->tex.x = float(idx % vertexMapWidth);
+ vertex->tex.y = float(idx / vertexMapWidth);
+ }
+#else
+ // Lay down the clustered vertices in morton order.
+
+ Array<uint> texelCodes;
+ texelCodes.resize(texelCount);
+
+ // For each texel, assign one morton code.
+ uint texelCode = 0;
+ for (uint i = 0; i < texelCount; i++) {
+ uint x, y;
+ do {
+ x = decodeMorton2X(texelCode);
+ y = decodeMorton2Y(texelCode);
+ texelCode++;
+ } while (x >= U32(vertexMapWidth) || y >= U32(vertexMapHeight));
+
+ texelCodes[i] = texelCode - 1;
+ }
+
+ for (uint i = 0; i < chartVertexCount; i++) {
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(i);
+
+ int idx = vertexIndexArray[i];
+ if (idx != -1) {
+ uint texelCode = texelCodes[idx];
+ uint x = decodeMorton2X(texelCode);
+ uint y = decodeMorton2Y(texelCode);
+
+ vertex->tex.x = float(x);
+ vertex->tex.y = float(y);
+ }
+ }
+
+#endif
+
+#endif
+
+}
+
+
+
+static void getBoundaryEdges(HalfEdge::Mesh * mesh, Array<HalfEdge::Edge *> & boundaryEdges)
+{
+ nvDebugCheck(mesh != NULL);
+
+ const uint edgeCount = mesh->edgeCount();
+
+ BitArray bitFlags(edgeCount);
+ bitFlags.clearAll();
+
+ boundaryEdges.clear();
+
+ // Search for boundary edges. Mark all the edges that belong to the same boundary.
+ for (uint e = 0; e < edgeCount; e++)
+ {
+ HalfEdge::Edge * startEdge = mesh->edgeAt(e);
+
+ if (startEdge != NULL && startEdge->isBoundary() && bitFlags.bitAt(e) == false)
+ {
+ nvDebugCheck(startEdge->face != NULL);
+ nvDebugCheck(startEdge->pair->face == NULL);
+
+ startEdge = startEdge->pair;
+
+ const HalfEdge::Edge * edge = startEdge;
+ do {
+ nvDebugCheck(edge->face == NULL);
+ nvDebugCheck(bitFlags.bitAt(edge->id/2) == false);
+
+ bitFlags.setBitAt(edge->id / 2);
+ edge = edge->next;
+ } while(startEdge != edge);
+
+ boundaryEdges.append(startEdge);
+ }
+ }
+}
+
+
+bool Chart::closeLoop(uint start, const Array<HalfEdge::Edge *> & loop)
+{
+ const uint vertexCount = loop.count() - start;
+
+ nvDebugCheck(vertexCount >= 3);
+ if (vertexCount < 3) return false;
+
+ nvDebugCheck(loop[start]->vertex->isColocal(loop[start+vertexCount-1]->to()));
+
+ // If the hole is planar, then we add a single face that will be properly triangulated later.
+ // If the hole is not planar, we add a triangle fan with a vertex at the hole centroid.
+ // This is still a bit of a hack. There surely are better hole filling algorithms out there.
+
+ Array<Vector3> points;
+ points.resize(vertexCount);
+ for (uint i = 0; i < vertexCount; i++) {
+ points[i] = loop[start+i]->vertex->pos;
+ }
+
+ bool isPlanar = Fit::isPlanar(vertexCount, points.buffer());
+
+ if (isPlanar) {
+ // Add face and connect edges.
+ HalfEdge::Face * face = m_unifiedMesh->addFace();
+ for (uint i = 0; i < vertexCount; i++) {
+ HalfEdge::Edge * edge = loop[start + i];
+
+ edge->face = face;
+ edge->setNext(loop[start + (i + 1) % vertexCount]);
+ }
+ face->edge = loop[start];
+
+ nvDebugCheck(face->isValid());
+ }
+ else {
+ // If the polygon is not planar, we just cross our fingers, and hope this will work:
+
+ // Compute boundary centroid:
+ Vector3 centroidPos(0);
+
+ for (uint i = 0; i < vertexCount; i++) {
+ centroidPos += points[i];
+ }
+
+ centroidPos *= (1.0f / vertexCount);
+
+ HalfEdge::Vertex * centroid = m_unifiedMesh->addVertex(centroidPos);
+
+ // Add one pair of edges for each boundary vertex.
+ for (uint j = vertexCount-1, i = 0; i < vertexCount; j = i++) {
+ HalfEdge::Face * face = m_unifiedMesh->addFace(centroid->id, loop[start+j]->vertex->id, loop[start+i]->vertex->id);
+ nvDebugCheck(face != NULL);
+ }
+ }
+
+ return true;
+}
+
+
+bool Chart::closeHoles()
+{
+ nvDebugCheck(!m_isVertexMapped);
+
+ Array<HalfEdge::Edge *> boundaryEdges;
+ getBoundaryEdges(m_unifiedMesh.ptr(), boundaryEdges);
+
+ uint boundaryCount = boundaryEdges.count();
+ if (boundaryCount <= 1)
+ {
+ // Nothing to close.
+ return true;
+ }
+
+ // Compute lengths and areas.
+ Array<float> boundaryLengths;
+ //Array<Vector3> boundaryCentroids;
+
+ for (uint i = 0; i < boundaryCount; i++)
+ {
+ const HalfEdge::Edge * startEdge = boundaryEdges[i];
+ nvCheck(startEdge->face == NULL);
+
+ //float boundaryEdgeCount = 0;
+ float boundaryLength = 0.0f;
+ //Vector3 boundaryCentroid(zero);
+
+ const HalfEdge::Edge * edge = startEdge;
+ do {
+ Vector3 t0 = edge->from()->pos;
+ Vector3 t1 = edge->to()->pos;
+
+ //boundaryEdgeCount++;
+ boundaryLength += length(t1 - t0);
+ //boundaryCentroid += edge->vertex()->pos;
+
+ edge = edge->next;
+ } while(edge != startEdge);
+
+ boundaryLengths.append(boundaryLength);
+ //boundaryCentroids.append(boundaryCentroid / boundaryEdgeCount);
+ }
+
+
+ // Find disk boundary.
+ uint diskBoundary = 0;
+ float maxLength = boundaryLengths[0];
+
+ for (uint i = 1; i < boundaryCount; i++)
+ {
+ if (boundaryLengths[i] > maxLength)
+ {
+ maxLength = boundaryLengths[i];
+ diskBoundary = i;
+ }
+ }
+
+
+ // Sew holes.
+ /*for (uint i = 0; i < boundaryCount; i++)
+ {
+ if (diskBoundary == i)
+ {
+ // Skip disk boundary.
+ continue;
+ }
+
+ HalfEdge::Edge * startEdge = boundaryEdges[i];
+ nvCheck(startEdge->face() == NULL);
+
+ boundaryEdges[i] = m_unifiedMesh->sewBoundary(startEdge);
+ }
+
+ exportMesh(m_unifiedMesh.ptr(), "debug_sewn.obj");*/
+
+ //bool hasNewHoles = false;
+
+ // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // @@ Close loop is wrong, after closing a loop, we do not only have to add the face, but make sure that every edge in he loop is pointing to the right place.
+
+ // Close holes.
+ for (uint i = 0; i < boundaryCount; i++)
+ {
+ if (diskBoundary == i)
+ {
+ // Skip disk boundary.
+ continue;
+ }
+
+ HalfEdge::Edge * startEdge = boundaryEdges[i];
+ nvDebugCheck(startEdge != NULL);
+ nvDebugCheck(startEdge->face == NULL);
+
+#if 1
+ Array<HalfEdge::Vertex *> vertexLoop;
+ Array<HalfEdge::Edge *> edgeLoop;
+
+ HalfEdge::Edge * edge = startEdge;
+ do {
+ HalfEdge::Vertex * vertex = edge->next->vertex; // edge->to()
+
+ uint i;
+ for (i = 0; i < vertexLoop.count(); i++) {
+ if (vertex->isColocal(vertexLoop[i])) {
+ break;
+ }
+ }
+
+ bool isCrossing = (i != vertexLoop.count());
+
+ if (isCrossing) {
+
+ HalfEdge::Edge * prev = edgeLoop[i]; // Previous edge before the loop.
+ HalfEdge::Edge * next = edge->next; // Next edge after the loop.
+
+ nvDebugCheck(prev->to()->isColocal(next->from()));
+
+ // Close loop.
+ edgeLoop.append(edge);
+ closeLoop(i+1, edgeLoop);
+
+ // Link boundary loop.
+ prev->setNext(next);
+ vertex->setEdge(next);
+
+ // Start over again.
+ vertexLoop.clear();
+ edgeLoop.clear();
+
+ edge = startEdge;
+ vertex = edge->to();
+ }
+
+ vertexLoop.append(vertex);
+ edgeLoop.append(edge);
+
+ edge = edge->next;
+ } while(edge != startEdge);
+
+ closeLoop(0, edgeLoop);
+#endif
+
+ /*
+
+ // Add face and connect boundary edges.
+ HalfEdge::Face * face = m_unifiedMesh->addFace();
+ face->setEdge(startEdge);
+
+ HalfEdge::Edge * edge = startEdge;
+ do {
+ edge->setFace(face);
+
+ edge = edge->next();
+ } while(edge != startEdge);
+
+ */
+
+
+ /*
+ uint edgeCount = 0;
+ HalfEdge::Edge * edge = startEdge;
+ do {
+ edgeCount++;
+ edge = edge->next();
+ } while(edge != startEdge);
+
+
+
+ // Count edges in this boundary.
+ uint edgeCount = 0;
+ HalfEdge::Edge * edge = startEdge;
+ do {
+ edgeCount++;
+ edge = edge->next();
+ } while(edge != startEdge);
+
+ // Trivial hole, fill with one triangle. This actually works for all convex boundaries with non colinear vertices.
+ if (edgeCount == 3) {
+ // Add face and connect boundary edges.
+ HalfEdge::Face * face = m_unifiedMesh->addFace();
+ face->setEdge(startEdge);
+
+ edge = startEdge;
+ do {
+ edge->setFace(face);
+
+ edge = edge->next();
+ } while(edge != startEdge);
+
+ // @@ Implement the above using addFace, it should now work with existing edges, as long as their face pointers is zero.
+
+ }
+ else {
+ // Ideally we should:
+ // - compute best fit plane of boundary vertices.
+ // - project boundary polygon onto plane.
+ // - triangulate boundary polygon.
+ // - add faces of the resulting triangulation.
+
+ // I don't have a good triangulator available. A more simple solution that works in more (but not all) cases:
+ // - compute boundary centroid.
+ // - add vertex centroid.
+ // - connect centroid vertex with boundary vertices.
+ // - connect radial edges with boundary edges.
+
+ // This should work for non-convex boundaries with colinear vertices as long as the kernel of the polygon is not empty.
+
+ // Compute boundary centroid:
+ Vector3 centroid_pos(0);
+ Vector2 centroid_tex(0);
+
+ HalfEdge::Edge * edge = startEdge;
+ do {
+ centroid_pos += edge->vertex()->pos;
+ centroid_tex += edge->vertex()->tex;
+ edge = edge->next();
+ } while(edge != startEdge);
+
+ centroid_pos *= (1.0f / edgeCount);
+ centroid_tex *= (1.0f / edgeCount);
+
+ HalfEdge::Vertex * centroid = m_unifiedMesh->addVertex(centroid_pos);
+ centroid->tex = centroid_tex;
+
+ // Add one pair of edges for each boundary vertex.
+ edge = startEdge;
+ do {
+ HalfEdge::Edge * next = edge->next();
+
+ nvCheck(edge->face() == NULL);
+ HalfEdge::Face * face = m_unifiedMesh->addFace(centroid->id(), edge->from()->id(), edge->to()->id());
+
+ if (face != NULL) {
+ nvCheck(edge->face() == face);
+ }
+ else {
+ hasNewHoles = true;
+ }
+
+ edge = next;
+ } while(edge != startEdge);
+ }
+ */
+ }
+
+ /*nvDebugCheck(!hasNewHoles);
+
+ if (hasNewHoles) {
+ // Link boundary again, in case closeHoles created new holes!
+ m_unifiedMesh->linkBoundary();
+ }*/
+
+ // Because some algorithms do not expect sparse edge buffers.
+ //m_unifiedMesh->compactEdges();
+
+ // In case we messed up:
+ //m_unifiedMesh->linkBoundary();
+
+ getBoundaryEdges(m_unifiedMesh.ptr(), boundaryEdges);
+
+ boundaryCount = boundaryEdges.count();
+ nvDebugCheck(boundaryCount == 1);
+
+ //exportMesh(m_unifiedMesh.ptr(), "debug_hole_filled.obj");
+
+ return boundaryCount == 1;
+}
+
+
+// Transfer parameterization from unified mesh to chart mesh.
+void Chart::transferParameterization() {
+ nvDebugCheck(!m_isVertexMapped);
+
+ uint vertexCount = m_chartMesh->vertexCount();
+ for (uint v = 0; v < vertexCount; v++) {
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(v);
+ HalfEdge::Vertex * unifiedVertex = m_unifiedMesh->vertexAt(mapChartVertexToUnifiedVertex(v));
+ vertex->tex = unifiedVertex->tex;
+ }
+}
+
+float Chart::computeSurfaceArea() const {
+ return nv::computeSurfaceArea(m_chartMesh.ptr()) * scale;
+}
+
+float Chart::computeParametricArea() const {
+ // This only makes sense in parameterized meshes.
+ nvDebugCheck(m_isDisk);
+ nvDebugCheck(!m_isVertexMapped);
+
+ return nv::computeParametricArea(m_chartMesh.ptr());
+}
+
+Vector2 Chart::computeParametricBounds() const {
+ // This only makes sense in parameterized meshes.
+ nvDebugCheck(m_isDisk);
+ nvDebugCheck(!m_isVertexMapped);
+
+ Box bounds;
+ bounds.clearBounds();
+
+ uint vertexCount = m_chartMesh->vertexCount();
+ for (uint v = 0; v < vertexCount; v++) {
+ HalfEdge::Vertex * vertex = m_chartMesh->vertexAt(v);
+ bounds.addPointToBounds(Vector3(vertex->tex, 0));
+ }
+
+ return bounds.extents().xy();
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/param/Atlas.h b/thirdparty/thekla_atlas/nvmesh/param/Atlas.h
new file mode 100644
index 0000000000..41cfaea9cb
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/Atlas.h
@@ -0,0 +1,186 @@
+// Copyright NVIDIA Corporation 2006 -- Ignacio Castano <icastano@nvidia.com>
+
+#pragma once
+#ifndef NV_MESH_ATLAS_H
+#define NV_MESH_ATLAS_H
+
+#include "nvcore/Array.h"
+#include "nvcore/Ptr.h"
+#include "nvmath/Vector.h"
+#include "nvmesh/nvmesh.h"
+#include "nvmesh/halfedge/Mesh.h"
+
+
+namespace nv
+{
+ namespace HalfEdge { class Mesh; }
+
+ class Chart;
+ class MeshCharts;
+ class VertexMap;
+
+ struct SegmentationSettings
+ {
+ SegmentationSettings();
+
+ float maxChartArea;
+ float maxBoundaryLength;
+
+ float proxyFitMetricWeight;
+ float roundnessMetricWeight;
+ float straightnessMetricWeight;
+ float normalSeamMetricWeight;
+ float textureSeamMetricWeight;
+ };
+
+
+ /// An atlas is a set of charts.
+ class Atlas
+ {
+ public:
+
+ Atlas();
+ ~Atlas();
+
+ uint meshCount() const { return m_meshChartsArray.count(); }
+ const MeshCharts * meshAt(uint i) const { return m_meshChartsArray[i]; }
+ MeshCharts * meshAt(uint i) { return m_meshChartsArray[i]; }
+
+ uint chartCount() const;
+ const Chart * chartAt(uint i) const;
+ Chart * chartAt(uint i);
+
+ // Add mesh charts and takes ownership.
+ void addMeshCharts(MeshCharts * meshCharts);
+
+ void extractCharts(const HalfEdge::Mesh * mesh);
+ void computeCharts(const HalfEdge::Mesh * mesh, const SegmentationSettings & settings, const Array<uint> & unchartedMaterialArray);
+
+
+ // Compute a trivial seamless texture similar to ZBrush.
+ //bool computeSeamlessTextureAtlas(bool groupFaces = true, bool scaleTiles = false, uint w = 1024, uint h = 1024);
+
+ void parameterizeCharts();
+
+ // Pack charts in the smallest possible rectangle.
+ float packCharts(int quality, float texelArea, bool blockAlign, bool conservative);
+ void setFailed() { failed = true; }
+ bool hasFailed() const { return failed; }
+
+ private:
+
+ bool failed;
+ Array<MeshCharts *> m_meshChartsArray;
+
+ };
+
+
+ // Set of charts corresponding to a single mesh.
+ class MeshCharts
+ {
+ public:
+ MeshCharts(const HalfEdge::Mesh * mesh);
+ ~MeshCharts();
+
+ uint chartCount() const { return m_chartArray.count(); }
+ uint vertexCount () const { return m_totalVertexCount; }
+
+ const Chart * chartAt(uint i) const { return m_chartArray[i]; }
+ Chart * chartAt(uint i) { return m_chartArray[i]; }
+
+ void computeVertexMap(const Array<uint> & unchartedMaterialArray);
+
+ // Extract the charts of the input mesh.
+ void extractCharts();
+
+ // Compute charts using a simple segmentation algorithm.
+ void computeCharts(const SegmentationSettings & settings, const Array<uint> & unchartedMaterialArray);
+
+ void parameterizeCharts();
+
+ uint faceChartAt(uint i) const { return m_faceChart[i]; }
+ uint faceIndexWithinChartAt(uint i) const { return m_faceIndex[i]; }
+
+ uint vertexCountBeforeChartAt(uint i) const { return m_chartVertexCountPrefixSum[i]; }
+
+ private:
+
+ const HalfEdge::Mesh * m_mesh;
+
+ Array<Chart *> m_chartArray;
+
+ Array<uint> m_chartVertexCountPrefixSum;
+ uint m_totalVertexCount;
+
+ Array<uint> m_faceChart; // the chart of every face of the input mesh.
+ Array<uint> m_faceIndex; // the index within the chart for every face of the input mesh.
+ };
+
+
+ /// A chart is a connected set of faces with a certain topology (usually a disk).
+ class Chart
+ {
+ public:
+
+ Chart();
+
+ void build(const HalfEdge::Mesh * originalMesh, const Array<uint> & faceArray);
+ void buildVertexMap(const HalfEdge::Mesh * originalMesh, const Array<uint> & unchartedMaterialArray);
+
+ bool closeHoles();
+
+ bool isDisk() const { return m_isDisk; }
+ bool isVertexMapped() const { return m_isVertexMapped; }
+
+ uint vertexCount() const { return m_chartMesh->vertexCount(); }
+ uint colocalVertexCount() const { return m_unifiedMesh->vertexCount(); }
+
+ uint faceCount() const { return m_faceArray.count(); }
+ uint faceAt(uint i) const { return m_faceArray[i]; }
+
+ const HalfEdge::Mesh * chartMesh() const { return m_chartMesh.ptr(); }
+ HalfEdge::Mesh * chartMesh() { return m_chartMesh.ptr(); }
+ const HalfEdge::Mesh * unifiedMesh() const { return m_unifiedMesh.ptr(); }
+ HalfEdge::Mesh * unifiedMesh() { return m_unifiedMesh.ptr(); }
+
+ //uint vertexIndex(uint i) const { return m_vertexIndexArray[i]; }
+
+ uint mapChartVertexToOriginalVertex(uint i) const { return m_chartToOriginalMap[i]; }
+ uint mapChartVertexToUnifiedVertex(uint i) const { return m_chartToUnifiedMap[i]; }
+
+ const Array<uint> & faceArray() const { return m_faceArray; }
+
+ void transferParameterization();
+
+ float computeSurfaceArea() const;
+ float computeParametricArea() const;
+ Vector2 computeParametricBounds() const;
+
+
+ float scale = 1.0f;
+ uint vertexMapWidth;
+ uint vertexMapHeight;
+
+ private:
+
+ bool closeLoop(uint start, const Array<HalfEdge::Edge *> & loop);
+
+ // Chart mesh.
+ AutoPtr<HalfEdge::Mesh> m_chartMesh;
+ AutoPtr<HalfEdge::Mesh> m_unifiedMesh;
+
+ bool m_isDisk;
+ bool m_isVertexMapped;
+
+ // List of faces of the original mesh that belong to this chart.
+ Array<uint> m_faceArray;
+
+ // Map vertices of the chart mesh to vertices of the original mesh.
+ Array<uint> m_chartToOriginalMap;
+
+ Array<uint> m_chartToUnifiedMap;
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_ATLAS_H
diff --git a/thirdparty/thekla_atlas/nvmesh/param/AtlasBuilder.cpp b/thirdparty/thekla_atlas/nvmesh/param/AtlasBuilder.cpp
new file mode 100644
index 0000000000..bd2140c2f3
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/AtlasBuilder.cpp
@@ -0,0 +1,1320 @@
+// This code is in the public domain -- castano@gmail.com
+
+#include "nvmesh.h" // pch
+
+#include "AtlasBuilder.h"
+#include "Util.h"
+
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Face.h"
+#include "nvmesh/halfedge/Vertex.h"
+
+#include "nvmath/Matrix.inl"
+#include "nvmath/Vector.inl"
+
+//#include "nvcore/IntroSort.h"
+#include "nvcore/Array.inl"
+
+#include <algorithm> // std::sort
+
+#include <float.h> // FLT_MAX
+#include <limits.h> // UINT_MAX
+
+using namespace nv;
+
+namespace
+{
+
+ // Dummy implementation of a priority queue using sort at insertion.
+ // - Insertion is o(n)
+ // - Smallest element goes at the end, so that popping it is o(1).
+ // - Resorting is n*log(n)
+ // @@ Number of elements in the queue is usually small, and we'd have to rebalance often. I'm not sure it's worth implementing a heap.
+ // @@ Searcing at removal would remove the need for sorting when priorities change.
+ struct PriorityQueue
+ {
+ PriorityQueue(uint size = UINT_MAX) : maxSize(size) {}
+
+ void push(float priority, uint face) {
+ uint i = 0;
+ const uint count = pairs.count();
+ for (; i < count; i++) {
+ if (pairs[i].priority > priority) break;
+ }
+
+ Pair p = { priority, face };
+ pairs.insertAt(i, p);
+
+ if (pairs.count() > maxSize) {
+ pairs.removeAt(0);
+ }
+ }
+
+ // push face out of order, to be sorted later.
+ void push(uint face) {
+ Pair p = { 0.0f, face };
+ pairs.append(p);
+ }
+
+ uint pop() {
+ uint f = pairs.back().face;
+ pairs.pop_back();
+ return f;
+ }
+
+ void sort() {
+ //nv::sort(pairs); // @@ My intro sort appears to be much slower than it should!
+ std::sort(pairs.buffer(), pairs.buffer() + pairs.count());
+ }
+
+ void clear() {
+ pairs.clear();
+ }
+
+ uint count() const { return pairs.count(); }
+
+ float firstPriority() const { return pairs.back().priority; }
+
+
+ const uint maxSize;
+
+ struct Pair {
+ bool operator <(const Pair & p) const { return priority > p.priority; } // !! Sort in inverse priority order!
+ float priority;
+ uint face;
+ };
+
+
+ Array<Pair> pairs;
+ };
+
+ static bool isNormalSeam(const HalfEdge::Edge * edge) {
+ return (edge->vertex->nor != edge->pair->next->vertex->nor || edge->next->vertex->nor != edge->pair->vertex->nor);
+ }
+
+ static bool isTextureSeam(const HalfEdge::Edge * edge) {
+ return (edge->vertex->tex != edge->pair->next->vertex->tex || edge->next->vertex->tex != edge->pair->vertex->tex);
+ }
+
+} // namespace
+
+
+struct nv::ChartBuildData
+{
+ ChartBuildData(int id) : id(id) {
+ planeNormal = Vector3(0);
+ centroid = Vector3(0);
+ coneAxis = Vector3(0);
+ coneAngle = 0;
+ area = 0;
+ boundaryLength = 0;
+ normalSum = Vector3(0);
+ centroidSum = Vector3(0);
+ }
+
+ int id;
+
+ // Proxy info:
+ Vector3 planeNormal;
+ Vector3 centroid;
+ Vector3 coneAxis;
+ float coneAngle;
+
+ float area;
+ float boundaryLength;
+ Vector3 normalSum;
+ Vector3 centroidSum;
+
+ Array<uint> seeds; // @@ These could be a pointers to the HalfEdge faces directly.
+ Array<uint> faces;
+ PriorityQueue candidates;
+};
+
+
+
+AtlasBuilder::AtlasBuilder(const HalfEdge::Mesh * m) : mesh(m), facesLeft(m->faceCount())
+{
+ const uint faceCount = m->faceCount();
+ faceChartArray.resize(faceCount, -1);
+ faceCandidateArray.resize(faceCount, -1);
+
+ // @@ Floyd for the whole mesh is too slow. We could compute floyd progressively per patch as the patch grows. We need a better solution to compute most central faces.
+ //computeShortestPaths();
+
+ // Precompute edge lengths and face areas.
+ uint edgeCount = m->edgeCount();
+ edgeLengths.resize(edgeCount);
+
+ for (uint i = 0; i < edgeCount; i++) {
+ uint id = m->edgeAt(i)->id;
+ nvDebugCheck(id / 2 == i);
+
+ edgeLengths[i] = m->edgeAt(i)->length();
+ }
+
+ faceAreas.resize(faceCount);
+ for (uint i = 0; i < faceCount; i++) {
+ faceAreas[i] = m->faceAt(i)->area();
+ }
+}
+
+AtlasBuilder::~AtlasBuilder()
+{
+ const uint chartCount = chartArray.count();
+ for (uint i = 0; i < chartCount; i++)
+ {
+ delete chartArray[i];
+ }
+}
+
+
+void AtlasBuilder::markUnchartedFaces(const Array<uint> & unchartedFaces)
+{
+ const uint unchartedFaceCount = unchartedFaces.count();
+ for (uint i = 0; i < unchartedFaceCount; i++){
+ uint f = unchartedFaces[i];
+ faceChartArray[f] = -2;
+ //faceCandidateArray[f] = -2; // @@ ?
+
+ removeCandidate(f);
+ }
+
+ nvDebugCheck(facesLeft >= unchartedFaceCount);
+ facesLeft -= unchartedFaceCount;
+}
+
+
+void AtlasBuilder::computeShortestPaths()
+{
+ const uint faceCount = mesh->faceCount();
+ shortestPaths.resize(faceCount*faceCount, FLT_MAX);
+
+ // Fill edges:
+ for (uint i = 0; i < faceCount; i++)
+ {
+ shortestPaths[i*faceCount + i] = 0.0f;
+
+ const HalfEdge::Face * face_i = mesh->faceAt(i);
+ Vector3 centroid_i = face_i->centroid();
+
+ for (HalfEdge::Face::ConstEdgeIterator it(face_i->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+
+ if (!edge->isBoundary())
+ {
+ const HalfEdge::Face * face_j = edge->pair->face;
+
+ uint j = face_j->id;
+ Vector3 centroid_j = face_j->centroid();
+
+ shortestPaths[i*faceCount + j] = shortestPaths[j*faceCount + i] = length(centroid_i - centroid_j);
+ }
+ }
+ }
+
+ // Use Floyd-Warshall algorithm to compute all paths:
+ for (uint k = 0; k < faceCount; k++)
+ {
+ for (uint i = 0; i < faceCount; i++)
+ {
+ for (uint j = 0; j < faceCount; j++)
+ {
+ shortestPaths[i*faceCount + j] = min(shortestPaths[i*faceCount + j], shortestPaths[i*faceCount + k]+shortestPaths[k*faceCount + j]);
+ }
+ }
+ }
+}
+
+
+void AtlasBuilder::placeSeeds(float threshold, uint maxSeedCount)
+{
+ // Instead of using a predefiened number of seeds:
+ // - Add seeds one by one, growing chart until a certain treshold.
+ // - Undo charts and restart growing process.
+
+ // @@ How can we give preference to faces far from sharp features as in the LSCM paper?
+ // - those points can be found using a simple flood filling algorithm.
+ // - how do we weight the probabilities?
+
+ for (uint i = 0; i < maxSeedCount; i++)
+ {
+ if (facesLeft == 0) {
+ // No faces left, stop creating seeds.
+ break;
+ }
+
+ createRandomChart(threshold);
+ }
+}
+
+
+void AtlasBuilder::createRandomChart(float threshold)
+{
+ ChartBuildData * chart = new ChartBuildData(chartArray.count());
+ chartArray.append(chart);
+
+ // Pick random face that is not used by any chart yet.
+ uint randomFaceIdx = rand.getRange(facesLeft - 1);
+ uint i = 0;
+ for (uint f = 0; f != randomFaceIdx; f++, i++)
+ {
+ while (faceChartArray[i] != -1) i++;
+ }
+ while (faceChartArray[i] != -1) i++;
+
+ chart->seeds.append(i);
+
+ addFaceToChart(chart, i, true);
+
+ // Grow the chart as much as possible within the given threshold.
+ growChart(chart, threshold * 0.5f, facesLeft);
+ //growCharts(threshold - threshold * 0.75f / chartCount(), facesLeft);
+}
+
+void AtlasBuilder::addFaceToChart(ChartBuildData * chart, uint f, bool recomputeProxy)
+{
+ // Add face to chart.
+ chart->faces.append(f);
+
+ nvDebugCheck(faceChartArray[f] == -1);
+ faceChartArray[f] = chart->id;
+
+ facesLeft--;
+
+ // Update area and boundary length.
+ chart->area = evaluateChartArea(chart, f);
+ chart->boundaryLength = evaluateBoundaryLength(chart, f);
+ chart->normalSum = evaluateChartNormalSum(chart, f);
+ chart->centroidSum = evaluateChartCentroidSum(chart, f);
+
+ if (recomputeProxy) {
+ // Update proxy and candidate's priorities.
+ updateProxy(chart);
+ }
+
+ // Update candidates.
+ removeCandidate(f);
+ updateCandidates(chart, f);
+ updatePriorities(chart);
+}
+
+// @@ Get N best candidates in one pass.
+const AtlasBuilder::Candidate & AtlasBuilder::getBestCandidate() const
+{
+ uint best = 0;
+ float bestCandidateMetric = FLT_MAX;
+
+ const uint candidateCount = candidateArray.count();
+ nvCheck(candidateCount > 0);
+
+ for (uint i = 0; i < candidateCount; i++)
+ {
+ const Candidate & candidate = candidateArray[i];
+
+ if (candidate.metric < bestCandidateMetric) {
+ bestCandidateMetric = candidate.metric;
+ best = i;
+ }
+ }
+
+ return candidateArray[best];
+}
+
+
+// Returns true if any of the charts can grow more.
+bool AtlasBuilder::growCharts(float threshold, uint faceCount)
+{
+#if 1 // Using one global list.
+
+ faceCount = min(faceCount, facesLeft);
+
+ for (uint i = 0; i < faceCount; i++)
+ {
+ const Candidate & candidate = getBestCandidate();
+
+ if (candidate.metric > threshold) {
+ return false; // Can't grow more.
+ }
+
+ addFaceToChart(candidate.chart, candidate.face);
+ }
+
+ return facesLeft != 0; // Can continue growing.
+
+#else // Using one list per chart.
+ bool canGrowMore = false;
+
+ const uint chartCount = chartArray.count();
+ for (uint i = 0; i < chartCount; i++)
+ {
+ if (growChart(chartArray[i], threshold, faceCount))
+ {
+ canGrowMore = true;
+ }
+ }
+
+ return canGrowMore;
+#endif
+}
+
+bool AtlasBuilder::growChart(ChartBuildData * chart, float threshold, uint faceCount)
+{
+ // Try to add faceCount faces within threshold to chart.
+ for (uint i = 0; i < faceCount; )
+ {
+ if (chart->candidates.count() == 0 || chart->candidates.firstPriority() > threshold)
+ {
+ return false;
+ }
+
+ uint f = chart->candidates.pop();
+ if (faceChartArray[f] == -1)
+ {
+ addFaceToChart(chart, f);
+ i++;
+ }
+ }
+
+ if (chart->candidates.count() == 0 || chart->candidates.firstPriority() > threshold)
+ {
+ return false;
+ }
+
+ return true;
+}
+
+
+void AtlasBuilder::resetCharts()
+{
+ const uint faceCount = mesh->faceCount();
+ for (uint i = 0; i < faceCount; i++)
+ {
+ faceChartArray[i] = -1;
+ faceCandidateArray[i] = -1;
+ }
+
+ facesLeft = faceCount;
+
+ candidateArray.clear();
+
+ const uint chartCount = chartArray.count();
+ for (uint i = 0; i < chartCount; i++)
+ {
+ ChartBuildData * chart = chartArray[i];
+
+ const uint seed = chart->seeds.back();
+
+ chart->area = 0.0f;
+ chart->boundaryLength = 0.0f;
+ chart->normalSum = Vector3(0);
+ chart->centroidSum = Vector3(0);
+
+ chart->faces.clear();
+ chart->candidates.clear();
+
+ addFaceToChart(chart, seed);
+ }
+}
+
+
+void AtlasBuilder::updateCandidates(ChartBuildData * chart, uint f)
+{
+ const HalfEdge::Face * face = mesh->faceAt(f);
+
+ // Traverse neighboring faces, add the ones that do not belong to any chart yet.
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current()->pair;
+
+ if (!edge->isBoundary())
+ {
+ uint f = edge->face->id;
+
+ if (faceChartArray[f] == -1)
+ {
+ chart->candidates.push(f);
+ }
+ }
+ }
+}
+
+
+void AtlasBuilder::updateProxies()
+{
+ const uint chartCount = chartArray.count();
+ for (uint i = 0; i < chartCount; i++)
+ {
+ updateProxy(chartArray[i]);
+ }
+}
+
+
+namespace {
+
+ float absoluteSum(Vector4::Arg v)
+ {
+ return fabs(v.x) + fabs(v.y) + fabs(v.z) + fabs(v.w);
+ }
+
+ //#pragma message(NV_FILE_LINE "FIXME: Using the c=cos(teta) substitution, the equation system becomes linear and we can avoid the newton solver.")
+
+ struct ConeFitting
+ {
+ ConeFitting(const HalfEdge::Mesh * m, float g, float tf, float tx) : mesh(m), gamma(g), tolf(tf), tolx(tx), F(0), D(0), H(0) {
+ }
+
+ void addTerm(Vector3 N, float A)
+ {
+ const float c = cosf(X.w);
+ const float s = sinf(X.w);
+ const float tmp = dot(X.xyz(), N) - c;
+
+ F += tmp * tmp;
+
+ D.x += 2 * X.x * tmp;
+ D.y += 2 * X.y * tmp;
+ D.z += 2 * X.z * tmp;
+ D.w += 2 * s * tmp;
+
+ H(0,0) = 2 * X.x * N.x + 2 * tmp;
+ H(0,1) = 2 * X.x * N.y;
+ H(0,2) = 2 * X.x * N.z;
+ H(0,3) = 2 * X.x * s;
+
+ H(1,0) = 2 * X.y * N.x;
+ H(1,1) = 2 * X.y * N.y + 2 * tmp;
+ H(1,2) = 2 * X.y * N.z;
+ H(1,3) = 2 * X.y * s;
+
+ H(2,0) = 2 * X.z * N.x;
+ H(2,1) = 2 * X.z * N.y;
+ H(2,2) = 2 * X.z * N.z + 2 * tmp;
+ H(2,3) = 2 * X.z * s;
+
+ H(3,0) = 2 * s * N.x;
+ H(3,1) = 2 * s * N.y;
+ H(3,2) = 2 * s * N.z;
+ H(3,3) = 2 * s * s + 2 * c * tmp;
+ }
+
+ Vector4 solve(ChartBuildData * chart, Vector4 start)
+ {
+ const uint faceCount = chart->faces.count();
+
+ X = start;
+
+ Vector4 dX;
+
+ do {
+ for (uint i = 0; i < faceCount; i++)
+ {
+ const HalfEdge::Face * face = mesh->faceAt(chart->faces[i]);
+
+ addTerm(face->normal(), face->area());
+ }
+
+ Vector4 dX;
+ //solveKramer(H, D, &dX);
+ solveLU(H, D, &dX);
+
+ // @@ Do a full newton step and reduce by half if F doesn't decrease.
+ X -= gamma * dX;
+
+ // Constrain normal to be normalized.
+ X = Vector4(normalize(X.xyz()), X.w);
+
+ } while(absoluteSum(D) > tolf || absoluteSum(dX) > tolx);
+
+ return X;
+ }
+
+ HalfEdge::Mesh const * const mesh;
+ const float gamma;
+ const float tolf;
+ const float tolx;
+
+ Vector4 X;
+
+ float F;
+ Vector4 D;
+ Matrix H;
+ };
+
+ // Unnormalized face normal assuming it's a triangle.
+ static Vector3 triangleNormal(const HalfEdge::Face * face)
+ {
+ Vector3 p0 = face->edge->vertex->pos;
+ Vector3 p1 = face->edge->next->vertex->pos;
+ Vector3 p2 = face->edge->next->next->vertex->pos;
+
+ Vector3 e0 = p2 - p0;
+ Vector3 e1 = p1 - p0;
+
+ return normalizeSafe(cross(e0, e1), Vector3(0), 0.0f);
+ }
+
+ static Vector3 triangleNormalAreaScaled(const HalfEdge::Face * face)
+ {
+ Vector3 p0 = face->edge->vertex->pos;
+ Vector3 p1 = face->edge->next->vertex->pos;
+ Vector3 p2 = face->edge->next->next->vertex->pos;
+
+ Vector3 e0 = p2 - p0;
+ Vector3 e1 = p1 - p0;
+
+ return cross(e0, e1);
+ }
+
+ // Average of the edge midpoints weighted by the edge length.
+ // I want a point inside the triangle, but closer to the cirumcenter.
+ static Vector3 triangleCenter(const HalfEdge::Face * face)
+ {
+ Vector3 p0 = face->edge->vertex->pos;
+ Vector3 p1 = face->edge->next->vertex->pos;
+ Vector3 p2 = face->edge->next->next->vertex->pos;
+
+ float l0 = length(p1 - p0);
+ float l1 = length(p2 - p1);
+ float l2 = length(p0 - p2);
+
+ Vector3 m0 = (p0 + p1) * l0 / (l0 + l1 + l2);
+ Vector3 m1 = (p1 + p2) * l1 / (l0 + l1 + l2);
+ Vector3 m2 = (p2 + p0) * l2 / (l0 + l1 + l2);
+
+ return m0 + m1 + m2;
+ }
+
+} // namespace
+
+void AtlasBuilder::updateProxy(ChartBuildData * chart)
+{
+ //#pragma message(NV_FILE_LINE "TODO: Use best fit plane instead of average normal.")
+
+ chart->planeNormal = normalizeSafe(chart->normalSum, Vector3(0), 0.0f);
+ chart->centroid = chart->centroidSum / float(chart->faces.count());
+
+ //#pragma message(NV_FILE_LINE "TODO: Experiment with conic fitting.")
+
+ // F = (Nc*Nt - cos Oc)^2 = (x*Nt_x + y*Nt_y + z*Nt_z - cos w)^2
+ // dF/dx = 2 * x * (x*Nt_x + y*Nt_y + z*Nt_z - cos w)
+ // dF/dy = 2 * y * (x*Nt_x + y*Nt_y + z*Nt_z - cos w)
+ // dF/dz = 2 * z * (x*Nt_x + y*Nt_y + z*Nt_z - cos w)
+ // dF/dw = 2 * sin w * (x*Nt_x + y*Nt_y + z*Nt_z - cos w)
+
+ // JacobianMatrix({
+ // 2 * x * (x*Nt_x + y*Nt_y + z*Nt_z - Cos(w)),
+ // 2 * y * (x*Nt_x + y*Nt_y + z*Nt_z - Cos(w)),
+ // 2 * z * (x*Nt_x + y*Nt_y + z*Nt_z - Cos(w)),
+ // 2 * Sin(w) * (x*Nt_x + y*Nt_y + z*Nt_z - Cos(w))}, {x,y,z,w})
+
+ // H[0,0] = 2 * x * Nt_x + 2 * (x*Nt_x + y*Nt_y + z*Nt_z - cos(w));
+ // H[0,1] = 2 * x * Nt_y;
+ // H[0,2] = 2 * x * Nt_z;
+ // H[0,3] = 2 * x * sin(w);
+
+ // H[1,0] = 2 * y * Nt_x;
+ // H[1,1] = 2 * y * Nt_y + 2 * (x*Nt_x + y*Nt_y + z*Nt_z - cos(w));
+ // H[1,2] = 2 * y * Nt_z;
+ // H[1,3] = 2 * y * sin(w);
+
+ // H[2,0] = 2 * z * Nt_x;
+ // H[2,1] = 2 * z * Nt_y;
+ // H[2,2] = 2 * z * Nt_z + 2 * (x*Nt_x + y*Nt_y + z*Nt_z - cos(w));
+ // H[2,3] = 2 * z * sin(w);
+
+ // H[3,0] = 2 * sin(w) * Nt_x;
+ // H[3,1] = 2 * sin(w) * Nt_y;
+ // H[3,2] = 2 * sin(w) * Nt_z;
+ // H[3,3] = 2 * sin(w) * sin(w) + 2 * cos(w) * (x*Nt_x + y*Nt_y + z*Nt_z - cos(w));
+
+ // @@ Cone fitting might be quite slow.
+
+ /*ConeFitting coneFitting(mesh, 0.1f, 0.001f, 0.001f);
+
+ Vector4 start = Vector4(chart->coneAxis, chart->coneAngle);
+ Vector4 solution = coneFitting.solve(chart, start);
+
+ chart->coneAxis = solution.xyz();
+ chart->coneAngle = solution.w;*/
+}
+
+
+
+bool AtlasBuilder::relocateSeeds()
+{
+ bool anySeedChanged = false;
+
+ const uint chartCount = chartArray.count();
+ for (uint i = 0; i < chartCount; i++)
+ {
+ if (relocateSeed(chartArray[i]))
+ {
+ anySeedChanged = true;
+ }
+ }
+
+ return anySeedChanged;
+}
+
+
+bool AtlasBuilder::relocateSeed(ChartBuildData * chart)
+{
+ Vector3 centroid = computeChartCentroid(chart);
+
+ const uint N = 10; // @@ Hardcoded to 10?
+ PriorityQueue bestTriangles(N);
+
+ // Find the first N triangles that fit the proxy best.
+ const uint faceCount = chart->faces.count();
+ for (uint i = 0; i < faceCount; i++)
+ {
+ float priority = evaluateProxyFitMetric(chart, chart->faces[i]);
+ bestTriangles.push(priority, chart->faces[i]);
+ }
+
+ // Of those, choose the most central triangle.
+ uint mostCentral;
+ float maxDistance = -1;
+
+ const uint bestCount = bestTriangles.count();
+ for (uint i = 0; i < bestCount; i++)
+ {
+ const HalfEdge::Face * face = mesh->faceAt(bestTriangles.pairs[i].face);
+ Vector3 faceCentroid = triangleCenter(face);
+
+ float distance = length(centroid - faceCentroid);
+
+ /*#pragma message(NV_FILE_LINE "TODO: Implement evaluateDistanceToBoundary.")
+ float distance = evaluateDistanceToBoundary(chart, bestTriangles.pairs[i].face);*/
+
+ if (distance > maxDistance)
+ {
+ maxDistance = distance;
+ mostCentral = bestTriangles.pairs[i].face;
+ }
+ }
+ nvDebugCheck(maxDistance >= 0);
+
+ // In order to prevent k-means cyles we record all the previously chosen seeds.
+ uint index;
+ if (chart->seeds.find(mostCentral, &index))
+ {
+ // Move new seed to the end of the seed array.
+ uint last = chart->seeds.count() - 1;
+ swap(chart->seeds[index], chart->seeds[last]);
+ return false;
+ }
+ else
+ {
+ // Append new seed.
+ chart->seeds.append(mostCentral);
+ return true;
+ }
+}
+
+void AtlasBuilder::removeCandidate(uint f)
+{
+ int c = faceCandidateArray[f];
+ if (c != -1) {
+ faceCandidateArray[f] = -1;
+
+ if (c == candidateArray.count() - 1) {
+ candidateArray.popBack();
+ }
+ else {
+ candidateArray.replaceWithLast(c);
+ faceCandidateArray[candidateArray[c].face] = c;
+ }
+ }
+}
+
+void AtlasBuilder::updateCandidate(ChartBuildData * chart, uint f, float metric)
+{
+ if (faceCandidateArray[f] == -1) {
+ const uint index = candidateArray.count();
+ faceCandidateArray[f] = index;
+ candidateArray.resize(index + 1);
+ candidateArray[index].face = f;
+ candidateArray[index].chart = chart;
+ candidateArray[index].metric = metric;
+ }
+ else {
+ int c = faceCandidateArray[f];
+ nvDebugCheck(c != -1);
+
+ Candidate & candidate = candidateArray[c];
+ nvDebugCheck(candidate.face == f);
+
+ if (metric < candidate.metric || chart == candidate.chart) {
+ candidate.metric = metric;
+ candidate.chart = chart;
+ }
+ }
+
+}
+
+
+void AtlasBuilder::updatePriorities(ChartBuildData * chart)
+{
+ // Re-evaluate candidate priorities.
+ uint candidateCount = chart->candidates.count();
+ for (uint i = 0; i < candidateCount; i++)
+ {
+ chart->candidates.pairs[i].priority = evaluatePriority(chart, chart->candidates.pairs[i].face);
+
+ if (faceChartArray[chart->candidates.pairs[i].face] == -1)
+ {
+ updateCandidate(chart, chart->candidates.pairs[i].face, chart->candidates.pairs[i].priority);
+ }
+ }
+
+ // Sort candidates.
+ chart->candidates.sort();
+}
+
+
+// Evaluate combined metric.
+float AtlasBuilder::evaluatePriority(ChartBuildData * chart, uint face)
+{
+ // Estimate boundary length and area:
+ float newBoundaryLength = evaluateBoundaryLength(chart, face);
+ float newChartArea = evaluateChartArea(chart, face);
+
+ float F = evaluateProxyFitMetric(chart, face);
+ float C = evaluateRoundnessMetric(chart, face, newBoundaryLength, newChartArea);
+ float P = evaluateStraightnessMetric(chart, face);
+
+ // Penalize faces that cross seams, reward faces that close seams or reach boundaries.
+ float N = evaluateNormalSeamMetric(chart, face);
+ float T = evaluateTextureSeamMetric(chart, face);
+
+ //float R = evaluateCompletenessMetric(chart, face);
+
+ //float D = evaluateDihedralAngleMetric(chart, face);
+ // @@ Add a metric based on local dihedral angle.
+
+ // @@ Tweaking the normal and texture seam metrics.
+ // - Cause more impedance. Never cross 90 degree edges.
+ // -
+
+ float cost = float(
+ settings.proxyFitMetricWeight * F +
+ settings.roundnessMetricWeight * C +
+ settings.straightnessMetricWeight * P +
+ settings.normalSeamMetricWeight * N +
+ settings.textureSeamMetricWeight * T);
+
+ /*cost = settings.proxyFitMetricWeight * powf(F, settings.proxyFitMetricExponent);
+ cost = max(cost, settings.roundnessMetricWeight * powf(C, settings.roundnessMetricExponent));
+ cost = max(cost, settings.straightnessMetricWeight * pow(P, settings.straightnessMetricExponent));
+ cost = max(cost, settings.normalSeamMetricWeight * N);
+ cost = max(cost, settings.textureSeamMetricWeight * T);*/
+
+ // Enforce limits strictly:
+ if (newChartArea > settings.maxChartArea) cost = FLT_MAX;
+ if (newBoundaryLength > settings.maxBoundaryLength) cost = FLT_MAX;
+
+ // Make sure normal seams are fully respected:
+ if (settings.normalSeamMetricWeight >= 1000 && N != 0) cost = FLT_MAX;
+
+ nvCheck(isFinite(cost));
+ return cost;
+}
+
+
+// Returns a value in [0-1].
+float AtlasBuilder::evaluateProxyFitMetric(ChartBuildData * chart, uint f)
+{
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ Vector3 faceNormal = triangleNormal(face);
+ //return square(dot(chart->coneAxis, faceNormal) - cosf(chart->coneAngle));
+
+ // Use plane fitting metric for now:
+ //return square(1 - dot(faceNormal, chart->planeNormal)); // @@ normal deviations should be weighted by face area
+ return 1 - dot(faceNormal, chart->planeNormal); // @@ normal deviations should be weighted by face area
+
+ // Find distance to chart.
+ /*Vector3 faceCentroid = face->centroid();
+
+ float dist = 0;
+ int count = 0;
+
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+
+ if (!edge->isBoundary()) {
+ const HalfEdge::Face * neighborFace = edge->pair()->face();
+ if (faceChartArray[neighborFace->id()] == chart->id) {
+ dist += length(neighborFace->centroid() - faceCentroid);
+ count++;
+ }
+ }
+ }
+
+ dist /= (count * count);
+
+ return (1 - dot(faceNormal, chart->planeNormal)) * dist;*/
+
+ //return (1 - dot(faceNormal, chart->planeNormal));
+}
+
+float AtlasBuilder::evaluateDistanceToBoundary(ChartBuildData * chart, uint face)
+{
+//#pragma message(NV_FILE_LINE "TODO: Evaluate distance to boundary metric.")
+
+ // @@ This is needed for the seed relocation code.
+ // @@ This could provide a better roundness metric.
+
+ return 0.0f;
+}
+
+float AtlasBuilder::evaluateDistanceToSeed(ChartBuildData * chart, uint f)
+{
+ //const uint seed = chart->seeds.back();
+ //const uint faceCount = mesh->faceCount();
+ //return shortestPaths[seed * faceCount + f];
+
+ const HalfEdge::Face * seed = mesh->faceAt(chart->seeds.back());
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ return length(triangleCenter(seed) - triangleCenter(face));
+}
+
+
+float AtlasBuilder::evaluateRoundnessMetric(ChartBuildData * chart, uint face, float newBoundaryLength, float newChartArea)
+{
+ // @@ D-charts use distance to seed.
+ // C(c,t) = pi * D(S_c,t)^2 / A_c
+ //return PI * square(evaluateDistanceToSeed(chart, face)) / chart->area;
+ //return PI * square(evaluateDistanceToSeed(chart, face)) / chart->area;
+ //return 2 * PI * evaluateDistanceToSeed(chart, face) / chart->boundaryLength;
+
+ // Garland's Hierarchical Face Clustering paper uses ratio between boundary and area, which is easier to compute and might work as well:
+ // roundness = D^2/4*pi*A -> circle = 1, non circle greater than 1
+
+ //return square(newBoundaryLength) / (newChartArea * 4 * PI);
+ float roundness = square(chart->boundaryLength) / chart->area;
+ float newRoundness = square(newBoundaryLength) / newChartArea;
+ if (newRoundness > roundness) {
+ return square(newBoundaryLength) / (newChartArea * 4 * PI);
+ }
+ else {
+ // Offer no impedance to faces that improve roundness.
+ return 0;
+ }
+
+ //return square(newBoundaryLength) / (4 * PI * newChartArea);
+ //return clamp(1 - (4 * PI * newChartArea) / square(newBoundaryLength), 0.0f, 1.0f);
+
+ // Use the ratio between the new roundness vs. the previous roundness.
+ // - If we use the absolute metric, when the initial face is very long, then it's hard to make any progress.
+ //return (square(newBoundaryLength) * chart->area) / (square(chart->boundaryLength) * newChartArea);
+ //return (4 * PI * newChartArea) / square(newBoundaryLength) - (4 * PI * chart->area) / square(chart->boundaryLength);
+
+ //if (square(newBoundaryLength) * chart->area) / (square(chart->boundaryLength) * newChartArea);
+
+}
+
+float AtlasBuilder::evaluateStraightnessMetric(ChartBuildData * chart, uint f)
+{
+ float l_out = 0.0f;
+ float l_in = 0.0f;
+
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+
+ //float l = edge->length();
+ float l = edgeLengths[edge->id/2];
+
+ if (edge->isBoundary())
+ {
+ l_out += l;
+ }
+ else
+ {
+ uint neighborFaceId = edge->pair->face->id;
+ if (faceChartArray[neighborFaceId] != chart->id) {
+ l_out += l;
+ }
+ else {
+ l_in += l;
+ }
+ }
+ }
+ nvDebugCheck(l_in != 0.0f); // Candidate face must be adjacent to chart. @@ This is not true if the input mesh has zero-length edges.
+
+ //return l_out / l_in;
+ float ratio = (l_out - l_in) / (l_out + l_in);
+ //if (ratio < 0) ratio *= 10; // Encourage closing gaps.
+ return min(ratio, 0.0f); // Only use the straightness metric to close gaps.
+ //return ratio;
+}
+
+
+float AtlasBuilder::evaluateNormalSeamMetric(ChartBuildData * chart, uint f)
+{
+ float seamFactor = 0.0f;
+ float totalLength = 0.0f;
+
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+
+ if (edge->isBoundary()) {
+ continue;
+ }
+
+ const uint neighborFaceId = edge->pair->face->id;
+ if (faceChartArray[neighborFaceId] != chart->id) {
+ continue;
+ }
+
+ //float l = edge->length();
+ float l = edgeLengths[edge->id/2];
+
+ totalLength += l;
+
+ if (!edge->isSeam()) {
+ continue;
+ }
+
+ // Make sure it's a normal seam.
+ if (isNormalSeam(edge))
+ {
+ float d0 = clamp(dot(edge->vertex->nor, edge->pair->next->vertex->nor), 0.0f, 1.0f);
+ float d1 = clamp(dot(edge->next->vertex->nor, edge->pair->vertex->nor), 0.0f, 1.0f);
+ //float a0 = clamp(acosf(d0) / (PI/2), 0.0f, 1.0f);
+ //float a1 = clamp(acosf(d1) / (PI/2), 0.0f, 1.0f);
+ //l *= (a0 + a1) * 0.5f;
+
+ l *= 1 - (d0 + d1) * 0.5f;
+
+ seamFactor += l;
+ }
+ }
+
+ if (seamFactor == 0) return 0.0f;
+ return seamFactor / totalLength;
+}
+
+
+float AtlasBuilder::evaluateTextureSeamMetric(ChartBuildData * chart, uint f)
+{
+ float seamLength = 0.0f;
+ //float newSeamLength = 0.0f;
+ //float oldSeamLength = 0.0f;
+ float totalLength = 0.0f;
+
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+
+ /*float l = edge->length();
+ totalLength += l;
+
+ if (edge->isBoundary() || !edge->isSeam()) {
+ continue;
+ }
+
+ // Make sure it's a texture seam.
+ if (isTextureSeam(edge))
+ {
+ uint neighborFaceId = edge->pair()->face()->id();
+ if (faceChartArray[neighborFaceId] != chart->id) {
+ newSeamLength += l;
+ }
+ else {
+ oldSeamLength += l;
+ }
+ }*/
+
+ if (edge->isBoundary()) {
+ continue;
+ }
+
+ const uint neighborFaceId = edge->pair->face->id;
+ if (faceChartArray[neighborFaceId] != chart->id) {
+ continue;
+ }
+
+ //float l = edge->length();
+ float l = edgeLengths[edge->id/2];
+ totalLength += l;
+
+ if (!edge->isSeam()) {
+ continue;
+ }
+
+ // Make sure it's a texture seam.
+ if (isTextureSeam(edge))
+ {
+ seamLength += l;
+ }
+ }
+
+ if (seamLength == 0.0f) {
+ return 0.0f; // Avoid division by zero.
+ }
+
+ return seamLength / totalLength;
+}
+
+
+float AtlasBuilder::evaluateSeamMetric(ChartBuildData * chart, uint f)
+{
+ float newSeamLength = 0.0f;
+ float oldSeamLength = 0.0f;
+ float totalLength = 0.0f;
+
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+
+ //float l = edge->length();
+ float l = edgeLengths[edge->id/2];
+
+ if (edge->isBoundary())
+ {
+ newSeamLength += l;
+ }
+ else
+ {
+ if (edge->isSeam())
+ {
+ uint neighborFaceId = edge->pair->face->id;
+ if (faceChartArray[neighborFaceId] != chart->id) {
+ newSeamLength += l;
+ }
+ else {
+ oldSeamLength += l;
+ }
+ }
+ }
+
+ totalLength += l;
+ }
+
+ return (newSeamLength - oldSeamLength) / totalLength;
+}
+
+
+float AtlasBuilder::evaluateChartArea(ChartBuildData * chart, uint f)
+{
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ //return chart->area + face->area();
+ return chart->area + faceAreas[face->id];
+}
+
+
+float AtlasBuilder::evaluateBoundaryLength(ChartBuildData * chart, uint f)
+{
+ float boundaryLength = chart->boundaryLength;
+
+ // Add new edges, subtract edges shared with the chart.
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+ //float edgeLength = edge->length();
+ float edgeLength = edgeLengths[edge->id/2];
+
+ if (edge->isBoundary())
+ {
+ boundaryLength += edgeLength;
+ }
+ else
+ {
+ uint neighborFaceId = edge->pair->face->id;
+ if (faceChartArray[neighborFaceId] != chart->id) {
+ boundaryLength += edgeLength;
+ }
+ else {
+ boundaryLength -= edgeLength;
+ }
+ }
+ }
+ //nvDebugCheck(boundaryLength >= 0);
+
+ return max(0.0f, boundaryLength); // @@ Hack!
+}
+
+Vector3 AtlasBuilder::evaluateChartNormalSum(ChartBuildData * chart, uint f)
+{
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ return chart->normalSum + triangleNormalAreaScaled(face);
+}
+
+Vector3 AtlasBuilder::evaluateChartCentroidSum(ChartBuildData * chart, uint f)
+{
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ return chart->centroidSum + face->centroid();
+}
+
+
+Vector3 AtlasBuilder::computeChartCentroid(const ChartBuildData * chart)
+{
+ Vector3 centroid(0);
+
+ const uint faceCount = chart->faces.count();
+ for (uint i = 0; i < faceCount; i++)
+ {
+ const HalfEdge::Face * face = mesh->faceAt(chart->faces[i]);
+ centroid += triangleCenter(face);
+ }
+
+ return centroid / float(faceCount);
+}
+
+
+void AtlasBuilder::fillHoles(float threshold)
+{
+ while (facesLeft > 0)
+ {
+ createRandomChart(threshold);
+ }
+}
+
+
+void AtlasBuilder::mergeChart(ChartBuildData * owner, ChartBuildData * chart, float sharedBoundaryLength)
+{
+ const uint faceCount = chart->faces.count();
+ for (uint i = 0; i < faceCount; i++)
+ {
+ uint f = chart->faces[i];
+
+ nvDebugCheck(faceChartArray[f] == chart->id);
+ faceChartArray[f] = owner->id;
+
+ owner->faces.append(f);
+ }
+
+ // Update adjacencies?
+
+ owner->area += chart->area;
+ owner->boundaryLength += chart->boundaryLength - sharedBoundaryLength;
+
+ owner->normalSum += chart->normalSum;
+ owner->centroidSum += chart->centroidSum;
+
+ updateProxy(owner);
+}
+
+void AtlasBuilder::mergeCharts()
+{
+ Array<float> sharedBoundaryLengths;
+
+ const uint chartCount = chartArray.count();
+ for (int c = chartCount-1; c >= 0; c--)
+ {
+ sharedBoundaryLengths.clear();
+ sharedBoundaryLengths.resize(chartCount, 0.0f);
+
+ ChartBuildData * chart = chartArray[c];
+
+ float externalBoundary = 0.0f;
+
+ const uint faceCount = chart->faces.count();
+ for (uint i = 0; i < faceCount; i++)
+ {
+ uint f = chart->faces[i];
+ const HalfEdge::Face * face = mesh->faceAt(f);
+
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+
+ //float l = edge->length();
+ float l = edgeLengths[edge->id/2];
+
+ if (edge->isBoundary()) {
+ externalBoundary += l;
+ }
+ else {
+ uint neighborFace = edge->pair->face->id;
+ uint neighborChart = faceChartArray[neighborFace];
+
+ if (neighborChart != c) {
+ if ((edge->isSeam() && (isNormalSeam(edge) || isTextureSeam(edge))) || neighborChart == -2) {
+ externalBoundary += l;
+ }
+ else {
+ sharedBoundaryLengths[neighborChart] += l;
+ }
+ }
+ }
+ }
+ }
+
+ for (int cc = chartCount-1; cc >= 0; cc--)
+ {
+ if (cc == c)
+ continue;
+
+ ChartBuildData * chart2 = chartArray[cc];
+ if (chart2 == NULL)
+ continue;
+
+ if (sharedBoundaryLengths[cc] > 0.8 * max(0.0f, chart->boundaryLength - externalBoundary)) {
+
+ // Try to avoid degenerate configurations.
+ if (chart2->boundaryLength > sharedBoundaryLengths[cc])
+ {
+ if (dot(chart2->planeNormal, chart->planeNormal) > -0.25) {
+ mergeChart(chart2, chart, sharedBoundaryLengths[cc]);
+ delete chart;
+ chartArray[c] = NULL;
+ break;
+ }
+ }
+ }
+
+ if (sharedBoundaryLengths[cc] > 0.20 * max(0.0f, chart->boundaryLength - externalBoundary)) {
+
+ // Compare proxies.
+ if (dot(chart2->planeNormal, chart->planeNormal) > 0) {
+ mergeChart(chart2, chart, sharedBoundaryLengths[cc]);
+ delete chart;
+ chartArray[c] = NULL;
+ break;
+ }
+ }
+ }
+ }
+
+ // Remove deleted charts.
+ for (int c = 0; c < I32(chartArray.count()); /*do not increment if removed*/)
+ {
+ if (chartArray[c] == NULL) {
+ chartArray.removeAt(c);
+
+ // Update faceChartArray.
+ const uint faceCount = faceChartArray.count();
+ for (uint i = 0; i < faceCount; i++) {
+ nvDebugCheck (faceChartArray[i] != -1);
+ nvDebugCheck (faceChartArray[i] != c);
+ nvDebugCheck (faceChartArray[i] <= I32(chartArray.count()));
+
+ if (faceChartArray[i] > c) {
+ faceChartArray[i]--;
+ }
+ }
+ }
+ else {
+ chartArray[c]->id = c;
+ c++;
+ }
+ }
+}
+
+
+
+const Array<uint> & AtlasBuilder::chartFaces(uint i) const
+{
+ return chartArray[i]->faces;
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/param/AtlasBuilder.h b/thirdparty/thekla_atlas/nvmesh/param/AtlasBuilder.h
new file mode 100644
index 0000000000..f25c724f7e
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/AtlasBuilder.h
@@ -0,0 +1,111 @@
+// This code is in the public domain -- castano@gmail.com
+
+#pragma once
+#ifndef NV_MESH_ATLASBUILDER_H
+#define NV_MESH_ATLASBUILDER_H
+
+#include "Atlas.h"
+
+#include "nvmath/Vector.h"
+#include "nvmath/Random.h"
+#include "nvmesh/nvmesh.h"
+
+#include "nvcore/Array.h"
+#include "nvcore/BitArray.h"
+
+
+
+namespace nv
+{
+ namespace HalfEdge { class Mesh; }
+
+ struct ChartBuildData;
+
+ struct AtlasBuilder
+ {
+ AtlasBuilder(const HalfEdge::Mesh * m);
+ ~AtlasBuilder();
+
+ void markUnchartedFaces(const Array<uint> & unchartedFaces);
+
+ void computeShortestPaths();
+
+ void placeSeeds(float threshold, uint maxSeedCount);
+ void createRandomChart(float threshold);
+
+ void addFaceToChart(ChartBuildData * chart, uint f, bool recomputeProxy=false);
+
+ bool growCharts(float threshold, uint faceCount);
+ bool growChart(ChartBuildData * chart, float threshold, uint faceCount);
+
+ void resetCharts();
+
+ void updateCandidates(ChartBuildData * chart, uint face);
+
+ void updateProxies();
+ void updateProxy(ChartBuildData * chart);
+
+ bool relocateSeeds();
+ bool relocateSeed(ChartBuildData * chart);
+
+ void updatePriorities(ChartBuildData * chart);
+
+ float evaluatePriority(ChartBuildData * chart, uint face);
+ float evaluateProxyFitMetric(ChartBuildData * chart, uint face);
+ float evaluateDistanceToBoundary(ChartBuildData * chart, uint face);
+ float evaluateDistanceToSeed(ChartBuildData * chart, uint face);
+ float evaluateRoundnessMetric(ChartBuildData * chart, uint face, float newBoundaryLength, float newChartArea);
+ float evaluateStraightnessMetric(ChartBuildData * chart, uint face);
+
+ float evaluateNormalSeamMetric(ChartBuildData * chart, uint f);
+ float evaluateTextureSeamMetric(ChartBuildData * chart, uint f);
+ float evaluateSeamMetric(ChartBuildData * chart, uint f);
+
+ float evaluateChartArea(ChartBuildData * chart, uint f);
+ float evaluateBoundaryLength(ChartBuildData * chart, uint f);
+ Vector3 evaluateChartNormalSum(ChartBuildData * chart, uint f);
+ Vector3 evaluateChartCentroidSum(ChartBuildData * chart, uint f);
+
+ Vector3 computeChartCentroid(const ChartBuildData * chart);
+
+
+ void fillHoles(float threshold);
+ void mergeCharts();
+
+ // @@ Cleanup.
+ struct Candidate {
+ uint face;
+ ChartBuildData * chart;
+ float metric;
+ };
+
+ const Candidate & getBestCandidate() const;
+ void removeCandidate(uint f);
+ void updateCandidate(ChartBuildData * chart, uint f, float metric);
+
+ void mergeChart(ChartBuildData * owner, ChartBuildData * chart, float sharedBoundaryLength);
+
+
+ uint chartCount() const { return chartArray.count(); }
+ const Array<uint> & chartFaces(uint i) const;
+
+ const HalfEdge::Mesh * mesh;
+ uint facesLeft;
+ Array<int> faceChartArray;
+ Array<ChartBuildData *> chartArray;
+ Array<float> shortestPaths;
+
+ Array<float> edgeLengths;
+ Array<float> faceAreas;
+
+ Array<Candidate> candidateArray; //
+ Array<uint> faceCandidateArray; // Map face index to candidate index.
+
+ MTRand rand;
+
+ SegmentationSettings settings;
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_ATLASBUILDER_H
diff --git a/thirdparty/thekla_atlas/nvmesh/param/AtlasPacker.cpp b/thirdparty/thekla_atlas/nvmesh/param/AtlasPacker.cpp
new file mode 100644
index 0000000000..5ce452cb9e
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/AtlasPacker.cpp
@@ -0,0 +1,1387 @@
+// This code is in the public domain -- castano@gmail.com
+
+#include "nvmesh.h" // pch
+
+#include "AtlasPacker.h"
+#include "nvmesh/halfedge/Vertex.h"
+#include "nvmesh/halfedge/Face.h"
+#include "nvmesh/param/Atlas.h"
+#include "nvmesh/param/Util.h"
+#include "nvmesh/raster/Raster.h"
+
+#include "nvmath/Vector.inl"
+#include "nvmath/ConvexHull.h"
+#include "nvmath/Color.h"
+#include "nvmath/ftoi.h"
+
+#include "nvcore/StrLib.h" // debug
+#include "nvcore/StdStream.h" // fileOpen
+
+#include <float.h> // FLT_MAX
+#include <limits.h> // UINT_MAX
+
+using namespace nv;
+
+#define DEBUG_OUTPUT 0
+
+#if DEBUG_OUTPUT
+
+#include "nvimage/ImageIO.h"
+
+namespace
+{
+ const uint TGA_TYPE_GREY = 3;
+ const uint TGA_TYPE_RGB = 2;
+ const uint TGA_ORIGIN_UPPER = 0x20;
+
+#pragma pack(push, 1)
+ struct TgaHeader {
+ uint8 id_length;
+ uint8 colormap_type;
+ uint8 image_type;
+ uint16 colormap_index;
+ uint16 colormap_length;
+ uint8 colormap_size;
+ uint16 x_origin;
+ uint16 y_origin;
+ uint16 width;
+ uint16 height;
+ uint8 pixel_size;
+ uint8 flags;
+
+ enum { Size = 18 }; //const static int SIZE = 18;
+ };
+#pragma pack(pop)
+
+ static void outputDebugBitmap(const char * fileName, const BitMap & bitmap, int w, int h)
+ {
+ FILE * fp = fileOpen(fileName, "wb");
+ if (fp == NULL) return;
+
+ nvStaticCheck(sizeof(TgaHeader) == TgaHeader::Size);
+ TgaHeader tga;
+ tga.id_length = 0;
+ tga.colormap_type = 0;
+ tga.image_type = TGA_TYPE_GREY;
+
+ tga.colormap_index = 0;
+ tga.colormap_length = 0;
+ tga.colormap_size = 0;
+
+ tga.x_origin = 0;
+ tga.y_origin = 0;
+ tga.width = w;
+ tga.height = h;
+ tga.pixel_size = 8;
+ tga.flags = TGA_ORIGIN_UPPER;
+
+ fwrite(&tga, sizeof(TgaHeader), 1, fp);
+
+ for (int j = 0; j < h; j++) {
+ for (int i = 0; i < w; i++) {
+ uint8 color = bitmap.bitAt(i, j) ? 0xFF : 0x0;
+ fwrite(&color, 1, 1, fp);
+ }
+ }
+
+ fclose(fp);
+ }
+
+ static void outputDebugImage(const char * fileName, const Image & bitmap, int w, int h)
+ {
+ FILE * fp = fileOpen(fileName, "wb");
+ if (fp == NULL) return;
+
+ nvStaticCheck(sizeof(TgaHeader) == TgaHeader::Size);
+ TgaHeader tga;
+ tga.id_length = 0;
+ tga.colormap_type = 0;
+ tga.image_type = TGA_TYPE_RGB;
+
+ tga.colormap_index = 0;
+ tga.colormap_length = 0;
+ tga.colormap_size = 0;
+
+ tga.x_origin = 0;
+ tga.y_origin = 0;
+ tga.width = w;
+ tga.height = h;
+ tga.pixel_size = 24;
+ tga.flags = TGA_ORIGIN_UPPER;
+
+ fwrite(&tga, sizeof(TgaHeader), 1, fp);
+
+ for (int j = 0; j < h; j++) {
+ for (int i = 0; i < w; i++) {
+ Color32 color = bitmap.pixel(i, j);
+ fwrite(&color.r, 1, 1, fp);
+ fwrite(&color.g, 1, 1, fp);
+ fwrite(&color.b, 1, 1, fp);
+ }
+ }
+
+ fclose(fp);
+ }
+}
+
+#endif // DEBUG_OUTPUT
+
+inline int align(int x, int a) {
+ //return a * ((x + a - 1) / a);
+ //return (x + a - 1) & -a;
+ return (x + a - 1) & ~(a - 1);
+}
+
+inline bool isAligned(int x, int a) {
+ return (x & (a - 1)) == 0;
+}
+
+
+
+AtlasPacker::AtlasPacker(Atlas * atlas) : m_atlas(atlas), m_bitmap(256, 256)
+{
+ m_width = 0;
+ m_height = 0;
+
+ m_debug_bitmap.allocate(256, 256);
+ m_debug_bitmap.fill(Color32(0,0,0,0));
+}
+
+AtlasPacker::~AtlasPacker()
+{
+}
+
+// This should compute convex hull and use rotating calipers to find the best box. Currently it uses a brute force method.
+static bool computeBoundingBox(Chart * chart, Vector2 * majorAxis, Vector2 * minorAxis, Vector2 * minCorner, Vector2 * maxCorner)
+{
+ // Compute list of boundary points.
+ Array<Vector2> points(16);
+
+ HalfEdge::Mesh * mesh = chart->chartMesh();
+ const uint vertexCount = mesh->vertexCount();
+
+ for (uint i = 0; i < vertexCount; i++) {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(i);
+ if (vertex->isBoundary()) {
+ points.append(vertex->tex);
+ }
+ }
+
+ // This is not valid anymore. The chart mesh may have multiple boundaries!
+ /*const HalfEdge::Vertex * vertex = findBoundaryVertex(chart->chartMesh());
+
+ // Traverse boundary.
+ const HalfEdge::Edge * const firstEdge = vertex->edge();
+ const HalfEdge::Edge * edge = firstEdge;
+ do {
+ vertex = edge->vertex();
+
+ nvDebugCheck (vertex->isBoundary());
+ points.append(vertex->tex);
+
+ edge = edge->next();
+ } while (edge != firstEdge);*/
+
+#if 1
+ Array<Vector2> hull;
+ if (points.size()==0) {
+ return false;
+ }
+
+ convexHull(points, hull, 0.00001f);
+
+ // @@ Ideally I should use rotating calipers to find the best box. Using brute force for now.
+
+ float best_area = FLT_MAX;
+ Vector2 best_min;
+ Vector2 best_max;
+ Vector2 best_axis;
+
+ const uint hullCount = hull.count();
+ for (uint i = 0, j = hullCount-1; i < hullCount; j = i, i++) {
+
+ if (equal(hull[i], hull[j])) {
+ continue;
+ }
+
+ Vector2 axis = normalize(hull[i] - hull[j], 0.0f);
+ nvDebugCheck(isFinite(axis));
+
+ // Compute bounding box.
+ Vector2 box_min(FLT_MAX, FLT_MAX);
+ Vector2 box_max(-FLT_MAX, -FLT_MAX);
+
+ for (uint v = 0; v < hullCount; v++) {
+
+ Vector2 point = hull[v];
+
+ float x = dot(axis, point);
+ if (x < box_min.x) box_min.x = x;
+ if (x > box_max.x) box_max.x = x;
+
+ float y = dot(Vector2(-axis.y, axis.x), point);
+ if (y < box_min.y) box_min.y = y;
+ if (y > box_max.y) box_max.y = y;
+ }
+
+ // Compute box area.
+ float area = (box_max.x - box_min.x) * (box_max.y - box_min.y);
+
+ if (area < best_area) {
+ best_area = area;
+ best_min = box_min;
+ best_max = box_max;
+ best_axis = axis;
+ }
+ }
+
+ // Make sure the box contains all the input points since the convex hull is not 100% accurate.
+ /*const uint pointCount = points.count();
+ for (uint v = 0; v < pointCount; v++) {
+
+ Vector2 point = points[v];
+
+ float x = dot(best_axis, point);
+ if (x < best_min.x) best_min.x = x;
+
+ float y = dot(Vector2(-best_axis.y, best_axis.x), point);
+ if (y < best_min.y) best_min.y = y;
+ }*/
+
+ // Consider all points, not only boundary points, in case the input chart is malformed.
+ for (uint i = 0; i < vertexCount; i++) {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(i);
+ Vector2 point = vertex->tex;
+
+ float x = dot(best_axis, point);
+ if (x < best_min.x) best_min.x = x;
+ if (x > best_max.x) best_max.x = x;
+
+ float y = dot(Vector2(-best_axis.y, best_axis.x), point);
+ if (y < best_min.y) best_min.y = y;
+ if (y > best_max.y) best_max.y = y;
+ }
+
+ *majorAxis = best_axis;
+ *minorAxis = Vector2(-best_axis.y, best_axis.x);
+ *minCorner = best_min;
+ *maxCorner = best_max;
+
+#else
+ // Approximate implementation: try 16 different directions and keep the best.
+
+ const uint N = 16;
+ Vector2 axis[N];
+
+ float minAngle = 0;
+ float maxAngle = PI / 2;
+
+ int best;
+ Vector2 mins[N];
+ Vector2 maxs[N];
+
+ const int iterationCount = 1;
+ for (int j = 0; j < iterationCount; j++)
+ {
+ // Init predefined directions.
+ for (int i = 0; i < N; i++)
+ {
+ float angle = lerp(minAngle, maxAngle, float(i)/N);
+ axis[i].set(cosf(angle), sinf(angle));
+ }
+
+ // Compute box for each direction.
+ for (int i = 0; i < N; i++)
+ {
+ mins[i].set(FLT_MAX, FLT_MAX);
+ maxs[i].set(-FLT_MAX, -FLT_MAX);
+ }
+
+ for (uint p = 0; p < points.count(); p++)
+ {
+ Vector2 point = points[p];
+
+ for (int i = 0; i < N; i++)
+ {
+ float x = dot(axis[i], point);
+ if (x < mins[i].x) mins[i].x = x;
+ if (x > maxs[i].x) maxs[i].x = x;
+
+ float y = dot(Vector2(-axis[i].y, axis[i].x), point);
+ if (y < mins[i].y) mins[i].y = y;
+ if (y > maxs[i].y) maxs[i].y = y;
+ }
+ }
+
+ // Find box with minimum area.
+ best = -1;
+ int second_best = -1;
+ float best_area = FLT_MAX;
+ float second_best_area = FLT_MAX;
+
+ for (int i = 0; i < N; i++)
+ {
+ float area = (maxs[i].x - mins[i].x) * (maxs[i].y - mins[i].y);
+
+ if (area < best_area)
+ {
+ second_best_area = best_area;
+ second_best = best;
+
+ best_area = area;
+ best = i;
+ }
+ else if (area < second_best_area)
+ {
+ second_best_area = area;
+ second_best = i;
+ }
+ }
+ nvDebugCheck(best != -1);
+ nvDebugCheck(second_best != -1);
+ nvDebugCheck(best != second_best);
+
+ if (j != iterationCount-1)
+ {
+ // Handle wrap-around during the first iteration.
+ if (j == 0) {
+ if (best == 0 && second_best == N-1) best = N;
+ if (best == N-1 && second_best == 0) second_best = N;
+ }
+
+ if (best < second_best) swap(best, second_best);
+
+ // Update angles.
+ float deltaAngle = (maxAngle - minAngle) / N;
+ maxAngle = minAngle + (best - 0.5f) * deltaAngle;
+ minAngle = minAngle + (second_best + 0.5f) * deltaAngle;
+ }
+ }
+
+ // Compute major and minor axis, and origin.
+ *majorAxis = axis[best];
+ *minorAxis = Vector2(-axis[best].y, axis[best].x);
+ *origin = mins[best];
+
+ // @@ If the parameterization is invalid, we could have an interior vertex outside the boundary.
+ // @@ In that case the returned bounding box would be incorrect. Compute updated bounds here.
+ /*for (uint p = 0; p < points.count(); p++)
+ {
+ Vector2 point = points[p];
+
+ for (int i = 0; i < N; i++)
+ {
+ float x = dot(*majorAxis, point);
+ float y = dot(*minorAxis, point);
+ }
+ }*/
+#endif
+
+ return true;
+}
+
+
+void AtlasPacker::packCharts(int quality, float texelsPerUnit, bool blockAligned, bool conservative)
+{
+ const uint chartCount = m_atlas->chartCount();
+ if (chartCount == 0) return;
+
+ Array<float> chartOrderArray;
+ chartOrderArray.resize(chartCount);
+
+ Array<Vector2> chartExtents;
+ chartExtents.resize(chartCount);
+
+ float meshArea = 0;
+ for (uint c = 0; c < chartCount; c++)
+ {
+ Chart * chart = m_atlas->chartAt(c);
+
+ if (!chart->isVertexMapped() && !chart->isDisk()) {
+ chartOrderArray[c] = 0;
+
+ // Skip non-disks.
+ continue;
+ }
+
+ Vector2 extents(0.0f);
+
+ if (chart->isVertexMapped()) {
+ // Let's assume vertex maps are arranged in a rectangle.
+ //HalfEdge::Mesh * mesh = chart->chartMesh();
+
+ // Arrange vertices in a rectangle.
+ extents.x = float(chart->vertexMapWidth);
+ extents.y = float(chart->vertexMapHeight);
+ }
+ else {
+ // Compute surface area to sort charts.
+ float chartArea = chart->computeSurfaceArea();
+ meshArea += chartArea;
+ //chartOrderArray[c] = chartArea;
+
+ // Compute chart scale
+ float parametricArea = fabs(chart->computeParametricArea()); // @@ There doesn't seem to be anything preventing parametric area to be negative.
+ if (parametricArea < NV_EPSILON) {
+ // When the parametric area is too small we use a rough approximation to prevent divisions by very small numbers.
+ Vector2 bounds = chart->computeParametricBounds();
+ parametricArea = bounds.x * bounds.y;
+ }
+ float scale = (chartArea / parametricArea) * texelsPerUnit;
+ if (parametricArea == 0) // < NV_EPSILON)
+ {
+ scale = 0;
+ }
+ nvCheck(isFinite(scale));
+
+ // Compute bounding box of chart.
+ Vector2 majorAxis, minorAxis, origin, end;
+ if (!computeBoundingBox(chart, &majorAxis, &minorAxis, &origin, &end)) {
+ m_atlas->setFailed();
+ return;
+ }
+
+ nvCheck(isFinite(majorAxis) && isFinite(minorAxis) && isFinite(origin));
+
+ // Sort charts by perimeter. @@ This is sometimes producing somewhat unexpected results. Is this right?
+ //chartOrderArray[c] = ((end.x - origin.x) + (end.y - origin.y)) * scale;
+
+ // Translate, rotate and scale vertices. Compute extents.
+ HalfEdge::Mesh * mesh = chart->chartMesh();
+ const uint vertexCount = mesh->vertexCount();
+ for (uint i = 0; i < vertexCount; i++)
+ {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(i);
+
+ //Vector2 t = vertex->tex - origin;
+ Vector2 tmp;
+ tmp.x = dot(vertex->tex, majorAxis);
+ tmp.y = dot(vertex->tex, minorAxis);
+ tmp -= origin;
+ tmp *= scale;
+ if (tmp.x < 0 || tmp.y < 0) {
+ nvDebug("tmp: %f %f\n", tmp.x, tmp.y);
+ nvDebug("scale: %f\n", scale);
+ nvDebug("origin: %f %f\n", origin.x, origin.y);
+ nvDebug("majorAxis: %f %f\n", majorAxis.x, majorAxis.y);
+ nvDebug("minorAxis: %f %f\n", minorAxis.x, minorAxis.y);
+ nvDebugBreak();
+ }
+ //nvCheck(tmp.x >= 0 && tmp.y >= 0);
+
+ vertex->tex = tmp;
+
+ nvCheck(isFinite(vertex->tex.x) && isFinite(vertex->tex.y));
+
+ extents = max(extents, tmp);
+ }
+ nvDebugCheck(extents.x >= 0 && extents.y >= 0);
+
+ // Limit chart size.
+ if (extents.x > 1024 || extents.y > 1024) {
+ float limit = max(extents.x, extents.y);
+
+ scale = 1024 / (limit + 1);
+
+ for (uint i = 0; i < vertexCount; i++)
+ {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(i);
+ vertex->tex *= scale;
+ }
+
+ extents *= scale;
+
+ nvDebugCheck(extents.x <= 1024 && extents.y <= 1024);
+ }
+
+
+ // Scale the charts to use the entire texel area available. So, if the width is 0.1 we could scale it to 1 without increasing the lightmap usage and making a better
+ // use of it. In many cases this also improves the look of the seams, since vertices on the chart boundaries have more chances of being aligned with the texel centers.
+
+ float scale_x = 1.0f;
+ float scale_y = 1.0f;
+
+ float divide_x = 1.0f;
+ float divide_y = 1.0f;
+
+ if (extents.x > 0) {
+ int cw = ftoi_ceil(extents.x);
+
+ if (blockAligned) {
+ // Align all chart extents to 4x4 blocks, but taking padding into account.
+ if (conservative) {
+ cw = align(cw + 2, 4) - 2;
+ }
+ else {
+ cw = align(cw + 1, 4) - 1;
+ }
+ }
+
+ scale_x = (float(cw) - NV_EPSILON);
+ divide_x = extents.x;
+ extents.x = float(cw);
+ }
+
+ if (extents.y > 0) {
+ int ch = ftoi_ceil(extents.y);
+
+ if (blockAligned) {
+ // Align all chart extents to 4x4 blocks, but taking padding into account.
+ if (conservative) {
+ ch = align(ch + 2, 4) - 2;
+ }
+ else {
+ ch = align(ch + 1, 4) - 1;
+ }
+ }
+
+ scale_y = (float(ch) - NV_EPSILON);
+ divide_y = extents.y;
+ extents.y = float(ch);
+ }
+
+ for (uint v = 0; v < vertexCount; v++) {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+
+ vertex->tex.x /= divide_x;
+ vertex->tex.y /= divide_y;
+ vertex->tex.x *= scale_x;
+ vertex->tex.y *= scale_y;
+
+ nvCheck(isFinite(vertex->tex.x) && isFinite(vertex->tex.y));
+ }
+ }
+
+ chartExtents[c] = extents;
+
+ // Sort charts by perimeter.
+ chartOrderArray[c] = extents.x + extents.y;
+ }
+
+ // @@ We can try to improve compression of small charts by sorting them by proximity like we do with vertex samples.
+ // @@ How to do that? One idea: compute chart centroid, insert into grid, compute morton index of the cell, sort based on morton index.
+ // @@ We would sort by morton index, first, then quantize the chart sizes, so that all small charts have the same size, and sort by size preserving the morton order.
+
+ //nvDebug("Sorting charts.\n");
+
+ // Sort charts by area.
+ m_radix.sort(chartOrderArray);
+ const uint32 * ranks = m_radix.ranks();
+
+ // Estimate size of the map based on the mesh surface area and given texel scale.
+ float texelCount = meshArea * square(texelsPerUnit) / 0.75f; // Assume 75% utilization.
+ if (texelCount < 1) texelCount = 1;
+ uint approximateExtent = nextPowerOfTwo(uint(sqrtf(texelCount)));
+
+ //nvDebug("Init bitmap.\n");
+
+ // @@ Pack all charts smaller than a texel into a compact rectangle.
+ // @@ Start considering only 1x1 charts. Extend to 1xn charts later.
+
+ /*for (uint i = 0; i < chartCount; i++)
+ {
+ uint c = ranks[chartCount - i - 1]; // largest chart first
+
+ Chart * chart = m_atlas->chartAt(c);
+
+ if (!chart->isDisk()) continue;
+
+ if (iceil(chartExtents[c].x) == 1 && iceil(chartExtents[c].x) == 1) {
+ // @@ Add to
+ }
+ }*/
+
+
+
+ // Init bit map.
+ m_bitmap.clearAll();
+ if (approximateExtent > m_bitmap.width()) {
+ m_bitmap.resize(approximateExtent, approximateExtent, false);
+ m_debug_bitmap.resize(approximateExtent, approximateExtent);
+ m_debug_bitmap.fill(Color32(0,0,0,0));
+ }
+
+
+ int w = 0;
+ int h = 0;
+
+#if 1
+ // Add sorted charts to bitmap.
+ for (uint i = 0; i < chartCount; i++)
+ {
+ uint c = ranks[chartCount - i - 1]; // largest chart first
+
+ Chart * chart = m_atlas->chartAt(c);
+
+ if (!chart->isVertexMapped() && !chart->isDisk()) continue;
+
+ //float scale_x = 1;
+ //float scale_y = 1;
+
+ BitMap chart_bitmap;
+
+ if (chart->isVertexMapped()) {
+ // Init all bits to 1.
+ chart_bitmap.resize(ftoi_ceil(chartExtents[c].x), ftoi_ceil(chartExtents[c].y), /*initValue=*/true);
+
+ // @@ Another alternative would be to try to map each vertex to a different texel trying to fill all the available unused texels.
+ }
+ else {
+ // @@ Add special cases for dot and line charts. @@ Lightmap rasterizer also needs to handle these special cases.
+ // @@ We could also have a special case for chart quads. If the quad surface <= 4 texels, align vertices with texel centers and do not add padding. May be very useful for foliage.
+
+ // @@ In general we could reduce the padding of all charts by one texel by using a rasterizer that takes into account the 2-texel footprint of the tent bilinear filter. For example,
+ // if we have a chart that is less than 1 texel wide currently we add one texel to the left and one texel to the right creating a 3-texel-wide bitmap. However, if we know that the
+ // chart is only 1 texel wide we could align it so that it only touches the footprint of two texels:
+
+ // | | <- Touches texels 0, 1 and 2.
+ // | | <- Only touches texels 0 and 1.
+ // \ \ / \ / /
+ // \ X X /
+ // \ / \ / \ /
+ // V V V
+ // 0 1 2
+
+ if (conservative) {
+ // Init all bits to 0.
+ chart_bitmap.resize(ftoi_ceil(chartExtents[c].x) + 2, ftoi_ceil(chartExtents[c].y) + 2, /*initValue=*/false); // + 2 to add padding on both sides.
+
+ // Rasterize chart and dilate.
+ drawChartBitmapDilate(chart, &chart_bitmap, /*padding=*/1);
+ }
+ else {
+ // Init all bits to 0.
+ chart_bitmap.resize(ftoi_ceil(chartExtents[c].x) + 1, ftoi_ceil(chartExtents[c].y) + 1, /*initValue=*/false); // Add half a texels on each side.
+
+ // Rasterize chart and dilate.
+ drawChartBitmap(chart, &chart_bitmap, Vector2(1), Vector2(0.5));
+ }
+ }
+
+ int best_x, best_y;
+ int best_cw, best_ch; // Includes padding now.
+ int best_r;
+ findChartLocation(quality, &chart_bitmap, chartExtents[c], w, h, &best_x, &best_y, &best_cw, &best_ch, &best_r);
+
+ /*if (w < best_x + best_cw || h < best_y + best_ch)
+ {
+ nvDebug("Resize extents to (%d, %d).\n", best_x + best_cw, best_y + best_ch);
+ }*/
+
+ // Update parametric extents.
+ w = max(w, best_x + best_cw);
+ h = max(h, best_y + best_ch);
+
+ w = align(w, 4);
+ h = align(h, 4);
+
+ // Resize bitmap if necessary.
+ if (uint(w) > m_bitmap.width() || uint(h) > m_bitmap.height())
+ {
+ //nvDebug("Resize bitmap (%d, %d).\n", nextPowerOfTwo(w), nextPowerOfTwo(h));
+ m_bitmap.resize(nextPowerOfTwo(U32(w)), nextPowerOfTwo(U32(h)), false);
+ m_debug_bitmap.resize(nextPowerOfTwo(U32(w)), nextPowerOfTwo(U32(h)));
+ }
+
+ //nvDebug("Add chart at (%d, %d).\n", best_x, best_y);
+
+ addChart(&chart_bitmap, w, h, best_x, best_y, best_r, /*debugOutput=*/NULL);
+
+ // IC: Output chart again to debug bitmap.
+ if (chart->isVertexMapped()) {
+ addChart(&chart_bitmap, w, h, best_x, best_y, best_r, &m_debug_bitmap);
+ }
+ else {
+ addChart(chart, w, h, best_x, best_y, best_r, &m_debug_bitmap);
+ }
+
+ //float best_angle = 2 * PI * best_r;
+
+ // Translate and rotate chart texture coordinates.
+ HalfEdge::Mesh * mesh = chart->chartMesh();
+ const uint vertexCount = mesh->vertexCount();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+
+ Vector2 t = vertex->tex;
+ if (best_r) swap(t.x, t.y);
+ //vertex->tex.x = best_x + t.x * cosf(best_angle) - t.y * sinf(best_angle);
+ //vertex->tex.y = best_y + t.x * sinf(best_angle) + t.y * cosf(best_angle);
+
+ vertex->tex.x = best_x + t.x + 0.5f;
+ vertex->tex.y = best_y + t.y + 0.5f;
+
+ nvCheck(vertex->tex.x >= 0 && vertex->tex.y >= 0);
+ nvCheck(isFinite(vertex->tex.x) && isFinite(vertex->tex.y));
+ }
+
+#if DEBUG_OUTPUT && 0
+ StringBuilder fileName;
+ fileName.format("debug_packer_%d.tga", i);
+ //outputDebugBitmap(fileName.str(), m_bitmap, w, h);
+ outputDebugImage(fileName.str(), m_debug_bitmap, w, h);
+#endif
+ }
+
+#else // 0
+
+ // Add sorted charts to bitmap.
+ for (uint i = 0; i < chartCount; i++)
+ {
+ uint c = ranks[chartCount - i - 1]; // largest chart first
+
+ Chart * chart = m_atlas->chartAt(c);
+
+ if (!chart->isDisk()) continue;
+
+ Vector2 scale(1, 1);
+
+#if 0 // old method.
+ //m_padding_x = 2*padding;
+ //m_padding_y = 2*padding;
+#else
+ //m_padding_x = 0; //padding;
+ //m_padding_y = 0; //padding;
+#endif
+
+ int bw = ftoi_ceil(chartExtents[c].x + 1);
+ int bh = ftoi_ceil(chartExtents[c].y + 1);
+
+ if (chartExtents[c].x < 1.0f) {
+ scale.x = 0.01f; // @@ Ideally we would like to scale it to 0, but then our rasterizer would not touch any pixels.
+ bw = 1;
+ }
+ if (chartExtents[c].y < 1.0f) {
+ scale.y = 0.01f;
+ bh = 1;
+ }
+
+ //BitMap chart_bitmap(iceil(chartExtents[c].x) + 1 + m_padding_x * 2, iceil(chartExtents[c].y) + 1 + m_padding_y * 2);
+ //BitMap chart_bitmap(ftoi_ceil(chartExtents[c].x/2)*2, ftoi_ceil(chartExtents[c].y/2)*2);
+ BitMap chart_bitmap(bw, bh);
+ chart_bitmap.clearAll();
+
+ Vector2 offset;
+ offset.x = 0; // (chart_bitmap.width() - chartExtents[c].x) * 0.5f;
+ offset.y = 0; // (chart_bitmap.height() - chartExtents[c].y) * 0.5f;
+
+ drawChartBitmap(chart, &chart_bitmap, scale, offset);
+
+ int best_x, best_y;
+ int best_cw, best_ch;
+ int best_r;
+ findChartLocation(quality, &chart_bitmap, chartExtents[c], w, h, &best_x, &best_y, &best_cw, &best_ch, &best_r);
+
+ /*if (w < best_x + best_cw || h < best_y + best_ch)
+ {
+ nvDebug("Resize extents to (%d, %d).\n", best_x + best_cw, best_y + best_ch);
+ }*/
+
+ // Update parametric extents.
+ w = max(w, best_x + best_cw);
+ h = max(h, best_y + best_ch);
+
+ // Resize bitmap if necessary.
+ if (uint(w) > m_bitmap.width() || uint(h) > m_bitmap.height())
+ {
+ //nvDebug("Resize bitmap (%d, %d).\n", nextPowerOfTwo(w), nextPowerOfTwo(h));
+ m_bitmap.resize(nextPowerOfTwo(w), nextPowerOfTwo(h), false);
+ m_debug_bitmap.resize(nextPowerOfTwo(w), nextPowerOfTwo(h));
+ }
+
+ //nvDebug("Add chart at (%d, %d).\n", best_x, best_y);
+
+#if 0 // old method.
+#if _DEBUG
+ checkCanAddChart(chart, w, h, best_x, best_y, best_r);
+#endif
+
+ // Add chart.
+ addChart(chart, w, h, best_x, best_y, best_r);
+#else
+ // Add chart reusing its bitmap.
+ addChart(&chart_bitmap, w, h, best_x, best_y, best_r);
+#endif
+
+ //float best_angle = 2 * PI * best_r;
+
+ // Translate and rotate chart texture coordinates.
+ HalfEdge::Mesh * mesh = chart->chartMesh();
+ const uint vertexCount = mesh->vertexCount();
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+
+ Vector2 t = vertex->tex * scale + offset;
+ if (best_r) swap(t.x, t.y);
+ //vertex->tex.x = best_x + t.x * cosf(best_angle) - t.y * sinf(best_angle);
+ //vertex->tex.y = best_y + t.x * sinf(best_angle) + t.y * cosf(best_angle);
+ vertex->tex.x = best_x + t.x + 0.5f;
+ vertex->tex.y = best_y + t.y + 0.5f;
+
+ nvCheck(vertex->tex.x >= 0 && vertex->tex.y >= 0);
+ }
+
+#if DEBUG_OUTPUT && 0
+ StringBuilder fileName;
+ fileName.format("debug_packer_%d.tga", i);
+ //outputDebugBitmap(fileName.str(), m_bitmap, w, h);
+ outputDebugImage(fileName.str(), m_debug_bitmap, w, h);
+#endif
+ }
+
+#endif // 0
+
+ //w -= padding - 1; // Leave one pixel border!
+ //h -= padding - 1;
+
+ m_width = max(0, w);
+ m_height = max(0, h);
+
+ nvCheck(isAligned(m_width, 4));
+ nvCheck(isAligned(m_height, 4));
+
+ m_debug_bitmap.resize(m_width, m_height);
+ m_debug_bitmap.setFormat(Image::Format_ARGB);
+
+#if DEBUG_OUTPUT
+ //outputDebugBitmap("debug_packer_final.tga", m_bitmap, w, h);
+ //outputDebugImage("debug_packer_final.tga", m_debug_bitmap, w, h);
+ ImageIO::save("debug_packer_final.tga", &m_debug_bitmap);
+#endif
+}
+
+
+// IC: Brute force is slow, and random may take too much time to converge. We start inserting large charts in a small atlas. Using brute force is lame, because most of the space
+// is occupied at this point. At the end we have many small charts and a large atlas with sparse holes. Finding those holes randomly is slow. A better approach would be to
+// start stacking large charts as if they were tetris pieces. Once charts get small try to place them randomly. It may be interesting to try a intermediate strategy, first try
+// along one axis and then try exhaustively along that axis.
+void AtlasPacker::findChartLocation(int quality, const BitMap * bitmap, Vector2::Arg extents, int w, int h, int * best_x, int * best_y, int * best_w, int * best_h, int * best_r)
+{
+ int attempts = 256;
+ if (quality == 1) attempts = 4096;
+ if (quality == 2) attempts = 2048;
+ if (quality == 3) attempts = 1024;
+ if (quality == 4) attempts = 512;
+
+ if (quality == 0 || w*h < attempts)
+ {
+ findChartLocation_bruteForce(bitmap, extents, w, h, best_x, best_y, best_w, best_h, best_r);
+ }
+ else
+ {
+ findChartLocation_random(bitmap, extents, w, h, best_x, best_y, best_w, best_h, best_r, attempts);
+ }
+}
+
+#define BLOCK_SIZE 4
+
+void AtlasPacker::findChartLocation_bruteForce(const BitMap * bitmap, Vector2::Arg extents, int w, int h, int * best_x, int * best_y, int * best_w, int * best_h, int * best_r)
+{
+ int best_metric = INT_MAX;
+
+ // Try two different orientations.
+ for (int r = 0; r < 2; r++)
+ {
+ int cw = bitmap->width();
+ int ch = bitmap->height();
+ if (r & 1) swap(cw, ch);
+
+ for (int y = 0; y <= h + 1; y += BLOCK_SIZE) // + 1 to extend atlas in case atlas full.
+ {
+ for (int x = 0; x <= w + 1; x += BLOCK_SIZE) // + 1 not really necessary here.
+ {
+ // Early out.
+ int area = max(w, x+cw) * max(h, y+ch);
+ //int perimeter = max(w, x+cw) + max(h, y+ch);
+ int extents = max(max(w, x+cw), max(h, y+ch));
+
+ int metric = extents*extents + area;
+
+ if (metric > best_metric) {
+ continue;
+ }
+ if (metric == best_metric && max(x, y) >= max(*best_x, *best_y)) {
+ // If metric is the same, pick the one closest to the origin.
+ continue;
+ }
+
+ if (canAddChart(bitmap, w, h, x, y, r))
+ {
+ best_metric = metric;
+ *best_x = x;
+ *best_y = y;
+ *best_w = cw;
+ *best_h = ch;
+ *best_r = r;
+
+ if (area == w*h)
+ {
+ // Chart is completely inside, do not look at any other location.
+ goto done;
+ }
+ }
+ }
+ }
+ }
+
+done:
+ nvDebugCheck (best_metric != INT_MAX);
+}
+
+
+void AtlasPacker::findChartLocation_random(const BitMap * bitmap, Vector2::Arg extents, int w, int h, int * best_x, int * best_y, int * best_w, int * best_h, int * best_r, int minTrialCount)
+{
+ int best_metric = INT_MAX;
+
+ for (int i = 0; i < minTrialCount || best_metric == INT_MAX; i++)
+ {
+ int r = m_rand.getRange(1);
+ int x = m_rand.getRange(w + 1); // + 1 to extend atlas in case atlas full. We may want to use a higher number to increase probability of extending atlas.
+ int y = m_rand.getRange(h + 1); // + 1 to extend atlas in case atlas full.
+
+ x = align(x, BLOCK_SIZE);
+ y = align(y, BLOCK_SIZE);
+
+ int cw = bitmap->width();
+ int ch = bitmap->height();
+ if (r & 1) swap(cw, ch);
+
+ // Early out.
+ int area = max(w, x+cw) * max(h, y+ch);
+ //int perimeter = max(w, x+cw) + max(h, y+ch);
+ int extents = max(max(w, x+cw), max(h, y+ch));
+
+ int metric = extents*extents + area;
+
+ if (metric > best_metric) {
+ continue;
+ }
+ if (metric == best_metric && min(x, y) > min(*best_x, *best_y)) {
+ // If metric is the same, pick the one closest to the origin.
+ continue;
+ }
+
+ if (canAddChart(bitmap, w, h, x, y, r))
+ {
+ best_metric = metric;
+ *best_x = x;
+ *best_y = y;
+ *best_w = cw;
+ *best_h = ch;
+ *best_r = r;
+
+ if (area == w*h)
+ {
+ // Chart is completely inside, do not look at any other location.
+ break;
+ }
+ }
+ }
+}
+
+
+void AtlasPacker::drawChartBitmapDilate(const Chart * chart, BitMap * bitmap, int padding)
+{
+ const int w = bitmap->width();
+ const int h = bitmap->height();
+ const Vector2 extents = Vector2(float(w), float(h));
+
+ // Rasterize chart faces, check that all bits are not set.
+ const uint faceCount = chart->faceCount();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = chart->chartMesh()->faceAt(f);
+
+ Vector2 vertices[4];
+
+ uint edgeCount = 0;
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ if (edgeCount < 4)
+ {
+ vertices[edgeCount] = it.vertex()->tex + Vector2(0.5) + Vector2(float(padding), float(padding));
+ }
+ edgeCount++;
+ }
+
+ if (edgeCount == 3)
+ {
+ Raster::drawTriangle(Raster::Mode_Antialiased, extents, true, vertices, AtlasPacker::setBitsCallback, bitmap);
+ }
+ else
+ {
+ Raster::drawQuad(Raster::Mode_Antialiased, extents, true, vertices, AtlasPacker::setBitsCallback, bitmap);
+ }
+ }
+
+ // Expand chart by padding pixels. (dilation)
+ BitMap tmp(w, h);
+ for (int i = 0; i < padding; i++) {
+ tmp.clearAll();
+
+ for (int y = 0; y < h; y++) {
+ for (int x = 0; x < w; x++) {
+ bool b = bitmap->bitAt(x, y);
+ if (!b) {
+ if (x > 0) {
+ b |= bitmap->bitAt(x - 1, y);
+ if (y > 0) b |= bitmap->bitAt(x - 1, y - 1);
+ if (y < h-1) b |= bitmap->bitAt(x - 1, y + 1);
+ }
+ if (y > 0) b |= bitmap->bitAt(x, y - 1);
+ if (y < h-1) b |= bitmap->bitAt(x, y + 1);
+ if (x < w-1) {
+ b |= bitmap->bitAt(x + 1, y);
+ if (y > 0) b |= bitmap->bitAt(x + 1, y - 1);
+ if (y < h-1) b |= bitmap->bitAt(x + 1, y + 1);
+ }
+ }
+ if (b) tmp.setBitAt(x, y);
+ }
+ }
+
+ swap(tmp, *bitmap);
+ }
+}
+
+
+void AtlasPacker::drawChartBitmap(const Chart * chart, BitMap * bitmap, const Vector2 & scale, const Vector2 & offset)
+{
+ const int w = bitmap->width();
+ const int h = bitmap->height();
+ const Vector2 extents = Vector2(float(w), float(h));
+
+ static const Vector2 pad[4] = {
+ Vector2(-0.5, -0.5),
+ Vector2(0.5, -0.5),
+ Vector2(-0.5, 0.5),
+ Vector2(0.5, 0.5)
+ };
+ /*static const Vector2 pad[4] = {
+ Vector2(-1, -1),
+ Vector2(1, -1),
+ Vector2(-1, 1),
+ Vector2(1, 1)
+ };*/
+
+ // Rasterize 4 times to add proper padding.
+ for (int i = 0; i < 4; i++) {
+
+ // Rasterize chart faces, check that all bits are not set.
+ const uint faceCount = chart->chartMesh()->faceCount();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = chart->chartMesh()->faceAt(f);
+
+ Vector2 vertices[4];
+
+ uint edgeCount = 0;
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ if (edgeCount < 4)
+ {
+ vertices[edgeCount] = it.vertex()->tex * scale + offset + pad[i];
+ nvCheck(ftoi_ceil(vertices[edgeCount].x) >= 0);
+ nvCheck(ftoi_ceil(vertices[edgeCount].y) >= 0);
+ nvCheck(ftoi_ceil(vertices[edgeCount].x) <= w);
+ nvCheck(ftoi_ceil(vertices[edgeCount].y) <= h);
+ }
+ edgeCount++;
+ }
+
+ if (edgeCount == 3)
+ {
+ Raster::drawTriangle(Raster::Mode_Antialiased, extents, /*enableScissors=*/true, vertices, AtlasPacker::setBitsCallback, bitmap);
+ }
+ else
+ {
+ Raster::drawQuad(Raster::Mode_Antialiased, extents, /*enableScissors=*/true, vertices, AtlasPacker::setBitsCallback, bitmap);
+ }
+ }
+ }
+
+ // @@ This only allows us to expand the size in texel intervals.
+ /*if (m_padding_x != 0 && m_padding_y != 0)*/ {
+
+ // Expand chart by padding pixels. (dilation)
+ BitMap tmp(w, h);
+ //for (int i = 0; i < 1; i++) {
+ tmp.clearAll();
+
+ for (int y = 0; y < h; y++) {
+ for (int x = 0; x < w; x++) {
+ bool b = bitmap->bitAt(x, y);
+ if (!b) {
+ if (x > 0) {
+ b |= bitmap->bitAt(x - 1, y);
+ if (y > 0) b |= bitmap->bitAt(x - 1, y - 1);
+ if (y < h-1) b |= bitmap->bitAt(x - 1, y + 1);
+ }
+ if (y > 0) b |= bitmap->bitAt(x, y - 1);
+ if (y < h-1) b |= bitmap->bitAt(x, y + 1);
+ if (x < w-1) {
+ b |= bitmap->bitAt(x + 1, y);
+ if (y > 0) b |= bitmap->bitAt(x + 1, y - 1);
+ if (y < h-1) b |= bitmap->bitAt(x + 1, y + 1);
+ }
+ }
+ if (b) tmp.setBitAt(x, y);
+ }
+ }
+
+ swap(tmp, *bitmap);
+ //}
+ }
+}
+
+bool AtlasPacker::canAddChart(const BitMap * bitmap, int atlas_w, int atlas_h, int offset_x, int offset_y, int r)
+{
+ nvDebugCheck(r == 0 || r == 1);
+
+ // Check whether the two bitmaps overlap.
+
+ const int w = bitmap->width();
+ const int h = bitmap->height();
+
+ if (r == 0) {
+ for (int y = 0; y < h; y++) {
+ int yy = y + offset_y;
+ if (yy >= 0) {
+ for (int x = 0; x < w; x++) {
+ int xx = x + offset_x;
+ if (xx >= 0) {
+ if (bitmap->bitAt(x, y)) {
+ if (xx < atlas_w && yy < atlas_h) {
+ if (m_bitmap.bitAt(xx, yy)) return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (r == 1) {
+ for (int y = 0; y < h; y++) {
+ int xx = y + offset_x;
+ if (xx >= 0) {
+ for (int x = 0; x < w; x++) {
+ int yy = x + offset_y;
+ if (yy >= 0) {
+ if (bitmap->bitAt(x, y)) {
+ if (xx < atlas_w && yy < atlas_h) {
+ if (m_bitmap.bitAt(xx, yy)) return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+#if 0
+void AtlasPacker::checkCanAddChart(const Chart * chart, int w, int h, int x, int y, int r)
+{
+ nvDebugCheck(r == 0 || r == 1);
+ Vector2 extents = Vector2(float(w), float(h));
+ Vector2 offset = Vector2(float(x), float(y));
+
+ // Rasterize chart faces, set bits.
+ const uint faceCount = chart->faceCount();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = chart->chartMesh()->faceAt(f);
+
+ Vector2 vertices[4];
+
+ uint edgeCount = 0;
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ if (edgeCount < 4)
+ {
+ Vector2 t = it.vertex()->tex;
+ if (r == 1) swap(t.x, t.y);
+ vertices[edgeCount] = t + offset;
+ }
+ edgeCount++;
+ }
+
+ if (edgeCount == 3)
+ {
+ Raster::drawTriangle(Raster::Mode_Antialiased, extents, /*enableScissors=*/true, vertices, AtlasPacker::checkBitsCallback, &m_bitmap);
+ }
+ else
+ {
+ Raster::drawQuad(Raster::Mode_Antialiased, extents, /*enableScissors=*/true, vertices, AtlasPacker::checkBitsCallback, &m_bitmap);
+ }
+ }
+}
+#endif // 0
+
+
+static Color32 chartColor = Color32(0);
+static void selectRandomColor(MTRand & rand) {
+ // Pick random color for this chart. @@ Select random hue, but fixed saturation/luminance?
+ chartColor.r = 128 + rand.getRange(127);
+ chartColor.g = 128 + rand.getRange(127);
+ chartColor.b = 128 + rand.getRange(127);
+ chartColor.a = 255;
+}
+static bool debugDrawCallback(void * param, int x, int y, Vector3::Arg, Vector3::Arg, Vector3::Arg, float area)
+{
+ Image * image = (Image *)param;
+
+ if (area > 0.0) {
+ Color32 c = image->pixel(x, y);
+ c.r = chartColor.r;
+ c.g = chartColor.g;
+ c.b = chartColor.b;
+ c.a += U8(ftoi_round(0.5f * area * 255));
+ image->pixel(x, y) = c;
+ }
+
+ return true;
+}
+
+void AtlasPacker::addChart(const Chart * chart, int w, int h, int x, int y, int r, Image * debugOutput)
+{
+ nvDebugCheck(r == 0 || r == 1);
+
+ nvDebugCheck(debugOutput != NULL);
+ selectRandomColor(m_rand);
+
+ Vector2 extents = Vector2(float(w), float(h));
+ Vector2 offset = Vector2(float(x), float(y)) + Vector2(0.5);
+
+ // Rasterize chart faces, set bits.
+ const uint faceCount = chart->faceCount();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = chart->chartMesh()->faceAt(f);
+
+ Vector2 vertices[4];
+
+ uint edgeCount = 0;
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ if (edgeCount < 4)
+ {
+ Vector2 t = it.vertex()->tex;
+ if (r == 1) swap(t.x, t.y);
+ vertices[edgeCount] = t + offset;
+ }
+ edgeCount++;
+ }
+
+ if (edgeCount == 3)
+ {
+ Raster::drawTriangle(Raster::Mode_Antialiased, extents, /*enableScissors=*/true, vertices, debugDrawCallback, debugOutput);
+ }
+ else
+ {
+ Raster::drawQuad(Raster::Mode_Antialiased, extents, /*enableScissors=*/true, vertices, debugDrawCallback, debugOutput);
+ }
+ }
+}
+
+
+void AtlasPacker::addChart(const BitMap * bitmap, int atlas_w, int atlas_h, int offset_x, int offset_y, int r, Image * debugOutput)
+{
+ nvDebugCheck(r == 0 || r == 1);
+
+ // Check whether the two bitmaps overlap.
+
+ const int w = bitmap->width();
+ const int h = bitmap->height();
+
+ if (debugOutput != NULL) {
+ selectRandomColor(m_rand);
+ }
+
+ if (r == 0) {
+ for (int y = 0; y < h; y++) {
+ int yy = y + offset_y;
+ if (yy >= 0) {
+ for (int x = 0; x < w; x++) {
+ int xx = x + offset_x;
+ if (xx >= 0) {
+ if (bitmap->bitAt(x, y)) {
+ if (xx < atlas_w && yy < atlas_h) {
+ if (debugOutput) debugOutput->pixel(xx, yy) = chartColor;
+ else {
+ nvDebugCheck(m_bitmap.bitAt(xx, yy) == false);
+ m_bitmap.setBitAt(xx, yy);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (r == 1) {
+ for (int y = 0; y < h; y++) {
+ int xx = y + offset_x;
+ if (xx >= 0) {
+ for (int x = 0; x < w; x++) {
+ int yy = x + offset_y;
+ if (yy >= 0) {
+ if (bitmap->bitAt(x, y)) {
+ if (xx < atlas_w && yy < atlas_h) {
+ if (debugOutput) debugOutput->pixel(xx, yy) = chartColor;
+ else {
+ nvDebugCheck(m_bitmap.bitAt(xx, yy) == false);
+ m_bitmap.setBitAt(xx, yy);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+
+/*static*/ bool AtlasPacker::checkBitsCallback(void * param, int x, int y, Vector3::Arg, Vector3::Arg, Vector3::Arg, float)
+{
+ BitMap * bitmap = (BitMap * )param;
+
+ nvDebugCheck(bitmap->bitAt(x, y) == false);
+
+ return true;
+}
+
+/*static*/ bool AtlasPacker::setBitsCallback(void * param, int x, int y, Vector3::Arg, Vector3::Arg, Vector3::Arg, float area)
+{
+ BitMap * bitmap = (BitMap * )param;
+
+ if (area > 0.0) {
+ bitmap->setBitAt(x, y);
+ }
+
+ return true;
+}
+
+
+
+float AtlasPacker::computeAtlasUtilization() const {
+ const uint w = m_width;
+ const uint h = m_height;
+ nvDebugCheck(w <= m_bitmap.width());
+ nvDebugCheck(h <= m_bitmap.height());
+
+ uint count = 0;
+ for (uint y = 0; y < h; y++) {
+ for (uint x = 0; x < w; x++) {
+ count += m_bitmap.bitAt(x, y);
+ }
+ }
+
+ return float(count) / (w * h);
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/param/AtlasPacker.h b/thirdparty/thekla_atlas/nvmesh/param/AtlasPacker.h
new file mode 100644
index 0000000000..2d305f38cd
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/AtlasPacker.h
@@ -0,0 +1,63 @@
+// This code is in the public domain -- castano@gmail.com
+
+#pragma once
+#ifndef NV_MESH_ATLASPACKER_H
+#define NV_MESH_ATLASPACKER_H
+
+#include "nvcore/RadixSort.h"
+#include "nvmath/Vector.h"
+#include "nvmath/Random.h"
+#include "nvimage/BitMap.h"
+#include "nvimage/Image.h"
+
+#include "nvmesh/nvmesh.h"
+
+
+namespace nv
+{
+ class Atlas;
+ class Chart;
+
+ struct AtlasPacker
+ {
+ AtlasPacker(Atlas * atlas);
+ ~AtlasPacker();
+
+ void packCharts(int quality, float texelArea, bool blockAligned, bool conservative);
+ float computeAtlasUtilization() const;
+
+ private:
+
+ void findChartLocation(int quality, const BitMap * bitmap, Vector2::Arg extents, int w, int h, int * best_x, int * best_y, int * best_w, int * best_h, int * best_r);
+ void findChartLocation_bruteForce(const BitMap * bitmap, Vector2::Arg extents, int w, int h, int * best_x, int * best_y, int * best_w, int * best_h, int * best_r);
+ void findChartLocation_random(const BitMap * bitmap, Vector2::Arg extents, int w, int h, int * best_x, int * best_y, int * best_w, int * best_h, int * best_r, int minTrialCount);
+
+ void drawChartBitmapDilate(const Chart * chart, BitMap * bitmap, int padding);
+ void drawChartBitmap(const Chart * chart, BitMap * bitmap, const Vector2 & scale, const Vector2 & offset);
+
+ bool canAddChart(const BitMap * bitmap, int w, int h, int x, int y, int r);
+ void addChart(const BitMap * bitmap, int w, int h, int x, int y, int r, Image * debugOutput);
+ //void checkCanAddChart(const Chart * chart, int w, int h, int x, int y, int r);
+ void addChart(const Chart * chart, int w, int h, int x, int y, int r, Image * debugOutput);
+
+
+ static bool checkBitsCallback(void * param, int x, int y, Vector3::Arg bar, Vector3::Arg dx, Vector3::Arg dy, float coverage);
+ static bool setBitsCallback(void * param, int x, int y, Vector3::Arg bar, Vector3::Arg dx, Vector3::Arg dy, float coverage);
+
+ private:
+
+ Atlas * m_atlas;
+ BitMap m_bitmap;
+ Image m_debug_bitmap;
+ RadixSort m_radix;
+
+ uint m_width;
+ uint m_height;
+
+ MTRand m_rand;
+
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_ATLASPACKER_H
diff --git a/thirdparty/thekla_atlas/nvmesh/param/LeastSquaresConformalMap.cpp b/thirdparty/thekla_atlas/nvmesh/param/LeastSquaresConformalMap.cpp
new file mode 100644
index 0000000000..cd1e8bbb7b
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/LeastSquaresConformalMap.cpp
@@ -0,0 +1,483 @@
+// Copyright NVIDIA Corporation 2008 -- Ignacio Castano <icastano@nvidia.com>
+
+#include "nvmesh.h" // pch
+
+#include "LeastSquaresConformalMap.h"
+#include "ParameterizationQuality.h"
+#include "Util.h"
+
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Vertex.h"
+#include "nvmesh/halfedge/Face.h"
+
+#include "nvmath/Sparse.h"
+#include "nvmath/Solver.h"
+#include "nvmath/Vector.inl"
+
+#include "nvcore/Array.inl"
+
+
+using namespace nv;
+using namespace HalfEdge;
+
+namespace
+{
+
+ // Test all pairs of vertices in the boundary and check distance.
+ static void findDiameterVertices(HalfEdge::Mesh * mesh, HalfEdge::Vertex ** a, HalfEdge::Vertex ** b)
+ {
+ nvDebugCheck(mesh != NULL);
+ nvDebugCheck(a != NULL);
+ nvDebugCheck(b != NULL);
+
+ const uint vertexCount = mesh->vertexCount();
+
+ float maxLength = 0.0f;
+
+ for (uint v0 = 1; v0 < vertexCount; v0++)
+ {
+ HalfEdge::Vertex * vertex0 = mesh->vertexAt(v0);
+ nvDebugCheck(vertex0 != NULL);
+
+ if (!vertex0->isBoundary()) continue;
+
+ for (uint v1 = 0; v1 < v0; v1++)
+ {
+ HalfEdge::Vertex * vertex1 = mesh->vertexAt(v1);
+ nvDebugCheck(vertex1 != NULL);
+
+ if (!vertex1->isBoundary()) continue;
+
+ float len = length(vertex0->pos - vertex1->pos);
+
+ if (len > maxLength)
+ {
+ maxLength = len;
+
+ *a = vertex0;
+ *b = vertex1;
+ }
+ }
+ }
+
+ nvDebugCheck(*a != NULL && *b != NULL);
+ }
+
+ // Fast sweep in 3 directions
+ static bool findApproximateDiameterVertices(HalfEdge::Mesh * mesh, HalfEdge::Vertex ** a, HalfEdge::Vertex ** b)
+ {
+ nvDebugCheck(mesh != NULL);
+ nvDebugCheck(a != NULL);
+ nvDebugCheck(b != NULL);
+
+ const uint vertexCount = mesh->vertexCount();
+
+ HalfEdge::Vertex * minVertex[3];
+ HalfEdge::Vertex * maxVertex[3];
+
+ minVertex[0] = minVertex[1] = minVertex[2] = NULL;
+ maxVertex[0] = maxVertex[1] = maxVertex[2] = NULL;
+
+ for (uint v = 1; v < vertexCount; v++)
+ {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+ nvDebugCheck(vertex != NULL);
+
+ if (vertex->isBoundary())
+ {
+ minVertex[0] = minVertex[1] = minVertex[2] = vertex;
+ maxVertex[0] = maxVertex[1] = maxVertex[2] = vertex;
+ break;
+ }
+ }
+
+ if (minVertex[0] == NULL)
+ {
+ // Input mesh has not boundaries.
+ return false;
+ }
+
+ for (uint v = 1; v < vertexCount; v++)
+ {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+ nvDebugCheck(vertex != NULL);
+
+ if (!vertex->isBoundary())
+ {
+ // Skip interior vertices.
+ continue;
+ }
+
+ if (vertex->pos.x < minVertex[0]->pos.x) minVertex[0] = vertex;
+ else if (vertex->pos.x > maxVertex[0]->pos.x) maxVertex[0] = vertex;
+
+ if (vertex->pos.y < minVertex[1]->pos.y) minVertex[1] = vertex;
+ else if (vertex->pos.y > maxVertex[1]->pos.y) maxVertex[1] = vertex;
+
+ if (vertex->pos.z < minVertex[2]->pos.z) minVertex[2] = vertex;
+ else if (vertex->pos.z > maxVertex[2]->pos.z) maxVertex[2] = vertex;
+ }
+
+ float lengths[3];
+ for (int i = 0; i < 3; i++)
+ {
+ lengths[i] = length(minVertex[i]->pos - maxVertex[i]->pos);
+ }
+
+ if (lengths[0] > lengths[1] && lengths[0] > lengths[2])
+ {
+ *a = minVertex[0];
+ *b = maxVertex[0];
+ }
+ else if (lengths[1] > lengths[2])
+ {
+ *a = minVertex[1];
+ *b = maxVertex[1];
+ }
+ else
+ {
+ *a = minVertex[2];
+ *b = maxVertex[2];
+ }
+
+ return true;
+ }
+
+ // Conformal relations from Bruno Levy:
+
+ // Computes the coordinates of the vertices of a triangle
+ // in a local 2D orthonormal basis of the triangle's plane.
+ static void project_triangle(Vector3::Arg p0, Vector3::Arg p1, Vector3::Arg p2, Vector2 * z0, Vector2 * z1, Vector2 * z2)
+ {
+ Vector3 X = normalize(p1 - p0, 0.0f);
+ Vector3 Z = normalize(cross(X, (p2 - p0)), 0.0f);
+ Vector3 Y = normalize(cross(Z, X), 0.0f);
+
+ float x0 = 0.0f;
+ float y0 = 0.0f;
+ float x1 = length(p1 - p0);
+ float y1 = 0.0f;
+ float x2 = dot((p2 - p0), X);
+ float y2 = dot((p2 - p0), Y);
+
+ *z0 = Vector2(x0, y0);
+ *z1 = Vector2(x1, y1);
+ *z2 = Vector2(x2, y2);
+ }
+
+ // LSCM equation, geometric form :
+ // (Z1 - Z0)(U2 - U0) = (Z2 - Z0)(U1 - U0)
+ // Where Uk = uk + i.vk is the complex number
+ // corresponding to (u,v) coords
+ // Zk = xk + i.yk is the complex number
+ // corresponding to local (x,y) coords
+ // cool: no divide with this expression,
+ // makes it more numerically stable in
+ // the presence of degenerate triangles.
+
+ static void setup_conformal_map_relations(SparseMatrix & A, int row, const HalfEdge::Vertex * v0, const HalfEdge::Vertex * v1, const HalfEdge::Vertex * v2)
+ {
+ int id0 = v0->id;
+ int id1 = v1->id;
+ int id2 = v2->id;
+
+ Vector3 p0 = v0->pos;
+ Vector3 p1 = v1->pos;
+ Vector3 p2 = v2->pos;
+
+ Vector2 z0, z1, z2;
+ project_triangle(p0, p1, p2, &z0, &z1, &z2);
+
+ Vector2 z01 = z1 - z0;
+ Vector2 z02 = z2 - z0;
+
+ float a = z01.x;
+ float b = z01.y;
+ float c = z02.x;
+ float d = z02.y;
+ nvCheck(b == 0.0f);
+
+ // Note : 2*id + 0 --> u
+ // 2*id + 1 --> v
+ int u0_id = 2 * id0 + 0;
+ int v0_id = 2 * id0 + 1;
+ int u1_id = 2 * id1 + 0;
+ int v1_id = 2 * id1 + 1;
+ int u2_id = 2 * id2 + 0;
+ int v2_id = 2 * id2 + 1;
+
+ // Note : b = 0
+
+ // Real part
+ A.setCoefficient(u0_id, 2 * row + 0, -a+c);
+ A.setCoefficient(v0_id, 2 * row + 0, b-d);
+ A.setCoefficient(u1_id, 2 * row + 0, -c);
+ A.setCoefficient(v1_id, 2 * row + 0, d);
+ A.setCoefficient(u2_id, 2 * row + 0, a);
+
+ // Imaginary part
+ A.setCoefficient(u0_id, 2 * row + 1, -b+d);
+ A.setCoefficient(v0_id, 2 * row + 1, -a+c);
+ A.setCoefficient(u1_id, 2 * row + 1, -d);
+ A.setCoefficient(v1_id, 2 * row + 1, -c);
+ A.setCoefficient(v2_id, 2 * row + 1, a);
+ }
+
+
+ // Conformal relations from Brecht Van Lommel (based on ABF):
+
+ static float vec_angle_cos(Vector3::Arg v1, Vector3::Arg v2, Vector3::Arg v3)
+ {
+ Vector3 d1 = v1 - v2;
+ Vector3 d2 = v3 - v2;
+ return clamp(dot(d1, d2) / (length(d1) * length(d2)), -1.0f, 1.0f);
+ }
+
+ static float vec_angle(Vector3::Arg v1, Vector3::Arg v2, Vector3::Arg v3)
+ {
+ float dot = vec_angle_cos(v1, v2, v3);
+ return acosf(dot);
+ }
+
+ static void triangle_angles(Vector3::Arg v1, Vector3::Arg v2, Vector3::Arg v3, float *a1, float *a2, float *a3)
+ {
+ *a1 = vec_angle(v3, v1, v2);
+ *a2 = vec_angle(v1, v2, v3);
+ *a3 = PI - *a2 - *a1;
+ }
+
+ static void triangle_cosines(Vector3::Arg v1, Vector3::Arg v2, Vector3::Arg v3, float *a1, float *a2, float *a3)
+ {
+ *a1 = vec_angle_cos(v3, v1, v2);
+ *a2 = vec_angle_cos(v1, v2, v3);
+ *a3 = vec_angle_cos(v2, v3, v1);
+ }
+
+ static void setup_abf_relations(SparseMatrix & A, int row, const HalfEdge::Vertex * v0, const HalfEdge::Vertex * v1, const HalfEdge::Vertex * v2)
+ {
+ int id0 = v0->id;
+ int id1 = v1->id;
+ int id2 = v2->id;
+
+ Vector3 p0 = v0->pos;
+ Vector3 p1 = v1->pos;
+ Vector3 p2 = v2->pos;
+
+#if 1
+ // @@ IC: Wouldn't it be more accurate to return cos and compute 1-cos^2?
+ // It does indeed seem to be a little bit more robust.
+ // @@ Need to revisit this more carefully!
+
+ float a0, a1, a2;
+ triangle_angles(p0, p1, p2, &a0, &a1, &a2);
+
+ float s0 = sinf(a0);
+ float s1 = sinf(a1);
+ float s2 = sinf(a2);
+
+ /*// Hack for degenerate triangles.
+ if (equal(s0, 0) && equal(s1, 0) && equal(s2, 0)) {
+ if (equal(a0, 0)) a0 += 0.001f;
+ if (equal(a1, 0)) a1 += 0.001f;
+ if (equal(a2, 0)) a2 += 0.001f;
+
+ if (equal(a0, PI)) a0 = PI - a1 - a2;
+ if (equal(a1, PI)) a1 = PI - a0 - a2;
+ if (equal(a2, PI)) a2 = PI - a0 - a1;
+
+ s0 = sinf(a0);
+ s1 = sinf(a1);
+ s2 = sinf(a2);
+ }*/
+
+ if (s1 > s0 && s1 > s2)
+ {
+ swap(s1, s2);
+ swap(s0, s1);
+
+ swap(a1, a2);
+ swap(a0, a1);
+
+ swap(id1, id2);
+ swap(id0, id1);
+ }
+ else if (s0 > s1 && s0 > s2)
+ {
+ swap(s0, s2);
+ swap(s0, s1);
+
+ swap(a0, a2);
+ swap(a0, a1);
+
+ swap(id0, id2);
+ swap(id0, id1);
+ }
+
+ float c0 = cosf(a0);
+#else
+ float c0, c1, c2;
+ triangle_cosines(p0, p1, p2, &c0, &c1, &c2);
+
+ float s0 = 1 - c0*c0;
+ float s1 = 1 - c1*c1;
+ float s2 = 1 - c2*c2;
+
+ nvDebugCheck(s0 != 0 || s1 != 0 || s2 != 0);
+
+ if (s1 > s0 && s1 > s2)
+ {
+ swap(s1, s2);
+ swap(s0, s1);
+
+ swap(c1, c2);
+ swap(c0, c1);
+
+ swap(id1, id2);
+ swap(id0, id1);
+ }
+ else if (s0 > s1 && s0 > s2)
+ {
+ swap(s0, s2);
+ swap(s0, s1);
+
+ swap(c0, c2);
+ swap(c0, c1);
+
+ swap(id0, id2);
+ swap(id0, id1);
+ }
+#endif
+
+ float ratio = (s2 == 0.0f) ? 1.0f: s1/s2;
+ float cosine = c0 * ratio;
+ float sine = s0 * ratio;
+
+ // Note : 2*id + 0 --> u
+ // 2*id + 1 --> v
+ int u0_id = 2 * id0 + 0;
+ int v0_id = 2 * id0 + 1;
+ int u1_id = 2 * id1 + 0;
+ int v1_id = 2 * id1 + 1;
+ int u2_id = 2 * id2 + 0;
+ int v2_id = 2 * id2 + 1;
+
+ // Real part
+ A.setCoefficient(u0_id, 2 * row + 0, cosine - 1.0f);
+ A.setCoefficient(v0_id, 2 * row + 0, -sine);
+ A.setCoefficient(u1_id, 2 * row + 0, -cosine);
+ A.setCoefficient(v1_id, 2 * row + 0, sine);
+ A.setCoefficient(u2_id, 2 * row + 0, 1);
+
+ // Imaginary part
+ A.setCoefficient(u0_id, 2 * row + 1, sine);
+ A.setCoefficient(v0_id, 2 * row + 1, cosine - 1.0f);
+ A.setCoefficient(u1_id, 2 * row + 1, -sine);
+ A.setCoefficient(v1_id, 2 * row + 1, -cosine);
+ A.setCoefficient(v2_id, 2 * row + 1, 1);
+ }
+
+} // namespace
+
+
+bool nv::computeLeastSquaresConformalMap(HalfEdge::Mesh * mesh)
+{
+ nvDebugCheck(mesh != NULL);
+
+ // For this to work properly, mesh should not have colocals that have the same
+ // attributes, unless you want the vertices to actually have different texcoords.
+
+ const uint vertexCount = mesh->vertexCount();
+ const uint D = 2 * vertexCount;
+ const uint N = 2 * countMeshTriangles(mesh);
+
+ // N is the number of equations (one per triangle)
+ // D is the number of variables (one per vertex; there are 2 pinned vertices).
+ if (N < D - 4) {
+ return false;
+ }
+
+ SparseMatrix A(D, N);
+ FullVector b(N);
+ FullVector x(D);
+
+ // Fill b:
+ b.fill(0.0f);
+
+ // Fill x:
+ HalfEdge::Vertex * v0;
+ HalfEdge::Vertex * v1;
+ if (!findApproximateDiameterVertices(mesh, &v0, &v1))
+ {
+ // Mesh has no boundaries.
+ return false;
+ }
+ if (v0->tex == v1->tex)
+ {
+ // LSCM expects an existing parameterization.
+ return false;
+ }
+
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+ nvDebugCheck(vertex != NULL);
+
+ // Initial solution.
+ x[2 * v + 0] = vertex->tex.x;
+ x[2 * v + 1] = vertex->tex.y;
+ }
+
+ // Fill A:
+ const uint faceCount = mesh->faceCount();
+ for (uint f = 0, t = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ nvDebugCheck(face != NULL);
+ nvDebugCheck(face->edgeCount() == 3);
+
+ const HalfEdge::Vertex * vertex0 = NULL;
+
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+ nvCheck(edge != NULL);
+
+ if (vertex0 == NULL)
+ {
+ vertex0 = edge->vertex;
+ }
+ else if (edge->next->vertex != vertex0)
+ {
+ const HalfEdge::Vertex * vertex1 = edge->from();
+ const HalfEdge::Vertex * vertex2 = edge->to();
+
+ setup_abf_relations(A, t, vertex0, vertex1, vertex2);
+ //setup_conformal_map_relations(A, t, vertex0, vertex1, vertex2);
+
+ t++;
+ }
+ }
+ }
+
+ const uint lockedParameters[] =
+ {
+ 2 * v0->id + 0,
+ 2 * v0->id + 1,
+ 2 * v1->id + 0,
+ 2 * v1->id + 1
+ };
+
+ // Solve
+ LeastSquaresSolver(A, b, x, lockedParameters, 4, 0.000001f);
+
+ // Map x back to texcoords:
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+ nvDebugCheck(vertex != NULL);
+
+ vertex->tex = Vector2(x[2 * v + 0], x[2 * v + 1]);
+ }
+
+ return true;
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/param/LeastSquaresConformalMap.h b/thirdparty/thekla_atlas/nvmesh/param/LeastSquaresConformalMap.h
new file mode 100644
index 0000000000..51fbf193c8
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/LeastSquaresConformalMap.h
@@ -0,0 +1,15 @@
+// Copyright NVIDIA Corporation 2008 -- Ignacio Castano <icastano@nvidia.com>
+
+#pragma once
+#ifndef NV_MESH_LEASTSQUARESCONFORMALMAP_H
+#define NV_MESH_LEASTSQUARESCONFORMALMAP_H
+
+namespace nv
+{
+ namespace HalfEdge { class Mesh; }
+
+ bool computeLeastSquaresConformalMap(HalfEdge::Mesh * mesh);
+
+} // nv namespace
+
+#endif // NV_MESH_LEASTSQUARESCONFORMALMAP_H
diff --git a/thirdparty/thekla_atlas/nvmesh/param/OrthogonalProjectionMap.cpp b/thirdparty/thekla_atlas/nvmesh/param/OrthogonalProjectionMap.cpp
new file mode 100644
index 0000000000..d6e5e30561
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/OrthogonalProjectionMap.cpp
@@ -0,0 +1,99 @@
+// This code is in the public domain -- castano@gmail.com
+
+#include "nvmesh.h" // pch
+
+#include "OrthogonalProjectionMap.h"
+
+#include "nvcore/Array.inl"
+
+#include "nvmath/Fitting.h"
+#include "nvmath/Vector.inl"
+#include "nvmath/Box.inl"
+#include "nvmath/Plane.inl"
+
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Vertex.h"
+#include "nvmesh/halfedge/Face.h"
+#include "nvmesh/geometry/Bounds.h"
+
+
+using namespace nv;
+
+bool nv::computeOrthogonalProjectionMap(HalfEdge::Mesh * mesh)
+{
+ Vector3 axis[2];
+
+#if 1
+
+ uint vertexCount = mesh->vertexCount();
+ Array<Vector3> points(vertexCount);
+ points.resize(vertexCount);
+
+ for (uint i = 0; i < vertexCount; i++)
+ {
+ points[i] = mesh->vertexAt(i)->pos;
+ }
+
+#if 0
+ axis[0] = Fit::computePrincipalComponent_EigenSolver(vertexCount, points.buffer());
+ axis[0] = normalize(axis[0]);
+
+ Plane plane = Fit::bestPlane(vertexCount, points.buffer());
+
+ Vector3 n = plane.vector();
+
+ axis[1] = cross(axis[0], n);
+ axis[1] = normalize(axis[1]);
+#else
+ // Avoid redundant computations.
+ float matrix[6];
+ Fit::computeCovariance(vertexCount, points.buffer(), matrix);
+
+ if (matrix[0] == 0 && matrix[3] == 0 && matrix[5] == 0) {
+ return false;
+ }
+
+ float eigenValues[3];
+ Vector3 eigenVectors[3];
+ if (!nv::Fit::eigenSolveSymmetric3(matrix, eigenValues, eigenVectors)) {
+ return false;
+ }
+
+ axis[0] = normalize(eigenVectors[0]);
+ axis[1] = normalize(eigenVectors[1]);
+#endif
+
+
+#else
+
+ // IC: I thought this was generally more robust, but turns out it's not even guaranteed to return a valid projection. Imagine a narrow quad perpendicular to one plane, but rotated so that the shortest axis of
+ // the bounding box is in the direction of that plane.
+
+ // Use the shortest box axis
+ Box box = MeshBounds::box(mesh);
+ Vector3 dir = box.extents();
+
+ if (fabs(dir.x) <= fabs(dir.y) && fabs(dir.x) <= fabs(dir.z)) {
+ axis[0] = Vector3(0, 1, 0);
+ axis[1] = Vector3(0, 0, 1);
+ }
+ else if (fabs(dir.y) <= fabs(dir.z)) {
+ axis[0] = Vector3(1, 0, 0);
+ axis[1] = Vector3(0, 0, 1);
+ }
+ else {
+ axis[0] = Vector3(1, 0, 0);
+ axis[1] = Vector3(0, 1, 0);
+ }
+#endif
+
+ // Project vertices to plane.
+ for (HalfEdge::Mesh::VertexIterator it(mesh->vertices()); !it.isDone(); it.advance())
+ {
+ HalfEdge::Vertex * vertex = it.current();
+ vertex->tex.x = dot(axis[0], vertex->pos);
+ vertex->tex.y = dot(axis[1], vertex->pos);
+ }
+
+ return true;
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/param/OrthogonalProjectionMap.h b/thirdparty/thekla_atlas/nvmesh/param/OrthogonalProjectionMap.h
new file mode 100644
index 0000000000..54920413d5
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/OrthogonalProjectionMap.h
@@ -0,0 +1,15 @@
+// This code is in the public domain -- castano@gmail.com
+
+#pragma once
+#ifndef NV_MESH_ORTHOGONALPROJECTIONMAP_H
+#define NV_MESH_ORTHOGONALPROJECTIONMAP_H
+
+namespace nv
+{
+ namespace HalfEdge { class Mesh; }
+
+ bool computeOrthogonalProjectionMap(HalfEdge::Mesh * mesh);
+
+} // nv namespace
+
+#endif // NV_MESH_ORTHOGONALPROJECTIONMAP_H
diff --git a/thirdparty/thekla_atlas/nvmesh/param/ParameterizationQuality.cpp b/thirdparty/thekla_atlas/nvmesh/param/ParameterizationQuality.cpp
new file mode 100644
index 0000000000..683ee603cd
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/ParameterizationQuality.cpp
@@ -0,0 +1,323 @@
+// Copyright NVIDIA Corporation 2008 -- Ignacio Castano <icastano@nvidia.com>
+
+#include "nvmesh.h" // pch
+
+#include "ParameterizationQuality.h"
+
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Face.h"
+#include "nvmesh/halfedge/Vertex.h"
+#include "nvmesh/halfedge/Edge.h"
+
+#include "nvmath/Vector.inl"
+
+#include "nvcore/Debug.h"
+
+#include <float.h>
+
+
+using namespace nv;
+
+#if 0
+/*
+float triangleConformalEnergy(Vector3 q[3], Vector2 p[3])
+{
+const Vector3 v1 = q[0];
+const Vector3 v2 = q[1];
+const Vector3 v3 = q[2];
+
+const Vector2 w1 = p[0];
+const Vector2 w2 = p[1];
+const Vector2 w3 = p[2];
+
+float x1 = v2.x() - v1.x();
+float x2 = v3.x() - v1.x();
+float y1 = v2.y() - v1.y();
+float y2 = v3.y() - v1.y();
+float z1 = v2.z() - v1.z();
+float z2 = v3.z() - v1.z();
+
+float s1 = w2.x() - w1.x();
+float s2 = w3.x() - w1.x();
+float t1 = w2.y() - w1.y();
+float t2 = w3.y() - w1.y();
+
+float r = 1.0f / (s1 * t2 - s2 * t1);
+Vector3 sdir((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r);
+Vector3 tdir((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r);
+
+Vector3 N = cross(v3-v1, v2-v1);
+
+// Rotate 90 around N.
+}
+*/
+
+static float triangleConformalEnergy(Vector3 q[3], Vector2 p[3])
+{
+ // Using Denis formulas:
+ Vector3 c0 = q[1] - q[2];
+ Vector3 c1 = q[2] - q[0];
+ Vector3 c2 = q[0] - q[1];
+
+ Vector3 N = cross(-c0, c1);
+ float T = length(N); // 2T
+ N = normalize(N, 0);
+
+ float cot_alpha0 = dot(-c1, c2) / length(cross(-c1, c2));
+ float cot_alpha1 = dot(-c2, c0) / length(cross(-c2, c0));
+ float cot_alpha2 = dot(-c0, c1) / length(cross(-c0, c1));
+
+ Vector3 t0 = -cot_alpha1 * c1 + cot_alpha2 * c2;
+ Vector3 t1 = -cot_alpha2 * c2 + cot_alpha0 * c0;
+ Vector3 t2 = -cot_alpha0 * c0 + cot_alpha1 * c1;
+
+ nvCheck(equal(length(t0), length(c0)));
+ nvCheck(equal(length(t1), length(c1)));
+ nvCheck(equal(length(t2), length(c2)));
+ nvCheck(equal(dot(t0, c0), 0));
+ nvCheck(equal(dot(t1, c1), 0));
+ nvCheck(equal(dot(t2, c2), 0));
+
+ // Gradients
+ Vector3 grad_u = 1.0f / T * (p[0].x * t0 + p[1].x * t1 + p[2].x * t2);
+ Vector3 grad_v = 1.0f / T * (p[0].y * t0 + p[1].y * t1 + p[2].y * t2);
+
+ // Rotated gradients
+ Vector3 Jgrad_u = 1.0f / T * (p[0].x * c0 + p[1].x * c1 + p[2].x * c2);
+ Vector3 Jgrad_v = 1.0f / T * (p[0].y * c0 + p[1].y * c1 + p[2].y * c2);
+
+ // Using Lengyel's formulas:
+ {
+ const Vector3 v1 = q[0];
+ const Vector3 v2 = q[1];
+ const Vector3 v3 = q[2];
+
+ const Vector2 w1 = p[0];
+ const Vector2 w2 = p[1];
+ const Vector2 w3 = p[2];
+
+ float x1 = v2.x - v1.x;
+ float x2 = v3.x - v1.x;
+ float y1 = v2.y - v1.y;
+ float y2 = v3.y - v1.y;
+ float z1 = v2.z - v1.z;
+ float z2 = v3.z - v1.z;
+
+ float s1 = w2.x - w1.x;
+ float s2 = w3.x - w1.x;
+ float t1 = w2.y - w1.y;
+ float t2 = w3.y - w1.y;
+
+ float r = 1.0f / (s1 * t2 - s2 * t1);
+ Vector3 sdir((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r);
+ Vector3 tdir((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r);
+
+ Vector3 Jsdir = cross(N, sdir);
+ Vector3 Jtdir = cross(N, tdir);
+
+ float x = 3;
+ }
+
+ // check: sdir == grad_u
+ // check: tdir == grad_v
+
+ return length(grad_u - Jgrad_v);
+}
+#endif // 0
+
+
+ParameterizationQuality::ParameterizationQuality()
+{
+ m_totalTriangleCount = 0;
+ m_flippedTriangleCount = 0;
+ m_zeroAreaTriangleCount = 0;
+
+ m_parametricArea = 0.0f;
+ m_geometricArea = 0.0f;
+
+ m_stretchMetric = 0.0f;
+ m_maxStretchMetric = 0.0f;
+
+ m_conformalMetric = 0.0f;
+ m_authalicMetric = 0.0f;
+}
+
+ParameterizationQuality::ParameterizationQuality(const HalfEdge::Mesh * mesh)
+{
+ nvDebugCheck(mesh != NULL);
+
+ m_totalTriangleCount = 0;
+ m_flippedTriangleCount = 0;
+ m_zeroAreaTriangleCount = 0;
+
+ m_parametricArea = 0.0f;
+ m_geometricArea = 0.0f;
+
+ m_stretchMetric = 0.0f;
+ m_maxStretchMetric = 0.0f;
+
+ m_conformalMetric = 0.0f;
+ m_authalicMetric = 0.0f;
+
+ const uint faceCount = mesh->faceCount();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = mesh->faceAt(f);
+ const HalfEdge::Vertex * vertex0 = NULL;
+
+ Vector3 p[3];
+ Vector2 t[3];
+
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+
+ if (vertex0 == NULL)
+ {
+ vertex0 = edge->vertex;
+
+ p[0] = vertex0->pos;
+ t[0] = vertex0->tex;
+ }
+ else if (edge->to() != vertex0)
+ {
+ p[1] = edge->from()->pos;
+ p[2] = edge->to()->pos;
+ t[1] = edge->from()->tex;
+ t[2] = edge->to()->tex;
+
+ processTriangle(p, t);
+ }
+ }
+ }
+
+ if (m_flippedTriangleCount + m_zeroAreaTriangleCount == faceCount)
+ {
+ // If all triangles are flipped, then none is.
+ m_flippedTriangleCount = 0;
+ }
+
+ nvDebugCheck(isFinite(m_parametricArea) && m_parametricArea >= 0);
+ nvDebugCheck(isFinite(m_geometricArea) && m_geometricArea >= 0);
+ nvDebugCheck(isFinite(m_stretchMetric));
+ nvDebugCheck(isFinite(m_maxStretchMetric));
+ nvDebugCheck(isFinite(m_conformalMetric));
+ nvDebugCheck(isFinite(m_authalicMetric));
+}
+
+bool ParameterizationQuality::isValid() const
+{
+ return m_flippedTriangleCount == 0; // @@ Does not test for self-overlaps.
+}
+
+float ParameterizationQuality::rmsStretchMetric() const
+{
+ if (m_geometricArea == 0) return 0.0f;
+ float normFactor = sqrtf(m_parametricArea / m_geometricArea);
+ return sqrtf(m_stretchMetric / m_geometricArea) * normFactor;
+}
+
+float ParameterizationQuality::maxStretchMetric() const
+{
+ if (m_geometricArea == 0) return 0.0f;
+ float normFactor = sqrtf(m_parametricArea / m_geometricArea);
+ return m_maxStretchMetric * normFactor;
+}
+
+float ParameterizationQuality::rmsConformalMetric() const
+{
+ if (m_geometricArea == 0) return 0.0f;
+ return sqrtf(m_conformalMetric / m_geometricArea);
+}
+
+float ParameterizationQuality::maxAuthalicMetric() const
+{
+ if (m_geometricArea == 0) return 0.0f;
+ return sqrtf(m_authalicMetric / m_geometricArea);
+}
+
+void ParameterizationQuality::operator += (const ParameterizationQuality & pq)
+{
+ m_totalTriangleCount += pq.m_totalTriangleCount;
+ m_flippedTriangleCount += pq.m_flippedTriangleCount;
+ m_zeroAreaTriangleCount += pq.m_zeroAreaTriangleCount;
+
+ m_parametricArea += pq.m_parametricArea;
+ m_geometricArea += pq.m_geometricArea;
+
+ m_stretchMetric += pq.m_stretchMetric;
+ m_maxStretchMetric = max(m_maxStretchMetric, pq.m_maxStretchMetric);
+
+ m_conformalMetric += pq.m_conformalMetric;
+ m_authalicMetric += pq.m_authalicMetric;
+}
+
+
+void ParameterizationQuality::processTriangle(Vector3 q[3], Vector2 p[3])
+{
+ m_totalTriangleCount++;
+
+ // Evaluate texture stretch metric. See:
+ // - "Texture Mapping Progressive Meshes", Sander, Snyder, Gortler & Hoppe
+ // - "Mesh Parameterization: Theory and Practice", Siggraph'07 Course Notes, Hormann, Levy & Sheffer.
+
+ float t1 = p[0].x;
+ float s1 = p[0].y;
+ float t2 = p[1].x;
+ float s2 = p[1].y;
+ float t3 = p[2].x;
+ float s3 = p[2].y;
+
+ float geometricArea = length(cross(q[1] - q[0], q[2] - q[0])) / 2;
+ float parametricArea = ((s2 - s1)*(t3 - t1) - (s3 - s1)*(t2 - t1)) / 2;
+
+ if (isZero(parametricArea))
+ {
+ m_zeroAreaTriangleCount++;
+ return;
+ }
+
+ Vector3 Ss = (q[0] * (t2- t3) + q[1] * (t3 - t1) + q[2] * (t1 - t2)) / (2 * parametricArea);
+ Vector3 St = (q[0] * (s3- s2) + q[1] * (s1 - s3) + q[2] * (s2 - s1)) / (2 * parametricArea);
+
+ float a = dot(Ss, Ss); // E
+ float b = dot(Ss, St); // F
+ float c = dot(St, St); // G
+
+ // Compute eigen-values of the first fundamental form:
+ float sigma1 = sqrtf(0.5f * max(0.0f, a + c - sqrtf(square(a - c) + 4 * square(b)))); // gamma uppercase, min eigenvalue.
+ float sigma2 = sqrtf(0.5f * max(0.0f, a + c + sqrtf(square(a - c) + 4 * square(b)))); // gamma lowercase, max eigenvalue.
+ nvCheck(sigma2 >= sigma1);
+
+ // isometric: sigma1 = sigma2 = 1
+ // conformal: sigma1 / sigma2 = 1
+ // authalic: sigma1 * sigma2 = 1
+
+ float rmsStretch = sqrtf((a + c) * 0.5f);
+ float rmsStretch2 = sqrtf((square(sigma1) + square(sigma2)) * 0.5f);
+ nvDebugCheck(equal(rmsStretch, rmsStretch2, 0.01f));
+
+ if (parametricArea < 0.0f)
+ {
+ // Count flipped triangles.
+ m_flippedTriangleCount++;
+
+ parametricArea = fabsf(parametricArea);
+ }
+
+ m_stretchMetric += square(rmsStretch) * geometricArea;
+ m_maxStretchMetric = max(m_maxStretchMetric, sigma2);
+
+ if (!isZero(sigma1, 0.000001f)) {
+ // sigma1 is zero when geometricArea is zero.
+ m_conformalMetric += (sigma2 / sigma1) * geometricArea;
+ }
+ m_authalicMetric += (sigma1 * sigma2) * geometricArea;
+
+ // Accumulate total areas.
+ m_geometricArea += geometricArea;
+ m_parametricArea += parametricArea;
+
+
+ //triangleConformalEnergy(q, p);
+}
diff --git a/thirdparty/thekla_atlas/nvmesh/param/ParameterizationQuality.h b/thirdparty/thekla_atlas/nvmesh/param/ParameterizationQuality.h
new file mode 100644
index 0000000000..342e26b889
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/ParameterizationQuality.h
@@ -0,0 +1,56 @@
+// Copyright NVIDIA Corporation 2008 -- Ignacio Castano <icastano@nvidia.com>
+
+#pragma once
+#ifndef NV_MESH_PARAMETERIZATIONQUALITY_H
+#define NV_MESH_PARAMETERIZATIONQUALITY_H
+
+#include <nvmesh/nvmesh.h>
+
+namespace nv
+{
+ class Vector2;
+ class Vector3;
+
+ namespace HalfEdge { class Mesh; }
+
+ // Estimate quality of existing parameterization.
+ NVMESH_CLASS class ParameterizationQuality
+ {
+ public:
+ ParameterizationQuality();
+ ParameterizationQuality(const HalfEdge::Mesh * mesh);
+
+ bool isValid() const;
+
+ float rmsStretchMetric() const;
+ float maxStretchMetric() const;
+
+ float rmsConformalMetric() const;
+ float maxAuthalicMetric() const;
+
+ void operator += (const ParameterizationQuality & pq);
+
+ private:
+
+ void processTriangle(Vector3 p[3], Vector2 t[3]);
+
+ private:
+
+ uint m_totalTriangleCount;
+ uint m_flippedTriangleCount;
+ uint m_zeroAreaTriangleCount;
+
+ float m_parametricArea;
+ float m_geometricArea;
+
+ float m_stretchMetric;
+ float m_maxStretchMetric;
+
+ float m_conformalMetric;
+ float m_authalicMetric;
+
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_PARAMETERIZATIONQUALITY_H
diff --git a/thirdparty/thekla_atlas/nvmesh/param/SingleFaceMap.cpp b/thirdparty/thekla_atlas/nvmesh/param/SingleFaceMap.cpp
new file mode 100644
index 0000000000..4b205de8bf
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/SingleFaceMap.cpp
@@ -0,0 +1,53 @@
+// Copyright NVIDIA Corporation 2008 -- Ignacio Castano <icastano@nvidia.com>
+
+#include "nvmesh.h" // pch
+
+#include "SingleFaceMap.h"
+
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Vertex.h"
+#include "nvmesh/halfedge/Face.h"
+
+#include "nvmath/Vector.inl"
+
+using namespace nv;
+
+
+
+void nv::computeSingleFaceMap(HalfEdge::Mesh * mesh)
+{
+ nvDebugCheck(mesh != NULL);
+ nvDebugCheck(mesh->faceCount() == 1);
+
+ HalfEdge::Face * face = mesh->faceAt(0);
+ nvCheck(face != NULL);
+
+ Vector3 p0 = face->edge->from()->pos;
+ Vector3 p1 = face->edge->to()->pos;
+
+ Vector3 X = normalizeSafe(p1 - p0, Vector3(0.0f), 0.0f);
+ Vector3 Z = face->normal();
+ Vector3 Y = normalizeSafe(cross(Z, X), Vector3(0.0f), 0.0f);
+
+ uint i = 0;
+ for (HalfEdge::Face::EdgeIterator it(face->edges()); !it.isDone(); it.advance(), i++)
+ {
+ HalfEdge::Vertex * vertex = it.vertex();
+ nvCheck(vertex != NULL);
+
+ if (i == 0)
+ {
+ vertex->tex = Vector2(0);
+ }
+ else
+ {
+ Vector3 pn = vertex->pos;
+
+ float xn = dot((pn - p0), X);
+ float yn = dot((pn - p0), Y);
+
+ vertex->tex = Vector2(xn, yn);
+ }
+ }
+}
+
diff --git a/thirdparty/thekla_atlas/nvmesh/param/SingleFaceMap.h b/thirdparty/thekla_atlas/nvmesh/param/SingleFaceMap.h
new file mode 100644
index 0000000000..b70719f5d8
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/SingleFaceMap.h
@@ -0,0 +1,18 @@
+// Copyright NVIDIA Corporation 2008 -- Ignacio Castano <icastano@nvidia.com>
+
+#pragma once
+#ifndef NV_MESH_SINGLEFACEMAP_H
+#define NV_MESH_SINGLEFACEMAP_H
+
+namespace nv
+{
+ namespace HalfEdge
+ {
+ class Mesh;
+ }
+
+ void computeSingleFaceMap(HalfEdge::Mesh * mesh);
+
+} // nv namespace
+
+#endif // NV_MESH_SINGLEFACEMAP_H
diff --git a/thirdparty/thekla_atlas/nvmesh/param/Util.cpp b/thirdparty/thekla_atlas/nvmesh/param/Util.cpp
new file mode 100644
index 0000000000..fe7b58edf8
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/Util.cpp
@@ -0,0 +1,326 @@
+// This code is in the public domain -- castano@gmail.com
+
+#include "nvmesh.h" // pch
+
+#include "Util.h"
+
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Face.h"
+#include "nvmesh/halfedge/Vertex.h"
+
+#include "nvmath/Vector.inl"
+
+#include "nvcore/Array.inl"
+
+
+using namespace nv;
+
+// Determine if the given mesh is a quad mesh.
+bool nv::isQuadMesh(const HalfEdge::Mesh * mesh)
+{
+ nvDebugCheck(mesh != NULL);
+
+ const uint faceCount = mesh->faceCount();
+ for(uint i = 0; i < faceCount; i++) {
+ const HalfEdge::Face * face = mesh->faceAt(i);
+ if (face->edgeCount() != 4) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool nv::isTriangularMesh(const HalfEdge::Mesh * mesh)
+{
+ for (HalfEdge::Mesh::ConstFaceIterator it(mesh->faces()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Face * face = it.current();
+ if (face->edgeCount() != 3) return false;
+ }
+ return true;
+}
+
+
+uint nv::countMeshTriangles(const HalfEdge::Mesh * mesh)
+{
+ const uint faceCount = mesh->faceCount();
+
+ uint triangleCount = 0;
+
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = mesh->faceAt(f);
+
+ uint edgeCount = face->edgeCount();
+ nvDebugCheck(edgeCount > 2);
+
+ triangleCount += edgeCount - 2;
+ }
+
+ return triangleCount;
+}
+
+const HalfEdge::Vertex * nv::findBoundaryVertex(const HalfEdge::Mesh * mesh)
+{
+ const uint vertexCount = mesh->vertexCount();
+
+ for (uint v = 0; v < vertexCount; v++)
+ {
+ const HalfEdge::Vertex * vertex = mesh->vertexAt(v);
+ if (vertex->isBoundary()) return vertex;
+ }
+
+ return NULL;
+}
+
+
+HalfEdge::Mesh * nv::unifyVertices(const HalfEdge::Mesh * inputMesh)
+{
+ HalfEdge::Mesh * mesh = new HalfEdge::Mesh;
+
+ // Only add the first colocal.
+ const uint vertexCount = inputMesh->vertexCount();
+ for (uint v = 0; v < vertexCount; v++) {
+ const HalfEdge::Vertex * vertex = inputMesh->vertexAt(v);
+
+ if (vertex->isFirstColocal()) {
+ mesh->addVertex(vertex->pos);
+ }
+ }
+
+ nv::Array<uint> indexArray;
+
+ // Add new faces pointing to first colocals.
+ uint faceCount = inputMesh->faceCount();
+ for (uint f = 0; f < faceCount; f++) {
+ const HalfEdge::Face * face = inputMesh->faceAt(f);
+
+ indexArray.clear();
+
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance()) {
+ const HalfEdge::Edge * edge = it.current();
+ const HalfEdge::Vertex * vertex = edge->vertex->firstColocal();
+
+ indexArray.append(vertex->id);
+ }
+
+ mesh->addFace(indexArray);
+ }
+
+ mesh->linkBoundary();
+
+ return mesh;
+}
+
+#include "nvmath/Basis.h"
+
+static bool pointInTriangle(const Vector2 & p, const Vector2 & a, const Vector2 & b, const Vector2 & c)
+{
+ return triangleArea(a, b, p) >= 0.00001f &&
+ triangleArea(b, c, p) >= 0.00001f &&
+ triangleArea(c, a, p) >= 0.00001f;
+}
+
+
+// This is doing a simple ear-clipping algorithm that skips invalid triangles. Ideally, we should
+// also sort the ears by angle, start with the ones that have the smallest angle and proceed in order.
+HalfEdge::Mesh * nv::triangulate(const HalfEdge::Mesh * inputMesh)
+{
+ HalfEdge::Mesh * mesh = new HalfEdge::Mesh;
+
+ // Add all vertices.
+ const uint vertexCount = inputMesh->vertexCount();
+ for (uint v = 0; v < vertexCount; v++) {
+ const HalfEdge::Vertex * vertex = inputMesh->vertexAt(v);
+ mesh->addVertex(vertex->pos);
+ }
+
+ Array<int> polygonVertices;
+ Array<float> polygonAngles;
+ Array<Vector2> polygonPoints;
+
+ const uint faceCount = inputMesh->faceCount();
+ for (uint f = 0; f < faceCount; f++)
+ {
+ const HalfEdge::Face * face = inputMesh->faceAt(f);
+ nvDebugCheck(face != NULL);
+
+ const uint edgeCount = face->edgeCount();
+ nvDebugCheck(edgeCount >= 3);
+
+ polygonVertices.clear();
+ polygonVertices.reserve(edgeCount);
+
+ if (edgeCount == 3) {
+ // Simple case for triangles.
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+ const HalfEdge::Vertex * vertex = edge->vertex;
+ polygonVertices.append(vertex->id);
+ }
+
+ int v0 = polygonVertices[0];
+ int v1 = polygonVertices[1];
+ int v2 = polygonVertices[2];
+
+ mesh->addFace(v0, v1, v2);
+ }
+ else {
+ // Build 2D polygon projecting vertices onto normal plane.
+ // Faces are not necesarily planar, this is for example the case, when the face comes from filling a hole. In such cases
+ // it's much better to use the best fit plane.
+ const Vector3 fn = face->normal();
+
+ Basis basis;
+ basis.buildFrameForDirection(fn);
+
+ polygonPoints.clear();
+ polygonPoints.reserve(edgeCount);
+ polygonAngles.clear();
+ polygonAngles.reserve(edgeCount);
+
+ for (HalfEdge::Face::ConstEdgeIterator it(face->edges()); !it.isDone(); it.advance())
+ {
+ const HalfEdge::Edge * edge = it.current();
+ const HalfEdge::Vertex * vertex = edge->vertex;
+ polygonVertices.append(vertex->id);
+
+ Vector2 p;
+ p.x = dot(basis.tangent, vertex->pos);
+ p.y = dot(basis.bitangent, vertex->pos);
+
+ polygonPoints.append(p);
+ }
+ polygonAngles.resize(edgeCount);
+
+ while (polygonVertices.size() > 2) {
+ uint size = polygonVertices.size();
+
+ // Update polygon angles. @@ Update only those that have changed.
+ float minAngle = 2 * PI;
+ uint bestEar = 0; // Use first one if none of them is valid.
+ bool bestIsValid = false;
+ for (uint i = 0; i < size; i++) {
+ uint i0 = i;
+ uint i1 = (i+1) % size; // Use Sean's polygon interation trick.
+ uint i2 = (i+2) % size;
+
+ Vector2 p0 = polygonPoints[i0];
+ Vector2 p1 = polygonPoints[i1];
+ Vector2 p2 = polygonPoints[i2];
+
+ float d = clamp(dot(p0-p1, p2-p1) / (length(p0-p1) * length(p2-p1)), -1.0f, 1.0f);
+ float angle = acosf(d);
+
+ float area = triangleArea(p0, p1, p2);
+ if (area < 0.0f) angle = 2.0f * PI - angle;
+
+ polygonAngles[i1] = angle;
+
+ if (angle < minAngle || !bestIsValid) {
+
+ // Make sure this is a valid ear, if not, skip this point.
+ bool valid = true;
+ for (uint j = 0; j < size; j++) {
+ if (j == i0 || j == i1 || j == i2) continue;
+ Vector2 p = polygonPoints[j];
+
+ if (pointInTriangle(p, p0, p1, p2)) {
+ valid = false;
+ break;
+ }
+ }
+
+ if (valid || !bestIsValid) {
+ minAngle = angle;
+ bestEar = i1;
+ bestIsValid = valid;
+ }
+ }
+ }
+
+ nvDebugCheck(minAngle <= 2 * PI);
+
+ // Clip best ear:
+
+ uint i0 = (bestEar+size-1) % size;
+ uint i1 = (bestEar+0) % size;
+ uint i2 = (bestEar+1) % size;
+
+ int v0 = polygonVertices[i0];
+ int v1 = polygonVertices[i1];
+ int v2 = polygonVertices[i2];
+
+ mesh->addFace(v0, v1, v2);
+
+ polygonVertices.removeAt(i1);
+ polygonPoints.removeAt(i1);
+ polygonAngles.removeAt(i1);
+ }
+ }
+
+#if 0
+
+ uint i = 0;
+ while (polygonVertices.size() > 2 && i < polygonVertices.size()) {
+ uint size = polygonVertices.size();
+ uint i0 = (i+0) % size;
+ uint i1 = (i+1) % size;
+ uint i2 = (i+2) % size;
+
+ const HalfEdge::Vertex * v0 = polygonVertices[i0];
+ const HalfEdge::Vertex * v1 = polygonVertices[i1];
+ const HalfEdge::Vertex * v2 = polygonVertices[i2];
+
+ const Vector3 p0 = v0->pos;
+ const Vector3 p1 = v1->pos;
+ const Vector3 p2 = v2->pos;
+
+ const Vector3 e0 = p2 - p1;
+ const Vector3 e1 = p0 - p1;
+
+ // If this ear forms a valid triangle, setup relations, remove v1 and repeat.
+ Vector3 n = cross(e0, e1);
+ float len = dot(fn, n); // = sin(angle)
+
+ float angle = asin(len);
+
+
+ if (len > 0.0f) {
+ mesh->addFace(v0->id(), v1->id(), v2->id());
+ polygonVertices.removeAt(i1);
+ polygonAngles.removeAt(i1);
+ if (i2 > i1) i2--;
+ // @@ Update angles at i0 and i2
+ }
+ else {
+ i++;
+ }
+ }
+
+ // @@ Create a few degenerate triangles to avoid introducing holes.
+ i = 0;
+ const uint size = polygonVertices.size();
+ while (i < size - 2) {
+ uint i0 = (i+0) % size;
+ uint i1 = (i+1) % size;
+ uint i2 = (i+2) % size;
+
+ const HalfEdge::Vertex * v0 = polygonVertices[i0];
+ const HalfEdge::Vertex * v1 = polygonVertices[i1];
+ const HalfEdge::Vertex * v2 = polygonVertices[i2];
+
+ mesh->addFace(v0->id(), v1->id(), v2->id());
+ i++;
+ }
+#endif
+ }
+
+ mesh->linkBoundary();
+
+ return mesh;
+}
+
+
diff --git a/thirdparty/thekla_atlas/nvmesh/param/Util.h b/thirdparty/thekla_atlas/nvmesh/param/Util.h
new file mode 100644
index 0000000000..774563ac0b
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/param/Util.h
@@ -0,0 +1,18 @@
+// This code is in the public domain -- castano@gmail.com
+
+#include "nvmesh/nvmesh.h"
+
+namespace nv {
+
+ namespace HalfEdge { class Mesh; class Vertex; }
+
+ bool isQuadMesh(const HalfEdge::Mesh * mesh);
+ bool isTriangularMesh(const HalfEdge::Mesh * mesh);
+
+ uint countMeshTriangles(const HalfEdge::Mesh * mesh);
+ const HalfEdge::Vertex * findBoundaryVertex(const HalfEdge::Mesh * mesh);
+
+ HalfEdge::Mesh * unifyVertices(const HalfEdge::Mesh * inputMesh);
+ HalfEdge::Mesh * triangulate(const HalfEdge::Mesh * inputMesh);
+
+} // nv namespace
diff --git a/thirdparty/thekla_atlas/nvmesh/raster/ClippedTriangle.h b/thirdparty/thekla_atlas/nvmesh/raster/ClippedTriangle.h
new file mode 100644
index 0000000000..0947d4851c
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/raster/ClippedTriangle.h
@@ -0,0 +1,159 @@
+// Copyright NVIDIA Corporation 2007 -- Denis Kovacs <den.kovacs@gmail.com>
+
+#pragma once
+#ifndef NV_MESH_CLIPPEDTRIANGLE_H
+#define NV_MESH_CLIPPEDTRIANGLE_H
+
+#include <nvmath/Vector.h>
+
+namespace nv
+{
+
+ class ClippedTriangle
+ {
+ public:
+ ClippedTriangle(Vector2::Arg a, Vector2::Arg b, Vector2::Arg c)
+ {
+ m_numVertices = 3;
+ m_activeVertexBuffer = 0;
+
+ m_verticesA[0]=a;
+ m_verticesA[1]=b;
+ m_verticesA[2]=c;
+
+ m_vertexBuffers[0] = m_verticesA;
+ m_vertexBuffers[1] = m_verticesB;
+ }
+
+ uint vertexCount()
+ {
+ return m_numVertices;
+ }
+
+ const Vector2 * vertices()
+ {
+ return m_vertexBuffers[m_activeVertexBuffer];
+ }
+
+ inline void clipHorizontalPlane(float offset, float clipdirection)
+ {
+ Vector2 * v = m_vertexBuffers[m_activeVertexBuffer];
+ m_activeVertexBuffer ^= 1;
+ Vector2 * v2 = m_vertexBuffers[m_activeVertexBuffer];
+
+ v[m_numVertices] = v[0];
+
+ float dy2, dy1 = offset - v[0].y;
+ int dy2in, dy1in = clipdirection*dy1 >= 0;
+ uint p=0;
+
+ for (uint k=0; k<m_numVertices; k++)
+ {
+ dy2 = offset - v[k+1].y;
+ dy2in = clipdirection*dy2 >= 0;
+
+ if (dy1in) v2[p++] = v[k];
+
+ if ( dy1in + dy2in == 1 ) // not both in/out
+ {
+ float dx = v[k+1].x - v[k].x;
+ float dy = v[k+1].y - v[k].y;
+ v2[p++] = Vector2(v[k].x + dy1*(dx/dy), offset);
+ }
+
+ dy1 = dy2; dy1in = dy2in;
+ }
+ m_numVertices = p;
+
+ //for (uint k=0; k<m_numVertices; k++) printf("(%f, %f)\n", v2[k].x, v2[k].y); printf("\n");
+ }
+
+ inline void clipVerticalPlane(float offset, float clipdirection )
+ {
+ Vector2 * v = m_vertexBuffers[m_activeVertexBuffer];
+ m_activeVertexBuffer ^= 1;
+ Vector2 * v2 = m_vertexBuffers[m_activeVertexBuffer];
+
+ v[m_numVertices] = v[0];
+
+ float dx2, dx1 = offset - v[0].x;
+ int dx2in, dx1in = clipdirection*dx1 >= 0;
+ uint p=0;
+
+ for (uint k=0; k<m_numVertices; k++)
+ {
+ dx2 = offset - v[k+1].x;
+ dx2in = clipdirection*dx2 >= 0;
+
+ if (dx1in) v2[p++] = v[k];
+
+ if ( dx1in + dx2in == 1 ) // not both in/out
+ {
+ float dx = v[k+1].x - v[k].x;
+ float dy = v[k+1].y - v[k].y;
+ v2[p++] = Vector2(offset, v[k].y + dx1*(dy/dx));
+ }
+
+ dx1 = dx2; dx1in = dx2in;
+ }
+ m_numVertices = p;
+
+ //for (uint k=0; k<m_numVertices; k++) printf("(%f, %f)\n", v2[k].x, v2[k].y); printf("\n");
+ }
+
+ void computeAreaCentroid()
+ {
+ Vector2 * v = m_vertexBuffers[m_activeVertexBuffer];
+ v[m_numVertices] = v[0];
+
+ m_area = 0;
+ float centroidx=0, centroidy=0;
+ for (uint k=0; k<m_numVertices; k++)
+ {
+ // http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
+ float f = v[k].x*v[k+1].y - v[k+1].x*v[k].y;
+ m_area += f;
+ centroidx += f * (v[k].x + v[k+1].x);
+ centroidy += f * (v[k].y + v[k+1].y);
+ }
+ m_area = 0.5f * fabs(m_area);
+ if (m_area==0) {
+ m_centroid = Vector2(0.0f);
+ } else {
+ m_centroid = Vector2(centroidx/(6*m_area), centroidy/(6*m_area));
+ }
+ }
+
+ void clipAABox(float x0, float y0, float x1, float y1)
+ {
+ clipVerticalPlane ( x0, -1);
+ clipHorizontalPlane( y0, -1);
+ clipVerticalPlane ( x1, 1);
+ clipHorizontalPlane( y1, 1);
+
+ computeAreaCentroid();
+ }
+
+ Vector2 centroid()
+ {
+ return m_centroid;
+ }
+
+ float area()
+ {
+ return m_area;
+ }
+
+ private:
+ Vector2 m_verticesA[7+1];
+ Vector2 m_verticesB[7+1];
+ Vector2 * m_vertexBuffers[2];
+ uint m_numVertices;
+ uint m_activeVertexBuffer;
+ float m_area;
+ Vector2 m_centroid;
+ };
+
+} // nv namespace
+
+#endif // NV_MESH_CLIPPEDTRIANGLE_H
diff --git a/thirdparty/thekla_atlas/nvmesh/raster/Raster.cpp b/thirdparty/thekla_atlas/nvmesh/raster/Raster.cpp
new file mode 100644
index 0000000000..d46b34f045
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/raster/Raster.cpp
@@ -0,0 +1,626 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+/** @file Raster.cpp
+ * @brief Triangle rasterization library using affine interpolation. Not
+ * specially optimized, but enough for my purposes.
+**/
+
+#include "nvmesh.h" // pch
+
+#include "Raster.h"
+#include "ClippedTriangle.h"
+
+#include "nvcore/Utils.h" // min, max
+
+#include "nvmath/Vector.inl"
+#include "nvmath/ftoi.h"
+
+
+#define RA_EPSILON 0.00001f
+
+using namespace nv;
+using namespace nv::Raster;
+
+namespace
+{
+ static inline float delta(float bot, float top, float ih)
+ {
+ return (bot - top) * ih;
+ }
+
+ static inline Vector2 delta(Vector2::Arg bot, Vector2::Arg top, float ih)
+ {
+ return (bot - top) * ih;
+ }
+
+ static inline Vector3 delta(Vector3::Arg bot, Vector3::Arg top, float ih)
+ {
+ return (bot - top) * ih;
+ }
+
+ // @@ The implementation in nvmath.h should be equivalent.
+ static inline int iround(float f)
+ {
+ // @@ Optimize this.
+ return int(floorf(f+0.5f));
+ //return int(round(f));
+ //return int(f);
+ }
+
+ /// A triangle vertex.
+ struct Vertex
+ {
+ Vector2 pos; // Position.
+ Vector3 tex; // Texcoord. (Barycentric coordinate)
+ };
+
+
+ /// A triangle for rasterization.
+ struct Triangle
+ {
+ Triangle(Vector2::Arg v0, Vector2::Arg v1, Vector2::Arg v2, Vector3::Arg t0, Vector3::Arg t1, Vector3::Arg t2);
+
+ bool computeDeltas();
+
+ bool draw(const Vector2 & extents, bool enableScissors, SamplingCallback cb, void * param);
+ bool drawAA(const Vector2 & extents, bool enableScissors, SamplingCallback cb, void * param);
+ bool drawC(const Vector2 & extents, bool enableScissors, SamplingCallback cb, void * param);
+ void flipBackface();
+ void computeUnitInwardNormals();
+
+ // Vertices.
+ Vector2 v1, v2, v3;
+ Vector2 n1, n2, n3; // unit inward normals
+ Vector3 t1, t2, t3;
+
+ // Deltas.
+ Vector3 dx, dy;
+
+ float sign;
+ bool valid;
+ };
+
+
+ /// Triangle ctor.
+ Triangle::Triangle(Vector2::Arg v0, Vector2::Arg v1, Vector2::Arg v2,
+ Vector3::Arg t0, Vector3::Arg t1, Vector3::Arg t2)
+ {
+ // Init vertices.
+ this->v1 = v0;
+ this->v2 = v2;
+ this->v3 = v1;
+
+ // Set barycentric coordinates.
+ this->t1 = t0;
+ this->t2 = t2;
+ this->t3 = t1;
+
+ // make sure every triangle is front facing.
+ flipBackface();
+
+ // Compute deltas.
+ valid = computeDeltas();
+
+ computeUnitInwardNormals();
+ }
+
+
+ /// Compute texture space deltas.
+ /// This method takes two edge vectors that form a basis, determines the
+ /// coordinates of the canonic vectors in that basis, and computes the
+ /// texture gradient that corresponds to those vectors.
+ bool Triangle::computeDeltas()
+ {
+ Vector2 e0 = v3 - v1;
+ Vector2 e1 = v2 - v1;
+
+ Vector3 de0 = t3 - t1;
+ Vector3 de1 = t2 - t1;
+
+ float denom = 1.0f / (e0.y * e1.x - e1.y * e0.x);
+ if (!isFinite(denom)) {
+ return false;
+ }
+
+ float lambda1 = - e1.y * denom;
+ float lambda2 = e0.y * denom;
+ float lambda3 = e1.x * denom;
+ float lambda4 = - e0.x * denom;
+
+ dx = de0 * lambda1 + de1 * lambda2;
+ dy = de0 * lambda3 + de1 * lambda4;
+
+ return true;
+ }
+
+ // compute unit inward normals for each edge.
+ void Triangle::computeUnitInwardNormals()
+ {
+ n1 = v1 - v2; n1 = Vector2(-n1.y, n1.x); n1 = n1 * (1.0f/sqrtf(n1.x*n1.x + n1.y*n1.y));
+ n2 = v2 - v3; n2 = Vector2(-n2.y, n2.x); n2 = n2 * (1.0f/sqrtf(n2.x*n2.x + n2.y*n2.y));
+ n3 = v3 - v1; n3 = Vector2(-n3.y, n3.x); n3 = n3 * (1.0f/sqrtf(n3.x*n3.x + n3.y*n3.y));
+ }
+
+ void Triangle::flipBackface()
+ {
+ // check if triangle is backfacing, if so, swap two vertices
+ if ( ((v3.x-v1.x)*(v2.y-v1.y) - (v3.y-v1.y)*(v2.x-v1.x)) < 0 ) {
+ Vector2 hv=v1; v1=v2; v2=hv; // swap pos
+ Vector3 ht=t1; t1=t2; t2=ht; // swap tex
+ }
+ }
+
+ bool Triangle::draw(const Vector2 & extents, bool enableScissors, SamplingCallback cb, void * param)
+ {
+ // 28.4 fixed-point coordinates
+ const int Y1 = iround(16.0f * v1.y);
+ const int Y2 = iround(16.0f * v2.y);
+ const int Y3 = iround(16.0f * v3.y);
+
+ const int X1 = iround(16.0f * v1.x);
+ const int X2 = iround(16.0f * v2.x);
+ const int X3 = iround(16.0f * v3.x);
+
+ // Deltas
+ const int DX12 = X1 - X2;
+ const int DX23 = X2 - X3;
+ const int DX31 = X3 - X1;
+
+ const int DY12 = Y1 - Y2;
+ const int DY23 = Y2 - Y3;
+ const int DY31 = Y3 - Y1;
+
+ // Fixed-point deltas
+ const int FDX12 = DX12 << 4;
+ const int FDX23 = DX23 << 4;
+ const int FDX31 = DX31 << 4;
+
+ const int FDY12 = DY12 << 4;
+ const int FDY23 = DY23 << 4;
+ const int FDY31 = DY31 << 4;
+
+ int minx, miny, maxx, maxy;
+ if (enableScissors) {
+ int frustumX0 = 0 << 4;
+ int frustumY0 = 0 << 4;
+ int frustumX1 = (int)extents.x << 4;
+ int frustumY1 = (int)extents.y << 4;
+
+ // Bounding rectangle
+ minx = (nv::max(min3(X1, X2, X3), frustumX0) + 0xF) >> 4;
+ miny = (nv::max(min3(Y1, Y2, Y3), frustumY0) + 0xF) >> 4;
+ maxx = (nv::min(max3(X1, X2, X3), frustumX1) + 0xF) >> 4;
+ maxy = (nv::min(max3(Y1, Y2, Y3), frustumY1) + 0xF) >> 4;
+ }
+ else {
+ // Bounding rectangle
+ minx = (min3(X1, X2, X3) + 0xF) >> 4;
+ miny = (min3(Y1, Y2, Y3) + 0xF) >> 4;
+ maxx = (max3(X1, X2, X3) + 0xF) >> 4;
+ maxy = (max3(Y1, Y2, Y3) + 0xF) >> 4;
+ }
+
+ // Block size, standard 8x8 (must be power of two)
+ const int q = 8;
+
+ // @@ This won't work when minx,miny are negative. This code path is not used. Leaving as is for now.
+ nvCheck(minx >= 0);
+ nvCheck(miny >= 0);
+
+ // Start in corner of 8x8 block
+ minx &= ~(q - 1);
+ miny &= ~(q - 1);
+
+ // Half-edge constants
+ int C1 = DY12 * X1 - DX12 * Y1;
+ int C2 = DY23 * X2 - DX23 * Y2;
+ int C3 = DY31 * X3 - DX31 * Y3;
+
+ // Correct for fill convention
+ if(DY12 < 0 || (DY12 == 0 && DX12 > 0)) C1++;
+ if(DY23 < 0 || (DY23 == 0 && DX23 > 0)) C2++;
+ if(DY31 < 0 || (DY31 == 0 && DX31 > 0)) C3++;
+
+ // Loop through blocks
+ for(int y = miny; y < maxy; y += q)
+ {
+ for(int x = minx; x < maxx; x += q)
+ {
+ // Corners of block
+ int x0 = x << 4;
+ int x1 = (x + q - 1) << 4;
+ int y0 = y << 4;
+ int y1 = (y + q - 1) << 4;
+
+ // Evaluate half-space functions
+ bool a00 = C1 + DX12 * y0 - DY12 * x0 > 0;
+ bool a10 = C1 + DX12 * y0 - DY12 * x1 > 0;
+ bool a01 = C1 + DX12 * y1 - DY12 * x0 > 0;
+ bool a11 = C1 + DX12 * y1 - DY12 * x1 > 0;
+ int a = (a00 << 0) | (a10 << 1) | (a01 << 2) | (a11 << 3);
+
+ bool b00 = C2 + DX23 * y0 - DY23 * x0 > 0;
+ bool b10 = C2 + DX23 * y0 - DY23 * x1 > 0;
+ bool b01 = C2 + DX23 * y1 - DY23 * x0 > 0;
+ bool b11 = C2 + DX23 * y1 - DY23 * x1 > 0;
+ int b = (b00 << 0) | (b10 << 1) | (b01 << 2) | (b11 << 3);
+
+ bool c00 = C3 + DX31 * y0 - DY31 * x0 > 0;
+ bool c10 = C3 + DX31 * y0 - DY31 * x1 > 0;
+ bool c01 = C3 + DX31 * y1 - DY31 * x0 > 0;
+ bool c11 = C3 + DX31 * y1 - DY31 * x1 > 0;
+ int c = (c00 << 0) | (c10 << 1) | (c01 << 2) | (c11 << 3);
+
+ // Skip block when outside an edge
+ if(a == 0x0 || b == 0x0 || c == 0x0) continue;
+
+ // Accept whole block when totally covered
+ if(a == 0xF && b == 0xF && c == 0xF)
+ {
+ Vector3 texRow = t1 + dy*(y0 - v1.y) + dx*(x0 - v1.x);
+
+ for(int iy = y; iy < y + q; iy++)
+ {
+ Vector3 tex = texRow;
+ for(int ix = x; ix < x + q; ix++)
+ {
+ //Vector3 tex = t1 + dx * (ix - v1.x) + dy * (iy - v1.y);
+ if (!cb(param, ix, iy, tex, dx, dy, 1.0)) {
+ // early out.
+ return false;
+ }
+ tex += dx;
+ }
+ texRow += dy;
+ }
+ }
+ else // Partially covered block
+ {
+ int CY1 = C1 + DX12 * y0 - DY12 * x0;
+ int CY2 = C2 + DX23 * y0 - DY23 * x0;
+ int CY3 = C3 + DX31 * y0 - DY31 * x0;
+ Vector3 texRow = t1 + dy*(y0 - v1.y) + dx*(x0 - v1.x);
+
+ for(int iy = y; iy < y + q; iy++)
+ {
+ int CX1 = CY1;
+ int CX2 = CY2;
+ int CX3 = CY3;
+ Vector3 tex = texRow;
+
+ for(int ix = x; ix < x + q; ix++)
+ {
+ if(CX1 > 0 && CX2 > 0 && CX3 > 0)
+ {
+ if (!cb(param, ix, iy, tex, dx, dy, 1.0))
+ {
+ // early out.
+ return false;
+ }
+ }
+
+ CX1 -= FDY12;
+ CX2 -= FDY23;
+ CX3 -= FDY31;
+ tex += dx;
+ }
+
+ CY1 += FDX12;
+ CY2 += FDX23;
+ CY3 += FDX31;
+ texRow += dy;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+
+#define PX_INSIDE 1.0f/sqrt(2.0f)
+#define PX_OUTSIDE -1.0f/sqrt(2.0f)
+
+#define BK_SIZE 8
+#define BK_INSIDE sqrt(BK_SIZE*BK_SIZE/2.0f)
+#define BK_OUTSIDE -sqrt(BK_SIZE*BK_SIZE/2.0f)
+
+ // extents has to be multiple of BK_SIZE!!
+ bool Triangle::drawAA(const Vector2 & extents, bool enableScissors, SamplingCallback cb, void * param)
+ {
+ float minx, miny, maxx, maxy;
+ if (enableScissors) {
+ // Bounding rectangle
+ minx = floorf(max(min3(v1.x, v2.x, v3.x), 0.0f));
+ miny = floorf(max(min3(v1.y, v2.y, v3.y), 0.0f));
+ maxx = ceilf( min(max3(v1.x, v2.x, v3.x), extents.x-1.0f));
+ maxy = ceilf( min(max3(v1.y, v2.y, v3.y), extents.y-1.0f));
+ }
+ else {
+ // Bounding rectangle
+ minx = floorf(min3(v1.x, v2.x, v3.x));
+ miny = floorf(min3(v1.y, v2.y, v3.y));
+ maxx = ceilf( max3(v1.x, v2.x, v3.x));
+ maxy = ceilf( max3(v1.y, v2.y, v3.y));
+ }
+
+ // There's no reason to align the blocks to the viewport, instead we align them to the origin of the triangle bounds.
+ minx = floorf(minx);
+ miny = floorf(miny);
+ //minx = (float)(((int)minx) & (~((int)BK_SIZE - 1))); // align to blocksize (we don't need to worry about blocks partially out of viewport)
+ //miny = (float)(((int)miny) & (~((int)BK_SIZE - 1)));
+
+ minx += 0.5; miny +=0.5; // sampling at texel centers!
+ maxx += 0.5; maxy +=0.5;
+
+ // Half-edge constants
+ float C1 = n1.x * (-v1.x) + n1.y * (-v1.y);
+ float C2 = n2.x * (-v2.x) + n2.y * (-v2.y);
+ float C3 = n3.x * (-v3.x) + n3.y * (-v3.y);
+
+ // Loop through blocks
+ for(float y0 = miny; y0 <= maxy; y0 += BK_SIZE)
+ {
+ for(float x0 = minx; x0 <= maxx; x0 += BK_SIZE)
+ {
+ // Corners of block
+ float xc = (x0 + (BK_SIZE-1)/2.0f);
+ float yc = (y0 + (BK_SIZE-1)/2.0f);
+
+ // Evaluate half-space functions
+ float aC = C1 + n1.x * xc + n1.y * yc;
+ float bC = C2 + n2.x * xc + n2.y * yc;
+ float cC = C3 + n3.x * xc + n3.y * yc;
+
+ // Skip block when outside an edge
+ if( (aC <= BK_OUTSIDE) || (bC <= BK_OUTSIDE) || (cC <= BK_OUTSIDE) ) continue;
+
+ // Accept whole block when totally covered
+ if( (aC >= BK_INSIDE) && (bC >= BK_INSIDE) && (cC >= BK_INSIDE) )
+ {
+ Vector3 texRow = t1 + dy*(y0 - v1.y) + dx*(x0 - v1.x);
+
+ for (float y = y0; y < y0 + BK_SIZE; y++)
+ {
+ Vector3 tex = texRow;
+ for(float x = x0; x < x0 + BK_SIZE; x++)
+ {
+ if (!cb(param, (int)x, (int)y, tex, dx, dy, 1.0f))
+ {
+ return false;
+ }
+ tex += dx;
+ }
+ texRow += dy;
+ }
+ }
+ else // Partially covered block
+ {
+ float CY1 = C1 + n1.x * x0 + n1.y * y0;
+ float CY2 = C2 + n2.x * x0 + n2.y * y0;
+ float CY3 = C3 + n3.x * x0 + n3.y * y0;
+ Vector3 texRow = t1 + dy*(y0 - v1.y) + dx*(x0 - v1.x);
+
+ for(float y = y0; y < y0 + BK_SIZE; y++) // @@ This is not clipping to scissor rectangle correctly.
+ {
+ float CX1 = CY1;
+ float CX2 = CY2;
+ float CX3 = CY3;
+ Vector3 tex = texRow;
+
+ for (float x = x0; x < x0 + BK_SIZE; x++) // @@ This is not clipping to scissor rectangle correctly.
+ {
+ if (CX1 >= PX_INSIDE && CX2 >= PX_INSIDE && CX3 >= PX_INSIDE)
+ {
+ // pixel completely covered
+ Vector3 tex = t1 + dx * (x - v1.x) + dy * (y - v1.y);
+ if (!cb(param, (int)x, (int)y, tex, dx, dy, 1.0f))
+ {
+ return false;
+ }
+ }
+ else if ((CX1 >= PX_OUTSIDE) && (CX2 >= PX_OUTSIDE) && (CX3 >= PX_OUTSIDE))
+ {
+ // triangle partially covers pixel. do clipping.
+ ClippedTriangle ct(v1-Vector2(x,y), v2-Vector2(x,y), v3-Vector2(x,y));
+ ct.clipAABox(-0.5, -0.5, 0.5, 0.5);
+ Vector2 centroid = ct.centroid();
+ float area = ct.area();
+ if (area > 0.0f)
+ {
+ Vector3 texCent = tex - dx*centroid.x - dy*centroid.y;
+ //nvCheck(texCent.x >= -0.1f && texCent.x <= 1.1f); // @@ Centroid is not very exact...
+ //nvCheck(texCent.y >= -0.1f && texCent.y <= 1.1f);
+ //nvCheck(texCent.z >= -0.1f && texCent.z <= 1.1f);
+ //Vector3 texCent2 = t1 + dx * (x - v1.x) + dy * (y - v1.y);
+ if (!cb(param, (int)x, (int)y, texCent, dx, dy, area))
+ {
+ return false;
+ }
+ }
+ }
+
+ CX1 += n1.x;
+ CX2 += n2.x;
+ CX3 += n3.x;
+ tex += dx;
+ }
+
+ CY1 += n1.y;
+ CY2 += n2.y;
+ CY3 += n3.y;
+ texRow += dy;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+} // namespace
+
+
+/// Process the given triangle.
+bool nv::Raster::drawTriangle(Mode mode, Vector2::Arg extents, bool enableScissors, const Vector2 v[3], SamplingCallback cb, void * param)
+{
+ Triangle tri(v[0], v[1], v[2], Vector3(1, 0, 0), Vector3(0, 1, 0), Vector3(0, 0, 1));
+
+ // @@ It would be nice to have a conservative drawing mode that enlarges the triangle extents by one texel and is able to handle degenerate triangles.
+ // @@ Maybe the simplest thing to do would be raster triangle edges.
+
+ if (tri.valid) {
+ if (mode == Mode_Antialiased) {
+ return tri.drawAA(extents, enableScissors, cb, param);
+ }
+ if (mode == Mode_Nearest) {
+ return tri.draw(extents, enableScissors, cb, param);
+ }
+ }
+
+ return true;
+}
+
+inline static float triangleArea(Vector2::Arg v1, Vector2::Arg v2, Vector2::Arg v3)
+{
+ return 0.5f * (v3.x * v1.y + v1.x * v2.y + v2.x * v3.y - v2.x * v1.y - v3.x * v2.y - v1.x * v3.y);
+}
+
+/// Process the given quad.
+bool nv::Raster::drawQuad(Mode mode, Vector2::Arg extents, bool enableScissors, const Vector2 v[4], SamplingCallback cb, void * param)
+{
+ bool sign0 = triangleArea(v[0], v[1], v[2]) > 0.0f;
+ bool sign1 = triangleArea(v[0], v[2], v[3]) > 0.0f;
+
+ // Divide the quad into two non overlapping triangles.
+ if (sign0 == sign1) {
+ Triangle tri0(v[0], v[1], v[2], Vector3(0,0,0), Vector3(1,0,0), Vector3(1,1,0));
+ Triangle tri1(v[0], v[2], v[3], Vector3(0,0,0), Vector3(1,1,0), Vector3(0,1,0));
+
+ if (tri0.valid && tri1.valid) {
+ if (mode == Mode_Antialiased) {
+ return tri0.drawAA(extents, enableScissors, cb, param) && tri1.drawAA(extents, enableScissors, cb, param);
+ } else {
+ return tri0.draw(extents, enableScissors, cb, param) && tri1.draw(extents, enableScissors, cb, param);
+ }
+ }
+ }
+ else
+ {
+ Triangle tri0(v[0], v[1], v[3], Vector3(0,0,0), Vector3(1,0,0), Vector3(0,1,0));
+ Triangle tri1(v[1], v[2], v[3], Vector3(1,0,0), Vector3(1,1,0), Vector3(0,1,0));
+
+ if (tri0.valid && tri1.valid) {
+ if (mode == Mode_Antialiased) {
+ return tri0.drawAA(extents, enableScissors, cb, param) && tri1.drawAA(extents, enableScissors, cb, param);
+ } else {
+ return tri0.draw(extents, enableScissors, cb, param) && tri1.draw(extents, enableScissors, cb, param);
+ }
+ }
+ }
+
+ return true;
+}
+
+
+static bool drawPoint(const Vector2 & p, const Vector2 v[2], LineSamplingCallback cb, void * param) {
+
+ int x = ftoi_round(p.x);
+ int y = ftoi_round(p.y);
+ Vector2 ip = Vector2(float(x) + 0.5f, float(y) + 0.5f);
+
+ float t;
+
+ // Return minimum distance between line segment vw and point p
+ Vector2 dv = v[1] - v[0];
+ const float l2 = nv::lengthSquared(dv); // i.e. |w-v|^2 - avoid a sqrt
+ if (l2 == 0.0) {
+ t = 0; // v0 == v1 case
+ }
+ else {
+ // Consider the line extending the segment, parameterized as v + t (w - v).
+ // We find projection of point p onto the line.
+ // It falls where t = [(p-v) . (w-v)] / |w-v|^2
+ t = dot(ip - v[0], dv) / l2;
+ if (t < 0.0) {
+ t = 0; // Beyond the 'v0' end of the segment
+ }
+ else if (t > 1.0) {
+ t = 1; // Beyond the 'v1' end of the segment
+ }
+ }
+
+ Vector2 projection = v[0] + t * dv; // Projection falls on the segment
+
+ float d = distance(ip, projection);
+
+ return cb(param, x, y, t, saturate(1-d));
+}
+
+
+void nv::Raster::drawLine(bool antialias, Vector2::Arg extents, bool enableScissors, const Vector2 v[2], LineSamplingCallback cb, void * param)
+{
+ nvCheck(antialias == true); // @@ Not implemented.
+ //nvCheck(enableScissors == false); // @@ Not implemented.
+
+ // Very crappy DDA implementation.
+
+ Vector2 p = v[0];
+ Vector2 dp, dpdy;
+
+ float dx = v[1].x - v[0].x;
+ float dy = v[1].y - v[0].y;
+ int n;
+
+ // Degenerate line.
+ if (dx == 0 && dy == 0) return;
+
+ if (fabsf(dx) >= fabsf(dy)) {
+ n = iround(fabsf(dx));
+ dp.x = dx / fabsf(dx);
+ dp.y = dy / fabsf(dx);
+ nvDebugCheck(fabsf(dp.y) <= 1.0f);
+ dpdy.x = 0;
+ dpdy.y = 1;
+ }
+ else {
+ n = iround(fabs(dy));
+ dp.x = dx / fabsf(dy);
+ dp.y = dy / fabsf(dy);
+ nvDebugCheck(fabsf(dp.x) <= 1.0f);
+ dpdy.x = 1;
+ dpdy.y = 0;
+ }
+
+ for (int i = 0; i <= n; i++) {
+ drawPoint(p, v, cb, param);
+ drawPoint(p + dpdy, v, cb, param);
+ drawPoint(p - dpdy, v, cb, param);
+ p += dp;
+ }
+}
+
+
+// Draw vertical or horizontal segments. For degenerate triangles.
+/*bool nv::Raster::drawSegment(Vector2::Arg extents, bool enableScissors, const Vector2 v[2], LineSamplingCallback cb, void * param)
+{
+ nvCheck(enableScissors == false);
+
+
+ if (v[0].x == v[1].x) { // Vertical segment.
+
+ }
+ else if (v[0].y == v[1].y) { // Horizontal segment.
+ int y = ftoi_round(v[0].y);
+ int x0 = ftoi_floor(v[0].x);
+ int x1 = ftoi_floor(v[0].x);
+
+ for (int x = x0; x <= x1; x++) {
+
+ cb(param, x, y, t,
+ }
+ }
+
+ return false; // Not a valid segment.
+}
+*/
diff --git a/thirdparty/thekla_atlas/nvmesh/raster/Raster.h b/thirdparty/thekla_atlas/nvmesh/raster/Raster.h
new file mode 100644
index 0000000000..05af2ddb00
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/raster/Raster.h
@@ -0,0 +1,49 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#pragma once
+#ifndef NV_MESH_RASTER_H
+#define NV_MESH_RASTER_H
+
+/** @file Raster.h
+ * @brief Rasterization library.
+ *
+ * This is just a standard scanline rasterizer that I took from one of my old
+ * projects. The perspective correction wasn't necessary so I just removed it.
+**/
+
+#include "nvmath/Vector.h"
+#include "nvmesh/nvmesh.h"
+
+namespace nv
+{
+
+ namespace Raster
+ {
+ enum Mode {
+ Mode_Nearest,
+ Mode_Antialiased,
+ //Mode_Conservative
+ };
+
+
+ /// A callback to sample the environment. Return false to terminate rasterization.
+ typedef bool (NV_CDECL * SamplingCallback)(void * param, int x, int y, Vector3::Arg bar, Vector3::Arg dx, Vector3::Arg dy, float coverage);
+
+ // Process the given triangle. Returns false if rasterization was interrupted by the callback.
+ NVMESH_API bool drawTriangle(Mode mode, Vector2::Arg extents, bool enableScissors, const Vector2 v[3], SamplingCallback cb, void * param);
+
+ // Process the given quad. Returns false if rasterization was interrupted by the callback.
+ NVMESH_API bool drawQuad(Mode mode, Vector2::Arg extents, bool enableScissors, const Vector2 v[4], SamplingCallback cb, void * param);
+
+ typedef bool (NV_CDECL * LineSamplingCallback)(void * param, int x, int y, float t, float d); // t is the position along the segment, d is the distance to the line.
+
+ // Process the given line.
+ NVMESH_API void drawLine(bool antialias, Vector2::Arg extents, bool enableScissors, const Vector2 v[2], LineSamplingCallback cb, void * param);
+
+ // Draw vertical or horizontal segments. For degenerate triangles.
+ //NVMESH_API void drawSegment(Vector2::Arg extents, bool enableScissors, const Vector2 v[2], SamplingCallback cb, void * param);
+ }
+}
+
+
+#endif // NV_MESH_RASTER_H
diff --git a/thirdparty/thekla_atlas/nvmesh/weld/Snap.cpp b/thirdparty/thekla_atlas/nvmesh/weld/Snap.cpp
new file mode 100644
index 0000000000..b6bff4d83d
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/weld/Snap.cpp
@@ -0,0 +1,100 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#include <nvcore/RadixSort.h>
+
+#include <nvmesh/weld/Snap.h>
+#include <nvmesh/TriMesh.h>
+#include <nvmesh/geometry/Bounds.h>
+
+using namespace nv;
+
+namespace {
+
+ // Snap the given vertices.
+ void Snap(TriMesh::Vertex & a, TriMesh::Vertex & b, float texThreshold, float norThreshold)
+ {
+ a.pos = b.pos = (a.pos + b.pos) * 0.5f;
+
+ if (equal(a.tex.x, b.tex.x, texThreshold) && equal(a.tex.y, b.tex.y, texThreshold)) {
+ b.tex = a.tex = (a.tex + b.tex) * 0.5f;
+ }
+
+ if (equal(a.nor.x, b.nor.x, norThreshold) && equal(a.nor.y, b.nor.y, norThreshold) && equal(a.nor.z, b.nor.z, norThreshold)) {
+ b.nor = a.nor = (a.nor + b.nor) * 0.5f;
+ }
+ };
+
+} // nv namespace
+
+uint nv::SnapVertices(TriMesh * mesh, float posThreshold, float texThreshold, float norThreshold)
+{
+ nvDebug("--- Snapping vertices.\n");
+
+ // Determine largest axis.
+ Box box = MeshBounds::box(mesh);
+ Vector3 extents = box.extents();
+
+ int axis = 2;
+ if( extents.x > extents.y ) {
+ if( extents.x > extents.z ) {
+ axis = 0;
+ }
+ }
+ else if(extents.y > extents.z) {
+ axis = 1;
+ }
+
+ // @@ Use diagonal instead!
+
+
+ // Sort vertices according to the largest axis.
+ const uint vertexCount = mesh->vertexCount();
+ nvCheck(vertexCount > 2); // Must have at least two vertices.
+
+ // Get pos channel.
+ //PiMesh::Channel * pos_channel = mesh->GetChannel(mesh->FindChannel(VS_POS));
+ //nvCheck( pos_channel != NULL );
+
+ //const PiArray<Vec4> & pos_array = pos_channel->data;
+
+ Array<float> distArray;
+ distArray.resize(vertexCount);
+
+ for(uint v = 0; v < vertexCount; v++) {
+ if (axis == 0) distArray[v] = mesh->vertexAt(v).pos.x;
+ else if (axis == 1) distArray[v] = mesh->vertexAt(v).pos.y;
+ else distArray[v] = mesh->vertexAt(v).pos.z;
+ }
+
+ RadixSort radix;
+ const uint * xrefs = radix.sort(distArray.buffer(), distArray.count()).ranks();
+ nvCheck(xrefs != NULL);
+
+ uint snapCount = 0;
+ for(uint v = 0; v < vertexCount-1; v++) {
+ for(uint n = v+1; n < vertexCount; n++) {
+ nvDebugCheck( distArray[xrefs[v]] <= distArray[xrefs[n]] );
+
+ if (fabs(distArray[xrefs[n]] - distArray[xrefs[v]]) > posThreshold) {
+ break;
+ }
+
+ TriMesh::Vertex & v0 = mesh->vertexAt(xrefs[v]);
+ TriMesh::Vertex & v1 = mesh->vertexAt(xrefs[n]);
+
+ const float dist = length(v0.pos - v1.pos);
+
+ if (dist <= posThreshold) {
+ Snap(v0, v1, texThreshold, norThreshold);
+ snapCount++;
+ }
+ }
+ }
+
+ // @@ todo: debug, make sure that the distance between vertices is now >= threshold
+
+ nvDebug("--- %u vertices snapped\n", snapCount);
+
+ return snapCount;
+};
+
diff --git a/thirdparty/thekla_atlas/nvmesh/weld/Snap.h b/thirdparty/thekla_atlas/nvmesh/weld/Snap.h
new file mode 100644
index 0000000000..8e0566cda3
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/weld/Snap.h
@@ -0,0 +1,18 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#ifndef NV_MESH_SNAP_H
+#define NV_MESH_SNAP_H
+
+#include <nvmesh/nvmesh.h>
+#include <nvmath/nvmath.h>
+
+namespace nv
+{
+ class TriMesh;
+
+ NVMESH_API uint SnapVertices(TriMesh * mesh, float posThreshold=NV_EPSILON, float texThreshold=1.0f/1024, float norThreshold=NV_NORMAL_EPSILON);
+
+} // nv namespace
+
+
+#endif // NV_MESH_SNAP_H
diff --git a/thirdparty/thekla_atlas/nvmesh/weld/VertexWeld.cpp b/thirdparty/thekla_atlas/nvmesh/weld/VertexWeld.cpp
new file mode 100644
index 0000000000..2ba4dcae18
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/weld/VertexWeld.cpp
@@ -0,0 +1,205 @@
+// Copyright NVIDIA Corporation 2006 -- Ignacio Castano <icastano@nvidia.com>
+
+#include <nvmesh/TriMesh.h>
+#include <nvmesh/QuadTriMesh.h>
+
+#include <nvmesh/weld/VertexWeld.h>
+#include <nvmesh/weld/Weld.h>
+
+using namespace nv;
+
+// Weld trimesh vertices
+void nv::WeldVertices(TriMesh * mesh)
+{
+ nvDebug("--- Welding vertices.\n");
+
+ nvCheck(mesh != NULL);
+
+ uint count = mesh->vertexCount();
+ Array<uint> xrefs;
+ Weld<TriMesh::Vertex> weld;
+ uint newCount = weld(mesh->vertices(), xrefs);
+
+ nvDebug("--- %d vertices welded\n", count - newCount);
+
+
+ // Remap faces.
+ const uint faceCount = mesh->faceCount();
+ for(uint f = 0; f < faceCount; f++)
+ {
+ TriMesh::Face & face = mesh->faceAt(f);
+ face.v[0] = xrefs[face.v[0]];
+ face.v[1] = xrefs[face.v[1]];
+ face.v[2] = xrefs[face.v[2]];
+ }
+}
+
+
+// Weld trimesh vertices
+void nv::WeldVertices(QuadTriMesh * mesh)
+{
+ nvDebug("--- Welding vertices.\n");
+
+ nvCheck(mesh != NULL);
+
+ uint count = mesh->vertexCount();
+ Array<uint> xrefs;
+ Weld<TriMesh::Vertex> weld;
+ uint newCount = weld(mesh->vertices(), xrefs);
+
+ nvDebug("--- %d vertices welded\n", count - newCount);
+
+ // Remap faces.
+ const uint faceCount = mesh->faceCount();
+ for(uint f = 0; f < faceCount; f++)
+ {
+ QuadTriMesh::Face & face = mesh->faceAt(f);
+ face.v[0] = xrefs[face.v[0]];
+ face.v[1] = xrefs[face.v[1]];
+ face.v[2] = xrefs[face.v[2]];
+
+ if (face.isQuadFace())
+ {
+ face.v[3] = xrefs[face.v[3]];
+ }
+ }
+}
+
+
+
+// OLD code
+
+#if 0
+
+namespace {
+
+struct VertexInfo {
+ uint id; ///< Original vertex id.
+ uint normal_face_group;
+ uint tangent_face_group;
+ uint material;
+ uint chart;
+};
+
+
+/// VertexInfo hash functor.
+struct VertexHash : public IHashFunctor<VertexInfo> {
+ VertexHash(PiMeshPtr m) : mesh(m) {
+ uint c = mesh->FindChannel(VS_POS);
+ piCheck(c != PI_NULL_INDEX);
+ channel = mesh->GetChannel(c);
+ piCheck(channel != NULL);
+ }
+
+ uint32 operator () (const VertexInfo & v) const {
+ return channel->data[v.id].GetHash();
+ }
+
+private:
+ PiMeshPtr mesh;
+ PiMesh::Channel * channel;
+};
+
+
+/// VertexInfo comparator.
+struct VertexEqual : public IBinaryPredicate<VertexInfo> {
+ VertexEqual(PiMeshPtr m) : mesh(m) {}
+
+ bool operator () (const VertexInfo & a, const VertexInfo & b) const {
+
+ bool equal = a.normal_face_group == b.normal_face_group &&
+ a.tangent_face_group == b.tangent_face_group &&
+ a.material == b.material &&
+ a.chart == b.chart;
+
+ // Split vertex shared by different face types.
+ if( !equal ) {
+ return false;
+ }
+
+ // They were the same vertex.
+ if( a.id == b.id ) {
+ return true;
+ }
+
+ // Vertex equal if all the channels are equal.
+ return mesh->IsVertexEqual(a.id, b.id);
+ }
+
+private:
+ PiMeshPtr mesh;
+};
+
+} // namespace
+
+
+/// Weld the vertices.
+void PiMeshVertexWeld::WeldVertices(const PiMeshSmoothGroup * mesh_smooth_group,
+ const PiMeshMaterial * mesh_material, const PiMeshAtlas * mesh_atlas )
+{
+ piDebug( "--- Welding vertices:\n" );
+
+ piDebug( "--- Expand mesh vertices.\n" );
+ PiArray<VertexInfo> vertex_array;
+
+ const uint face_num = mesh->GetFaceNum();
+ const uint vertex_max = face_num * 3;
+ vertex_array.Resize( vertex_max );
+
+ for(uint i = 0; i < vertex_max; i++) {
+
+ uint f = i/3;
+
+ const PiMesh::Face & face = mesh->GetFace(f);
+ vertex_array[i].id = face.v[i%3];
+
+ // Reset face attributes.
+ vertex_array[i].normal_face_group = PI_NULL_INDEX;
+ vertex_array[i].tangent_face_group = PI_NULL_INDEX;
+ vertex_array[i].material = PI_NULL_INDEX;
+ vertex_array[i].chart = PI_NULL_INDEX;
+
+ // Set available attributes.
+ if( mesh_smooth_group != NULL ) {
+ if( mesh_smooth_group->HasNormalFaceGroups() ) {
+ vertex_array[i].normal_face_group = mesh_smooth_group->GetNormalFaceGroup( f );
+ }
+ if( mesh_smooth_group->HasTangentFaceGroups() ) {
+ vertex_array[i].tangent_face_group = mesh_smooth_group->GetTangentFaceGroup( f );
+ }
+ }
+ if( mesh_material != NULL ) {
+ vertex_array[i].material = mesh_material->GetFaceMaterial( f );
+ }
+ if( mesh_atlas != NULL && mesh_atlas->HasCharts() ) {
+ vertex_array[i].chart = mesh_atlas->GetFaceChart( f );
+ }
+ }
+ piDebug( "--- %d vertices.\n", vertex_max );
+
+ piDebug( "--- Collapse vertices.\n" );
+
+ uint * xrefs = new uint[vertex_max];
+ VertexHash hash(mesh);
+ VertexEqual equal(mesh);
+ const uint vertex_num = Weld( vertex_array, xrefs, hash, equal );
+ piCheck(vertex_num <= vertex_max);
+ piDebug( "--- %d vertices.\n", vertex_num );
+
+ // Remap face indices.
+ piDebug( "--- Remapping face indices.\n" );
+ mesh->RemapFaceIndices(vertex_max, xrefs);
+
+
+ // Overwrite xrefs to map new vertices to old vertices.
+ for(uint v = 0; v < vertex_num; v++) {
+ xrefs[v] = vertex_array[v].id;
+ }
+
+ // Update vertex order.
+ mesh->ReorderVertices(vertex_num, xrefs);
+
+ delete [] xrefs;
+}
+
+#endif // 0
diff --git a/thirdparty/thekla_atlas/nvmesh/weld/VertexWeld.h b/thirdparty/thekla_atlas/nvmesh/weld/VertexWeld.h
new file mode 100644
index 0000000000..1dc2e4ba4d
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/weld/VertexWeld.h
@@ -0,0 +1,19 @@
+// Copyright NVIDIA Corporation 2006 -- Ignacio Castano <icastano@nvidia.com>
+
+#ifndef NV_MESH_VERTEXWELD_H
+#define NV_MESH_VERTEXWELD_H
+
+#include <nvmesh/nvmesh.h>
+
+namespace nv
+{
+ class TriMesh;
+ class QuadMesh;
+
+ NVMESH_API void WeldVertices(TriMesh * mesh);
+ NVMESH_API void WeldVertices(QuadTriMesh * mesh);
+
+} // nv namespace
+
+
+#endif // NV_MESH_VERTEXWELD_H
diff --git a/thirdparty/thekla_atlas/nvmesh/weld/Weld.h b/thirdparty/thekla_atlas/nvmesh/weld/Weld.h
new file mode 100644
index 0000000000..e615539461
--- /dev/null
+++ b/thirdparty/thekla_atlas/nvmesh/weld/Weld.h
@@ -0,0 +1,171 @@
+// This code is in the public domain -- castanyo@yahoo.es
+
+#ifndef NV_MESH_WELD_H
+#define NV_MESH_WELD_H
+
+#include "nvcore/Array.h"
+#include "nvcore/Hash.h"
+#include "nvcore/Utils.h" // nextPowerOfTwo
+
+#include <string.h> // for memset, memcmp, memcpy
+
+// Weld function to remove array duplicates in linear time using hashing.
+
+namespace nv
+{
+
+/// Generic welding routine. This function welds the elements of the array p
+/// and returns the cross references in the xrefs array. To compare the elements
+/// it uses the given hash and equal functors.
+///
+/// This code is based on the ideas of Ville Miettinen and Pierre Terdiman.
+template <class T, class H=Hash<T>, class E=Equal<T> >
+struct Weld
+{
+ // xrefs maps old elements to new elements
+ uint operator()(Array<T> & p, Array<uint> & xrefs)
+ {
+ const uint N = p.size(); // # of input vertices.
+ uint outputCount = 0; // # of output vertices
+ uint hashSize = nextPowerOfTwo(N); // size of the hash table
+ uint * hashTable = new uint[hashSize + N]; // hash table + linked list
+ uint * next = hashTable + hashSize; // use bottom part as linked list
+
+ xrefs.resize(N);
+ memset( hashTable, NIL, hashSize*sizeof(uint) ); // init hash table (NIL = 0xFFFFFFFF so memset works)
+
+ H hash;
+ E equal;
+ for (uint i = 0; i < N; i++)
+ {
+ const T & e = p[i];
+ uint32 hashValue = hash(e) & (hashSize-1);
+ uint offset = hashTable[hashValue];
+
+ // traverse linked list
+ while( offset != NIL && !equal(p[offset], e) )
+ {
+ offset = next[offset];
+ }
+
+ xrefs[i] = offset;
+
+ // no match found - copy vertex & add to hash
+ if( offset == NIL )
+ {
+ // save xref
+ xrefs[i] = outputCount;
+
+ // copy element
+ p[outputCount] = e;
+
+ // link to hash table
+ next[outputCount] = hashTable[hashValue];
+
+ // update hash heads and increase output counter
+ hashTable[hashValue] = outputCount++;
+ }
+ }
+
+ // cleanup
+ delete [] hashTable;
+
+ p.resize(outputCount);
+
+ // number of output vertices
+ return outputCount;
+ }
+};
+
+
+/// Reorder the given array accoding to the indices given in xrefs.
+template <class T>
+void reorderArray(Array<T> & array, const Array<uint> & xrefs)
+{
+ const uint count = xrefs.count();
+ Array<T> new_array;
+ new_array.resize(count);
+
+ for(uint i = 0; i < count; i++) {
+ new_array[i] = array[xrefs[i]];
+ }
+
+ swap(array, new_array);
+}
+
+/// Reverse the given array so that new indices point to old indices.
+inline void reverseXRefs(Array<uint> & xrefs, uint count)
+{
+ Array<uint> new_xrefs;
+ new_xrefs.resize(count);
+
+ for(uint i = 0; i < xrefs.count(); i++) {
+ new_xrefs[xrefs[i]] = i;
+ }
+
+ swap(xrefs, new_xrefs);
+}
+
+
+
+//
+struct WeldN
+{
+ uint vertexSize;
+
+ WeldN(uint n) : vertexSize(n) {}
+
+ // xrefs maps old elements to new elements
+ uint operator()(uint8 * ptr, uint N, Array<uint> & xrefs)
+ {
+ uint outputCount = 0; // # of output vertices
+ uint hashSize = nextPowerOfTwo(N); // size of the hash table
+ uint * hashTable = new uint[hashSize + N]; // hash table + linked list
+ uint * next = hashTable + hashSize; // use bottom part as linked list
+
+ xrefs.resize(N);
+ memset( hashTable, NIL, hashSize*sizeof(uint) ); // init hash table (NIL = 0xFFFFFFFF so memset works)
+
+ for (uint i = 0; i < N; i++)
+ {
+ const uint8 * vertex = ptr + i * vertexSize;
+ uint32 hashValue = sdbmHash(vertex, vertexSize) & (hashSize-1);
+ uint offset = hashTable[hashValue];
+
+ // traverse linked list
+ while (offset != NIL && memcmp(ptr + offset * vertexSize, vertex, vertexSize) != 0)
+ {
+ offset = next[offset];
+ }
+
+ xrefs[i] = offset;
+
+ // no match found - copy vertex & add to hash
+ if (offset == NIL)
+ {
+ // save xref
+ xrefs[i] = outputCount;
+
+ // copy element
+ memcpy(ptr + outputCount * vertexSize, vertex, vertexSize);
+
+ // link to hash table
+ next[outputCount] = hashTable[hashValue];
+
+ // update hash heads and increase output counter
+ hashTable[hashValue] = outputCount++;
+ }
+ }
+
+ // cleanup
+ delete [] hashTable;
+
+ // number of output vertices
+ return outputCount;
+ }
+};
+
+
+} // nv namespace
+
+#endif // NV_MESH_WELD_H
diff --git a/thirdparty/thekla_atlas/poshlib/posh.c b/thirdparty/thekla_atlas/poshlib/posh.c
new file mode 100644
index 0000000000..bd3fcc66ea
--- /dev/null
+++ b/thirdparty/thekla_atlas/poshlib/posh.c
@@ -0,0 +1,1006 @@
+/*
+LICENSE:
+
+Copyright (c) 2004, Brian Hook
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * The names of this package'ss contributors contributors may not
+ be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**
+ @file posh.c
+ @author Brian Hook
+ @date 2002
+ @brief Portable Open Source Harness primary source file
+*/
+#include "posh.h"
+
+#if !defined FORCE_DOXYGEN
+
+#if !defined POSH_NO_FLOAT
+# define POSH_FLOAT_STRING "enabled"
+#else
+# define POSH_FLOAT_STRING "disabled"
+#endif
+
+#if defined POSH_64BIT_INTEGER
+# define POSH_64BIT_INTEGER_STRING "yes"
+#else
+# define POSH_64BIT_INTEGER_STRING "no"
+#endif
+
+#if defined POSH_64BIT_POINTER
+# define POSH_POINTER_STRING "64-bits"
+#else
+# define POSH_POINTER_STRING "32-bits"
+#endif
+
+#if defined POSH_LITTLE_ENDIAN
+# define IS_BIG_ENDIAN 0
+
+# define NATIVE16 POSH_LittleU16
+# define NATIVE32 POSH_LittleU32
+# define NATIVE64 POSH_LittleU64
+# define FOREIGN16 POSH_BigU16
+# define FOREIGN32 POSH_BigU32
+# define FOREIGN64 POSH_BigU64
+#else
+# define IS_BIG_ENDIAN 1
+
+# define NATIVE16 POSH_BigU16
+# define NATIVE32 POSH_BigU32
+# define NATIVE64 POSH_BigU64
+# define FOREIGN16 POSH_LittleU16
+# define FOREIGN32 POSH_LittleU32
+# define FOREIGN64 POSH_LittleU64
+#endif /* POSH_LITTLE_ENDIAN */
+
+static
+int
+s_testBigEndian( void )
+{
+ union
+ {
+ posh_byte_t c[ 4 ];
+ posh_u32_t i;
+ } u;
+
+ u.i= 1;
+
+ if ( u.c[ 0 ] == 1 )
+ {
+ return 0;
+ }
+ return 1;
+}
+
+static
+const char *
+s_testSerialization( void )
+{
+ posh_byte_t serbuf[ 8 ];
+ posh_u16_t tmp16;
+ posh_u32_t tmp32;
+
+ /* 16-bit serialization */
+ POSH_WriteU16ToLittle( serbuf, 0xABCD );
+ if ( ( tmp16 = POSH_ReadU16FromLittle( serbuf ) ) != 0xABCD )
+ {
+ return "*ERROR: failed little-endian 16-bit serialization test";
+ }
+
+ POSH_WriteU16ToBig( serbuf, 0xABCD );
+ if ( ( tmp16 = POSH_ReadU16FromBig( serbuf ) ) != 0xABCD )
+ {
+ return "*ERROR: failed big-endian 16-bit serialization test";
+ }
+
+ /* 32-bit serialization */
+ POSH_WriteU32ToLittle( serbuf, 0xABCD1234L );
+ if ( ( tmp32 = POSH_ReadU32FromLittle( serbuf ) ) != 0xABCD1234 )
+ {
+ return "*ERROR: failed little-endian 32-bit serialization test";
+ }
+
+ POSH_WriteU32ToBig( serbuf, 0xABCD1234L );
+ if ( ( tmp32 = POSH_ReadU32FromBig( serbuf ) ) != 0xABCD1234 )
+ {
+ return "*ERROR: failed big-endian 32-bit serialization test";
+ }
+
+#if defined POSH_64BIT_INTEGER
+ {
+#define REF64 POSH_U64(0xFEDCBA9876543210)
+
+ posh_u64_t tmp64;
+
+ POSH_WriteU64ToLittle( serbuf, REF64 );
+
+ if ( ( tmp64 = POSH_ReadU64FromLittle( serbuf ) ) != REF64 )
+ {
+ return "*ERROR: failed little-endian 64-bit serialization test";
+ }
+
+ POSH_WriteU64ToBig( serbuf, REF64 );
+
+ if ( ( tmp64 = POSH_ReadU64FromBig( serbuf ) ) != REF64 )
+ {
+ return "*ERROR: failed big-endian 64-bit serialization test";
+ }
+ }
+#endif
+
+ return 0;
+}
+
+#if !defined POSH_NO_FLOAT
+static
+const char *
+s_testFloatingPoint( void )
+{
+ float fRef = 10.0f/30.0f;
+ double dRef = 10.0/30.0;
+ posh_byte_t dbuf[ 8 ];
+ float fTmp;
+ double dTmp;
+
+ fTmp = POSH_FloatFromLittleBits( POSH_LittleFloatBits( fRef ) );
+
+ if ( fTmp != fRef )
+ {
+ return "*ERROR: POSH little endian floating point conversion failed. Please report this to poshlib@poshlib.org!\n";
+ }
+
+ fTmp = POSH_FloatFromBigBits( POSH_BigFloatBits( fRef ) );
+ if ( fTmp != fRef )
+ {
+ return "*ERROR: POSH big endian floating point conversion failed. Please report this to poshlib@poshlib.org!\n";
+ }
+
+ POSH_DoubleBits( dRef, dbuf );
+
+ dTmp = POSH_DoubleFromBits( dbuf );
+
+ if ( dTmp != dRef )
+ {
+ return "*ERROR: POSH double precision floating point serialization failed. Please report this to poshlib@poshlib.org!\n";
+ }
+
+ return 0;
+}
+#endif /* !defined POSH_NO_FLOAT */
+
+static
+const char *
+s_testEndianess( void )
+{
+ /* check endianess */
+ if ( s_testBigEndian() != IS_BIG_ENDIAN )
+ {
+ return "*ERROR: POSH compile time endianess does not match run-time endianess verification. Please report this to poshlib@poshlib.org!\n";
+ }
+
+ /* make sure our endian swap routines work */
+ if ( ( NATIVE32( 0x11223344L ) != 0x11223344L ) ||
+ ( FOREIGN32( 0x11223344L ) != 0x44332211L ) ||
+ ( NATIVE16( 0x1234 ) != 0x1234 ) ||
+ ( FOREIGN16( 0x1234 ) != 0x3412 ) )
+ {
+ return "*ERROR: POSH endianess macro selection failed. Please report this to poshlib@poshlib.org!\n";
+ }
+
+ /* test serialization routines */
+
+ return 0;
+}
+#endif /* !defined FORCE_DOXYGEN */
+
+/**
+ Returns a string describing this platform's basic attributes.
+
+ POSH_GetArchString() reports on an architecture's statically determined
+ attributes. In addition, it will perform run-time verification checks
+ to make sure the various platform specific functions work. If an error
+ occurs, please contact me at poshlib@poshlib.org so we can try to resolve
+ what the specific failure case is.
+ @returns a string describing this platform on success, or a string in the
+ form "*ERROR: [text]" on failure. You can simply check to see if
+ the first character returned is '*' to verify an error condition.
+*/
+const char *
+POSH_GetArchString( void )
+{
+ const char *err;
+ const char *s = "OS:.............."POSH_OS_STRING"\n"
+ "CPU:............."POSH_CPU_STRING"\n"
+ "endian:.........."POSH_ENDIAN_STRING"\n"
+ "ptr size:........"POSH_POINTER_STRING"\n"
+ "64-bit ints......"POSH_64BIT_INTEGER_STRING"\n"
+ "floating point..."POSH_FLOAT_STRING"\n"
+ "compiler........."POSH_COMPILER_STRING"\n";
+
+ /* test endianess */
+ err = s_testEndianess();
+
+ if ( err != 0 )
+ {
+ return err;
+ }
+
+ /* test serialization */
+ err = s_testSerialization();
+
+ if ( err != 0 )
+ {
+ return err;
+ }
+
+#if !defined POSH_NO_FLOAT
+ /* check that our floating point support is correct */
+ err = s_testFloatingPoint();
+
+ if ( err != 0 )
+ {
+ return err;
+ }
+
+#endif
+
+ return s;
+}
+
+/* ---------------------------------------------------------------------------*/
+/* BYTE SWAPPING SUPPORT */
+/* ---------------------------------------------------------------------------*/
+/**
+ * Byte swaps a 16-bit unsigned value
+ *
+ @ingroup ByteSwapFunctions
+ @param v [in] unsigned 16-bit input value to swap
+ @returns a byte swapped version of v
+ */
+posh_u16_t
+POSH_SwapU16( posh_u16_t v )
+{
+ posh_u16_t swapped;
+
+ swapped = v << 8;
+ swapped |= v >> 8;
+
+ return swapped;
+}
+
+/**
+ * Byte swaps a 16-bit signed value
+ *
+ @ingroup ByteSwapFunctions
+ @param v [in] signed 16-bit input value to swap
+ @returns a byte swapped version of v
+ @remarks This just calls back to the unsigned version, since byte swapping
+ is independent of sign. However, we still provide this function to
+ avoid signed/unsigned mismatch compiler warnings.
+ */
+posh_i16_t
+POSH_SwapI16( posh_i16_t v )
+{
+ return ( posh_i16_t ) POSH_SwapU16( v );
+}
+
+/**
+ * Byte swaps a 32-bit unsigned value
+ *
+ @ingroup ByteSwapFunctions
+ @param v [in] unsigned 32-bit input value to swap
+ @returns a byte swapped version of v
+ */
+posh_u32_t
+POSH_SwapU32( posh_u32_t v )
+{
+ posh_u32_t swapped;
+
+ swapped = ( v & 0xFF ) << 24;
+ swapped |= ( v & 0xFF00 ) << 8;
+ swapped |= ( v >> 8 ) & 0xFF00;
+ swapped |= ( v >> 24 );
+
+ return swapped;
+}
+
+/**
+ * Byte swaps a 32-bit signed value
+ *
+ @ingroup ByteSwapFunctions
+ @param v [in] signed 32-bit input value to swap
+ @returns a byte swapped version of v
+ @remarks This just calls back to the unsigned version, since byte swapping
+ is independent of sign. However, we still provide this function to
+ avoid signed/unsigned mismatch compiler warnings.
+ */
+posh_i32_t
+POSH_SwapI32( posh_i32_t v )
+{
+ return ( posh_i32_t ) POSH_SwapU32( ( posh_u32_t ) v );
+}
+
+#if defined POSH_64BIT_INTEGER
+/**
+ * Byte swaps a 64-bit unsigned value
+
+ @param v [in] a 64-bit input value to swap
+ @ingroup SixtyFourBit
+ @returns a byte swapped version of v
+*/
+posh_u64_t
+POSH_SwapU64( posh_u64_t v )
+{
+ posh_byte_t tmp;
+ union {
+ posh_byte_t bytes[ 8 ];
+ posh_u64_t u64;
+ } u;
+
+ u.u64 = v;
+
+ tmp = u.bytes[ 0 ]; u.bytes[ 0 ] = u.bytes[ 7 ]; u.bytes[ 7 ] = tmp;
+ tmp = u.bytes[ 1 ]; u.bytes[ 1 ] = u.bytes[ 6 ]; u.bytes[ 6 ] = tmp;
+ tmp = u.bytes[ 2 ]; u.bytes[ 2 ] = u.bytes[ 5 ]; u.bytes[ 5 ] = tmp;
+ tmp = u.bytes[ 3 ]; u.bytes[ 3 ] = u.bytes[ 4 ]; u.bytes[ 4 ] = tmp;
+
+ return u.u64;
+}
+
+/**
+ * Byte swaps a 64-bit signed value
+
+ @param v [in] a 64-bit input value to swap
+ @ingroup SixtyFourBit
+ @returns a byte swapped version of v
+*/
+posh_i64_t
+POSH_SwapI64( posh_i64_t v )
+{
+ return ( posh_i64_t ) POSH_SwapU64( ( posh_u64_t ) v );
+}
+
+#endif /* defined POSH_64BIT_INTEGER */
+
+/* ---------------------------------------------------------------------------*/
+/* IN-MEMORY SERIALIZATION */
+/* ---------------------------------------------------------------------------*/
+
+/**
+ * Writes an unsigned 16-bit value to a little endian buffer
+
+ @ingroup MemoryBuffer
+ @param dst [out] pointer to the destination buffer, may not be NULL. Alignment doesn't matter.
+ @param value [in] host-endian unsigned 16-bit value
+ @returns a pointer to the location two bytes after dst
+ @remarks does no validation of the inputs
+*/
+posh_u16_t *
+POSH_WriteU16ToLittle( void *dst, posh_u16_t value )
+{
+ posh_u16_t *p16 = ( posh_u16_t * ) dst;
+ posh_byte_t *p = ( posh_byte_t * ) dst;
+
+ p[ 0 ] = value & 0xFF;
+ p[ 1 ] = ( value & 0xFF00) >> 8;
+
+ return p16 + 1;
+}
+
+/**
+ * Writes a signed 16-bit value to a little endian buffer
+
+ @ingroup MemoryBuffer
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian signed 16-bit value
+ @returns a pointer to the location two bytes after dst
+ @remarks does no validation of the inputs. This simply calls
+ POSH_WriteU16ToLittle() with appropriate casting.
+*/
+posh_i16_t *
+POSH_WriteI16ToLittle( void *dst, posh_i16_t value )
+{
+ return ( posh_i16_t * ) POSH_WriteU16ToLittle( dst, ( posh_u16_t ) value );
+}
+
+/**
+ * Writes an unsigned 32-bit value to a little endian buffer
+
+ @ingroup MemoryBuffer
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian signed 32-bit value
+ @returns a pointer to the location four bytes after dst
+ @remarks does no validation of the inputs.
+*/
+posh_u32_t *
+POSH_WriteU32ToLittle( void *dst, posh_u32_t value )
+{
+ posh_u32_t *p32 = ( posh_u32_t * ) dst;
+ posh_byte_t *p = ( posh_byte_t * ) dst;
+
+ p[ 0 ] = ( value & 0xFF );
+ p[ 1 ] = ( value & 0xFF00 ) >> 8;
+ p[ 2 ] = ( value & 0xFF0000 ) >> 16;
+ p[ 3 ] = ( value & 0xFF000000 ) >> 24;
+
+ return p32 + 1;
+}
+
+/**
+ * Writes a signed 32-bit value to a little endian buffer
+
+ @ingroup MemoryBuffer
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian signed 32-bit value
+ @returns a pointer to the location four bytes after dst
+ @remarks does no validation of the inputs. This simply calls
+ POSH_WriteU32ToLittle() with appropriate casting.
+*/
+posh_i32_t *
+POSH_WriteI32ToLittle( void *dst, posh_i32_t value )
+{
+ return ( posh_i32_t * ) POSH_WriteU32ToLittle( dst, ( posh_u32_t ) value );
+}
+
+/**
+ * Writes an unsigned 16-bit value to a big endian buffer
+
+ @ingroup MemoryBuffer
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian unsigned 16-bit value
+ @returns a pointer to the location two bytes after dst
+ @remarks does no validation of the inputs
+*/
+posh_u16_t *
+POSH_WriteU16ToBig( void *dst, posh_u16_t value )
+{
+ posh_u16_t *p16 = ( posh_u16_t * ) dst;
+ posh_byte_t *p = ( posh_byte_t * ) dst;
+
+ p[ 1 ] = ( value & 0xFF );
+ p[ 0 ] = ( value & 0xFF00 ) >> 8;
+
+ return p16 + 1;
+}
+
+/**
+ * Writes a signed 16-bit value to a big endian buffer
+
+ @ingroup MemoryBuffer
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian signed 16-bit value
+ @returns a pointer to the location two bytes after dst
+ @remarks does no validation of the inputs. This simply calls
+ POSH_WriteU16ToLittle() with appropriate casting.
+*/
+posh_i16_t *
+POSH_WriteI16ToBig( void *dst, posh_i16_t value )
+{
+ return ( posh_i16_t * ) POSH_WriteU16ToBig( dst, ( posh_u16_t ) value );
+}
+
+/**
+ * Writes an unsigned 32-bit value to a big endian buffer
+
+ @ingroup MemoryBuffer
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian unsigned 32-bit value
+ @returns a pointer to the location four bytes after dst
+ @remarks does no validation of the inputs.
+*/
+posh_u32_t *
+POSH_WriteU32ToBig( void *dst, posh_u32_t value )
+{
+ posh_u32_t *p32 = ( posh_u32_t * ) dst;
+ posh_byte_t *p = ( posh_byte_t * ) dst;
+
+ p[ 3 ] = ( value & 0xFF );
+ p[ 2 ] = ( value & 0xFF00 ) >> 8;
+ p[ 1 ] = ( value & 0xFF0000 ) >> 16;
+ p[ 0 ] = ( value & 0xFF000000 ) >> 24;
+
+ return p32 + 1;
+}
+
+/**
+ * Writes a signed 32-bit value to a big endian buffer
+
+ @ingroup MemoryBuffer
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian signed 32-bit value
+ @returns a pointer to the location four bytes after dst
+ @remarks does no validation of the inputs. This simply calls
+ POSH_WriteU32ToBig() with appropriate casting.
+*/
+posh_i32_t *
+POSH_WriteI32ToBig( void *dst, posh_i32_t value )
+{
+ return ( posh_i32_t * ) POSH_WriteU32ToBig( dst, ( posh_u32_t ) value );
+}
+
+#if defined POSH_64BIT_INTEGER
+/**
+ * Writes an unsigned 64-bit value to a little-endian buffer
+
+ @ingroup SixtyFourBit
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian unsigned 64-bit value
+ @returns a pointer to the location eight bytes after dst
+ @remarks does no validation of the inputs.
+*/
+posh_u64_t *
+POSH_WriteU64ToLittle( void *dst, posh_u64_t value )
+{
+ posh_u64_t *p64 = ( posh_u64_t * ) dst;
+ posh_byte_t *p = ( posh_byte_t * ) dst;
+ int i;
+
+ for ( i = 0; i < 8; i++, value >>= 8 )
+ {
+ p[ i ] = ( posh_byte_t ) ( value & 0xFF );
+ }
+
+ return p64 + 1;
+}
+
+/**
+ * Writes a signed 64-bit value to a little-endian buffer
+
+ @ingroup SixtyFourBit
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian unsigned 64-bit value
+ @returns a pointer to the location eight bytes after dst
+ @remarks does no validation of the inputs.
+*/
+posh_i64_t *
+POSH_WriteI64ToLittle( void *dst, posh_i64_t value )
+{
+ return ( posh_i64_t * ) POSH_WriteU64ToLittle( dst, ( posh_u64_t ) value );
+}
+
+/**
+ * Writes an unsigned 64-bit value to a big-endian buffer
+
+ @ingroup SixtyFourBit
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian unsigned 64-bit value
+ @returns a pointer to the location eight bytes after dst
+ @remarks does no validation of the inputs.
+*/
+posh_u64_t *
+POSH_WriteU64ToBig( void *dst, posh_u64_t value )
+{
+ posh_u64_t *p64 = ( posh_u64_t * ) dst;
+ posh_byte_t *p = ( posh_byte_t * ) dst;
+ int i;
+
+ for ( i = 0; i < 8; i++, value >>= 8 )
+ {
+ p[ 7-i ] = ( posh_byte_t ) ( value & 0xFF );
+ }
+
+ return p64 + 8;
+}
+
+/**
+ * Writes a signed 64-bit value to a big-endian buffer
+
+ @ingroup SixtyFourBit
+ @param dst [out] pointer to the destination buffer, may not be NULL
+ @param value [in] host-endian signed 64-bit value
+ @returns a pointer to the location eight bytes after dst
+ @remarks does no validation of the inputs.
+*/
+posh_i64_t *
+POSH_WriteI64ToBig( void *dst, posh_i64_t value )
+{
+ return ( posh_i64_t * ) POSH_WriteU64ToBig( dst, ( posh_u64_t ) value );
+}
+
+#endif /* POSH_64BIT_INTEGER */
+
+/* ---------------------------------------------------------------------------*/
+/* IN-MEMORY DESERIALIZATION */
+/* ---------------------------------------------------------------------------*/
+
+/**
+ * Reads an unsigned 16-bit value from a little-endian buffer
+ @ingroup MemoryBuffer
+ @param src [in] source buffer
+ @returns host-endian unsigned 16-bit value
+*/
+posh_u16_t
+POSH_ReadU16FromLittle( const void *src )
+{
+ posh_u16_t v = 0;
+ posh_byte_t *p = ( posh_byte_t * ) src;
+
+ v |= p[ 0 ];
+ v |= ( ( posh_u16_t ) p[ 1 ] ) << 8;
+
+ return v;
+}
+
+/**
+ * Reads a signed 16-bit value from a little-endian buffer
+ @ingroup MemoryBuffer
+ @param src [in] source buffer
+ @returns host-endian signed 16-bit value
+*/
+posh_i16_t
+POSH_ReadI16FromLittle( const void *src )
+{
+ return ( posh_i16_t ) POSH_ReadU16FromLittle( src );
+}
+
+/**
+ * Reads an unsigned 32-bit value from a little-endian buffer
+ @ingroup MemoryBuffer
+ @param src [in] source buffer
+ @returns host-endian unsigned 32-bit value
+*/
+posh_u32_t
+POSH_ReadU32FromLittle( const void *src )
+{
+ posh_u32_t v = 0;
+ posh_byte_t *p = ( posh_byte_t * ) src;
+
+ v |= p[ 0 ];
+ v |= ( ( posh_u32_t ) p[ 1 ] ) << 8;
+ v |= ( ( posh_u32_t ) p[ 2 ] ) << 16;
+ v |= ( ( posh_u32_t ) p[ 3 ] ) << 24;
+
+ return v;
+}
+
+/**
+ * Reads a signed 32-bit value from a little-endian buffer
+ @ingroup MemoryBuffer
+ @param src [in] source buffer
+ @returns host-endian signed 32-bit value
+*/
+posh_i32_t
+POSH_ReadI32FromLittle( const void *src )
+{
+ return ( posh_i32_t ) POSH_ReadU32FromLittle( src );
+}
+
+
+/**
+ * Reads an unsigned 16-bit value from a big-endian buffer
+ @ingroup MemoryBuffer
+ @param src [in] source buffer
+ @returns host-endian unsigned 16-bit value
+*/
+posh_u16_t
+POSH_ReadU16FromBig( const void *src )
+{
+ posh_u16_t v = 0;
+ posh_byte_t *p = ( posh_byte_t * ) src;
+
+ v |= p[ 1 ];
+ v |= ( ( posh_u16_t ) p[ 0 ] ) << 8;
+
+ return v;
+}
+
+/**
+ * Reads a signed 16-bit value from a big-endian buffer
+ @ingroup MemoryBuffer
+ @param src [in] source buffer
+ @returns host-endian signed 16-bit value
+*/
+posh_i16_t
+POSH_ReadI16FromBig( const void *src )
+{
+ return ( posh_i16_t ) POSH_ReadU16FromBig( src );
+}
+
+/**
+ * Reads an unsigned 32-bit value from a big-endian buffer
+ @ingroup MemoryBuffer
+ @param src [in] source buffer
+ @returns host-endian unsigned 32-bit value
+*/
+posh_u32_t
+POSH_ReadU32FromBig( const void *src )
+{
+ posh_u32_t v = 0;
+ posh_byte_t *p = ( posh_byte_t * ) src;
+
+ v |= p[ 3 ];
+ v |= ( ( posh_u32_t ) p[ 2 ] ) << 8;
+ v |= ( ( posh_u32_t ) p[ 1 ] ) << 16;
+ v |= ( ( posh_u32_t ) p[ 0 ] ) << 24;
+
+ return v;
+}
+
+/**
+ * Reads a signed 32-bit value from a big-endian buffer
+ @ingroup MemoryBuffer
+ @param src [in] source buffer
+ @returns host-endian signed 32-bit value
+*/
+posh_i32_t
+POSH_ReadI32FromBig( const void *src )
+{
+ return POSH_BigI32( (*(const posh_i32_t*)src ) );
+}
+
+#if defined POSH_64BIT_INTEGER
+
+/**
+ * Reads an unsigned 64-bit value from a little-endian buffer
+ @param src [in] source buffer
+ @returns host-endian unsigned 32-bit value
+*/
+posh_u64_t
+POSH_ReadU64FromLittle( const void *src )
+{
+ posh_u64_t v = 0;
+ posh_byte_t *p = ( posh_byte_t * ) src;
+ int i;
+
+ for ( i = 0; i < 8; i++ )
+ {
+ v |= ( ( posh_u64_t ) p[ i ] ) << (i*8);
+ }
+
+ return v;
+}
+
+/**
+ * Reads a signed 64-bit value from a little-endian buffer
+ @param src [in] source buffer
+ @returns host-endian signed 32-bit value
+*/
+posh_i64_t
+POSH_ReadI64FromLittle( const void *src )
+{
+ return ( posh_i64_t ) POSH_ReadU64FromLittle( src );
+}
+
+/**
+ * Reads an unsigned 64-bit value from a big-endian buffer
+ @param src [in] source buffer
+ @returns host-endian unsigned 32-bit value
+*/
+posh_u64_t
+POSH_ReadU64FromBig( const void *src )
+{
+ posh_u64_t v = 0;
+ posh_byte_t *p = ( posh_byte_t * ) src;
+ int i;
+
+ for ( i = 0; i < 8; i++ )
+ {
+ v |= ( ( posh_u64_t ) p[ 7-i ] ) << (i*8);
+ }
+
+ return v;
+}
+
+/**
+ * Reads an signed 64-bit value from a big-endian buffer
+ @param src [in] source buffer
+ @returns host-endian signed 32-bit value
+*/
+posh_i64_t
+POSH_ReadI64FromBig( const void *src )
+{
+ return ( posh_i64_t ) POSH_ReadU64FromBig( src );
+}
+
+#endif /* POSH_64BIT_INTEGER */
+
+/* ---------------------------------------------------------------------------*/
+/* FLOATING POINT SUPPORT */
+/* ---------------------------------------------------------------------------*/
+
+#if !defined POSH_NO_FLOAT
+
+/** @ingroup FloatingPoint
+ @param[in] f floating point value
+ @returns a little-endian bit representation of f
+ */
+posh_u32_t
+POSH_LittleFloatBits( float f )
+{
+ union
+ {
+ float f32;
+ posh_u32_t u32;
+ } u;
+
+ u.f32 = f;
+
+ return POSH_LittleU32( u.u32 );
+}
+
+/**
+ * Extracts raw big-endian bits from a 32-bit floating point value
+ *
+ @ingroup FloatingPoint
+ @param f [in] floating point value
+ @returns a big-endian bit representation of f
+ */
+posh_u32_t
+POSH_BigFloatBits( float f )
+{
+ union
+ {
+ float f32;
+ posh_u32_t u32;
+ } u;
+
+ u.f32 = f;
+
+ return POSH_BigU32( u.u32 );
+}
+
+/**
+ * Extracts raw, little-endian bit representation from a 64-bit double.
+ *
+ @param d [in] 64-bit double precision value
+ @param dst [out] 8-byte storage buffer
+ @ingroup FloatingPoint
+ @returns the raw bits used to represent the value 'd', in the form dst[0]=LSB
+ */
+void
+POSH_DoubleBits( double d, posh_byte_t dst[ 8 ] )
+{
+ union
+ {
+ double d64;
+ posh_byte_t bytes[ 8 ];
+ } u;
+
+ u.d64 = d;
+
+#if defined POSH_LITTLE_ENDIAN
+ dst[ 0 ] = u.bytes[ 0 ];
+ dst[ 1 ] = u.bytes[ 1 ];
+ dst[ 2 ] = u.bytes[ 2 ];
+ dst[ 3 ] = u.bytes[ 3 ];
+ dst[ 4 ] = u.bytes[ 4 ];
+ dst[ 5 ] = u.bytes[ 5 ];
+ dst[ 6 ] = u.bytes[ 6 ];
+ dst[ 7 ] = u.bytes[ 7 ];
+#else
+ dst[ 0 ] = u.bytes[ 7 ];
+ dst[ 1 ] = u.bytes[ 6 ];
+ dst[ 2 ] = u.bytes[ 5 ];
+ dst[ 3 ] = u.bytes[ 4 ];
+ dst[ 4 ] = u.bytes[ 3 ];
+ dst[ 5 ] = u.bytes[ 2 ];
+ dst[ 6 ] = u.bytes[ 1 ];
+ dst[ 7 ] = u.bytes[ 0 ];
+#endif
+}
+
+/**
+ * Creates a double-precision, 64-bit floating point value from a set of raw,
+ * little-endian bits
+
+ @ingroup FloatingPoint
+ @param src [in] little-endian byte representation of 64-bit double precision
+ floating point value
+ @returns double precision floating point representation of the raw bits
+ @remarks No error checking is performed, so there are no guarantees that the
+ result is a valid number, nor is there any check to ensure that src is
+ non-NULL. BE CAREFUL USING THIS.
+ */
+double
+POSH_DoubleFromBits( const posh_byte_t src[ 8 ] )
+{
+ union
+ {
+ double d64;
+ posh_byte_t bytes[ 8 ];
+ } u;
+
+#if defined POSH_LITTLE_ENDIAN
+ u.bytes[ 0 ] = src[ 0 ];
+ u.bytes[ 1 ] = src[ 1 ];
+ u.bytes[ 2 ] = src[ 2 ];
+ u.bytes[ 3 ] = src[ 3 ];
+ u.bytes[ 4 ] = src[ 4 ];
+ u.bytes[ 5 ] = src[ 5 ];
+ u.bytes[ 6 ] = src[ 6 ];
+ u.bytes[ 7 ] = src[ 7 ];
+#else
+ u.bytes[ 0 ] = src[ 7 ];
+ u.bytes[ 1 ] = src[ 6 ];
+ u.bytes[ 2 ] = src[ 5 ];
+ u.bytes[ 3 ] = src[ 4 ];
+ u.bytes[ 4 ] = src[ 3 ];
+ u.bytes[ 5 ] = src[ 2 ];
+ u.bytes[ 6 ] = src[ 1 ];
+ u.bytes[ 7 ] = src[ 0 ];
+#endif
+
+ return u.d64;
+}
+
+/**
+ * Creates a floating point number from little endian bits
+ *
+ @ingroup FloatingPoint
+ @param bits [in] raw floating point bits in little-endian form
+ @returns a floating point number based on the given bit representation
+ @remarks No error checking is performed, so there are no guarantees that the
+ result is a valid number. BE CAREFUL USING THIS.
+ */
+float
+POSH_FloatFromLittleBits( posh_u32_t bits )
+{
+ union
+ {
+ float f32;
+ posh_u32_t u32;
+ } u;
+
+ u.u32 = bits;
+#if defined POSH_BIG_ENDIAN
+ u.u32 = POSH_SwapU32( u.u32 );
+#endif
+
+ return u.f32;
+}
+
+/**
+ * Creates a floating point number from big-endian bits
+ *
+ @ingroup FloatingPoint
+ @param bits [in] raw floating point bits in big-endian form
+ @returns a floating point number based on the given bit representation
+ @remarks No error checking is performed, so there are no guarantees that the
+ result is a valid number. BE CAREFUL USING THIS.
+ */
+float
+POSH_FloatFromBigBits( posh_u32_t bits )
+{
+ union
+ {
+ float f32;
+ posh_u32_t u32;
+ } u;
+
+ u.u32 = bits;
+#if defined POSH_LITTLE_ENDIAN
+ u.u32 = POSH_SwapU32( u.u32 );
+#endif
+
+ return u.f32;
+}
+
+#endif /* !defined POSH_NO_FLOAT */
diff --git a/thirdparty/thekla_atlas/poshlib/posh.h b/thirdparty/thekla_atlas/poshlib/posh.h
new file mode 100644
index 0000000000..c3efe26a2d
--- /dev/null
+++ b/thirdparty/thekla_atlas/poshlib/posh.h
@@ -0,0 +1,1030 @@
+/**
+@file posh.h
+@author Brian Hook
+@version 1.3.001
+
+Header file for POSH, the Portable Open Source Harness project.
+
+NOTE: Unlike most header files, this one is designed to be included
+multiple times, which is why it does not have the @#ifndef/@#define
+preamble.
+
+POSH relies on environment specified preprocessor symbols in order
+to infer as much as possible about the target OS/architecture and
+the host compiler capabilities.
+
+NOTE: POSH is simple and focused. It attempts to provide basic
+functionality and information, but it does NOT attempt to emulate
+missing functionality. I am also not willing to make POSH dirty
+and hackish to support truly ancient and/or outmoded and/or bizarre
+technologies such as non-ANSI compilers, systems with non-IEEE
+floating point formats, segmented 16-bit operating systems, etc.
+
+Please refer to the accompanying HTML documentation or visit
+http://www.poshlib.org for more information on how to use POSH.
+
+LICENSE:
+
+Copyright (c) 2004, Brian Hook
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * The names of this package'ss contributors contributors may not
+ be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+REVISION:
+
+I've been lax about revision histories, so this starts at, um, 1.3.001.
+Sorry for any inconveniences.
+
+1.3.001 - 2/23/2006 - Incorporated fix for bug reported by Bill Cary,
+ where I was not detecting Visual Studio
+ compilation on x86-64 systems. Added check for
+ _M_X64 which should fix that.
+
+*/
+/*
+I have yet to find an authoritative reference on preprocessor
+symbols, but so far this is what I've gleaned:
+
+GNU GCC/G++:
+ - __GNUC__: GNU C version
+ - __GNUG__: GNU C++ compiler
+ - __sun__ : on Sun platforms
+ - __svr4__: on Solaris and other SysV R4 platforms
+ - __mips__: on MIPS processor platforms
+ - __sparc_v9__: on Sparc 64-bit CPUs
+ - __sparcv9: 64-bit Solaris
+ - __MIPSEL__: mips processor, compiled for little endian
+ - __MIPSEB__: mips processor, compiled for big endian
+ - _R5900: MIPS/Sony/Toshiba R5900 (PS2)
+ - mc68000: 68K
+ - m68000: 68K
+ - m68k: 68K
+ - __palmos__: PalmOS
+
+Intel C/C++ Compiler:
+ - __ECC : compiler version, IA64 only
+ - __EDG__
+ - __ELF__
+ - __GXX_ABI_VERSION
+ - __i386 : IA-32 only
+ - __i386__ : IA-32 only
+ - i386 : IA-32 only
+ - __ia64 : IA-64 only
+ - __ia64__ : IA-64 only
+ - ia64 : IA-64 only
+ - __ICC : IA-32 only
+ - __INTEL_COMPILER : IA-32 or IA-64, newer versions only
+
+Apple's C/C++ Compiler for OS X:
+ - __APPLE_CC__
+ - __APPLE__
+ - __BIG_ENDIAN__
+ - __APPLE__
+ - __ppc__
+ - __MACH__
+
+DJGPP:
+ - __MSDOS__
+ - __unix__
+ - __unix
+ - __GNUC__
+ - __GO32
+ - DJGPP
+ - __i386, __i386, i386
+
+Cray's C compiler:
+ - _ADDR64: if 64-bit pointers
+ - _UNICOS:
+ - __unix:
+
+SGI's CC compiler predefines the following (and more) with -ansi:
+ - __sgi
+ - __unix
+ - __host_mips
+ - _SYSTYPE_SVR4
+ - __mips
+ - _MIPSEB
+ - anyone know if there is a predefined symbol for the compiler?!
+
+MinGW:
+ - as GnuC but also defines _WIN32, __WIN32, WIN32, _X86_, __i386, __i386__, and several others
+ - __MINGW32__
+
+Cygwin:
+ - as Gnu C, but also
+ - __unix__
+ - __CYGWIN32__
+
+Microsoft Visual Studio predefines the following:
+ - _MSC_VER
+ - _WIN32: on Win32
+ - _M_IX6 (on x86 systems)
+ - _M_X64: on x86-64 systems
+ - _M_ALPHA (on DEC AXP systems)
+ - _SH3: WinCE, Hitachi SH-3
+ - _MIPS: WinCE, MIPS
+ - _ARM: WinCE, ARM
+
+Sun's C Compiler:
+ - sun and _sun
+ - unix and _unix
+ - sparc and _sparc (SPARC systems only)
+ - i386 and _i386 (x86 systems only)
+ - __SVR4 (Solaris only)
+ - __sparcv9: 64-bit solaris
+ - __SUNPRO_C
+ - _LP64: defined in 64-bit LP64 mode, but only if <sys/types.h> is included
+
+Borland C/C++ predefines the following:
+ - __BORLANDC__:
+
+DEC/Compaq C/C++ on Alpha:
+ - __alpha
+ - __arch64__
+ - __unix__ (on Tru64 Unix)
+ - __osf__
+ - __DECC
+ - __DECCXX (C++ compilation)
+ - __DECC_VER
+ - __DECCXX_VER
+
+IBM's AIX compiler:
+ - __64BIT__ if 64-bit mode
+ - _AIX
+ - __IBMC__: C compiler version
+ - __IBMCPP__: C++ compiler version
+ - _LONG_LONG: compiler allows long long
+
+Watcom:
+ - __WATCOMC__
+ - __DOS__ : if targeting DOS
+ - __386__ : if 32-bit support
+ - __WIN32__ : if targetin 32-bit Windows
+
+HP-UX C/C++ Compiler:
+ - __hpux
+ - __unix
+ - __hppa (on PA-RISC)
+ - __LP64__: if compiled in 64-bit mode
+
+Metrowerks:
+ - __MWERKS__
+ - __powerpc__
+ - _powerc
+ - __MC68K__
+ - macintosh when compiling for MacOS
+ - __INTEL__ for x86 targets
+ - __POWERPC__
+
+*/
+
+/*
+** ----------------------------------------------------------------------------
+** Include <limits.h> optionally
+** ----------------------------------------------------------------------------
+*/
+#ifdef POSH_USE_LIMITS_H
+# include <limits.h>
+#endif
+
+/*
+** ----------------------------------------------------------------------------
+** Determine compilation environment
+** ----------------------------------------------------------------------------
+*/
+#if defined __ECC || defined __ICC || defined __INTEL_COMPILER
+# define POSH_COMPILER_STRING "Intel C/C++"
+# define POSH_COMPILER_INTEL 1
+#endif
+
+#if ( defined __host_mips || defined __sgi ) && !defined __GNUC__
+# define POSH_COMPILER_STRING "MIPSpro C/C++"
+# define POSH_COMPILER_MIPSPRO 1
+#endif
+
+#if defined __hpux && !defined __GNUC__
+# define POSH_COMPILER_STRING "HP-UX CC"
+# define POSH_COMPILER_HPCC 1
+#endif
+
+#if defined __GNUC__ && !defined __clang__
+# define POSH_COMPILER_STRING "Gnu GCC"
+# define POSH_COMPILER_GCC 1
+#endif
+
+#if defined __clang__
+# define POSH_COMPILER_STRING "Clang"
+# define POSH_COMPILER_CLANG 1
+#endif
+
+#if defined __APPLE_CC__
+ /* we don't define the compiler string here, let it be GNU */
+# define POSH_COMPILER_APPLECC 1
+#endif
+
+#if defined __IBMC__ || defined __IBMCPP__
+# define POSH_COMPILER_STRING "IBM C/C++"
+# define POSH_COMPILER_IBM 1
+#endif
+
+#if defined _MSC_VER
+# define POSH_COMPILER_STRING "Microsoft Visual C++"
+# define POSH_COMPILER_MSVC 1
+#endif
+
+#if defined __SUNPRO_C
+# define POSH_COMPILER_STRING "Sun Pro"
+# define POSH_COMPILER_SUN 1
+#endif
+
+#if defined __BORLANDC__
+# define POSH_COMPILER_STRING "Borland C/C++"
+# define POSH_COMPILER_BORLAND 1
+#endif
+
+#if defined __MWERKS__
+# define POSH_COMPILER_STRING "MetroWerks CodeWarrior"
+# define POSH_COMPILER_METROWERKS 1
+#endif
+
+#if defined __DECC || defined __DECCXX
+# define POSH_COMPILER_STRING "Compaq/DEC C/C++"
+# define POSH_COMPILER_DEC 1
+#endif
+
+#if defined __WATCOMC__
+# define POSH_COMPILER_STRING "Watcom C/C++"
+# define POSH_COMPILER_WATCOM 1
+#endif
+
+#if !defined POSH_COMPILER_STRING
+# define POSH_COMPILER_STRING "Unknown compiler"
+#endif
+
+/*
+** ----------------------------------------------------------------------------
+** Determine target operating system
+** ----------------------------------------------------------------------------
+*/
+#if defined linux || defined __linux__
+# define POSH_OS_LINUX 1
+# define POSH_OS_STRING "Linux"
+#endif
+
+#if defined __FreeBSD__
+# define POSH_OS_FREEBSD 1
+# define POSH_OS_STRING "FreeBSD"
+#endif
+
+#if defined __CYGWIN32__
+# define POSH_OS_CYGWIN32 1
+# define POSH_OS_STRING "Cygwin"
+#endif
+
+#if defined GEKKO
+# define POSH_OS_GAMECUBE
+# define __powerpc__
+# define POSH_OS_STRING "GameCube"
+#endif
+
+#if defined __MINGW32__
+# define POSH_OS_MINGW 1
+# define POSH_OS_STRING "MinGW"
+#endif
+
+#if defined GO32 && defined DJGPP && defined __MSDOS__
+# define POSH_OS_GO32 1
+# define POSH_OS_STRING "GO32/MS-DOS"
+#endif
+
+/* NOTE: make sure you use /bt=DOS if compiling for 32-bit DOS,
+ otherwise Watcom assumes host=target */
+#if defined __WATCOMC__ && defined __386__ && defined __DOS__
+# define POSH_OS_DOS32 1
+# define POSH_OS_STRING "DOS/32-bit"
+#endif
+
+#if defined _UNICOS
+# define POSH_OS_UNICOS 1
+# define POSH_OS_STRING "UNICOS"
+#endif
+
+//ACS if we're in xcode, look at the target conditionals to figure out if this is ios or osx
+#if defined __APPLE__
+# include "TargetConditionals.h"
+#endif
+#if TARGET_OS_IPHONE
+# define POSH_OS_IOS 1
+# define POSH_OS_STRING "iOS"
+#else
+# if ( defined __MWERKS__ && defined __powerc && !defined macintosh ) || defined __APPLE_CC__ || defined macosx
+# define POSH_OS_OSX 1
+# define POSH_OS_STRING "MacOS X"
+# endif
+#endif
+
+#if defined __sun__ || defined sun || defined __sun || defined __solaris__
+# if defined __SVR4 || defined __svr4__ || defined __solaris__
+# define POSH_OS_STRING "Solaris"
+# define POSH_OS_SOLARIS 1
+# endif
+# if !defined POSH_OS_STRING
+# define POSH_OS_STRING "SunOS"
+# define POSH_OS_SUNOS 1
+# endif
+#endif
+
+#if defined __sgi__ || defined sgi || defined __sgi
+# define POSH_OS_IRIX 1
+# define POSH_OS_STRING "Irix"
+#endif
+
+#if defined __hpux__ || defined __hpux
+# define POSH_OS_HPUX 1
+# define POSH_OS_STRING "HP-UX"
+#endif
+
+#if defined _AIX
+# define POSH_OS_AIX 1
+# define POSH_OS_STRING "AIX"
+#endif
+
+#if ( defined __alpha && defined __osf__ )
+# define POSH_OS_TRU64 1
+# define POSH_OS_STRING "Tru64"
+#endif
+
+#if defined __BEOS__ || defined __beos__
+# define POSH_OS_BEOS 1
+# define POSH_OS_STRING "BeOS"
+#endif
+
+#if defined amiga || defined amigados || defined AMIGA || defined _AMIGA
+# define POSH_OS_AMIGA 1
+# define POSH_OS_STRING "Amiga"
+#endif
+
+#if defined __unix__
+# define POSH_OS_UNIX 1
+# if !defined POSH_OS_STRING
+# define POSH_OS_STRING "Unix-like(generic)"
+# endif
+#endif
+
+#if defined _WIN32_WCE
+# define POSH_OS_WINCE 1
+# define POSH_OS_STRING "Windows CE"
+#endif
+
+#if defined _XBOX || defined _XBOX_VER
+# define POSH_OS_XBOX 1
+# define POSH_OS_STRING "XBOX"
+#endif
+
+#if defined __ORBIS__
+# define POSH_OS_ORBIS
+#endif
+
+#if defined _WIN32 || defined WIN32 || defined __NT__ || defined __WIN32__
+# if !defined POSH_OS_XBOX
+# define POSH_OS_WIN32 1
+# if defined _WIN64
+# define POSH_OS_WIN64 1
+# define POSH_OS_STRING "Win64"
+# else
+# if !defined POSH_OS_STRING
+# define POSH_OS_STRING "Win32"
+# endif
+# endif
+# endif
+#endif
+
+#if defined __palmos__
+# define POSH_OS_PALM 1
+# define POSH_OS_STRING "PalmOS"
+#endif
+
+#if defined THINK_C || defined macintosh
+# define POSH_OS_MACOS 1
+# define POSH_OS_STRING "MacOS"
+#endif
+
+/*
+** -----------------------------------------------------------------------------
+** Determine target CPU
+** -----------------------------------------------------------------------------
+*/
+
+#if defined GEKKO
+# define POSH_CPU_PPC750 1
+# define POSH_CPU_STRING "IBM PowerPC 750 (NGC)"
+#endif
+
+#if defined mc68000 || defined m68k || defined __MC68K__ || defined m68000
+# define POSH_CPU_68K 1
+# define POSH_CPU_STRING "MC68000"
+#endif
+
+#if defined __PPC__ || defined __POWERPC__ || defined powerpc || defined _POWER || defined __ppc__ || defined __powerpc__ || defined _M_PPC
+# define POSH_CPU_PPC 1
+# if !defined POSH_CPU_STRING
+# if defined __powerpc64__
+# define POSH_CPU_STRING "PowerPC64"
+# else
+# define POSH_CPU_STRING "PowerPC"
+# endif
+# endif
+#endif
+
+#if defined _CRAYT3E || defined _CRAYMPP
+# define POSH_CPU_CRAYT3E 1 /* target processor is a DEC Alpha 21164 used in a Cray T3E*/
+# define POSH_CPU_STRING "Cray T3E (Alpha 21164)"
+#endif
+
+#if defined CRAY || defined _CRAY && !defined _CRAYT3E
+# error Non-AXP Cray systems not supported
+#endif
+
+#if defined _SH3
+# define POSH_CPU_SH3 1
+# define POSH_CPU_STRING "Hitachi SH-3"
+#endif
+
+#if defined __sh4__ || defined __SH4__
+# define POSH_CPU_SH3 1
+# define POSH_CPU_SH4 1
+# define POSH_CPU_STRING "Hitachi SH-4"
+#endif
+
+#if defined __sparc__ || defined __sparc
+# if defined __arch64__ || defined __sparcv9 || defined __sparc_v9__
+# define POSH_CPU_SPARC64 1
+# define POSH_CPU_STRING "Sparc/64"
+# else
+# define POSH_CPU_STRING "Sparc/32"
+# endif
+# define POSH_CPU_SPARC 1
+#endif
+
+#if defined ARM || defined __arm__ || defined _ARM
+# define POSH_CPU_STRONGARM 1
+# define POSH_CPU_STRING "ARM"
+#endif
+
+#if defined mips || defined __mips__ || defined __MIPS__ || defined _MIPS
+# define POSH_CPU_MIPS 1
+# if defined _R5900
+# define POSH_CPU_STRING "MIPS R5900 (PS2)"
+# else
+# define POSH_CPU_STRING "MIPS"
+# endif
+#endif
+
+#if defined __ia64 || defined _M_IA64 || defined __ia64__
+# define POSH_CPU_IA64 1
+# define POSH_CPU_STRING "IA64"
+#endif
+
+#if defined __X86__ || defined __i386__ || defined i386 || defined _M_IX86 || defined __386__ || defined __x86_64__ || defined _M_X64
+# define POSH_CPU_X86 1
+# if defined __x86_64__ || defined _M_X64
+# define POSH_CPU_X86_64 1
+# endif
+# if defined POSH_CPU_X86_64
+# define POSH_CPU_STRING "AMD x86-64"
+# else
+# define POSH_CPU_STRING "Intel 386+"
+# endif
+#endif
+
+#if defined __alpha || defined alpha || defined _M_ALPHA || defined __alpha__
+# define POSH_CPU_AXP 1
+# define POSH_CPU_STRING "AXP"
+#endif
+
+#if defined __hppa || defined hppa
+# define POSH_CPU_HPPA 1
+# define POSH_CPU_STRING "PA-RISC"
+#endif
+
+#if !defined POSH_CPU_STRING
+# error POSH cannot determine target CPU
+# define POSH_CPU_STRING "Unknown" /* this is here for Doxygen's benefit */
+#endif
+
+/*
+** -----------------------------------------------------------------------------
+** Attempt to autodetect building for embedded on Sony PS2
+** -----------------------------------------------------------------------------
+*/
+#if !defined POSH_OS_STRING
+# if !defined FORCE_DOXYGEN
+# define POSH_OS_EMBEDDED 1
+# endif
+# if defined _R5900
+# define POSH_OS_STRING "Sony PS2(embedded)"
+# else
+# define POSH_OS_STRING "Embedded/Unknown"
+# endif
+#endif
+
+/*
+** ---------------------------------------------------------------------------
+** Handle cdecl, stdcall, fastcall, etc.
+** ---------------------------------------------------------------------------
+*/
+#if defined POSH_CPU_X86 && !defined POSH_CPU_X86_64
+# if defined __GNUC__
+# define POSH_CDECL __attribute__((cdecl))
+# define POSH_STDCALL __attribute__((stdcall))
+# define POSH_FASTCALL __attribute__((fastcall))
+# elif ( defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ || defined __MWERKS__ )
+# define POSH_CDECL __cdecl
+# define POSH_STDCALL __stdcall
+# define POSH_FASTCALL __fastcall
+# endif
+#else
+# define POSH_CDECL
+# define POSH_STDCALL
+# define POSH_FASTCALL
+#endif
+
+/*
+** ---------------------------------------------------------------------------
+** Define POSH_IMPORTEXPORT signature based on POSH_DLL and POSH_BUILDING_LIB
+** ---------------------------------------------------------------------------
+*/
+
+/*
+** We undefine this so that multiple inclusions will work
+*/
+#if defined POSH_IMPORTEXPORT
+# undef POSH_IMPORTEXPORT
+#endif
+
+#if defined POSH_DLL
+# if defined POSH_OS_WIN32
+# if defined _MSC_VER
+# if ( _MSC_VER >= 800 )
+# if defined POSH_BUILDING_LIB
+# define POSH_IMPORTEXPORT __declspec( dllexport )
+# else
+# define POSH_IMPORTEXPORT __declspec( dllimport )
+# endif
+# else
+# if defined POSH_BUILDING_LIB
+# define POSH_IMPORTEXPORT __export
+# else
+# define POSH_IMPORTEXPORT
+# endif
+# endif
+# endif /* defined _MSC_VER */
+# if defined __BORLANDC__
+# if ( __BORLANDC__ >= 0x500 )
+# if defined POSH_BUILDING_LIB
+# define POSH_IMPORTEXPORT __declspec( dllexport )
+# else
+# define POSH_IMPORTEXPORT __declspec( dllimport )
+# endif
+# else
+# if defined POSH_BUILDING_LIB
+# define POSH_IMPORTEXPORT __export
+# else
+# define POSH_IMPORTEXPORT
+# endif
+# endif
+# endif /* defined __BORLANDC__ */
+ /* for all other compilers, we're just making a blanket assumption */
+# if defined __GNUC__ || defined __WATCOMC__ || defined __MWERKS__
+# if defined POSH_BUILDING_LIB
+# define POSH_IMPORTEXPORT __declspec( dllexport )
+# else
+# define POSH_IMPORTEXPORT __declspec( dllimport )
+# endif
+# endif /* all other compilers */
+# if !defined POSH_IMPORTEXPORT
+# error Building DLLs not supported on this compiler (poshlib@poshlib.org if you know how)
+# endif
+# endif /* defined POSH_OS_WIN32 */
+#endif
+
+/* On pretty much everything else, we can thankfully just ignore this */
+#if !defined POSH_IMPORTEXPORT
+# define POSH_IMPORTEXPORT
+#endif
+
+#if defined FORCE_DOXYGEN
+# define POSH_DLL
+# define POSH_BUILDING_LIB
+# undef POSH_DLL
+# undef POSH_BUILDING_LIB
+#endif
+
+/*
+** ----------------------------------------------------------------------------
+** (Re)define POSH_PUBLIC_API export signature
+** ----------------------------------------------------------------------------
+*/
+#ifdef POSH_PUBLIC_API
+# undef POSH_PUBLIC_API
+#endif
+
+#if ( ( defined _MSC_VER ) && ( _MSC_VER < 800 ) ) || ( defined __BORLANDC__ && ( __BORLANDC__ < 0x500 ) )
+# define POSH_PUBLIC_API(rtype) extern rtype POSH_IMPORTEXPORT
+#else
+# define POSH_PUBLIC_API(rtype) extern POSH_IMPORTEXPORT rtype
+#endif
+
+/*
+** ----------------------------------------------------------------------------
+** Try to infer endianess. Basically we just go through the CPUs we know are
+** little endian, and assume anything that isn't one of those is big endian.
+** As a sanity check, we also do this with operating systems we know are
+** little endian, such as Windows. Some processors are bi-endian, such as
+** the MIPS series, so we have to be careful about those.
+** ----------------------------------------------------------------------------
+*/
+#if defined POSH_CPU_X86 || defined POSH_CPU_AXP || defined POSH_CPU_STRONGARM || defined POSH_OS_WIN32 || defined POSH_OS_WINCE || defined __MIPSEL__
+# define POSH_ENDIAN_STRING "little"
+# define POSH_LITTLE_ENDIAN 1
+#else
+# define POSH_ENDIAN_STRING "big"
+# define POSH_BIG_ENDIAN 1
+#endif
+
+#if defined FORCE_DOXYGEN
+# define POSH_LITTLE_ENDIAN
+#endif
+
+/*
+** ----------------------------------------------------------------------------
+** Cross-platform compile time assertion macro
+** ----------------------------------------------------------------------------
+*/
+#define POSH_COMPILE_TIME_ASSERT(name, x) typedef int _POSH_dummy_ ## name[(x) ? 1 : -1 ]
+
+/*
+** ----------------------------------------------------------------------------
+** 64-bit Integer
+**
+** We don't require 64-bit support, nor do we emulate its functionality, we
+** simply export it if it's available. Since we can't count on <limits.h>
+** for 64-bit support, we ignore the POSH_USE_LIMITS_H directive.
+** ----------------------------------------------------------------------------
+*/
+#if defined ( __LP64__ ) || defined ( __powerpc64__ ) || defined POSH_CPU_SPARC64
+# define POSH_64BIT_INTEGER 1
+typedef long posh_i64_t;
+typedef unsigned long posh_u64_t;
+# define POSH_I64( x ) ((posh_i64_t)x)
+# define POSH_U64( x ) ((posh_u64_t)x)
+# define POSH_I64_PRINTF_PREFIX "l"
+#elif defined _MSC_VER || defined __BORLANDC__ || defined __WATCOMC__ || ( defined __alpha && defined __DECC )
+# define POSH_64BIT_INTEGER 1
+typedef __int64 posh_i64_t;
+typedef unsigned __int64 posh_u64_t;
+# define POSH_I64( x ) ((posh_i64_t)x)
+# define POSH_U64( x ) ((posh_u64_t)x)
+# define POSH_I64_PRINTF_PREFIX "I64"
+#elif defined __GNUC__ || defined __MWERKS__ || defined __SUNPRO_C || defined __SUNPRO_CC || defined __APPLE_CC__ || defined POSH_OS_IRIX || defined _LONG_LONG || defined _CRAYC
+# define POSH_64BIT_INTEGER 1
+typedef long long posh_i64_t;
+typedef unsigned long long posh_u64_t;
+# define POSH_U64( x ) ((posh_u64_t)(x##LL))
+# define POSH_I64( x ) ((posh_i64_t)(x##LL))
+# define POSH_I64_PRINTF_PREFIX "ll"
+#endif
+
+/* hack */
+/*#ifdef __MINGW32__
+#undef POSH_I64
+#undef POSH_U64
+#undef POSH_I64_PRINTF_PREFIX
+#define POSH_I64( x ) ((posh_i64_t)x)
+#define POSH_U64( x ) ((posh_u64_t)x)
+#define POSH_I64_PRINTF_PREFIX "I64"
+#endif*/
+
+#ifdef FORCE_DOXYGEN
+typedef long long posh_i64_t;
+typedef unsigned long posh_u64_t;
+# define POSH_64BIT_INTEGER
+# define POSH_I64_PRINTF_PREFIX
+# define POSH_I64(x)
+# define POSH_U64(x)
+#endif
+
+/** Minimum value for a 64-bit signed integer */
+#define POSH_I64_MIN POSH_I64(0x8000000000000000)
+/** Maximum value for a 64-bit signed integer */
+#define POSH_I64_MAX POSH_I64(0x7FFFFFFFFFFFFFFF)
+/** Minimum value for a 64-bit unsigned integer */
+#define POSH_U64_MIN POSH_U64(0)
+/** Maximum value for a 64-bit unsigned integer */
+#define POSH_U64_MAX POSH_U64(0xFFFFFFFFFFFFFFFF)
+
+/* ----------------------------------------------------------------------------
+** Basic Sized Types
+**
+** These types are expected to be EXACTLY sized so you can use them for
+** serialization.
+** ----------------------------------------------------------------------------
+*/
+#define POSH_FALSE 0
+#define POSH_TRUE 1
+
+typedef int posh_bool_t;
+typedef unsigned char posh_byte_t;
+
+/* NOTE: These assume that CHAR_BIT is 8!! */
+typedef unsigned char posh_u8_t;
+typedef signed char posh_i8_t;
+
+#if defined POSH_USE_LIMITS_H
+# if CHAR_BITS > 8
+# error This machine uses 9-bit characters. This is a warning, you can comment this out now.
+# endif /* CHAR_BITS > 8 */
+
+/* 16-bit */
+# if ( USHRT_MAX == 65535 )
+ typedef unsigned short posh_u16_t;
+ typedef short posh_i16_t;
+# else
+ /* Yes, in theory there could still be a 16-bit character type and shorts are
+ 32-bits in size...if you find such an architecture, let me know =P */
+# error No 16-bit type found
+# endif
+
+/* 32-bit */
+# if ( INT_MAX == 2147483647 )
+ typedef unsigned posh_u32_t;
+ typedef int posh_i32_t;
+# elif ( LONG_MAX == 2147483647 )
+ typedef unsigned long posh_u32_t;
+ typedef long posh_i32_t;
+# else
+ error No 32-bit type found
+# endif
+
+#else /* POSH_USE_LIMITS_H */
+
+ typedef unsigned short posh_u16_t;
+ typedef short posh_i16_t;
+
+# if !defined POSH_OS_PALM
+ typedef unsigned posh_u32_t;
+ typedef int posh_i32_t;
+# else
+ typedef unsigned long posh_u32_t;
+ typedef long posh_i32_t;
+# endif
+#endif
+
+/** Minimum value for a byte */
+#define POSH_BYTE_MIN 0
+/** Maximum value for an 8-bit unsigned value */
+#define POSH_BYTE_MAX 255
+/** Minimum value for a byte */
+#define POSH_I16_MIN ( ( posh_i16_t ) 0x8000 )
+/** Maximum value for a 16-bit signed value */
+#define POSH_I16_MAX ( ( posh_i16_t ) 0x7FFF )
+/** Minimum value for a 16-bit unsigned value */
+#define POSH_U16_MIN 0
+/** Maximum value for a 16-bit unsigned value */
+#define POSH_U16_MAX ( ( posh_u16_t ) 0xFFFF )
+/** Minimum value for a 32-bit signed value */
+#define POSH_I32_MIN ( ( posh_i32_t ) 0x80000000 )
+/** Maximum value for a 32-bit signed value */
+#define POSH_I32_MAX ( ( posh_i32_t ) 0x7FFFFFFF )
+/** Minimum value for a 32-bit unsigned value */
+#define POSH_U32_MIN 0
+/** Maximum value for a 32-bit unsigned value */
+#define POSH_U32_MAX ( ( posh_u32_t ) 0xFFFFFFFF )
+
+/*
+** ----------------------------------------------------------------------------
+** Sanity checks on expected sizes
+** ----------------------------------------------------------------------------
+*/
+#if !defined FORCE_DOXYGEN
+
+POSH_COMPILE_TIME_ASSERT(posh_byte_t, sizeof(posh_byte_t) == 1);
+POSH_COMPILE_TIME_ASSERT(posh_u8_t, sizeof(posh_u8_t) == 1);
+POSH_COMPILE_TIME_ASSERT(posh_i8_t, sizeof(posh_i8_t) == 1);
+POSH_COMPILE_TIME_ASSERT(posh_u16_t, sizeof(posh_u16_t) == 2);
+POSH_COMPILE_TIME_ASSERT(posh_i16_t, sizeof(posh_i16_t) == 2);
+POSH_COMPILE_TIME_ASSERT(posh_u32_t, sizeof(posh_u32_t) == 4);
+POSH_COMPILE_TIME_ASSERT(posh_i32_t, sizeof(posh_i32_t) == 4);
+
+#if !defined POSH_NO_FLOAT
+ POSH_COMPILE_TIME_ASSERT(posh_testfloat_t, sizeof(float)==4 );
+ POSH_COMPILE_TIME_ASSERT(posh_testdouble_t, sizeof(double)==8);
+#endif
+
+#if defined POSH_64BIT_INTEGER
+ POSH_COMPILE_TIME_ASSERT(posh_u64_t, sizeof(posh_u64_t) == 8);
+ POSH_COMPILE_TIME_ASSERT(posh_i64_t, sizeof(posh_i64_t) == 8);
+#endif
+
+#endif
+
+/*
+** ----------------------------------------------------------------------------
+** 64-bit pointer support
+** ----------------------------------------------------------------------------
+*/
+#if defined POSH_CPU_AXP && ( defined POSH_OS_TRU64 || defined POSH_OS_LINUX )
+# define POSH_64BIT_POINTER 1
+#endif
+
+#if defined POSH_CPU_X86_64 && defined POSH_OS_LINUX
+# define POSH_64BIT_POINTER 1
+#endif
+
+#if defined POSH_CPU_SPARC64 || defined POSH_OS_WIN64 || defined __64BIT__ || defined __LP64 || defined _LP64 || defined __LP64__ || defined _ADDR64 || defined _CRAYC
+# define POSH_64BIT_POINTER 1
+#endif
+
+#if defined POSH_64BIT_POINTER
+ POSH_COMPILE_TIME_ASSERT( posh_64bit_pointer, sizeof( void * ) == 8 );
+#elif !defined FORCE_DOXYGEN
+/* if this assertion is hit then you're on a system that either has 64-bit
+ addressing and we didn't catch it, or you're on a system with 16-bit
+ pointers. In the latter case, POSH doesn't actually care, we're just
+ triggering this assertion to make sure you're aware of the situation,
+ so feel free to delete it.
+
+ If this assertion is triggered on a known 32 or 64-bit platform,
+ please let us know (poshlib@poshlib.org) */
+ POSH_COMPILE_TIME_ASSERT( posh_32bit_pointer, sizeof( void * ) == 4 );
+#endif
+
+#if defined FORCE_DOXYGEN
+# define POSH_64BIT_POINTER
+#endif
+
+/*
+** ----------------------------------------------------------------------------
+** POSH Utility Functions
+**
+** These are optional POSH utility functions that are not required if you don't
+** need anything except static checking of your host and target environment.
+**
+** These functions are NOT wrapped with POSH_PUBLIC_API because I didn't want
+** to enforce their export if your own library is only using them internally.
+** ----------------------------------------------------------------------------
+*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char *POSH_GetArchString( void );
+
+#if !defined POSH_NO_FLOAT
+
+posh_u32_t POSH_LittleFloatBits( float f );
+posh_u32_t POSH_BigFloatBits( float f );
+float POSH_FloatFromLittleBits( posh_u32_t bits );
+float POSH_FloatFromBigBits( posh_u32_t bits );
+
+void POSH_DoubleBits( double d, posh_byte_t dst[ 8 ] );
+double POSH_DoubleFromBits( const posh_byte_t src[ 8 ] );
+
+/* unimplemented
+float *POSH_WriteFloatToLittle( void *dst, float f );
+float *POSH_WriteFloatToBig( void *dst, float f );
+float POSH_ReadFloatFromLittle( const void *src );
+float POSH_ReadFloatFromBig( const void *src );
+
+double *POSH_WriteDoubleToLittle( void *dst, double d );
+double *POSH_WriteDoubleToBig( void *dst, double d );
+double POSH_ReadDoubleFromLittle( const void *src );
+double POSH_ReadDoubleFromBig( const void *src );
+*/
+#endif /* !defined POSH_NO_FLOAT */
+
+#if defined FORCE_DOXYGEN
+# define POSH_NO_FLOAT
+# undef POSH_NO_FLOAT
+#endif
+
+extern posh_u16_t POSH_SwapU16( posh_u16_t u );
+extern posh_i16_t POSH_SwapI16( posh_i16_t u );
+extern posh_u32_t POSH_SwapU32( posh_u32_t u );
+extern posh_i32_t POSH_SwapI32( posh_i32_t u );
+
+#if defined POSH_64BIT_INTEGER
+
+extern posh_u64_t POSH_SwapU64( posh_u64_t u );
+extern posh_i64_t POSH_SwapI64( posh_i64_t u );
+
+#endif /*POSH_64BIT_INTEGER */
+
+extern posh_u16_t *POSH_WriteU16ToLittle( void *dst, posh_u16_t value );
+extern posh_i16_t *POSH_WriteI16ToLittle( void *dst, posh_i16_t value );
+extern posh_u32_t *POSH_WriteU32ToLittle( void *dst, posh_u32_t value );
+extern posh_i32_t *POSH_WriteI32ToLittle( void *dst, posh_i32_t value );
+
+extern posh_u16_t *POSH_WriteU16ToBig( void *dst, posh_u16_t value );
+extern posh_i16_t *POSH_WriteI16ToBig( void *dst, posh_i16_t value );
+extern posh_u32_t *POSH_WriteU32ToBig( void *dst, posh_u32_t value );
+extern posh_i32_t *POSH_WriteI32ToBig( void *dst, posh_i32_t value );
+
+extern posh_u16_t POSH_ReadU16FromLittle( const void *src );
+extern posh_i16_t POSH_ReadI16FromLittle( const void *src );
+extern posh_u32_t POSH_ReadU32FromLittle( const void *src );
+extern posh_i32_t POSH_ReadI32FromLittle( const void *src );
+
+extern posh_u16_t POSH_ReadU16FromBig( const void *src );
+extern posh_i16_t POSH_ReadI16FromBig( const void *src );
+extern posh_u32_t POSH_ReadU32FromBig( const void *src );
+extern posh_i32_t POSH_ReadI32FromBig( const void *src );
+
+#if defined POSH_64BIT_INTEGER
+extern posh_u64_t *POSH_WriteU64ToLittle( void *dst, posh_u64_t value );
+extern posh_i64_t *POSH_WriteI64ToLittle( void *dst, posh_i64_t value );
+extern posh_u64_t *POSH_WriteU64ToBig( void *dst, posh_u64_t value );
+extern posh_i64_t *POSH_WriteI64ToBig( void *dst, posh_i64_t value );
+
+extern posh_u64_t POSH_ReadU64FromLittle( const void *src );
+extern posh_i64_t POSH_ReadI64FromLittle( const void *src );
+extern posh_u64_t POSH_ReadU64FromBig( const void *src );
+extern posh_i64_t POSH_ReadI64FromBig( const void *src );
+#endif /* POSH_64BIT_INTEGER */
+
+#if defined POSH_LITTLE_ENDIAN
+
+# define POSH_LittleU16(x) (x)
+# define POSH_LittleU32(x) (x)
+# define POSH_LittleI16(x) (x)
+# define POSH_LittleI32(x) (x)
+# if defined POSH_64BIT_INTEGER
+# define POSH_LittleU64(x) (x)
+# define POSH_LittleI64(x) (x)
+# endif /* defined POSH_64BIT_INTEGER */
+
+# define POSH_BigU16(x) POSH_SwapU16(x)
+# define POSH_BigU32(x) POSH_SwapU32(x)
+# define POSH_BigI16(x) POSH_SwapI16(x)
+# define POSH_BigI32(x) POSH_SwapI32(x)
+# if defined POSH_64BIT_INTEGER
+# define POSH_BigU64(x) POSH_SwapU64(x)
+# define POSH_BigI64(x) POSH_SwapI64(x)
+# endif /* defined POSH_64BIT_INTEGER */
+
+#else
+
+# define POSH_BigU16(x) (x)
+# define POSH_BigU32(x) (x)
+# define POSH_BigI16(x) (x)
+# define POSH_BigI32(x) (x)
+
+# if defined POSH_64BIT_INTEGER
+# define POSH_BigU64(x) (x)
+# define POSH_BigI64(x) (x)
+# endif /* POSH_64BIT_INTEGER */
+
+# define POSH_LittleU16(x) POSH_SwapU16(x)
+# define POSH_LittleU32(x) POSH_SwapU32(x)
+# define POSH_LittleI16(x) POSH_SwapI16(x)
+# define POSH_LittleI32(x) POSH_SwapI32(x)
+
+# if defined POSH_64BIT_INTEGER
+# define POSH_LittleU64(x) POSH_SwapU64(x)
+# define POSH_LittleI64(x) POSH_SwapI64(x)
+# endif /* POSH_64BIT_INTEGER */
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
diff --git a/thirdparty/thekla_atlas/thekla/thekla_atlas.cpp b/thirdparty/thekla_atlas/thekla/thekla_atlas.cpp
new file mode 100644
index 0000000000..d6f0accf54
--- /dev/null
+++ b/thirdparty/thekla_atlas/thekla/thekla_atlas.cpp
@@ -0,0 +1,271 @@
+
+#include "thekla_atlas.h"
+
+#include <cfloat>
+
+#include "nvmesh/halfedge/Edge.h"
+#include "nvmesh/halfedge/Mesh.h"
+#include "nvmesh/halfedge/Face.h"
+#include "nvmesh/halfedge/Vertex.h"
+#include "nvmesh/param/Atlas.h"
+
+#include "nvmath/Vector.inl"
+#include "nvmath/ftoi.h"
+
+#include "nvcore/Array.inl"
+
+
+using namespace Thekla;
+using namespace nv;
+
+
+inline Atlas_Output_Mesh * set_error(Atlas_Error * error, Atlas_Error code) {
+ if (error) *error = code;
+ return NULL;
+}
+
+
+
+static void input_to_mesh(const Atlas_Input_Mesh * input, HalfEdge::Mesh * mesh, Atlas_Error * error) {
+
+ Array<uint> canonicalMap;
+ canonicalMap.reserve(input->vertex_count);
+
+ for (int i = 0; i < input->vertex_count; i++) {
+ const Atlas_Input_Vertex & input_vertex = input->vertex_array[i];
+ const float * pos = input_vertex.position;
+ const float * nor = input_vertex.normal;
+ const float * tex = input_vertex.uv;
+
+ HalfEdge::Vertex * vertex = mesh->addVertex(Vector3(pos[0], pos[1], pos[2]));
+ vertex->nor.set(nor[0], nor[1], nor[2]);
+ vertex->tex.set(tex[0], tex[1]);
+
+ canonicalMap.append(input_vertex.first_colocal);
+ }
+
+ mesh->linkColocalsWithCanonicalMap(canonicalMap);
+
+
+ const int face_count = input->face_count;
+
+ int non_manifold_faces = 0;
+ for (int i = 0; i < face_count; i++) {
+ const Atlas_Input_Face & input_face = input->face_array[i];
+
+ int v0 = input_face.vertex_index[0];
+ int v1 = input_face.vertex_index[1];
+ int v2 = input_face.vertex_index[2];
+
+ HalfEdge::Face * face = mesh->addFace(v0, v1, v2);
+ if (face != NULL) {
+ face->material = input_face.material_index;
+ }
+ else {
+ non_manifold_faces++;
+ }
+ }
+
+ mesh->linkBoundary();
+
+ if (non_manifold_faces != 0 && error != NULL) {
+ *error = Atlas_Error_Invalid_Mesh_Non_Manifold;
+ }
+}
+
+static Atlas_Output_Mesh * mesh_atlas_to_output(const HalfEdge::Mesh * mesh, const Atlas & atlas, Atlas_Error * error) {
+
+ Atlas_Output_Mesh * output = new Atlas_Output_Mesh;
+
+ const MeshCharts * charts = atlas.meshAt(0);
+
+ // Allocate vertices.
+ const int vertex_count = charts->vertexCount();
+ output->vertex_count = vertex_count;
+ output->vertex_array = new Atlas_Output_Vertex[vertex_count];
+
+ int w = 0;
+ int h = 0;
+
+ // Output vertices.
+ const int chart_count = charts->chartCount();
+ for (int i = 0; i < chart_count; i++) {
+ const Chart * chart = charts->chartAt(i);
+ uint vertexOffset = charts->vertexCountBeforeChartAt(i);
+
+ const uint chart_vertex_count = chart->vertexCount();
+ for (uint v = 0; v < chart_vertex_count; v++) {
+ Atlas_Output_Vertex & output_vertex = output->vertex_array[vertexOffset + v];
+
+ uint original_vertex = chart->mapChartVertexToOriginalVertex(v);
+ output_vertex.xref = original_vertex;
+
+ Vector2 uv = chart->chartMesh()->vertexAt(v)->tex;
+ output_vertex.uv[0] = uv.x;
+ output_vertex.uv[1] = uv.y;
+ w = max(w, ftoi_ceil(uv.x));
+ h = max(h, ftoi_ceil(uv.y));
+ }
+ }
+
+ const int face_count = mesh->faceCount();
+ output->index_count = face_count * 3;
+ output->index_array = new int[face_count * 3];
+
+ // Set face indices.
+ for (int f = 0; f < face_count; f++) {
+ uint c = charts->faceChartAt(f);
+ uint i = charts->faceIndexWithinChartAt(f);
+ uint vertexOffset = charts->vertexCountBeforeChartAt(c);
+
+ const Chart * chart = charts->chartAt(c);
+ nvDebugCheck(chart->faceAt(i) == f);
+
+ const HalfEdge::Face * face = chart->chartMesh()->faceAt(i);
+ const HalfEdge::Edge * edge = face->edge;
+
+ output->index_array[3*f+0] = vertexOffset + edge->vertex->id;
+ output->index_array[3*f+1] = vertexOffset + edge->next->vertex->id;
+ output->index_array[3*f+2] = vertexOffset + edge->next->next->vertex->id;
+ }
+
+ *error = Atlas_Error_Success;
+ output->atlas_width = w;
+ output->atlas_height = h;
+
+ return output;
+}
+
+
+void Thekla::atlas_set_default_options(Atlas_Options * options) {
+ if (options != NULL) {
+ // These are the default values we use on The Witness.
+
+ options->charter = Atlas_Charter_Default;
+ options->charter_options.witness.proxy_fit_metric_weight = 2.0f;
+ options->charter_options.witness.roundness_metric_weight = 0.01f;
+ options->charter_options.witness.straightness_metric_weight = 6.0f;
+ options->charter_options.witness.normal_seam_metric_weight = 4.0f;
+ options->charter_options.witness.texture_seam_metric_weight = 0.5f;
+ options->charter_options.witness.max_chart_area = FLT_MAX;
+ options->charter_options.witness.max_boundary_length = FLT_MAX;
+
+ options->mapper = Atlas_Mapper_Default;
+
+ options->packer = Atlas_Packer_Default;
+ options->packer_options.witness.packing_quality = 0;
+ options->packer_options.witness.texel_area = 8;
+ options->packer_options.witness.block_align = true;
+ options->packer_options.witness.conservative = false;
+ }
+}
+
+
+Atlas_Output_Mesh * Thekla::atlas_generate(const Atlas_Input_Mesh * input, const Atlas_Options * options, Atlas_Error * error) {
+ // Validate args.
+ if (input == NULL || options == NULL || error == NULL) return set_error(error, Atlas_Error_Invalid_Args);
+
+ // Validate options.
+ if (options->charter != Atlas_Charter_Witness) {
+ return set_error(error, Atlas_Error_Invalid_Options);
+ }
+ if (options->charter == Atlas_Charter_Witness) {
+ // @@ Validate input options!
+ }
+
+ if (options->mapper != Atlas_Mapper_LSCM) {
+ return set_error(error, Atlas_Error_Invalid_Options);
+ }
+ if (options->mapper == Atlas_Mapper_LSCM) {
+ // No options.
+ }
+
+ if (options->packer != Atlas_Packer_Witness) {
+ return set_error(error, Atlas_Error_Invalid_Options);
+ }
+ if (options->packer == Atlas_Packer_Witness) {
+ // @@ Validate input options!
+ }
+
+ // Validate input mesh.
+ for (int i = 0; i < input->face_count; i++) {
+ int v0 = input->face_array[i].vertex_index[0];
+ int v1 = input->face_array[i].vertex_index[1];
+ int v2 = input->face_array[i].vertex_index[2];
+
+ if (v0 < 0 || v0 >= input->vertex_count ||
+ v1 < 0 || v1 >= input->vertex_count ||
+ v2 < 0 || v2 >= input->vertex_count)
+ {
+ return set_error(error, Atlas_Error_Invalid_Mesh);
+ }
+ }
+
+
+ // Build half edge mesh.
+ AutoPtr<HalfEdge::Mesh> mesh(new HalfEdge::Mesh);
+
+ input_to_mesh(input, mesh.ptr(), error);
+
+ if (*error == Atlas_Error_Invalid_Mesh) {
+ return NULL;
+ }
+
+ Atlas atlas;
+
+ // Charter.
+ if (options->charter == Atlas_Charter_Extract) {
+ return set_error(error, Atlas_Error_Not_Implemented);
+ }
+ else if (options->charter == Atlas_Charter_Witness) {
+ SegmentationSettings segmentation_settings;
+ segmentation_settings.proxyFitMetricWeight = options->charter_options.witness.proxy_fit_metric_weight;
+ segmentation_settings.roundnessMetricWeight = options->charter_options.witness.roundness_metric_weight;
+ segmentation_settings.straightnessMetricWeight = options->charter_options.witness.straightness_metric_weight;
+ segmentation_settings.normalSeamMetricWeight = options->charter_options.witness.normal_seam_metric_weight;
+ segmentation_settings.textureSeamMetricWeight = options->charter_options.witness.texture_seam_metric_weight;
+ segmentation_settings.maxChartArea = options->charter_options.witness.max_chart_area;
+ segmentation_settings.maxBoundaryLength = options->charter_options.witness.max_boundary_length;
+
+ Array<uint> uncharted_materials;
+ atlas.computeCharts(mesh.ptr(), segmentation_settings, uncharted_materials);
+ }
+
+ if (atlas.hasFailed())
+ return NULL;
+
+ // Mapper.
+ if (options->mapper == Atlas_Mapper_LSCM) {
+ atlas.parameterizeCharts();
+ }
+
+ if (atlas.hasFailed())
+ return NULL;
+
+ // Packer.
+ if (options->packer == Atlas_Packer_Witness) {
+ int packing_quality = options->packer_options.witness.packing_quality;
+ float texel_area = options->packer_options.witness.texel_area;
+ int block_align = options->packer_options.witness.block_align;
+ int conservative = options->packer_options.witness.conservative;
+
+ /*float utilization =*/ atlas.packCharts(packing_quality, texel_area, block_align, conservative);
+ }
+
+ if (atlas.hasFailed())
+ return NULL;
+
+
+ // Build output mesh.
+ return mesh_atlas_to_output(mesh.ptr(), atlas, error);
+}
+
+
+void Thekla::atlas_free(Atlas_Output_Mesh * output) {
+ if (output != NULL) {
+ delete [] output->vertex_array;
+ delete [] output->index_array;
+ delete output;
+ }
+}
+
diff --git a/thirdparty/thekla_atlas/thekla/thekla_atlas.h b/thirdparty/thekla_atlas/thekla/thekla_atlas.h
new file mode 100644
index 0000000000..1d0716e781
--- /dev/null
+++ b/thirdparty/thekla_atlas/thekla/thekla_atlas.h
@@ -0,0 +1,116 @@
+
+// Thekla Atlas Generator
+
+namespace Thekla {
+
+enum Atlas_Charter {
+ Atlas_Charter_Witness, // Options: threshold
+ Atlas_Charter_Extract, // Options: ---
+ Atlas_Charter_Default = Atlas_Charter_Witness
+};
+
+enum Atlas_Mapper {
+ Atlas_Mapper_LSCM, // Options: ---
+ Atlas_Mapper_Default = Atlas_Mapper_LSCM
+};
+
+enum Atlas_Packer {
+ Atlas_Packer_Witness, // Options: texel_area
+ Atlas_Packer_Default = Atlas_Packer_Witness
+};
+
+struct Atlas_Options {
+ Atlas_Charter charter;
+ union {
+ struct {
+ float proxy_fit_metric_weight;
+ float roundness_metric_weight;
+ float straightness_metric_weight;
+ float normal_seam_metric_weight;
+ float texture_seam_metric_weight;
+ float max_chart_area;
+ float max_boundary_length;
+ } witness;
+ struct {
+ } extract;
+ } charter_options;
+
+ Atlas_Mapper mapper;
+ union {
+ } mapper_options;
+
+ Atlas_Packer packer;
+ union {
+ struct {
+ int packing_quality;
+ float texel_area; // This is not really texel area, but 1 / texel width?
+ bool block_align; // Align charts to 4x4 blocks.
+ bool conservative; // Pack charts with extra padding.
+ } witness;
+ } packer_options;
+};
+
+struct Atlas_Input_Vertex {
+ float position[3];
+ float normal[3];
+ float uv[2];
+ int first_colocal;
+};
+
+struct Atlas_Input_Face {
+ int vertex_index[3];
+ int material_index;
+};
+
+struct Atlas_Input_Mesh {
+ int vertex_count;
+ int face_count;
+ Atlas_Input_Vertex * vertex_array;
+ Atlas_Input_Face * face_array;
+};
+
+struct Atlas_Output_Vertex {
+ float uv[2];
+ int xref; // Index of input vertex from which this output vertex originated.
+};
+
+struct Atlas_Output_Mesh {
+ int atlas_width;
+ int atlas_height;
+ int vertex_count;
+ int index_count;
+ Atlas_Output_Vertex * vertex_array;
+ int * index_array;
+};
+
+enum Atlas_Error {
+ Atlas_Error_Success,
+ Atlas_Error_Invalid_Args,
+ Atlas_Error_Invalid_Options,
+ Atlas_Error_Invalid_Mesh,
+ Atlas_Error_Invalid_Mesh_Non_Manifold,
+ Atlas_Error_Not_Implemented,
+};
+
+void atlas_set_default_options(Atlas_Options * options);
+
+Atlas_Output_Mesh * atlas_generate(const Atlas_Input_Mesh * input, const Atlas_Options * options, Atlas_Error * error);
+
+void atlas_free(Atlas_Output_Mesh * output);
+
+
+/*
+
+Should we represent the input mesh with an opaque structure that simply holds pointers to the user data? That would allow us to avoid having to copy attributes to an intermediate representation.
+
+struct Atlas_Input_Mesh;
+
+void mesh_set_vertex_position(Atlas_Input_Mesh * mesh, float * ptr, int stride);
+void mesh_set_vertex_normal(Atlas_Input_Mesh * mesh, float * ptr, int stride);
+void mesh_set_vertex_uv(Mesh * mesh, float * ptr, int stride);
+
+void mesh_set_index(Mesh * mesh, int * ptr);
+*/
+
+} // Thekla namespace
+
diff --git a/thirdparty/tinyexr/tinyexr.h b/thirdparty/tinyexr/tinyexr.h
index c82768be9a..606c19756a 100644
--- a/thirdparty/tinyexr/tinyexr.h
+++ b/thirdparty/tinyexr/tinyexr.h
@@ -85,11 +85,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <stddef.h> // for size_t
#include <stdint.h> // guess stdint.h is available(C99)
-// -- GODOT change for old MinGW on Travis CI --
-#if defined(__MINGW32__)
-#include <_mingw.h> // for __MINGW64_VERSION_MAJOR
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -264,7 +259,8 @@ typedef struct _DeepImage {
} DeepImage;
// @deprecated { to be removed. }
-// Loads single-frame OpenEXR image. Assume EXR image contains RGB(A) channels.
+// Loads single-frame OpenEXR image. Assume EXR image contains A(single channel
+// alpha) or RGB(A) channels.
// Application must free image data as returned by `out_rgba`
// Result image format is: float x RGBA x width x hight
// Returns negative value and may set error string in `err` when there's an
@@ -274,9 +270,14 @@ extern int LoadEXR(float **out_rgba, int *width, int *height,
// @deprecated { to be removed. }
// Saves single-frame OpenEXR image. Assume EXR image contains RGB(A) channels.
-// components must be 3(RGB) or 4(RGBA).
-// Result image format is: float x RGB(A) x width x hight
-extern int SaveEXR(const float *data, int width, int height, int components,
+// components must be 1(Grayscale), 3(RGB) or 4(RGBA).
+// Input image format is: `float x width x height`, or `float x RGB(A) x width x
+// hight`
+// Save image as fp16(HALF) format when `save_as_fp16` is positive non-zero
+// value.
+// Save image as fp32(FLOAT) format when `save_as_fp16` is 0.
+extern int SaveEXR(const float *data, const int width, const int height,
+ const int components, const int save_as_fp16,
const char *filename);
// Initialize EXRHeader struct
@@ -406,12 +407,11 @@ extern int LoadDeepEXR(DeepImage *out_image, const char *filename,
// For emscripten.
// Loads single-frame OpenEXR image from memory. Assume EXR image contains
// RGB(A) channels.
-// `out_rgba` must have enough memory(at least sizeof(float) x 4(RGBA) x width x
-// hight)
// Returns negative value and may set error string in `err` when there's an
// error
-extern int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory,
- size_t size, const char **err);
+extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
+ const unsigned char *memory, size_t size,
+ const char **err);
#ifdef __cplusplus
}
@@ -444,7 +444,8 @@ extern int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory,
#if TINYEXR_USE_MINIZ
#else
-#include "zlib.h"
+// Issue #46. Please include your own zlib-compatible API header before including `tinyexr.h`
+//#include "zlib.h"
#endif
#if TINYEXR_USE_ZFP
@@ -483,13 +484,11 @@ namespace miniz {
#pragma clang diagnostic ignored "-Wsign-conversion"
#pragma clang diagnostic ignored "-Wc++11-extensions"
#pragma clang diagnostic ignored "-Wconversion"
-#ifdef __APPLE__
-#if __clang_major__ >= 8 && __clang__minor__ > 1
+#pragma clang diagnostic ignored "-Wunused-function"
+#if __has_warning("-Wcomma")
#pragma clang diagnostic ignored "-Wcomma"
#endif
#endif
-#pragma clang diagnostic ignored "-Wunused-function"
-#endif
/* miniz.c v1.15 - public domain deflate/inflate, zlib-subset, ZIP
reading/writing/appending, PNG writing
@@ -1918,11 +1917,11 @@ static void def_free_func(void *opaque, void *address) {
(void)opaque, (void)address;
MZ_FREE(address);
}
-static void *def_realloc_func(void *opaque, void *address, size_t items,
- size_t size) {
- (void)opaque, (void)address, (void)items, (void)size;
- return MZ_REALLOC(address, items * size);
-}
+// static void *def_realloc_func(void *opaque, void *address, size_t items,
+// size_t size) {
+// (void)opaque, (void)address, (void)items, (void)size;
+// return MZ_REALLOC(address, items * size);
+//}
const char *mz_version(void) { return MZ_VERSION; }
@@ -2894,8 +2893,9 @@ void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
tinfl_status status = tinfl_decompress(
&decomp, (const mz_uint8 *)pSrc_buf + src_buf_ofs, &src_buf_size,
(mz_uint8 *)pBuf, pBuf ? (mz_uint8 *)pBuf + *pOut_len : NULL,
- &dst_buf_size, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
+ &dst_buf_size,
+ (flags & ~TINFL_FLAG_HAS_MORE_INPUT) |
+ TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) {
MZ_FREE(pBuf);
*pOut_len = 0;
@@ -3542,9 +3542,10 @@ static int tdefl_flush_block(tdefl_compressor *d, int flush) {
mz_uint saved_bit_buf, saved_bits_in;
mz_uint8 *pSaved_output_buf;
mz_bool comp_block_succeeded = MZ_FALSE;
- int n, use_raw_block =
- ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) &&
- (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size;
+ int n,
+ use_raw_block =
+ ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) &&
+ (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size;
mz_uint8 *pOutput_buf_start =
((d->m_pPut_buf_func == NULL) &&
((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE))
@@ -3574,8 +3575,9 @@ static int tdefl_flush_block(tdefl_compressor *d, int flush) {
if (!use_raw_block)
comp_block_succeeded =
- tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) ||
- (d->m_total_lz_bytes < 48));
+ tdefl_compress_block(d,
+ (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) ||
+ (d->m_total_lz_bytes < 48));
// If the block gets expanded, forget the current contents of the output
// buffer and send a raw block instead.
@@ -4519,10 +4521,7 @@ void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h,
#include <stdio.h>
#include <sys/stat.h>
-// -- GODOT change for old MinGW on Travis CI --
-//#if defined(_MSC_VER) || defined(__MINGW64__)
-#if defined(_MSC_VER) || (defined(__MINGW32__) && __MINGW64_VERSION_MAJOR >= 3)
-// -- GODOT end --
+#if defined(_MSC_VER) || defined(__MINGW64__)
static FILE *mz_fopen(const char *pFilename, const char *pMode) {
FILE *pFile = NULL;
fopen_s(&pFile, pFilename, pMode);
@@ -5223,9 +5222,10 @@ mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index,
n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS);
n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1);
pStat->m_comment_size = n;
- memcpy(pStat->m_comment, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS),
+ memcpy(pStat->m_comment,
+ p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
+ MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
+ MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS),
n);
pStat->m_comment[n] = '\0';
@@ -6883,6 +6883,12 @@ void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename,
#ifdef __clang__
#pragma clang diagnostic pop
#endif
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+
}
#else
@@ -7346,11 +7352,23 @@ static void CompressZip(unsigned char *dst,
compressedSize = outSize;
#endif
+
+ // Use uncompressed data when compressed data is larger than uncompressed.
+ // (Issue 40)
+ if (compressedSize >= src_size) {
+ compressedSize = src_size;
+ memcpy(dst, src, src_size);
+ }
}
static void DecompressZip(unsigned char *dst,
unsigned long *uncompressed_size /* inout */,
const unsigned char *src, unsigned long src_size) {
+ if ((*uncompressed_size) == src_size) {
+ // Data is not compressed(Issue 40).
+ memcpy(dst, src, src_size);
+ return;
+ }
std::vector<unsigned char> tmpBuf(*uncompressed_size);
#if TINYEXR_USE_MINIZ
@@ -7410,6 +7428,22 @@ static void DecompressZip(unsigned char *dst,
#pragma clang diagnostic ignored "-Wsign-conversion"
#endif
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4204) // nonstandard extension used : non-constant
+ // aggregate initializer (also supported by GNU
+ // C and C99, so no big deal)
+#pragma warning(disable : 4244) // 'initializing': conversion from '__int64' to
+ // 'int', possible loss of data
+#pragma warning( \
+ disable : 4267) // 'argument': conversion from '__int64' to 'int',
+ // possible loss of data
+#pragma warning(disable : 4996) // 'strdup': The POSIX name for this item is
+ // deprecated. Instead, use the ISO C and C++
+ // conformant name: _strdup.
+#endif
+
+
const int MIN_RUN_LENGTH = 3;
const int MAX_RUN_LENGTH = 127;
@@ -7502,6 +7536,7 @@ static int rleUncompress(int inLength, int maxLength, const signed char in[],
#ifdef __clang__
#pragma clang diagnostic pop
#endif
+
// End of RLE code from OpenEXR -----------------------------------
static void CompressRle(unsigned char *dst,
@@ -7562,11 +7597,24 @@ static void CompressRle(unsigned char *dst,
assert(outSize > 0);
compressedSize = static_cast<tinyexr::tinyexr_uint64>(outSize);
+
+ // Use uncompressed data when compressed data is larger than uncompressed.
+ // (Issue 40)
+ if (compressedSize >= src_size) {
+ compressedSize = src_size;
+ memcpy(dst, src, src_size);
+ }
}
static void DecompressRle(unsigned char *dst,
const unsigned long uncompressed_size,
const unsigned char *src, unsigned long src_size) {
+ if (uncompressed_size == src_size) {
+ // Data is not compressed(Issue 40).
+ memcpy(dst, src, src_size);
+ return;
+ }
+
std::vector<unsigned char> tmpBuf(uncompressed_size);
int ret = rleUncompress(static_cast<int>(src_size),
@@ -8882,7 +8930,12 @@ static void applyLut(const unsigned short lut[USHORT_RANGE],
#pragma clang diagnostic pop
#endif // __clang__
-static bool CompressPiz(unsigned char *outPtr, unsigned int &outSize,
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+
+static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize,
const unsigned char *inPtr, size_t inSize,
const std::vector<ChannelInfo> &channelInfo,
int data_width, int num_lines) {
@@ -8989,16 +9042,29 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int &outSize,
hufCompress(&tmpBuffer.at(0), static_cast<int>(tmpBuffer.size()), buf);
memcpy(lengthPtr, &length, sizeof(int));
- outSize = static_cast<unsigned int>(
+ (*outSize) = static_cast<unsigned int>(
(reinterpret_cast<unsigned char *>(buf) - outPtr) +
static_cast<unsigned int>(length));
+
+ // Use uncompressed data when compressed data is larger than uncompressed.
+ // (Issue 40)
+ if ((*outSize) >= inSize) {
+ (*outSize) = static_cast<unsigned int>(inSize);
+ memcpy(outPtr, inPtr, inSize);
+ }
return true;
}
static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
- size_t tmpBufSize, int num_channels,
+ size_t tmpBufSize, size_t inLen, int num_channels,
const EXRChannelInfo *channels, int data_width,
int num_lines) {
+ if (inLen == tmpBufSize) {
+ // Data is not compressed(Issue 40).
+ memcpy(outPtr, inPtr, inLen);
+ return true;
+ }
+
unsigned char bitmap[BITMAP_SIZE];
unsigned short minNonZero;
unsigned short maxNonZero;
@@ -9173,6 +9239,11 @@ static bool DecompressZfp(float *dst, int dst_width, int dst_num_lines,
const ZFPCompressionParam &param) {
size_t uncompressed_size = dst_width * dst_num_lines * num_channels;
+ if (uncompressed_size == src_size) {
+ // Data is not compressed(Issue 40).
+ memcpy(dst, src, src_size);
+ }
+
zfp_stream *zfp = NULL;
zfp_field *field = NULL;
@@ -9317,12 +9388,11 @@ static void DecodePixelData(/* out */ unsigned char **out_images,
// Allocate original data size.
std::vector<unsigned char> outBuf(static_cast<size_t>(
static_cast<size_t>(width * num_lines) * pixel_data_size));
- size_t tmpBufLen = static_cast<size_t>(
- static_cast<size_t>(width * num_lines) * pixel_data_size);
+ size_t tmpBufLen = outBuf.size();
bool ret = tinyexr::DecompressPiz(
reinterpret_cast<unsigned char *>(&outBuf.at(0)), data_ptr, tmpBufLen,
- static_cast<int>(num_channels), channels, width, num_lines);
+ data_len, static_cast<int>(num_channels), channels, width, num_lines);
assert(ret);
(void)ret;
@@ -10047,8 +10117,7 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
} else if (attr_name.compare("compression") == 0) {
bool ok = false;
- if ((data[0] >= TINYEXR_COMPRESSIONTYPE_NONE) &&
- (data[0] < TINYEXR_COMPRESSIONTYPE_PIZ)) {
+ if (data[0] < TINYEXR_COMPRESSIONTYPE_PIZ) {
ok = true;
}
@@ -10158,9 +10227,14 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
// Custom attribute(up to TINYEXR_MAX_ATTRIBUTES)
if (info->attributes.size() < TINYEXR_MAX_ATTRIBUTES) {
EXRAttribute attrib;
+#ifdef _MSC_VER
+ strncpy_s(attrib.name, attr_name.c_str(), 255);
+ strncpy_s(attrib.type, attr_type.c_str(), 255);
+#else
strncpy(attrib.name, attr_name.c_str(), 255);
- attrib.name[255] = '\0';
strncpy(attrib.type, attr_type.c_str(), 255);
+#endif
+ attrib.name[255] = '\0';
attrib.type[255] = '\0';
attrib.size = static_cast<int>(data.size());
attrib.value = static_cast<unsigned char *>(malloc(data.size()));
@@ -10254,8 +10328,12 @@ static void ConvertHeader(EXRHeader *exr_header, const HeaderInfo &info) {
exr_header->channels = static_cast<EXRChannelInfo *>(malloc(
sizeof(EXRChannelInfo) * static_cast<size_t>(exr_header->num_channels)));
for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) {
+#ifdef _MSC_VER
+ strncpy_s(exr_header->channels[c].name, info.channels[c].name.c_str(), 255);
+#else
strncpy(exr_header->channels[c].name, info.channels[c].name.c_str(), 255);
- // manually add '\0' for safety.
+#endif
+ // manually add '\0' for safety.
exr_header->channels[c].name[255] = '\0';
exr_header->channels[c].pixel_type = info.channels[c].pixel_type;
@@ -10317,6 +10395,8 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
&channel_offset, num_channels,
exr_header->channels);
+ bool invalid_data = false;
+
if (exr_header->tiled) {
size_t num_tiles = offsets.size(); // = # of blocks
@@ -10411,18 +10491,26 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
// Adjust line_no with data_window.bmin.y
line_no -= exr_header->data_window[1];
- tinyexr::DecodePixelData(
- exr_image->images, exr_header->requested_pixel_types, data_ptr,
- static_cast<size_t>(data_len), exr_header->compression_type,
- exr_header->line_order, data_width, data_height, data_width, y,
- line_no, num_lines, static_cast<size_t>(pixel_data_size),
- static_cast<size_t>(exr_header->num_custom_attributes),
- exr_header->custom_attributes,
- static_cast<size_t>(exr_header->num_channels), exr_header->channels,
- channel_offset_list);
+ if (line_no < 0) {
+ invalid_data = true;
+ } else {
+ tinyexr::DecodePixelData(
+ exr_image->images, exr_header->requested_pixel_types, data_ptr,
+ static_cast<size_t>(data_len), exr_header->compression_type,
+ exr_header->line_order, data_width, data_height, data_width, y,
+ line_no, num_lines, static_cast<size_t>(pixel_data_size),
+ static_cast<size_t>(exr_header->num_custom_attributes),
+ exr_header->custom_attributes,
+ static_cast<size_t>(exr_header->num_channels), exr_header->channels,
+ channel_offset_list);
+ }
} // omp parallel
}
+ if (invalid_data) {
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+
// Overwrite `pixel_type` with `requested_pixel_type`.
{
for (int c = 0; c < exr_header->num_channels; c++) {
@@ -10641,46 +10729,63 @@ int LoadEXR(float **out_rgba, int *width, int *height, const char *filename,
}
}
- if (idxR == -1) {
- if (err) {
- (*err) = "R channel not found\n";
+ if ((idxA == 0) && (idxR == -1) && (idxG == -1) && (idxB == -1)) {
+ // Alpha channel only.
+
+ (*out_rgba) = reinterpret_cast<float *>(
+ malloc(4 * sizeof(float) * static_cast<size_t>(exr_image.width) *
+ static_cast<size_t>(exr_image.height)));
+ for (int i = 0; i < exr_image.width * exr_image.height; i++) {
+ const float val = reinterpret_cast<float **>(exr_image.images)[0][i];
+ (*out_rgba)[4 * i + 0] = val;
+ (*out_rgba)[4 * i + 1] = val;
+ (*out_rgba)[4 * i + 2] = val;
+ (*out_rgba)[4 * i + 3] = val;
}
+ } else {
+ // Assume RGB(A)
- // @todo { free exr_image }
- return TINYEXR_ERROR_INVALID_DATA;
- }
+ if (idxR == -1) {
+ if (err) {
+ (*err) = "R channel not found\n";
+ }
- if (idxG == -1) {
- if (err) {
- (*err) = "G channel not found\n";
+ // @todo { free exr_image }
+ return TINYEXR_ERROR_INVALID_DATA;
}
- // @todo { free exr_image }
- return TINYEXR_ERROR_INVALID_DATA;
- }
- if (idxB == -1) {
- if (err) {
- (*err) = "B channel not found\n";
+ if (idxG == -1) {
+ if (err) {
+ (*err) = "G channel not found\n";
+ }
+ // @todo { free exr_image }
+ return TINYEXR_ERROR_INVALID_DATA;
}
- // @todo { free exr_image }
- return TINYEXR_ERROR_INVALID_DATA;
- }
- (*out_rgba) = reinterpret_cast<float *>(
- malloc(4 * sizeof(float) * static_cast<size_t>(exr_image.width) *
- static_cast<size_t>(exr_image.height)));
- for (int i = 0; i < exr_image.width * exr_image.height; i++) {
- (*out_rgba)[4 * i + 0] =
- reinterpret_cast<float **>(exr_image.images)[idxR][i];
- (*out_rgba)[4 * i + 1] =
- reinterpret_cast<float **>(exr_image.images)[idxG][i];
- (*out_rgba)[4 * i + 2] =
- reinterpret_cast<float **>(exr_image.images)[idxB][i];
- if (idxA != -1) {
- (*out_rgba)[4 * i + 3] =
- reinterpret_cast<float **>(exr_image.images)[idxA][i];
- } else {
- (*out_rgba)[4 * i + 3] = 1.0;
+ if (idxB == -1) {
+ if (err) {
+ (*err) = "B channel not found\n";
+ }
+ // @todo { free exr_image }
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+
+ (*out_rgba) = reinterpret_cast<float *>(
+ malloc(4 * sizeof(float) * static_cast<size_t>(exr_image.width) *
+ static_cast<size_t>(exr_image.height)));
+ for (int i = 0; i < exr_image.width * exr_image.height; i++) {
+ (*out_rgba)[4 * i + 0] =
+ reinterpret_cast<float **>(exr_image.images)[idxR][i];
+ (*out_rgba)[4 * i + 1] =
+ reinterpret_cast<float **>(exr_image.images)[idxG][i];
+ (*out_rgba)[4 * i + 2] =
+ reinterpret_cast<float **>(exr_image.images)[idxB][i];
+ if (idxA != -1) {
+ (*out_rgba)[4 * i + 3] =
+ reinterpret_cast<float **>(exr_image.images)[idxA][i];
+ } else {
+ (*out_rgba)[4 * i + 3] = 1.0;
+ }
}
}
@@ -10720,7 +10825,11 @@ int ParseEXRHeaderFromMemory(EXRHeader *exr_header, const EXRVersion *version,
if (ret != TINYEXR_SUCCESS) {
if (err && !err_str.empty()) {
+#ifdef _WIN32
+ (*err) = _strdup(err_str.c_str()); // May leak
+#else
(*err) = strdup(err_str.c_str()); // May leak
+#endif
}
}
@@ -10732,8 +10841,9 @@ int ParseEXRHeaderFromMemory(EXRHeader *exr_header, const EXRVersion *version,
return ret;
}
-int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory, size_t size,
- const char **err) {
+int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
+ const unsigned char *memory, size_t size,
+ const char **err) {
if (out_rgba == NULL || memory == NULL) {
if (err) {
(*err) = "Invalid argument.\n";
@@ -10756,6 +10866,13 @@ int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory, size_t size,
if (ret != TINYEXR_SUCCESS) {
return ret;
}
+
+ // Read HALF channel as FLOAT.
+ for (int i = 0; i < exr_header.num_channels; i++) {
+ if (exr_header.pixel_types[i] == TINYEXR_PIXELTYPE_HALF) {
+ exr_header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT;
+ }
+ }
InitEXRImage(&exr_image);
ret = LoadEXRImageFromMemory(&exr_image, &exr_header, memory, size, err);
@@ -10805,19 +10922,32 @@ int LoadEXRFromMemory(float *out_rgba, const unsigned char *memory, size_t size,
return TINYEXR_ERROR_INVALID_DATA;
}
- // Assume `out_rgba` have enough memory allocated.
+ (*out_rgba) = reinterpret_cast<float *>(
+ malloc(4 * sizeof(float) * static_cast<size_t>(exr_image.width) *
+ static_cast<size_t>(exr_image.height)));
+
for (int i = 0; i < exr_image.width * exr_image.height; i++) {
- out_rgba[4 * i + 0] = reinterpret_cast<float **>(exr_image.images)[idxR][i];
- out_rgba[4 * i + 1] = reinterpret_cast<float **>(exr_image.images)[idxG][i];
- out_rgba[4 * i + 2] = reinterpret_cast<float **>(exr_image.images)[idxB][i];
- if (idxA > 0) {
- out_rgba[4 * i + 3] =
- reinterpret_cast<float **>(exr_image.images)[idxA][i];
- } else {
- out_rgba[4 * i + 3] = 1.0;
- }
+ (*out_rgba)[4 * i + 0] =
+ reinterpret_cast<float **>(exr_image.images)[idxR][i];
+ (*out_rgba)[4 * i + 1] =
+ reinterpret_cast<float **>(exr_image.images)[idxG][i];
+ (*out_rgba)[4 * i + 2] =
+ reinterpret_cast<float **>(exr_image.images)[idxB][i];
+ if (idxA != -1) {
+ (*out_rgba)[4 * i + 3] =
+ reinterpret_cast<float **>(exr_image.images)[idxA][i];
+ }
+ else {
+ (*out_rgba)[4 * i + 3] = 1.0;
+ }
}
+ (*width) = exr_image.width;
+ (*height) = exr_image.height;
+
+ FreeEXRHeader(&exr_header);
+ FreeEXRImage(&exr_image);
+
return TINYEXR_SUCCESS;
}
@@ -10830,10 +10960,7 @@ int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-// -- GODOT change for old MinGW on Travis CI --
-//#ifdef _WIN32
-#if defined(_MSC_VER) || (defined(__MINGW32__) && __MINGW64_VERSION_MAJOR >= 3)
-// -- GODOT end --
+#ifdef _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -11315,7 +11442,7 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image,
std::vector<unsigned char> block(bufLen);
unsigned int outSize = static_cast<unsigned int>(block.size());
- CompressPiz(&block.at(0), outSize,
+ CompressPiz(&block.at(0), &outSize,
reinterpret_cast<const unsigned char *>(&buf.at(0)),
buf.size(), channels, exr_image->width, h);
@@ -11422,10 +11549,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
}
#endif
-// -- GODOT change for old MinGW on Travis CI --
-//#ifdef _WIN32
-#if defined(_MSC_VER) || (defined(__MINGW32__) && __MINGW64_VERSION_MAJOR >= 3)
-// -- GODOT end --
+#ifdef _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "wb");
#else
@@ -11459,6 +11583,16 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
+#ifdef _MSC_VER
+ FILE *fp = NULL;
+ errno_t errcode = fopen_s(&fp, filename, "rb");
+ if ((!errcode) || (!fp)) {
+ if (err) {
+ (*err) = "Cannot read file.";
+ }
+ return TINYEXR_ERROR_CANT_OPEN_FILE;
+ }
+#else
FILE *fp = fopen(filename, "rb");
if (!fp) {
if (err) {
@@ -11466,6 +11600,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
}
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
+#endif
size_t filesize;
// Compute size
@@ -11535,6 +11670,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
if (0 == size) {
return TINYEXR_ERROR_INVALID_DATA;
} else if (marker[0] == '\0') {
+ marker++;
size--;
break;
}
@@ -11724,11 +11860,13 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
// decode sample data.
{
unsigned long dstLen = static_cast<unsigned long>(unpackedSampleDataSize);
- tinyexr::DecompressZip(
- reinterpret_cast<unsigned char *>(&sample_data.at(0)), &dstLen,
- data_ptr + 28 + packedOffsetTableSize,
- static_cast<unsigned long>(packedSampleDataSize));
- assert(dstLen == static_cast<unsigned long>(unpackedSampleDataSize));
+ if (dstLen) {
+ tinyexr::DecompressZip(
+ reinterpret_cast<unsigned char *>(&sample_data.at(0)), &dstLen,
+ data_ptr + 28 + packedOffsetTableSize,
+ static_cast<unsigned long>(packedSampleDataSize));
+ assert(dstLen == static_cast<unsigned long>(unpackedSampleDataSize));
+ }
}
// decode sample
@@ -11774,7 +11912,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
if (channels[c].pixel_type == 0) { // UINT
for (size_t x = 0; x < static_cast<size_t>(samples_per_line); x++) {
unsigned int ui = *reinterpret_cast<unsigned int *>(
- &sample_data.at(data_offset + x * sizeof(int)));
+ &sample_data.at(size_t(data_offset) + x * sizeof(int)));
deep_image->image[c][y][x] = static_cast<float>(ui); // @fixme
}
data_offset +=
@@ -11783,7 +11921,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
for (size_t x = 0; x < static_cast<size_t>(samples_per_line); x++) {
tinyexr::FP16 f16;
f16.u = *reinterpret_cast<unsigned short *>(
- &sample_data.at(data_offset + x * sizeof(short)));
+ &sample_data.at(size_t(data_offset) + x * sizeof(short)));
tinyexr::FP32 f32 = half_to_float(f16);
deep_image->image[c][y][x] = f32.f;
}
@@ -11791,7 +11929,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
} else { // float
for (size_t x = 0; x < static_cast<size_t>(samples_per_line); x++) {
float f = *reinterpret_cast<float *>(
- &sample_data.at(data_offset + x * sizeof(float)));
+ &sample_data.at(size_t(data_offset) + x * sizeof(float)));
deep_image->image[c][y][x] = f;
}
data_offset += sizeof(float) * static_cast<size_t>(samples_per_line);
@@ -11906,10 +12044,7 @@ int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version,
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-// -- GODOT change for old MinGW on Travis CI --
-//#ifdef _WIN32
-#if defined(_MSC_VER) || (defined(__MINGW32__) && __MINGW64_VERSION_MAJOR >= 3)
-// -- GODOT end --
+#ifdef _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -11978,7 +12113,11 @@ int ParseEXRMultipartHeaderFromMemory(EXRHeader ***exr_headers,
if (ret != TINYEXR_SUCCESS) {
if (err) {
+#ifdef _WIN32
+ (*err) = _strdup(err_str.c_str()); // may leak
+#else
(*err) = strdup(err_str.c_str()); // may leak
+#endif
}
return ret;
}
@@ -12033,10 +12172,7 @@ int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers,
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-// -- GODOT change for old MinGW on Travis CI --
-//#ifdef _WIN32
-#if defined(_MSC_VER) || (defined(__MINGW32__) && __MINGW64_VERSION_MAJOR >= 3)
-// -- GODOT end --
+#ifdef _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -12136,10 +12272,7 @@ int ParseEXRVersionFromFile(EXRVersion *version, const char *filename) {
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-// -- GODOT change for old MinGW on Travis CI --
-//#ifdef _WIN32
-#if defined(_MSC_VER) || (defined(__MINGW32__) && __MINGW64_VERSION_MAJOR >= 3)
-// -- GODOT end --
+#ifdef _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -12277,10 +12410,7 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images,
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
-// -- GODOT change for old MinGW on Travis CI --
-//#ifdef _WIN32
-#if defined(_MSC_VER) || (defined(__MINGW32__) && __MINGW64_VERSION_MAJOR >= 3)
-// -- GODOT end --
+#ifdef _WIN32
FILE *fp = NULL;
fopen_s(&fp, filename, "rb");
#else
@@ -12313,8 +12443,8 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images,
}
int SaveEXR(const float *data, int width, int height, int components,
- const char *outfilename) {
- if (components == 3 || components == 4) {
+ const int save_as_fp16, const char *outfilename) {
+ if ((components == 1) || components == 3 || components == 4) {
// OK
} else {
return TINYEXR_ERROR_INVALID_ARGUMENT;
@@ -12333,18 +12463,24 @@ int SaveEXR(const float *data, int width, int height, int components,
image.num_channels = components;
std::vector<float> images[4];
- images[0].resize(static_cast<size_t>(width * height));
- images[1].resize(static_cast<size_t>(width * height));
- images[2].resize(static_cast<size_t>(width * height));
- images[3].resize(static_cast<size_t>(width * height));
- // Split RGB(A)RGB(A)RGB(A)... into R, G and B(and A) layers
- for (size_t i = 0; i < static_cast<size_t>(width * height); i++) {
- images[0][i] = data[static_cast<size_t>(components) * i + 0];
- images[1][i] = data[static_cast<size_t>(components) * i + 1];
- images[2][i] = data[static_cast<size_t>(components) * i + 2];
- if (components == 4) {
- images[3][i] = data[static_cast<size_t>(components) * i + 3];
+ if (components == 1) {
+ images[0].resize(static_cast<size_t>(width * height));
+ memcpy(images[0].data(), data, sizeof(float) * size_t(width * height));
+ } else {
+ images[0].resize(static_cast<size_t>(width * height));
+ images[1].resize(static_cast<size_t>(width * height));
+ images[2].resize(static_cast<size_t>(width * height));
+ images[3].resize(static_cast<size_t>(width * height));
+
+ // Split RGB(A)RGB(A)RGB(A)... into R, G and B(and A) layers
+ for (size_t i = 0; i < static_cast<size_t>(width * height); i++) {
+ images[0][i] = data[static_cast<size_t>(components) * i + 0];
+ images[1][i] = data[static_cast<size_t>(components) * i + 1];
+ images[2][i] = data[static_cast<size_t>(components) * i + 2];
+ if (components == 4) {
+ images[3][i] = data[static_cast<size_t>(components) * i + 3];
+ }
}
}
@@ -12354,10 +12490,12 @@ int SaveEXR(const float *data, int width, int height, int components,
image_ptr[1] = &(images[2].at(0)); // B
image_ptr[2] = &(images[1].at(0)); // G
image_ptr[3] = &(images[0].at(0)); // R
- } else {
+ } else if (components == 3) {
image_ptr[0] = &(images[2].at(0)); // B
image_ptr[1] = &(images[1].at(0)); // G
image_ptr[2] = &(images[0].at(0)); // R
+ } else if (components == 1) {
+ image_ptr[0] = &(images[0].at(0)); // A
}
image.images = reinterpret_cast<unsigned char **>(image_ptr);
@@ -12369,21 +12507,41 @@ int SaveEXR(const float *data, int width, int height, int components,
sizeof(EXRChannelInfo) * static_cast<size_t>(header.num_channels)));
// Must be (A)BGR order, since most of EXR viewers expect this channel order.
if (components == 4) {
+#ifdef _MSC_VER
+ strncpy_s(header.channels[0].name, "A", 255);
+ strncpy_s(header.channels[1].name, "B", 255);
+ strncpy_s(header.channels[2].name, "G", 255);
+ strncpy_s(header.channels[3].name, "R", 255);
+#else
strncpy(header.channels[0].name, "A", 255);
- header.channels[0].name[strlen("A")] = '\0';
strncpy(header.channels[1].name, "B", 255);
- header.channels[1].name[strlen("B")] = '\0';
strncpy(header.channels[2].name, "G", 255);
- header.channels[2].name[strlen("G")] = '\0';
strncpy(header.channels[3].name, "R", 255);
+#endif
+ header.channels[0].name[strlen("A")] = '\0';
+ header.channels[1].name[strlen("B")] = '\0';
+ header.channels[2].name[strlen("G")] = '\0';
header.channels[3].name[strlen("R")] = '\0';
- } else {
+ } else if (components == 3) {
+#ifdef _MSC_VER
+ strncpy_s(header.channels[0].name, "B", 255);
+ strncpy_s(header.channels[1].name, "G", 255);
+ strncpy_s(header.channels[2].name, "R", 255);
+#else
strncpy(header.channels[0].name, "B", 255);
- header.channels[0].name[strlen("B")] = '\0';
strncpy(header.channels[1].name, "G", 255);
- header.channels[1].name[strlen("G")] = '\0';
strncpy(header.channels[2].name, "R", 255);
+#endif
+ header.channels[0].name[strlen("B")] = '\0';
+ header.channels[1].name[strlen("G")] = '\0';
header.channels[2].name[strlen("R")] = '\0';
+ } else {
+#ifdef _MSC_VER
+ strncpy_s(header.channels[0].name, "A", 255);
+#else
+ strncpy(header.channels[0].name, "A", 255);
+#endif
+ header.channels[0].name[strlen("A")] = '\0';
}
header.pixel_types = static_cast<int *>(
@@ -12393,9 +12551,15 @@ int SaveEXR(const float *data, int width, int height, int components,
for (int i = 0; i < header.num_channels; i++) {
header.pixel_types[i] =
TINYEXR_PIXELTYPE_FLOAT; // pixel type of input image
- header.requested_pixel_types[i] =
- TINYEXR_PIXELTYPE_HALF; // pixel type of output image to be stored in
- // .EXR
+
+ if (save_as_fp16 > 0) {
+ header.requested_pixel_types[i] =
+ TINYEXR_PIXELTYPE_HALF; // save with half(fp16) pixel format
+ } else {
+ header.requested_pixel_types[i] =
+ TINYEXR_PIXELTYPE_FLOAT; // save with float(fp32) pixel format(i.e.
+ // no precision reduction)
+ }
}
const char *err;
@@ -12411,9 +12575,5 @@ int SaveEXR(const float *data, int width, int height, int components,
return ret;
}
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
#endif // TINYEXR_IMPLEMENTATION_DEIFNED
#endif // TINYEXR_IMPLEMENTATION